@webiny/api-headless-cms 6.4.11 → 6.6.0-alpha.1

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 (773) 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 +195 -0
  9. package/HeadlessCmsFeature.js.map +1 -0
  10. package/createCmsRoute.d.ts +26 -0
  11. package/createCmsRoute.js +59 -0
  12. package/createCmsRoute.js.map +1 -0
  13. package/crud/contentEntry/entryDataValidation.d.ts +1 -1
  14. package/crud/contentEntry/entryDataValidation.js +29 -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/defaultFields.js +3 -2
  22. package/crud/contentModel/defaultFields.js.map +1 -1
  23. package/crud/contentModel.crud.js +8 -6
  24. package/crud/contentModel.crud.js.map +1 -1
  25. package/crud/contentModelGroup.crud.js +7 -5
  26. package/crud/contentModelGroup.crud.js.map +1 -1
  27. package/domain/contentModel/schemas.d.ts +2 -0
  28. package/domain/contentModel/schemas.js +4 -2
  29. package/domain/contentModel/schemas.js.map +1 -1
  30. package/domain/contentModel/validation/modelFields.js +21 -15
  31. package/domain/contentModel/validation/modelFields.js.map +1 -1
  32. package/export/abstractions.d.ts +9 -0
  33. package/export/abstractions.js +6 -0
  34. package/export/abstractions.js.map +1 -0
  35. package/export/crud/exporting.js +8 -2
  36. package/export/crud/exporting.js.map +1 -1
  37. package/export/crud/importing.js +13 -4
  38. package/export/crud/importing.js.map +1 -1
  39. package/export/crud/imports/importGroups.js +23 -23
  40. package/export/crud/imports/importGroups.js.map +1 -1
  41. package/export/crud/imports/importModels.js +25 -22
  42. package/export/crud/imports/importModels.js.map +1 -1
  43. package/export/graphql/index.d.ts +2 -3
  44. package/export/graphql/index.js +6 -10
  45. package/export/graphql/index.js.map +1 -1
  46. package/exports/api/cms/model.d.ts +4 -1
  47. package/exports/api/cms/model.js +2 -0
  48. package/exports/api/cms/storage.d.ts +0 -1
  49. package/exports/api/cms/storage.js +0 -1
  50. package/features/ai/DescribeContentModelTool.d.ts +55 -0
  51. package/features/ai/DescribeContentModelTool.js +60 -0
  52. package/features/ai/DescribeContentModelTool.js.map +1 -0
  53. package/features/ai/ListContentModelsTool.d.ts +41 -0
  54. package/features/ai/ListContentModelsTool.js +44 -0
  55. package/features/ai/ListContentModelsTool.js.map +1 -0
  56. package/features/ai/QueryEntriesTool.d.ts +75 -0
  57. package/features/ai/QueryEntriesTool.js +90 -0
  58. package/features/ai/QueryEntriesTool.js.map +1 -0
  59. package/features/ai/feature.d.ts +8 -0
  60. package/features/ai/feature.js +15 -0
  61. package/features/ai/feature.js.map +1 -0
  62. package/features/ai/index.d.ts +4 -0
  63. package/features/ai/index.js +4 -0
  64. package/features/contentEntry/ContentEntriesFeature.js +0 -2
  65. package/features/contentEntry/ContentEntriesFeature.js.map +1 -1
  66. package/features/contentEntry/CreateEntry/CreateEntryRepository.d.ts +7 -7
  67. package/features/contentEntry/CreateEntry/CreateEntryRepository.js +8 -14
  68. package/features/contentEntry/CreateEntry/CreateEntryRepository.js.map +1 -1
  69. package/features/contentEntry/CreateEntry/CreateEntryUseCase.d.ts +3 -1
  70. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js +2 -3
  71. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js.map +1 -1
  72. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromRepository.d.ts +7 -7
  73. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromRepository.js +8 -14
  74. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromRepository.js.map +1 -1
  75. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.d.ts +3 -1
  76. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js +2 -3
  77. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
  78. package/features/contentEntry/DeleteEntry/DeleteEntryRepository.d.ts +7 -7
  79. package/features/contentEntry/DeleteEntry/DeleteEntryRepository.js +8 -14
  80. package/features/contentEntry/DeleteEntry/DeleteEntryRepository.js.map +1 -1
  81. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.d.ts +3 -1
  82. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js +2 -3
  83. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js.map +1 -1
  84. package/features/contentEntry/DeleteEntry/MoveEntryToBinRepository.d.ts +6 -6
  85. package/features/contentEntry/DeleteEntry/MoveEntryToBinRepository.js +8 -14
  86. package/features/contentEntry/DeleteEntry/MoveEntryToBinRepository.js.map +1 -1
  87. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.d.ts +3 -1
  88. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js +2 -3
  89. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js.map +1 -1
  90. package/features/contentEntry/DeleteEntry/decorators/ForceDeleteDecorator.d.ts +3 -3
  91. package/features/contentEntry/DeleteEntry/decorators/ForceDeleteDecorator.js +5 -5
  92. package/features/contentEntry/DeleteEntry/decorators/ForceDeleteDecorator.js.map +1 -1
  93. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.d.ts +6 -6
  94. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.js +8 -14
  95. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.js.map +1 -1
  96. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.d.ts +3 -1
  97. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js +2 -3
  98. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js.map +1 -1
  99. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesRepository.d.ts +7 -7
  100. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesRepository.js +8 -13
  101. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesRepository.js.map +1 -1
  102. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.d.ts +3 -1
  103. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js +2 -3
  104. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js.map +1 -1
  105. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsRepository.d.ts +9 -7
  106. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsRepository.js +15 -13
  107. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsRepository.js.map +1 -1
  108. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsUseCase.d.ts +3 -1
  109. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsUseCase.js +2 -3
  110. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsUseCase.js.map +1 -1
  111. package/features/contentEntry/GetEntry/GetEntryUseCase.d.ts +3 -1
  112. package/features/contentEntry/GetEntry/GetEntryUseCase.js +2 -3
  113. package/features/contentEntry/GetEntry/GetEntryUseCase.js.map +1 -1
  114. package/features/contentEntry/GetEntryById/GetEntryByIdUseCase.d.ts +3 -1
  115. package/features/contentEntry/GetEntryById/GetEntryByIdUseCase.js +2 -3
  116. package/features/contentEntry/GetEntryById/GetEntryByIdUseCase.js.map +1 -1
  117. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsRepository.d.ts +7 -7
  118. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsRepository.js +8 -13
  119. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsRepository.js.map +1 -1
  120. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsUseCase.d.ts +3 -1
  121. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsUseCase.js +2 -3
  122. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsUseCase.js.map +1 -1
  123. package/features/contentEntry/GetLatestRevisionByEntryId/BaseUseCase.d.ts +3 -1
  124. package/features/contentEntry/GetLatestRevisionByEntryId/BaseUseCase.js +2 -3
  125. package/features/contentEntry/GetLatestRevisionByEntryId/BaseUseCase.js.map +1 -1
  126. package/features/contentEntry/GetLatestRevisionByEntryId/GetLatestRevisionByEntryIdRepository.d.ts +7 -7
  127. package/features/contentEntry/GetLatestRevisionByEntryId/GetLatestRevisionByEntryIdRepository.js +8 -13
  128. package/features/contentEntry/GetLatestRevisionByEntryId/GetLatestRevisionByEntryIdRepository.js.map +1 -1
  129. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestDeletedRevisionByEntryIdUseCase.d.ts +3 -1
  130. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestDeletedRevisionByEntryIdUseCase.js +2 -3
  131. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestDeletedRevisionByEntryIdUseCase.js.map +1 -1
  132. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestRevisionByEntryIdIncludingDeletedUseCase.d.ts +3 -1
  133. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestRevisionByEntryIdIncludingDeletedUseCase.js +1 -3
  134. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestRevisionByEntryIdIncludingDeletedUseCase.js.map +1 -1
  135. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestRevisionByEntryIdUseCase.d.ts +3 -1
  136. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestRevisionByEntryIdUseCase.js +2 -3
  137. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestRevisionByEntryIdUseCase.js.map +1 -1
  138. package/features/contentEntry/GetPreviousRevisionByEntryId/BaseUseCase.d.ts +3 -1
  139. package/features/contentEntry/GetPreviousRevisionByEntryId/BaseUseCase.js +2 -3
  140. package/features/contentEntry/GetPreviousRevisionByEntryId/BaseUseCase.js.map +1 -1
  141. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdRepository.d.ts +7 -7
  142. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdRepository.js +8 -13
  143. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdRepository.js.map +1 -1
  144. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdUseCase.d.ts +3 -1
  145. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdUseCase.js +2 -3
  146. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdUseCase.js.map +1 -1
  147. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsRepository.d.ts +7 -7
  148. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsRepository.js +8 -13
  149. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsRepository.js.map +1 -1
  150. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsUseCase.d.ts +3 -1
  151. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsUseCase.js +2 -3
  152. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsUseCase.js.map +1 -1
  153. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdRepository.d.ts +7 -7
  154. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdRepository.js +8 -13
  155. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdRepository.js.map +1 -1
  156. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdUseCase.d.ts +3 -1
  157. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdUseCase.js +2 -3
  158. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdUseCase.js.map +1 -1
  159. package/features/contentEntry/GetRevisionById/GetRevisionByIdRepository.d.ts +7 -7
  160. package/features/contentEntry/GetRevisionById/GetRevisionByIdRepository.js +8 -13
  161. package/features/contentEntry/GetRevisionById/GetRevisionByIdRepository.js.map +1 -1
  162. package/features/contentEntry/GetRevisionById/GetRevisionByIdUseCase.d.ts +3 -1
  163. package/features/contentEntry/GetRevisionById/GetRevisionByIdUseCase.js +1 -3
  164. package/features/contentEntry/GetRevisionById/GetRevisionByIdUseCase.js.map +1 -1
  165. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdRepository.d.ts +7 -7
  166. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdRepository.js +8 -13
  167. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdRepository.js.map +1 -1
  168. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdUseCase.d.ts +3 -1
  169. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdUseCase.js +2 -3
  170. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdUseCase.js.map +1 -1
  171. package/features/contentEntry/GetSingletonEntry/GetSingletonEntryUseCase.js +1 -3
  172. package/features/contentEntry/GetSingletonEntry/GetSingletonEntryUseCase.js.map +1 -1
  173. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesRepository.d.ts +7 -7
  174. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesRepository.js +8 -13
  175. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesRepository.js.map +1 -1
  176. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.d.ts +6 -2
  177. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js +8 -6
  178. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js.map +1 -1
  179. package/features/contentEntry/ListEntries/ListDeletedEntriesUseCase.d.ts +3 -1
  180. package/features/contentEntry/ListEntries/ListDeletedEntriesUseCase.js +1 -3
  181. package/features/contentEntry/ListEntries/ListDeletedEntriesUseCase.js.map +1 -1
  182. package/features/contentEntry/ListEntries/ListEntriesRepository.d.ts +7 -7
  183. package/features/contentEntry/ListEntries/ListEntriesRepository.js +8 -13
  184. package/features/contentEntry/ListEntries/ListEntriesRepository.js.map +1 -1
  185. package/features/contentEntry/ListEntries/ListEntriesUseCase.d.ts +3 -1
  186. package/features/contentEntry/ListEntries/ListEntriesUseCase.js +2 -3
  187. package/features/contentEntry/ListEntries/ListEntriesUseCase.js.map +1 -1
  188. package/features/contentEntry/ListEntries/ListLatestEntriesUseCase.d.ts +3 -1
  189. package/features/contentEntry/ListEntries/ListLatestEntriesUseCase.js +1 -3
  190. package/features/contentEntry/ListEntries/ListLatestEntriesUseCase.js.map +1 -1
  191. package/features/contentEntry/ListEntries/ListPublishedEntriesUseCase.d.ts +3 -1
  192. package/features/contentEntry/ListEntries/ListPublishedEntriesUseCase.js +1 -3
  193. package/features/contentEntry/ListEntries/ListPublishedEntriesUseCase.js.map +1 -1
  194. package/features/contentEntry/MoveEntry/MoveEntryRepository.d.ts +7 -7
  195. package/features/contentEntry/MoveEntry/MoveEntryRepository.js +8 -13
  196. package/features/contentEntry/MoveEntry/MoveEntryRepository.js.map +1 -1
  197. package/features/contentEntry/MoveEntry/MoveEntryUseCase.d.ts +3 -1
  198. package/features/contentEntry/MoveEntry/MoveEntryUseCase.js +2 -3
  199. package/features/contentEntry/MoveEntry/MoveEntryUseCase.js.map +1 -1
  200. package/features/contentEntry/PublishEntry/PublishEntryRepository.d.ts +7 -7
  201. package/features/contentEntry/PublishEntry/PublishEntryRepository.js +8 -14
  202. package/features/contentEntry/PublishEntry/PublishEntryRepository.js.map +1 -1
  203. package/features/contentEntry/PublishEntry/PublishEntryUseCase.d.ts +3 -1
  204. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js +2 -3
  205. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
  206. package/features/contentEntry/RepublishEntry/RepublishEntryRepository.d.ts +9 -7
  207. package/features/contentEntry/RepublishEntry/RepublishEntryRepository.js +12 -15
  208. package/features/contentEntry/RepublishEntry/RepublishEntryRepository.js.map +1 -1
  209. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.d.ts +3 -1
  210. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js +2 -3
  211. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js.map +1 -1
  212. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.d.ts +7 -7
  213. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.js +8 -14
  214. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.js.map +1 -1
  215. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.d.ts +3 -1
  216. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js +2 -3
  217. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js.map +1 -1
  218. package/features/contentEntry/UnpublishEntry/UnpublishEntryRepository.d.ts +7 -7
  219. package/features/contentEntry/UnpublishEntry/UnpublishEntryRepository.js +8 -14
  220. package/features/contentEntry/UnpublishEntry/UnpublishEntryRepository.js.map +1 -1
  221. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.d.ts +3 -1
  222. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js +2 -3
  223. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js.map +1 -1
  224. package/features/contentEntry/UpdateEntry/UpdateEntryRepository.d.ts +7 -7
  225. package/features/contentEntry/UpdateEntry/UpdateEntryRepository.js +8 -14
  226. package/features/contentEntry/UpdateEntry/UpdateEntryRepository.js.map +1 -1
  227. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.d.ts +3 -1
  228. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js +2 -3
  229. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js.map +1 -1
  230. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.d.ts +3 -1
  231. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js +2 -3
  232. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js.map +1 -1
  233. package/features/contentEntry/ValidateEntry/ValidateEntryUseCase.d.ts +3 -1
  234. package/features/contentEntry/ValidateEntry/ValidateEntryUseCase.js +2 -3
  235. package/features/contentEntry/ValidateEntry/ValidateEntryUseCase.js.map +1 -1
  236. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.d.ts +3 -1
  237. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js +2 -4
  238. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js.map +1 -1
  239. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.d.ts +4 -4
  240. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js +4 -8
  241. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js.map +1 -1
  242. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.d.ts +3 -1
  243. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.js +1 -3
  244. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.js.map +1 -1
  245. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.d.ts +3 -1
  246. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.js +1 -3
  247. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.js.map +1 -1
  248. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.d.ts +3 -1
  249. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.js +1 -3
  250. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.js.map +1 -1
  251. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.d.ts +3 -1
  252. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js +2 -4
  253. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js.map +1 -1
  254. package/features/contentModel/ComponentMapGenerator/ComponentMapGenerator.d.ts +14 -0
  255. package/features/contentModel/ComponentMapGenerator/ComponentMapGenerator.js +32 -0
  256. package/features/contentModel/ComponentMapGenerator/ComponentMapGenerator.js.map +1 -0
  257. package/features/contentModel/ComponentMapGenerator/abstractions.d.ts +8 -0
  258. package/features/contentModel/ComponentMapGenerator/abstractions.js +5 -0
  259. package/features/contentModel/ComponentMapGenerator/abstractions.js.map +1 -0
  260. package/features/contentModel/ComponentMapGenerator/feature.d.ts +4 -0
  261. package/features/contentModel/ComponentMapGenerator/feature.js +11 -0
  262. package/features/contentModel/ComponentMapGenerator/feature.js.map +1 -0
  263. package/features/contentModel/ComponentMapGenerator/index.d.ts +2 -0
  264. package/features/contentModel/ComponentMapGenerator/index.js +2 -0
  265. package/features/contentModel/ContentModelFeature.js +6 -0
  266. package/features/contentModel/ContentModelFeature.js.map +1 -1
  267. package/features/contentModel/CreateModel/CreateModelRepository.d.ts +5 -6
  268. package/features/contentModel/CreateModel/CreateModelRepository.js +9 -12
  269. package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
  270. package/features/contentModel/CreateModel/CreateModelUseCase.js +2 -2
  271. package/features/contentModel/CreateModel/CreateModelUseCase.js.map +1 -1
  272. package/features/contentModel/CreateModel/abstractions.d.ts +1 -1
  273. package/features/contentModel/CreateModel/abstractions.js.map +1 -1
  274. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.d.ts +5 -6
  275. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +9 -12
  276. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
  277. package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.js +2 -2
  278. package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.js.map +1 -1
  279. package/features/contentModel/CreateModelFrom/abstractions.d.ts +1 -1
  280. package/features/contentModel/CreateModelFrom/abstractions.js.map +1 -1
  281. package/features/contentModel/DeleteModel/DeleteModelRepository.d.ts +4 -6
  282. package/features/contentModel/DeleteModel/DeleteModelRepository.js +6 -10
  283. package/features/contentModel/DeleteModel/DeleteModelRepository.js.map +1 -1
  284. package/features/contentModel/DeleteModel/DeleteModelWithEntryCleanup.d.ts +1 -0
  285. package/features/contentModel/DeleteModel/DeleteModelWithEntryCleanup.js +11 -8
  286. package/features/contentModel/DeleteModel/DeleteModelWithEntryCleanup.js.map +1 -1
  287. package/features/contentModel/RefModelsGenerator/RefModelsGenerator.d.ts +19 -0
  288. package/features/contentModel/RefModelsGenerator/RefModelsGenerator.js +56 -0
  289. package/features/contentModel/RefModelsGenerator/RefModelsGenerator.js.map +1 -0
  290. package/features/contentModel/RefModelsGenerator/abstractions.d.ts +11 -0
  291. package/features/contentModel/RefModelsGenerator/abstractions.js +5 -0
  292. package/features/contentModel/RefModelsGenerator/abstractions.js.map +1 -0
  293. package/features/contentModel/RefModelsGenerator/feature.d.ts +4 -0
  294. package/features/contentModel/RefModelsGenerator/feature.js +11 -0
  295. package/features/contentModel/RefModelsGenerator/feature.js.map +1 -0
  296. package/features/contentModel/RefModelsGenerator/index.d.ts +2 -0
  297. package/features/contentModel/RefModelsGenerator/index.js +2 -0
  298. package/features/contentModel/UpdateModel/UpdateModelRepository.d.ts +7 -6
  299. package/features/contentModel/UpdateModel/UpdateModelRepository.js +12 -12
  300. package/features/contentModel/UpdateModel/UpdateModelRepository.js.map +1 -1
  301. package/features/contentModel/UpdateModel/UpdateModelUseCase.js +2 -2
  302. package/features/contentModel/UpdateModel/UpdateModelUseCase.js.map +1 -1
  303. package/features/contentModel/UpdateModel/abstractions.d.ts +1 -1
  304. package/features/contentModel/UpdateModel/abstractions.js.map +1 -1
  305. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.d.ts +16 -0
  306. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js +53 -0
  307. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js.map +1 -0
  308. package/features/contentModel/ValuesSelectionGenerator/abstractions.d.ts +8 -0
  309. package/features/contentModel/ValuesSelectionGenerator/abstractions.js +5 -0
  310. package/features/contentModel/ValuesSelectionGenerator/abstractions.js.map +1 -0
  311. package/features/contentModel/ValuesSelectionGenerator/feature.d.ts +4 -0
  312. package/features/contentModel/ValuesSelectionGenerator/feature.js +11 -0
  313. package/features/contentModel/ValuesSelectionGenerator/feature.js.map +1 -0
  314. package/features/contentModel/ValuesSelectionGenerator/index.d.ts +1 -0
  315. package/features/contentModel/ValuesSelectionGenerator/index.js +1 -0
  316. package/features/contentModel/shared/ModelsFetcher.d.ts +3 -3
  317. package/features/contentModel/shared/ModelsFetcher.js +5 -5
  318. package/features/contentModel/shared/ModelsFetcher.js.map +1 -1
  319. package/features/contentModel/shared/PluginModelsProvider.d.ts +5 -4
  320. package/features/contentModel/shared/PluginModelsProvider.js +11 -8
  321. package/features/contentModel/shared/PluginModelsProvider.js.map +1 -1
  322. package/features/contentModel/shared/abstractions.d.ts +10 -0
  323. package/features/contentModel/shared/abstractions.js +2 -1
  324. package/features/contentModel/shared/abstractions.js.map +1 -1
  325. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.d.ts +11 -7
  326. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js +19 -19
  327. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js.map +1 -1
  328. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.d.ts +6 -2
  329. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js +9 -8
  330. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js.map +1 -1
  331. package/features/contentModelGroup/CreateGroup/abstractions.d.ts +1 -1
  332. package/features/contentModelGroup/CreateGroup/abstractions.js.map +1 -1
  333. package/features/contentModelGroup/DeleteGroup/DeleteGroupRepository.d.ts +9 -7
  334. package/features/contentModelGroup/DeleteGroup/DeleteGroupRepository.js +12 -14
  335. package/features/contentModelGroup/DeleteGroup/DeleteGroupRepository.js.map +1 -1
  336. package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.d.ts +3 -1
  337. package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.js +2 -3
  338. package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.js.map +1 -1
  339. package/features/contentModelGroup/GetGroup/GetGroupRepository.d.ts +6 -4
  340. package/features/contentModelGroup/GetGroup/GetGroupRepository.js +9 -9
  341. package/features/contentModelGroup/GetGroup/GetGroupRepository.js.map +1 -1
  342. package/features/contentModelGroup/GetGroup/GetGroupUseCase.d.ts +3 -1
  343. package/features/contentModelGroup/GetGroup/GetGroupUseCase.js +2 -3
  344. package/features/contentModelGroup/GetGroup/GetGroupUseCase.js.map +1 -1
  345. package/features/contentModelGroup/ListGroups/ListGroupsRepository.d.ts +6 -4
  346. package/features/contentModelGroup/ListGroups/ListGroupsRepository.js +9 -9
  347. package/features/contentModelGroup/ListGroups/ListGroupsRepository.js.map +1 -1
  348. package/features/contentModelGroup/ListGroups/ListGroupsUseCase.d.ts +3 -1
  349. package/features/contentModelGroup/ListGroups/ListGroupsUseCase.js +2 -3
  350. package/features/contentModelGroup/ListGroups/ListGroupsUseCase.js.map +1 -1
  351. package/features/contentModelGroup/UpdateGroup/UpdateGroupRepository.d.ts +7 -7
  352. package/features/contentModelGroup/UpdateGroup/UpdateGroupRepository.js +9 -14
  353. package/features/contentModelGroup/UpdateGroup/UpdateGroupRepository.js.map +1 -1
  354. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.d.ts +3 -1
  355. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js +4 -5
  356. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js.map +1 -1
  357. package/features/contentModelGroup/UpdateGroup/abstractions.d.ts +1 -1
  358. package/features/contentModelGroup/UpdateGroup/abstractions.js.map +1 -1
  359. package/features/contentModelGroup/shared/PluginGroupsProvider.d.ts +6 -4
  360. package/features/contentModelGroup/shared/PluginGroupsProvider.js +13 -11
  361. package/features/contentModelGroup/shared/PluginGroupsProvider.js.map +1 -1
  362. package/features/contentModelGroup/shared/abstractions.d.ts +10 -0
  363. package/features/contentModelGroup/shared/abstractions.js +2 -1
  364. package/features/contentModelGroup/shared/abstractions.js.map +1 -1
  365. package/features/graphql/feature.js +2 -0
  366. package/features/graphql/feature.js.map +1 -1
  367. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.d.ts +2 -2
  368. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.js.map +1 -1
  369. package/features/graphql/fields/base/AssetToGraphQL.d.ts +26 -0
  370. package/features/graphql/fields/base/AssetToGraphQL.js +148 -0
  371. package/features/graphql/fields/base/AssetToGraphQL.js.map +1 -0
  372. package/features/graphql/fields/base/DynamicZoneToGraphQL.js +5 -1
  373. package/features/graphql/fields/base/DynamicZoneToGraphQL.js.map +1 -1
  374. package/features/graphql/fields/base/ObjectToGraphQL.js +2 -2
  375. package/features/graphql/fields/base/ObjectToGraphQL.js.map +1 -1
  376. package/features/graphql/fields/base/RefToGraphQL.d.ts +1 -1
  377. package/features/graphql/fields/base/RefToGraphQL.js +10 -18
  378. package/features/graphql/fields/base/RefToGraphQL.js.map +1 -1
  379. package/features/graphql/fields/base/richText/richTextResolver.d.ts +1 -1
  380. package/features/graphql/fields/base/richText/richTextResolver.js.map +1 -1
  381. package/features/modelBuilder/abstractions.d.ts +10 -0
  382. package/features/modelBuilder/abstractions.js.map +1 -1
  383. package/features/modelBuilder/feature.js +2 -0
  384. package/features/modelBuilder/feature.js.map +1 -1
  385. package/features/modelBuilder/fields/AssetFieldType.d.ts +20 -0
  386. package/features/modelBuilder/fields/AssetFieldType.js +46 -0
  387. package/features/modelBuilder/fields/AssetFieldType.js.map +1 -0
  388. package/features/modelBuilder/fields/DataFieldBuilder.d.ts +54 -18
  389. package/features/modelBuilder/fields/DataFieldBuilder.js +3 -0
  390. package/features/modelBuilder/fields/DataFieldBuilder.js.map +1 -1
  391. package/features/modelBuilder/fields/DynamicZoneFieldType.d.ts +1 -0
  392. package/features/modelBuilder/fields/DynamicZoneFieldType.js +2 -6
  393. package/features/modelBuilder/fields/DynamicZoneFieldType.js.map +1 -1
  394. package/features/modelBuilder/fields/TextFieldType.d.ts +3 -1
  395. package/features/modelBuilder/fields/TextFieldType.js +1 -3
  396. package/features/modelBuilder/fields/TextFieldType.js.map +1 -1
  397. package/features/modelBuilder/fields/resolveAssetUrl.d.ts +35 -0
  398. package/features/modelBuilder/fields/resolveAssetUrl.js +26 -0
  399. package/features/modelBuilder/fields/resolveAssetUrl.js.map +1 -0
  400. package/features/modelBuilder/index.d.ts +1 -1
  401. package/features/modelBuilder/models/BaseModelBuilder.d.ts +3 -1
  402. package/features/modelBuilder/models/BaseModelBuilder.js +7 -0
  403. package/features/modelBuilder/models/BaseModelBuilder.js.map +1 -1
  404. package/features/modelBuilder/models/PrivateModelBuilder.js +2 -1
  405. package/features/modelBuilder/models/PrivateModelBuilder.js.map +1 -1
  406. package/features/modelBuilder/models/PublicModelBuilder.js +2 -1
  407. package/features/modelBuilder/models/PublicModelBuilder.js.map +1 -1
  408. package/features/shared/abstractions.d.ts +11 -15
  409. package/features/shared/abstractions.js +3 -3
  410. package/features/shared/abstractions.js.map +1 -1
  411. package/features/shared/storageOperations/entry/CreateEntryRevisionFromStorageOperation.d.ts +8 -0
  412. package/features/shared/storageOperations/entry/CreateEntryRevisionFromStorageOperation.js +5 -0
  413. package/features/shared/storageOperations/entry/CreateEntryRevisionFromStorageOperation.js.map +1 -0
  414. package/features/shared/storageOperations/entry/CreateEntryStorageOperation.d.ts +8 -0
  415. package/features/shared/storageOperations/entry/CreateEntryStorageOperation.js +5 -0
  416. package/features/shared/storageOperations/entry/CreateEntryStorageOperation.js.map +1 -0
  417. package/features/shared/storageOperations/entry/DeleteEntryRevisionStorageOperation.d.ts +8 -0
  418. package/features/shared/storageOperations/entry/DeleteEntryRevisionStorageOperation.js +5 -0
  419. package/features/shared/storageOperations/entry/DeleteEntryRevisionStorageOperation.js.map +1 -0
  420. package/features/shared/storageOperations/entry/DeleteEntryStorageOperation.d.ts +8 -0
  421. package/features/shared/storageOperations/entry/DeleteEntryStorageOperation.js +5 -0
  422. package/features/shared/storageOperations/entry/DeleteEntryStorageOperation.js.map +1 -0
  423. package/features/shared/storageOperations/entry/DeleteMultipleEntriesStorageOperation.d.ts +8 -0
  424. package/features/shared/storageOperations/entry/DeleteMultipleEntriesStorageOperation.js +5 -0
  425. package/features/shared/storageOperations/entry/DeleteMultipleEntriesStorageOperation.js.map +1 -0
  426. package/features/shared/storageOperations/entry/GetEntriesByIdsStorageOperation.d.ts +8 -0
  427. package/features/shared/storageOperations/entry/GetEntriesByIdsStorageOperation.js +5 -0
  428. package/features/shared/storageOperations/entry/GetEntriesByIdsStorageOperation.js.map +1 -0
  429. package/features/shared/storageOperations/entry/GetEntryStorageOperation.d.ts +8 -0
  430. package/features/shared/storageOperations/entry/GetEntryStorageOperation.js +5 -0
  431. package/features/shared/storageOperations/entry/GetEntryStorageOperation.js.map +1 -0
  432. package/features/shared/storageOperations/entry/GetLatestEntriesByIdsStorageOperation.d.ts +8 -0
  433. package/features/shared/storageOperations/entry/GetLatestEntriesByIdsStorageOperation.js +5 -0
  434. package/features/shared/storageOperations/entry/GetLatestEntriesByIdsStorageOperation.js.map +1 -0
  435. package/features/shared/storageOperations/entry/GetLatestRevisionByEntryIdStorageOperation.d.ts +8 -0
  436. package/features/shared/storageOperations/entry/GetLatestRevisionByEntryIdStorageOperation.js +5 -0
  437. package/features/shared/storageOperations/entry/GetLatestRevisionByEntryIdStorageOperation.js.map +1 -0
  438. package/features/shared/storageOperations/entry/GetPreviousRevisionStorageOperation.d.ts +8 -0
  439. package/features/shared/storageOperations/entry/GetPreviousRevisionStorageOperation.js +5 -0
  440. package/features/shared/storageOperations/entry/GetPreviousRevisionStorageOperation.js.map +1 -0
  441. package/features/shared/storageOperations/entry/GetPublishedEntriesByIdsStorageOperation.d.ts +8 -0
  442. package/features/shared/storageOperations/entry/GetPublishedEntriesByIdsStorageOperation.js +5 -0
  443. package/features/shared/storageOperations/entry/GetPublishedEntriesByIdsStorageOperation.js.map +1 -0
  444. package/features/shared/storageOperations/entry/GetPublishedRevisionByEntryIdStorageOperation.d.ts +8 -0
  445. package/features/shared/storageOperations/entry/GetPublishedRevisionByEntryIdStorageOperation.js +5 -0
  446. package/features/shared/storageOperations/entry/GetPublishedRevisionByEntryIdStorageOperation.js.map +1 -0
  447. package/features/shared/storageOperations/entry/GetRevisionByIdStorageOperation.d.ts +8 -0
  448. package/features/shared/storageOperations/entry/GetRevisionByIdStorageOperation.js +5 -0
  449. package/features/shared/storageOperations/entry/GetRevisionByIdStorageOperation.js.map +1 -0
  450. package/features/shared/storageOperations/entry/GetRevisionsStorageOperation.d.ts +8 -0
  451. package/features/shared/storageOperations/entry/GetRevisionsStorageOperation.js +5 -0
  452. package/features/shared/storageOperations/entry/GetRevisionsStorageOperation.js.map +1 -0
  453. package/features/shared/storageOperations/entry/GetUniqueFieldValuesStorageOperation.d.ts +8 -0
  454. package/features/shared/storageOperations/entry/GetUniqueFieldValuesStorageOperation.js +5 -0
  455. package/features/shared/storageOperations/entry/GetUniqueFieldValuesStorageOperation.js.map +1 -0
  456. package/features/shared/storageOperations/entry/ListEntriesStorageOperation.d.ts +8 -0
  457. package/features/shared/storageOperations/entry/ListEntriesStorageOperation.js +5 -0
  458. package/features/shared/storageOperations/entry/ListEntriesStorageOperation.js.map +1 -0
  459. package/features/shared/storageOperations/entry/MoveEntryStorageOperation.d.ts +8 -0
  460. package/features/shared/storageOperations/entry/MoveEntryStorageOperation.js +5 -0
  461. package/features/shared/storageOperations/entry/MoveEntryStorageOperation.js.map +1 -0
  462. package/features/shared/storageOperations/entry/MoveToBinStorageOperation.d.ts +8 -0
  463. package/features/shared/storageOperations/entry/MoveToBinStorageOperation.js +5 -0
  464. package/features/shared/storageOperations/entry/MoveToBinStorageOperation.js.map +1 -0
  465. package/features/shared/storageOperations/entry/PublishEntryStorageOperation.d.ts +8 -0
  466. package/features/shared/storageOperations/entry/PublishEntryStorageOperation.js +5 -0
  467. package/features/shared/storageOperations/entry/PublishEntryStorageOperation.js.map +1 -0
  468. package/features/shared/storageOperations/entry/RestoreFromBinStorageOperation.d.ts +8 -0
  469. package/features/shared/storageOperations/entry/RestoreFromBinStorageOperation.js +5 -0
  470. package/features/shared/storageOperations/entry/RestoreFromBinStorageOperation.js.map +1 -0
  471. package/features/shared/storageOperations/entry/UnpublishEntryStorageOperation.d.ts +8 -0
  472. package/features/shared/storageOperations/entry/UnpublishEntryStorageOperation.js +5 -0
  473. package/features/shared/storageOperations/entry/UnpublishEntryStorageOperation.js.map +1 -0
  474. package/features/shared/storageOperations/entry/UpdateEntryStorageOperation.d.ts +8 -0
  475. package/features/shared/storageOperations/entry/UpdateEntryStorageOperation.js +5 -0
  476. package/features/shared/storageOperations/entry/UpdateEntryStorageOperation.js.map +1 -0
  477. package/features/shared/storageOperations/group/CreateGroupStorageOperation.d.ts +8 -0
  478. package/features/shared/storageOperations/group/CreateGroupStorageOperation.js +5 -0
  479. package/features/shared/storageOperations/group/CreateGroupStorageOperation.js.map +1 -0
  480. package/features/shared/storageOperations/group/DeleteGroupStorageOperation.d.ts +8 -0
  481. package/features/shared/storageOperations/group/DeleteGroupStorageOperation.js +5 -0
  482. package/features/shared/storageOperations/group/DeleteGroupStorageOperation.js.map +1 -0
  483. package/features/shared/storageOperations/group/GetGroupStorageOperation.d.ts +8 -0
  484. package/features/shared/storageOperations/group/GetGroupStorageOperation.js +5 -0
  485. package/features/shared/storageOperations/group/GetGroupStorageOperation.js.map +1 -0
  486. package/features/shared/storageOperations/group/ListGroupsStorageOperation.d.ts +8 -0
  487. package/features/shared/storageOperations/group/ListGroupsStorageOperation.js +5 -0
  488. package/features/shared/storageOperations/group/ListGroupsStorageOperation.js.map +1 -0
  489. package/features/shared/storageOperations/group/UpdateGroupStorageOperation.d.ts +8 -0
  490. package/features/shared/storageOperations/group/UpdateGroupStorageOperation.js +5 -0
  491. package/features/shared/storageOperations/group/UpdateGroupStorageOperation.js.map +1 -0
  492. package/features/shared/storageOperations/index.d.ts +32 -0
  493. package/features/shared/storageOperations/index.js +32 -0
  494. package/features/shared/storageOperations/model/CreateModelStorageOperation.d.ts +8 -0
  495. package/features/shared/storageOperations/model/CreateModelStorageOperation.js +5 -0
  496. package/features/shared/storageOperations/model/CreateModelStorageOperation.js.map +1 -0
  497. package/features/shared/storageOperations/model/DeleteModelStorageOperation.d.ts +8 -0
  498. package/features/shared/storageOperations/model/DeleteModelStorageOperation.js +5 -0
  499. package/features/shared/storageOperations/model/DeleteModelStorageOperation.js.map +1 -0
  500. package/features/shared/storageOperations/model/GetModelStorageOperation.d.ts +8 -0
  501. package/features/shared/storageOperations/model/GetModelStorageOperation.js +5 -0
  502. package/features/shared/storageOperations/model/GetModelStorageOperation.js.map +1 -0
  503. package/features/shared/storageOperations/model/ListModelsStorageOperation.d.ts +8 -0
  504. package/features/shared/storageOperations/model/ListModelsStorageOperation.js +5 -0
  505. package/features/shared/storageOperations/model/ListModelsStorageOperation.js.map +1 -0
  506. package/features/shared/storageOperations/model/UpdateModelStorageOperation.d.ts +8 -0
  507. package/features/shared/storageOperations/model/UpdateModelStorageOperation.js +5 -0
  508. package/features/shared/storageOperations/model/UpdateModelStorageOperation.js.map +1 -0
  509. package/features/sortMapper/SortMapper.js +2 -5
  510. package/features/sortMapper/SortMapper.js.map +1 -1
  511. package/features/whereMapper/WhereMapper.js +7 -5
  512. package/features/whereMapper/WhereMapper.js.map +1 -1
  513. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +3 -7
  514. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
  515. package/fieldConverters/abstractions.d.ts +14 -0
  516. package/fieldConverters/abstractions.js +13 -0
  517. package/fieldConverters/abstractions.js.map +1 -0
  518. package/fieldConverters/index.d.ts +1 -1
  519. package/graphql/CmsGraphQLSchemaFactory.d.ts +8 -0
  520. package/graphql/CmsGraphQLSchemaFactory.js +5 -0
  521. package/graphql/CmsGraphQLSchemaFactory.js.map +1 -0
  522. package/graphql/CmsSchemaExecutor.d.ts +10 -0
  523. package/graphql/CmsSchemaExecutor.js +5 -0
  524. package/graphql/CmsSchemaExecutor.js.map +1 -0
  525. package/graphql/buildSchemaPlugins.d.ts +2 -1
  526. package/graphql/buildSchemaPlugins.js +1 -3
  527. package/graphql/buildSchemaPlugins.js.map +1 -1
  528. package/graphql/checkEndpointAccess.js +5 -2
  529. package/graphql/checkEndpointAccess.js.map +1 -1
  530. package/graphql/createExecutableSchema.d.ts +1 -1
  531. package/graphql/createExecutableSchema.js +1 -1
  532. package/graphql/createExecutableSchema.js.map +1 -1
  533. package/graphql/generateSchema.d.ts +2 -1
  534. package/graphql/generateSchema.js +14 -5
  535. package/graphql/generateSchema.js.map +1 -1
  536. package/graphql/getSchema.js +7 -2
  537. package/graphql/getSchema.js.map +1 -1
  538. package/graphql/scalars/RevisionIdScalarPlugin.d.ts +1 -1
  539. package/graphql/scalars/RevisionIdScalarPlugin.js.map +1 -1
  540. package/graphql/schema/baseContentSchema.d.ts +1 -6
  541. package/graphql/schema/baseContentSchema.js +5 -8
  542. package/graphql/schema/baseContentSchema.js.map +1 -1
  543. package/graphql/schema/baseSchema.d.ts +2 -2
  544. package/graphql/schema/baseSchema.js +6 -41
  545. package/graphql/schema/baseSchema.js.map +1 -1
  546. package/graphql/schema/cms/CmsBaseErrorTypeFactory.d.ts +14 -0
  547. package/graphql/schema/cms/CmsBaseErrorTypeFactory.js +21 -0
  548. package/graphql/schema/cms/CmsBaseErrorTypeFactory.js.map +1 -0
  549. package/graphql/schema/cms/createEntryResolver.js +2 -2
  550. package/graphql/schema/cms/createEntryResolver.js.map +1 -1
  551. package/graphql/schema/cms/deleteEntryResolver.js +2 -2
  552. package/graphql/schema/cms/deleteEntryResolver.js.map +1 -1
  553. package/graphql/schema/cms/getEntryResolver.js +5 -4
  554. package/graphql/schema/cms/getEntryResolver.js.map +1 -1
  555. package/graphql/schema/cms/getModelResolver.d.ts +35 -0
  556. package/graphql/schema/cms/getModelResolver.js +49 -0
  557. package/graphql/schema/cms/getModelResolver.js.map +1 -0
  558. package/graphql/schema/cms/helpers/buildFieldsSelection.js +9 -2
  559. package/graphql/schema/cms/helpers/buildFieldsSelection.js.map +1 -1
  560. package/graphql/schema/cms/helpers/expandFieldWildcards.d.ts +2 -0
  561. package/graphql/schema/cms/helpers/expandFieldWildcards.js +13 -0
  562. package/graphql/schema/cms/helpers/expandFieldWildcards.js.map +1 -0
  563. package/graphql/schema/cms/helpers/getModel.d.ts +0 -3
  564. package/graphql/schema/cms/helpers/getModel.js +5 -3
  565. package/graphql/schema/cms/helpers/getModel.js.map +1 -1
  566. package/graphql/schema/cms/helpers/index.d.ts +1 -0
  567. package/graphql/schema/cms/helpers/index.js +1 -0
  568. package/graphql/schema/cms/helpers.d.ts +1 -0
  569. package/graphql/schema/cms/helpers.js +1 -0
  570. package/graphql/schema/cms/listEntriesResolver.js +5 -4
  571. package/graphql/schema/cms/listEntriesResolver.js.map +1 -1
  572. package/graphql/schema/cms/publishEntryResolver.js +2 -2
  573. package/graphql/schema/cms/publishEntryResolver.js.map +1 -1
  574. package/graphql/schema/cms/resolvers/createEntry.d.ts +2 -2
  575. package/graphql/schema/cms/resolvers/createEntry.js +1 -1
  576. package/graphql/schema/cms/resolvers/createEntry.js.map +1 -1
  577. package/graphql/schema/cms/resolvers/deleteEntryRevision.d.ts +2 -2
  578. package/graphql/schema/cms/resolvers/deleteEntryRevision.js +1 -1
  579. package/graphql/schema/cms/resolvers/deleteEntryRevision.js.map +1 -1
  580. package/graphql/schema/cms/resolvers/getEntry.d.ts +2 -2
  581. package/graphql/schema/cms/resolvers/getEntry.js +1 -1
  582. package/graphql/schema/cms/resolvers/getEntry.js.map +1 -1
  583. package/graphql/schema/cms/resolvers/getModel.d.ts +8 -0
  584. package/graphql/schema/cms/resolvers/getModel.js +18 -0
  585. package/graphql/schema/cms/resolvers/getModel.js.map +1 -0
  586. package/graphql/schema/cms/resolvers/index.d.ts +1 -0
  587. package/graphql/schema/cms/resolvers/index.js +1 -0
  588. package/graphql/schema/cms/resolvers/listEntries.d.ts +2 -2
  589. package/graphql/schema/cms/resolvers/listEntries.js +1 -1
  590. package/graphql/schema/cms/resolvers/listEntries.js.map +1 -1
  591. package/graphql/schema/cms/resolvers/mutationCms.d.ts +2 -2
  592. package/graphql/schema/cms/resolvers/mutationCms.js +1 -1
  593. package/graphql/schema/cms/resolvers/mutationCms.js.map +1 -1
  594. package/graphql/schema/cms/resolvers/publishEntryRevision.d.ts +2 -2
  595. package/graphql/schema/cms/resolvers/publishEntryRevision.js +1 -1
  596. package/graphql/schema/cms/resolvers/publishEntryRevision.js.map +1 -1
  597. package/graphql/schema/cms/resolvers/queryCms.d.ts +2 -2
  598. package/graphql/schema/cms/resolvers/queryCms.js +1 -1
  599. package/graphql/schema/cms/resolvers/queryCms.js.map +1 -1
  600. package/graphql/schema/cms/resolvers/unpublishEntryRevision.d.ts +2 -2
  601. package/graphql/schema/cms/resolvers/unpublishEntryRevision.js +1 -1
  602. package/graphql/schema/cms/resolvers/unpublishEntryRevision.js.map +1 -1
  603. package/graphql/schema/cms/resolvers/updateEntryRevision.d.ts +2 -2
  604. package/graphql/schema/cms/resolvers/updateEntryRevision.js +1 -1
  605. package/graphql/schema/cms/resolvers/updateEntryRevision.js.map +1 -1
  606. package/graphql/schema/cms/typeDefs/mutation.d.ts +2 -2
  607. package/graphql/schema/cms/typeDefs/mutation.js +1 -1
  608. package/graphql/schema/cms/typeDefs/mutation.js.map +1 -1
  609. package/graphql/schema/cms/typeDefs/query.d.ts +2 -2
  610. package/graphql/schema/cms/typeDefs/query.js +2 -1
  611. package/graphql/schema/cms/typeDefs/query.js.map +1 -1
  612. package/graphql/schema/cms/typeDefs/responses.d.ts +2 -2
  613. package/graphql/schema/cms/typeDefs/responses.js +6 -1
  614. package/graphql/schema/cms/typeDefs/responses.js.map +1 -1
  615. package/graphql/schema/cms/unpublishEntryResolver.js +2 -2
  616. package/graphql/schema/cms/unpublishEntryResolver.js.map +1 -1
  617. package/graphql/schema/cms/updateEntryResolver.js +2 -2
  618. package/graphql/schema/cms/updateEntryResolver.js.map +1 -1
  619. package/graphql/schema/contentEntries.js +43 -32
  620. package/graphql/schema/contentEntries.js.map +1 -1
  621. package/graphql/schema/contentModelGroups.js +39 -18
  622. package/graphql/schema/contentModelGroups.js.map +1 -1
  623. package/graphql/schema/contentModels.js +68 -16
  624. package/graphql/schema/contentModels.js.map +1 -1
  625. package/graphql/schema/createFieldResolvers.d.ts +1 -1
  626. package/graphql/schema/createFieldResolvers.js.map +1 -1
  627. package/graphql/schema/createManageResolvers.js +4 -2
  628. package/graphql/schema/createManageResolvers.js.map +1 -1
  629. package/graphql/schema/resolvers/manage/resolveCreate.js +5 -3
  630. package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
  631. package/graphql/schema/resolvers/manage/resolveCreateFrom.js +5 -3
  632. package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
  633. package/graphql/schema/resolvers/manage/resolveDelete.js +9 -4
  634. package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
  635. package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js +5 -3
  636. package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js.map +1 -1
  637. package/graphql/schema/resolvers/manage/resolveGet.js +11 -6
  638. package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
  639. package/graphql/schema/resolvers/manage/resolveGetByIds.js +5 -3
  640. package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
  641. package/graphql/schema/resolvers/manage/resolveGetRevisions.js +5 -3
  642. package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
  643. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js +5 -3
  644. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js.map +1 -1
  645. package/graphql/schema/resolvers/manage/resolveList.js +5 -3
  646. package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
  647. package/graphql/schema/resolvers/manage/resolveListDeleted.js +5 -3
  648. package/graphql/schema/resolvers/manage/resolveListDeleted.js.map +1 -1
  649. package/graphql/schema/resolvers/manage/resolveMove.js +4 -2
  650. package/graphql/schema/resolvers/manage/resolveMove.js.map +1 -1
  651. package/graphql/schema/resolvers/manage/resolvePublish.js +5 -3
  652. package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
  653. package/graphql/schema/resolvers/manage/resolveRepublish.js +5 -3
  654. package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
  655. package/graphql/schema/resolvers/manage/resolveRestoreFromBin.js +5 -3
  656. package/graphql/schema/resolvers/manage/resolveRestoreFromBin.js.map +1 -1
  657. package/graphql/schema/resolvers/manage/resolveUnpublish.js +5 -3
  658. package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
  659. package/graphql/schema/resolvers/manage/resolveUpdate.js +5 -3
  660. package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
  661. package/graphql/schema/resolvers/manage/resolveUpdateRevisionDescription.js +5 -3
  662. package/graphql/schema/resolvers/manage/resolveUpdateRevisionDescription.js.map +1 -1
  663. package/graphql/schema/resolvers/manage/resolveValidate.js +5 -3
  664. package/graphql/schema/resolvers/manage/resolveValidate.js.map +1 -1
  665. package/graphql/schema/resolvers/preview/resolveGet.js +6 -3
  666. package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
  667. package/graphql/schema/resolvers/preview/resolveList.js +5 -3
  668. package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
  669. package/graphql/schema/resolvers/read/resolveGet.js +5 -2
  670. package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
  671. package/graphql/schema/resolvers/read/resolveList.js +5 -3
  672. package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
  673. package/graphql/schema/resolvers/singular/resolveGet.js +1 -1
  674. package/graphql/schema/resolvers/singular/resolveGet.js.map +1 -1
  675. package/graphql/schema/resolvers/singular/resolveUpdate.js +1 -1
  676. package/graphql/schema/resolvers/singular/resolveUpdate.js.map +1 -1
  677. package/graphql/schema/schemaPlugins.d.ts +2 -1
  678. package/graphql/schema/schemaPlugins.js +2 -4
  679. package/graphql/schema/schemaPlugins.js.map +1 -1
  680. package/index.d.ts +7 -6
  681. package/index.js +4 -22
  682. package/legacy/abstractions.js.map +1 -1
  683. package/package.json +23 -29
  684. package/plugins/CmsGraphQLSchemaPlugin/CmsGraphQLSchemaPlugin.d.ts +2 -2
  685. package/plugins/CmsGraphQLSchemaPlugin/CmsGraphQLSchemaPlugin.js +1 -1
  686. package/plugins/CmsGraphQLSchemaPlugin/CmsGraphQLSchemaPlugin.js.map +1 -1
  687. package/plugins/CmsModelPlugin.js +2 -1
  688. package/plugins/CmsModelPlugin.js.map +1 -1
  689. package/plugins/index.d.ts +0 -1
  690. package/plugins/index.js +0 -1
  691. package/types/fields/dynamicZoneField.d.ts +1 -0
  692. package/types/model.d.ts +6 -0
  693. package/types/modelField.d.ts +2 -0
  694. package/types/types.d.ts +10 -183
  695. package/types/types.js.map +1 -1
  696. package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.d.ts +28 -0
  697. package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.js +324 -0
  698. package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.js.map +1 -0
  699. package/utils/contentModelToJsonSchema/index.d.ts +2 -0
  700. package/utils/contentModelToJsonSchema/index.js +1 -0
  701. package/utils/contentModelToJsonSchema/types.d.ts +24 -0
  702. package/utils/contentModelToJsonSchema/types.js +0 -0
  703. package/utils/converters/ConverterCollection.d.ts +2 -2
  704. package/utils/converters/ConverterCollection.js +1 -3
  705. package/utils/converters/ConverterCollection.js.map +1 -1
  706. package/utils/converters/valueKeyFromStorageConverter.d.ts +2 -2
  707. package/utils/converters/valueKeyFromStorageConverter.js +2 -2
  708. package/utils/converters/valueKeyFromStorageConverter.js.map +1 -1
  709. package/utils/converters/valueKeyStorageConverter.js +4 -2
  710. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  711. package/utils/converters/valueKeyToStorageConverter.d.ts +2 -2
  712. package/utils/converters/valueKeyToStorageConverter.js +2 -2
  713. package/utils/converters/valueKeyToStorageConverter.js.map +1 -1
  714. package/utils/getSchemaFromFieldPlugins.d.ts +2 -2
  715. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  716. package/utils/index.d.ts +1 -0
  717. package/utils/index.js +1 -0
  718. package/utils/isHeadlessCmsReady.d.ts +1 -1
  719. package/utils/isHeadlessCmsReady.js +3 -2
  720. package/utils/isHeadlessCmsReady.js.map +1 -1
  721. package/abstractions/entryHooks/OnEntryBeforeCreate.d.ts +0 -8
  722. package/abstractions/entryHooks/OnEntryBeforeCreate.js +0 -5
  723. package/abstractions/entryHooks/OnEntryBeforeCreate.js.map +0 -1
  724. package/abstractions/entryHooks/index.d.ts +0 -1
  725. package/abstractions/entryHooks/index.js +0 -1
  726. package/abstractions/index.d.ts +0 -1
  727. package/abstractions/index.js +0 -1
  728. package/context.d.ts +0 -3
  729. package/context.js +0 -131
  730. package/context.js.map +0 -1
  731. package/extensions/entryHooks/OnEntryBeforeCreate.d.ts +0 -4
  732. package/extensions/entryHooks/OnEntryBeforeCreate.js +0 -21
  733. package/extensions/entryHooks/OnEntryBeforeCreate.js.map +0 -1
  734. package/extensions/entryHooks/index.d.ts +0 -1
  735. package/extensions/entryHooks/index.js +0 -1
  736. package/extensions/index.d.ts +0 -5
  737. package/extensions/index.js +0 -7
  738. package/extensions/index.js.map +0 -1
  739. package/features/runtimeTenant/RuntimeTenant.d.ts +0 -13
  740. package/features/runtimeTenant/RuntimeTenant.js +0 -22
  741. package/features/runtimeTenant/RuntimeTenant.js.map +0 -1
  742. package/features/runtimeTenant/abstractions.d.ts +0 -11
  743. package/features/runtimeTenant/abstractions.js +0 -5
  744. package/features/runtimeTenant/abstractions.js.map +0 -1
  745. package/features/runtimeTenant/index.d.ts +0 -2
  746. package/features/runtimeTenant/index.js +0 -2
  747. package/graphql/graphQLHandlerFactory.d.ts +0 -5
  748. package/graphql/graphQLHandlerFactory.js +0 -22
  749. package/graphql/graphQLHandlerFactory.js.map +0 -1
  750. package/graphql/handleRequest.d.ts +0 -11
  751. package/graphql/handleRequest.js +0 -62
  752. package/graphql/handleRequest.js.map +0 -1
  753. package/graphql/index.d.ts +0 -4
  754. package/graphql/index.js +0 -11
  755. package/graphql/index.js.map +0 -1
  756. package/graphql/schema/cms/index.d.ts +0 -2
  757. package/graphql/schema/cms/index.js +0 -24
  758. package/graphql/schema/cms/index.js.map +0 -1
  759. package/index.js.map +0 -1
  760. package/parameters/context.d.ts +0 -2
  761. package/parameters/context.js +0 -7
  762. package/parameters/context.js.map +0 -1
  763. package/parameters/header.d.ts +0 -2
  764. package/parameters/header.js +0 -13
  765. package/parameters/header.js.map +0 -1
  766. package/parameters/index.d.ts +0 -3
  767. package/parameters/index.js +0 -3
  768. package/parameters/path.d.ts +0 -2
  769. package/parameters/path.js +0 -12
  770. package/parameters/path.js.map +0 -1
  771. package/plugins/CmsParametersPlugin.d.ts +0 -18
  772. package/plugins/CmsParametersPlugin.js +0 -16
  773. package/plugins/CmsParametersPlugin.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/schema/contentEntries.js","sources":["../../../src/graphql/schema/contentEntries.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { ErrorResponse, Response } from \"@webiny/handler-graphql\";\nimport type {\n CmsContext,\n CmsEntry,\n CmsEntryListWhere,\n CmsIdentity,\n CmsModel\n} from \"~/types/index.js\";\nimport { getEntryTitle } from \"~/utils/getEntryTitle.js\";\nimport type { ICmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport { createCmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport { getEntryDescription } from \"~/utils/getEntryDescription.js\";\nimport { getEntryImage } from \"~/utils/getEntryImage.js\";\nimport { entryFieldFromStorageTransform } from \"~/utils/entryStorage.js\";\nimport type { GraphQLFieldResolver } from \"@webiny/handler-graphql/types.js\";\nimport { ENTRY_META_FIELDS, isDateTimeEntryMetaField } from \"~/constants.js\";\nimport NotAuthorizedResponse from \"@webiny/api-core/graphql/security/NotAuthorizedResponse.js\";\nimport { ListLatestEntriesUseCase } from \"~/features/contentEntry/ListEntries/index.js\";\n\ninterface EntriesByModel {\n [key: string]: string[];\n}\n\ntype GetContentEntryType = \"latest\" | \"published\" | \"exact\";\n\nconst createDate = (date: string | null): Date | null => {\n if (!date) {\n return null;\n }\n\n try {\n return new Date(date);\n } catch {\n return new Date();\n }\n};\n\ninterface CmsEntryRecord {\n id: string;\n entryId: string;\n model: {\n modelId: string;\n name: string;\n };\n status: string;\n title: string;\n description?: string | null;\n image?: string | null;\n\n /**\n * Entry-level meta fields. 👇\n */\n createdOn: Date;\n modifiedOn: Date | null;\n savedOn: Date;\n createdBy: CmsIdentity;\n modifiedBy: CmsIdentity | null;\n savedBy: CmsIdentity;\n firstPublishedOn: Date | null;\n lastPublishedOn: Date | null;\n firstPublishedBy: CmsIdentity | null;\n lastPublishedBy: CmsIdentity | null;\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: Date;\n revisionModifiedOn: Date | null;\n revisionSavedOn: Date;\n revisionCreatedBy: CmsIdentity;\n revisionModifiedBy: CmsIdentity | null;\n revisionSavedBy: CmsIdentity;\n revisionFirstPublishedOn: Date | null;\n revisionLastPublishedOn: Date | null;\n revisionFirstPublishedBy: CmsIdentity | null;\n revisionLastPublishedBy: CmsIdentity | null;\n\n wbyAco_location?: {\n folderId?: string | null;\n };\n}\n\nconst createCmsEntryRecord = (model: CmsModel, entry: CmsEntry): CmsEntryRecord => {\n return {\n id: entry.id,\n entryId: entry.entryId,\n model: {\n modelId: model.modelId,\n name: model.name\n },\n status: entry.status,\n title: getEntryTitle(model, entry),\n description: getEntryDescription(model, entry),\n image: getEntryImage(model, entry),\n\n /**\n * Entry-level meta fields. 👇\n */\n createdOn: createDate(entry.createdOn)!,\n modifiedOn: createDate(entry.modifiedOn),\n savedOn: createDate(entry.savedOn)!,\n createdBy: entry.createdBy,\n savedBy: entry.savedBy,\n modifiedBy: entry.modifiedBy,\n firstPublishedOn: createDate(entry.firstPublishedOn),\n lastPublishedOn: createDate(entry.lastPublishedOn),\n firstPublishedBy: entry.firstPublishedBy,\n lastPublishedBy: entry.lastPublishedBy,\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: createDate(entry.revisionCreatedOn)!,\n revisionSavedOn: createDate(entry.revisionSavedOn)!,\n revisionModifiedOn: createDate(entry.revisionModifiedOn),\n revisionCreatedBy: entry.revisionCreatedBy,\n revisionModifiedBy: entry.revisionModifiedBy,\n revisionSavedBy: entry.revisionSavedBy,\n revisionFirstPublishedOn: createDate(entry.revisionFirstPublishedOn),\n revisionLastPublishedOn: createDate(entry.revisionLastPublishedOn),\n revisionFirstPublishedBy: entry.revisionFirstPublishedBy,\n revisionLastPublishedBy: entry.revisionLastPublishedBy,\n\n wbyAco_location: {\n folderId: entry.location?.folderId || null\n }\n };\n};\n\ninterface FetchMethod {\n (model: CmsModel, ids: string[]): Promise<CmsEntry[]>;\n}\n\nconst getFetchMethod = (type: GetContentEntryType, context: CmsContext): FetchMethod => {\n if (!getContentEntriesMethods[type]) {\n throw new WebinyError(\n `Unknown getContentEntries method \"${type}\". Could not fetch content entries.`,\n \"UNKNOWN_METHOD_ERROR\",\n {\n type\n }\n );\n }\n const methodName = getContentEntriesMethods[type] as GetContentEntryMethods;\n if (!context.cms[methodName]) {\n throw new WebinyError(\n `Unknown context.cms method \"${methodName}\". Could not fetch content entries.`,\n \"UNKNOWN_METHOD_ERROR\",\n {\n type,\n methodName\n }\n );\n }\n\n return context.cms[methodName];\n};\n\n/**\n * Function to get the list of content entries depending on latest, published or exact GraphQL queries.\n */\ninterface GetContentEntriesParams {\n args: {\n entries: Pick<CmsEntry, \"id\" | \"modelId\">[];\n };\n context: CmsContext;\n type: GetContentEntryType;\n}\n\nenum GetContentEntryMethods {\n getLatestEntriesByIds = \"getLatestEntriesByIds\",\n getPublishedEntriesByIds = \"getPublishedEntriesByIds\",\n getEntriesByIds = \"getEntriesByIds\"\n}\n\nconst getContentEntriesMethods = {\n latest: \"getLatestEntriesByIds\",\n published: \"getPublishedEntriesByIds\",\n exact: \"getEntriesByIds\"\n};\nconst getContentEntries = async (\n params: GetContentEntriesParams\n): Promise<Response | ErrorResponse> => {\n const { args, context, type } = params;\n\n const method = getFetchMethod(type, context);\n\n const models = await context.cms.listModels();\n\n const modelsMap = models.reduce(\n (collection, model) => {\n collection[model.modelId] = model;\n return collection;\n },\n {} as Record<string, CmsModel>\n );\n\n const argsEntries = args.entries as Pick<CmsEntry, \"id\" | \"modelId\">[];\n\n const entriesByModel = argsEntries.reduce((collection, ref) => {\n if (!collection[ref.modelId]) {\n collection[ref.modelId] = [];\n } else if (collection[ref.modelId].includes(ref.id)) {\n return collection;\n }\n collection[ref.modelId].push(ref.id);\n return collection;\n }, {} as EntriesByModel);\n\n const getters: Promise<CmsEntry[]>[] = Object.keys(entriesByModel).map(async modelId => {\n return method(modelsMap[modelId], entriesByModel[modelId]);\n });\n\n if (getters.length === 0) {\n return new Response([]);\n }\n\n try {\n const results = await Promise.all(getters);\n\n const entries = results\n .reduce<CmsEntryRecord[]>((collection, items) => {\n return collection.concat(\n items.map(item => {\n const model = modelsMap[item.modelId];\n\n return createCmsEntryRecord(model, item);\n })\n );\n }, [])\n .filter(Boolean);\n\n return new Response(entries);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n};\n\n/**\n * Function to fetch a single content entry depending on latest, published or exact GraphQL query.\n */\ninterface GetContentEntryParams {\n args: {\n entry: Pick<CmsEntry, \"id\" | \"modelId\">;\n };\n context: CmsContext;\n type: \"latest\" | \"published\" | \"exact\";\n}\n\nconst getContentEntry = async (\n params: GetContentEntryParams\n): Promise<Response<CmsEntryRecord | null> | NotAuthorizedResponse> => {\n const { args, context, type } = params;\n if (!getContentEntriesMethods[type]) {\n throw new WebinyError(\n `Unknown getContentEntry method \"${type}\". Could not fetch content entry.`,\n \"UNKNOWN_METHOD_ERROR\",\n {\n args,\n type\n }\n );\n }\n\n const method = getFetchMethod(type, context);\n\n const { modelId, id } = args.entry;\n const models = await context.cms.listModels();\n const model = models.find(m => m.modelId === modelId);\n\n if (!model) {\n return new NotAuthorizedResponse({\n data: {\n modelId\n }\n });\n }\n\n const result = await method(model, [id]);\n\n const entry = result.shift();\n if (!entry) {\n return new Response(null);\n }\n\n return new Response(createCmsEntryRecord(model, entry));\n};\n/**\n * As we support description field, we need to transform the value from storage.\n */\nconst createResolveDescription = (): GraphQLFieldResolver<any, any, CmsContext> => {\n return async (parent, _, context) => {\n const models = await context.cms.listModels();\n const model = models.find(({ modelId }) => {\n return parent.model.modelId === modelId;\n });\n if (!model) {\n return null;\n }\n const field = model.fields.find(f => f.fieldId === model.descriptionFieldId);\n if (!field) {\n return null;\n }\n const value = parent.description || parent[field.fieldId];\n if (!value) {\n return null;\n }\n return entryFieldFromStorageTransform({\n context,\n model,\n field,\n value\n });\n };\n};\n\ninterface Params {\n context: CmsContext;\n}\n\nexport const createContentEntriesSchema = ({\n context\n}: Params): ICmsGraphQLSchemaPlugin<CmsContext> => {\n if (!context.cms.MANAGE) {\n const plugin = createCmsGraphQLSchemaPlugin({\n typeDefs: \"\",\n resolvers: {}\n });\n plugin.name = `headless-cms.graphql.schema.${context.cms.type}.empty`;\n return plugin;\n }\n\n const onByMetaFields = ENTRY_META_FIELDS.map(field => {\n const fieldType = isDateTimeEntryMetaField(field) ? \"DateTime\" : \"CmsIdentity\";\n\n return `${field}: ${fieldType}`;\n }).join(\"\\n\");\n\n const plugin = createCmsGraphQLSchemaPlugin({\n // Had to remove /* GraphQL */ because it causes issues with oxfmt formatting.\n typeDefs: `\n type CmsModelMeta {\n modelId: String!\n name: String!\n }\n\n type CmsPublishedContentEntry {\n id: ID!\n entryId: String!\n title: String\n description: String\n image: String\n }\n\n type CmsContentEntry {\n id: ID!\n entryId: String!\n model: CmsModelMeta!\n status: String!\n published: CmsPublishedContentEntry\n title: String!\n description: String\n image: String\n \n ${onByMetaFields}\n \n wbyAco_location: WbyAcoLocation\n }\n\n type CmsContentEntriesResponse {\n data: [CmsContentEntry!]\n error: CmsError\n }\n\n type CmsContentEntryResponse {\n data: CmsContentEntry\n error: CmsError\n }\n\n input CmsModelEntryInput {\n modelId: ID!\n id: ID!\n }\n\n extend type Query {\n # Search content entries for given content models using the query string.\n searchContentEntries(\n modelIds: [ID!]!\n query: String\n fields: [String!]\n limit: Int\n ): CmsContentEntriesResponse!\n\n # Get content entry meta data\n getContentEntry(entry: CmsModelEntryInput!): CmsContentEntryResponse!\n\n getLatestContentEntry(entry: CmsModelEntryInput!): CmsContentEntryResponse!\n getPublishedContentEntry(entry: CmsModelEntryInput!): CmsContentEntryResponse!\n\n # Get content entries meta data\n getContentEntries(entries: [CmsModelEntryInput!]!): CmsContentEntriesResponse!\n getLatestContentEntries(entries: [CmsModelEntryInput!]!): CmsContentEntriesResponse!\n getPublishedContentEntries(\n entries: [CmsModelEntryInput!]!\n ): CmsContentEntriesResponse!\n }\n `,\n resolvers: {\n CmsContentEntry: {\n published: async (parent, _, context) => {\n try {\n const models = await context.cms.listModels();\n const model = models.find(({ modelId }) => {\n return parent.model.modelId === modelId;\n });\n if (!model) {\n return null;\n }\n const [entry] = await context.cms.getPublishedEntriesByIds(model, [\n parent.id\n ]);\n if (!entry) {\n return null;\n }\n return createCmsEntryRecord(model, entry);\n } catch {\n return null;\n }\n },\n description: createResolveDescription()\n },\n CmsPublishedContentEntry: {\n description: createResolveDescription()\n },\n Query: {\n async searchContentEntries(_, args: any, context) {\n const { modelIds, fields, query, limit = 10 } = args;\n const models = await context.cms.listModels();\n\n const getters = models\n .filter(model => modelIds.includes(model.modelId))\n .map(async model => {\n const listLatest =\n await context.container.resolve(ListLatestEntriesUseCase);\n const where: CmsEntryListWhere = {};\n\n const result = await listLatest.execute(model, {\n limit,\n where,\n search: !!query ? query : undefined,\n fields: fields || []\n });\n // TODO figure a better way to handle errors in parallel execution\n if (result.isFail()) {\n throw result.error;\n }\n const { entries } = result.value;\n return entries.map((entry: CmsEntry) => {\n return createCmsEntryRecord(model, entry);\n });\n });\n\n try {\n const entries = await Promise.all(getters).then(results =>\n results.reduce((result, item) => result.concat(item), [])\n );\n\n return new Response(\n entries\n .sort((a, b) => b.savedOn.getTime() - a.savedOn.getTime())\n .slice(0, limit)\n );\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n },\n async getContentEntry(_, args: any, context) {\n return getContentEntry({\n args,\n context,\n type: \"exact\"\n });\n },\n async getLatestContentEntry(_, args: any, context) {\n return getContentEntry({\n args,\n context,\n type: \"latest\"\n });\n },\n async getPublishedContentEntry(_, args: any, context) {\n return getContentEntry({\n args,\n context,\n type: \"published\"\n });\n },\n async getContentEntries(_, args: any, context) {\n return getContentEntries({\n args,\n context,\n type: \"exact\"\n });\n },\n async getLatestContentEntries(_, args: any, context) {\n return getContentEntries({\n args,\n context,\n type: \"latest\"\n });\n },\n async getPublishedContentEntries(_, args: any, context) {\n return getContentEntries({\n args,\n context,\n type: \"published\"\n });\n }\n }\n }\n });\n\n plugin.name = `headless-cms.graphql.schema.${context.cms.type}.content-entries`;\n\n return plugin;\n};\n"],"names":["createDate","date","Date","createCmsEntryRecord","model","entry","getEntryTitle","getEntryDescription","getEntryImage","getFetchMethod","type","context","getContentEntriesMethods","WebinyError","methodName","getContentEntries","params","args","method","models","modelsMap","collection","argsEntries","entriesByModel","ref","getters","Object","modelId","Response","results","Promise","entries","items","item","Boolean","ex","ErrorResponse","getContentEntry","id","m","NotAuthorizedResponse","result","createResolveDescription","parent","_","field","f","value","entryFieldFromStorageTransform","createContentEntriesSchema","plugin","createCmsGraphQLSchemaPlugin","onByMetaFields","ENTRY_META_FIELDS","fieldType","isDateTimeEntryMetaField","modelIds","fields","query","limit","listLatest","ListLatestEntriesUseCase","where","undefined","a","b"],"mappings":"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"}
1
+ {"version":3,"file":"graphql/schema/contentEntries.js","sources":["../../../src/graphql/schema/contentEntries.ts"],"sourcesContent":["import { ErrorResponse, Response } from \"@webiny/api-graphql\";\nimport type {\n CmsContext,\n CmsEntry,\n CmsEntryListWhere,\n CmsIdentity,\n CmsModel\n} from \"~/types/index.js\";\nimport { getEntryTitle } from \"~/utils/getEntryTitle.js\";\nimport type { ICmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport { createCmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport { getEntryDescription } from \"~/utils/getEntryDescription.js\";\nimport { getEntryImage } from \"~/utils/getEntryImage.js\";\nimport { entryFieldFromStorageTransform } from \"~/utils/entryStorage.js\";\nimport type { GraphQLFieldResolver } from \"@webiny/api-graphql/types.js\";\nimport { ENTRY_META_FIELDS, isDateTimeEntryMetaField } from \"~/constants.js\";\nimport NotAuthorizedResponse from \"@webiny/api-core/graphql/security/NotAuthorizedResponse.js\";\nimport { ListLatestEntriesUseCase } from \"~/features/contentEntry/ListEntries/index.js\";\nimport { ListModelsUseCase } from \"~/features/contentModel/ListModels/index.js\";\nimport { GetLatestEntriesByIdsUseCase } from \"~/features/contentEntry/GetLatestEntriesByIds/index.js\";\nimport { GetPublishedEntriesByIdsUseCase } from \"~/features/contentEntry/GetPublishedEntriesByIds/index.js\";\nimport { GetEntriesByIdsUseCase } from \"~/features/contentEntry/GetEntriesByIds/index.js\";\nimport { HeadlessCmsEndpointConfig } from \"~/HeadlessCmsEndpointConfig.js\";\n\ninterface EntriesByModel {\n [key: string]: string[];\n}\n\ntype GetContentEntryType = \"latest\" | \"published\" | \"exact\";\n\nconst createDate = (date: string | null): Date | null => {\n if (!date) {\n return null;\n }\n\n try {\n return new Date(date);\n } catch {\n return new Date();\n }\n};\n\ninterface CmsEntryRecord {\n id: string;\n entryId: string;\n model: {\n modelId: string;\n name: string;\n };\n status: string;\n title: string;\n description?: string | null;\n image?: string | null;\n\n /**\n * Entry-level meta fields. 👇\n */\n createdOn: Date;\n modifiedOn: Date | null;\n savedOn: Date;\n createdBy: CmsIdentity;\n modifiedBy: CmsIdentity | null;\n savedBy: CmsIdentity;\n firstPublishedOn: Date | null;\n lastPublishedOn: Date | null;\n firstPublishedBy: CmsIdentity | null;\n lastPublishedBy: CmsIdentity | null;\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: Date;\n revisionModifiedOn: Date | null;\n revisionSavedOn: Date;\n revisionCreatedBy: CmsIdentity;\n revisionModifiedBy: CmsIdentity | null;\n revisionSavedBy: CmsIdentity;\n revisionFirstPublishedOn: Date | null;\n revisionLastPublishedOn: Date | null;\n revisionFirstPublishedBy: CmsIdentity | null;\n revisionLastPublishedBy: CmsIdentity | null;\n\n wbyAco_location?: {\n folderId?: string | null;\n };\n}\n\nconst createCmsEntryRecord = (model: CmsModel, entry: CmsEntry): CmsEntryRecord => {\n return {\n id: entry.id,\n entryId: entry.entryId,\n model: {\n modelId: model.modelId,\n name: model.name\n },\n status: entry.status,\n title: getEntryTitle(model, entry),\n description: getEntryDescription(model, entry),\n image: getEntryImage(model, entry),\n\n /**\n * Entry-level meta fields. 👇\n */\n createdOn: createDate(entry.createdOn)!,\n modifiedOn: createDate(entry.modifiedOn),\n savedOn: createDate(entry.savedOn)!,\n createdBy: entry.createdBy,\n savedBy: entry.savedBy,\n modifiedBy: entry.modifiedBy,\n firstPublishedOn: createDate(entry.firstPublishedOn),\n lastPublishedOn: createDate(entry.lastPublishedOn),\n firstPublishedBy: entry.firstPublishedBy,\n lastPublishedBy: entry.lastPublishedBy,\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: createDate(entry.revisionCreatedOn)!,\n revisionSavedOn: createDate(entry.revisionSavedOn)!,\n revisionModifiedOn: createDate(entry.revisionModifiedOn),\n revisionCreatedBy: entry.revisionCreatedBy,\n revisionModifiedBy: entry.revisionModifiedBy,\n revisionSavedBy: entry.revisionSavedBy,\n revisionFirstPublishedOn: createDate(entry.revisionFirstPublishedOn),\n revisionLastPublishedOn: createDate(entry.revisionLastPublishedOn),\n revisionFirstPublishedBy: entry.revisionFirstPublishedBy,\n revisionLastPublishedBy: entry.revisionLastPublishedBy,\n\n wbyAco_location: {\n folderId: entry.location?.folderId || null\n }\n };\n};\n\ninterface FetchMethod {\n (model: CmsModel, ids: string[]): Promise<CmsEntry[]>;\n}\n\nconst getFetchMethod = (type: GetContentEntryType, context: CmsContext): FetchMethod => {\n if (type === \"latest\") {\n return async (model, ids) => {\n const result = await context.container\n .resolve(GetLatestEntriesByIdsUseCase)\n .execute(model, ids);\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n };\n } else if (type === \"published\") {\n return async (model, ids) => {\n const result = await context.container\n .resolve(GetPublishedEntriesByIdsUseCase)\n .execute(model, ids);\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n };\n } else {\n return async (model, ids) => {\n const result = await context.container\n .resolve(GetEntriesByIdsUseCase)\n .execute(model, ids);\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n };\n }\n};\n\n/**\n * Function to get the list of content entries depending on latest, published or exact GraphQL queries.\n */\ninterface GetContentEntriesParams {\n args: {\n entries: Pick<CmsEntry, \"id\" | \"modelId\">[];\n };\n context: CmsContext;\n type: GetContentEntryType;\n}\n\nconst getContentEntries = async (\n params: GetContentEntriesParams\n): Promise<Response | ErrorResponse> => {\n const { args, context, type } = params;\n\n const method = getFetchMethod(type, context);\n\n const modelsResult = await context.container.resolve(ListModelsUseCase).execute();\n if (modelsResult.isFail()) {\n throw modelsResult.error;\n }\n const models = modelsResult.value;\n\n const modelsMap = models.reduce(\n (collection, model) => {\n collection[model.modelId] = model;\n return collection;\n },\n {} as Record<string, CmsModel>\n );\n\n const argsEntries = args.entries as Pick<CmsEntry, \"id\" | \"modelId\">[];\n\n const entriesByModel = argsEntries.reduce((collection, ref) => {\n if (!collection[ref.modelId]) {\n collection[ref.modelId] = [];\n } else if (collection[ref.modelId].includes(ref.id)) {\n return collection;\n }\n collection[ref.modelId].push(ref.id);\n return collection;\n }, {} as EntriesByModel);\n\n const getters: Promise<CmsEntry[]>[] = Object.keys(entriesByModel).map(async modelId => {\n return method(modelsMap[modelId], entriesByModel[modelId]);\n });\n\n if (getters.length === 0) {\n return new Response([]);\n }\n\n try {\n const results = await Promise.all(getters);\n\n const entries = results\n .reduce<CmsEntryRecord[]>((collection, items) => {\n return collection.concat(\n items.map(item => {\n const model = modelsMap[item.modelId];\n\n return createCmsEntryRecord(model, item);\n })\n );\n }, [])\n .filter(Boolean);\n\n return new Response(entries);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n};\n\n/**\n * Function to fetch a single content entry depending on latest, published or exact GraphQL query.\n */\ninterface GetContentEntryParams {\n args: {\n entry: Pick<CmsEntry, \"id\" | \"modelId\">;\n };\n context: CmsContext;\n type: \"latest\" | \"published\" | \"exact\";\n}\n\nconst getContentEntry = async (\n params: GetContentEntryParams\n): Promise<Response<CmsEntryRecord | null> | NotAuthorizedResponse> => {\n const { args, context, type } = params;\n\n const method = getFetchMethod(type, context);\n\n const { modelId, id } = args.entry;\n const modelsResult = await context.container.resolve(ListModelsUseCase).execute();\n if (modelsResult.isFail()) {\n throw modelsResult.error;\n }\n const model = modelsResult.value.find(m => m.modelId === modelId);\n\n if (!model) {\n return new NotAuthorizedResponse({\n data: {\n modelId\n }\n });\n }\n\n const result = await method(model, [id]);\n\n const entry = result.shift();\n if (!entry) {\n return new Response(null);\n }\n\n return new Response(createCmsEntryRecord(model, entry));\n};\n/**\n * As we support description field, we need to transform the value from storage.\n */\nconst createResolveDescription = (): GraphQLFieldResolver<any, any, CmsContext> => {\n return async (parent, _, context) => {\n const modelsResult = await context.container.resolve(ListModelsUseCase).execute();\n if (modelsResult.isFail()) {\n return null;\n }\n const model = modelsResult.value.find(({ modelId }) => {\n return parent.model.modelId === modelId;\n });\n if (!model) {\n return null;\n }\n const field = model.fields.find(f => f.fieldId === model.descriptionFieldId);\n if (!field) {\n return null;\n }\n const value = parent.description || parent[field.fieldId];\n if (!value) {\n return null;\n }\n return entryFieldFromStorageTransform({\n context,\n model,\n field,\n value\n });\n };\n};\n\ninterface Params {\n context: CmsContext;\n}\n\nexport const createContentEntriesSchema = ({\n context\n}: Params): ICmsGraphQLSchemaPlugin<CmsContext> => {\n const enhancerConfig = context.container.resolve(HeadlessCmsEndpointConfig);\n if (enhancerConfig.type !== \"manage\") {\n const plugin = createCmsGraphQLSchemaPlugin({\n typeDefs: \"\",\n resolvers: {}\n });\n plugin.name = `headless-cms.graphql.schema.${enhancerConfig.type}.empty`;\n return plugin;\n }\n\n const onByMetaFields = ENTRY_META_FIELDS.map(field => {\n const fieldType = isDateTimeEntryMetaField(field) ? \"DateTime\" : \"CmsIdentity\";\n\n return `${field}: ${fieldType}`;\n }).join(\"\\n\");\n\n const plugin = createCmsGraphQLSchemaPlugin({\n // Had to remove /* GraphQL */ because it causes issues with oxfmt formatting.\n typeDefs: `\n type CmsModelMeta {\n modelId: String!\n name: String!\n }\n\n type CmsPublishedContentEntry {\n id: ID!\n entryId: String!\n title: String\n description: String\n image: String\n }\n\n type CmsContentEntry {\n id: ID!\n entryId: String!\n model: CmsModelMeta!\n status: String!\n published: CmsPublishedContentEntry\n title: String!\n description: String\n image: String\n \n ${onByMetaFields}\n \n wbyAco_location: WbyAcoLocation\n }\n\n type CmsContentEntriesResponse {\n data: [CmsContentEntry!]\n error: CmsError\n }\n\n type CmsContentEntryResponse {\n data: CmsContentEntry\n error: CmsError\n }\n\n input CmsModelEntryInput {\n modelId: ID!\n id: ID!\n }\n\n extend type Query {\n # Search content entries for given content models using the query string.\n searchContentEntries(\n modelIds: [ID!]!\n query: String\n fields: [String!]\n limit: Int\n ): CmsContentEntriesResponse!\n\n # Get content entry meta data\n getContentEntry(entry: CmsModelEntryInput!): CmsContentEntryResponse!\n\n getLatestContentEntry(entry: CmsModelEntryInput!): CmsContentEntryResponse!\n getPublishedContentEntry(entry: CmsModelEntryInput!): CmsContentEntryResponse!\n\n # Get content entries meta data\n getContentEntries(entries: [CmsModelEntryInput!]!): CmsContentEntriesResponse!\n getLatestContentEntries(entries: [CmsModelEntryInput!]!): CmsContentEntriesResponse!\n getPublishedContentEntries(\n entries: [CmsModelEntryInput!]!\n ): CmsContentEntriesResponse!\n }\n `,\n resolvers: {\n CmsContentEntry: {\n published: async (parent, _, context) => {\n try {\n const modelsResult = await context.container\n .resolve(ListModelsUseCase)\n .execute();\n if (modelsResult.isFail()) {\n return null;\n }\n const model = modelsResult.value.find(({ modelId }) => {\n return parent.model.modelId === modelId;\n });\n if (!model) {\n return null;\n }\n const result = await context.container\n .resolve(GetPublishedEntriesByIdsUseCase)\n .execute(model, [parent.id]);\n if (result.isFail()) {\n return null;\n }\n const entry = result.value[0];\n if (!entry) {\n return null;\n }\n return createCmsEntryRecord(model, entry);\n } catch {\n return null;\n }\n },\n description: createResolveDescription()\n },\n CmsPublishedContentEntry: {\n description: createResolveDescription()\n },\n Query: {\n async searchContentEntries(_, args: any, context) {\n const { modelIds, fields, query, limit = 10 } = args;\n const modelsResult = await context.container\n .resolve(ListModelsUseCase)\n .execute();\n if (modelsResult.isFail()) {\n return new ErrorResponse(modelsResult.error);\n }\n const models = modelsResult.value;\n\n const getters = models\n .filter(model => modelIds.includes(model.modelId))\n .map(async model => {\n const listLatest =\n await context.container.resolve(ListLatestEntriesUseCase);\n const where: CmsEntryListWhere = {};\n\n const result = await listLatest.execute(model, {\n limit,\n where,\n search: !!query ? query : undefined,\n fields: fields || []\n });\n // TODO figure a better way to handle errors in parallel execution\n if (result.isFail()) {\n throw result.error;\n }\n const { entries } = result.value;\n return entries.map((entry: CmsEntry) => {\n return createCmsEntryRecord(model, entry);\n });\n });\n\n try {\n const entries = await Promise.all(getters).then(results =>\n results.reduce((result, item) => result.concat(item), [])\n );\n\n return new Response(\n entries\n .sort((a, b) => b.savedOn.getTime() - a.savedOn.getTime())\n .slice(0, limit)\n );\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n },\n async getContentEntry(_, args: any, context) {\n return getContentEntry({\n args,\n context,\n type: \"exact\"\n });\n },\n async getLatestContentEntry(_, args: any, context) {\n return getContentEntry({\n args,\n context,\n type: \"latest\"\n });\n },\n async getPublishedContentEntry(_, args: any, context) {\n return getContentEntry({\n args,\n context,\n type: \"published\"\n });\n },\n async getContentEntries(_, args: any, context) {\n return getContentEntries({\n args,\n context,\n type: \"exact\"\n });\n },\n async getLatestContentEntries(_, args: any, context) {\n return getContentEntries({\n args,\n context,\n type: \"latest\"\n });\n },\n async getPublishedContentEntries(_, args: any, context) {\n return getContentEntries({\n args,\n context,\n type: \"published\"\n });\n }\n }\n }\n });\n\n plugin.name = `headless-cms.graphql.schema.${context.container.resolve(HeadlessCmsEndpointConfig).type}.content-entries`;\n\n return plugin;\n};\n"],"names":["createDate","date","Date","createCmsEntryRecord","model","entry","getEntryTitle","getEntryDescription","getEntryImage","getFetchMethod","type","context","ids","result","GetLatestEntriesByIdsUseCase","GetPublishedEntriesByIdsUseCase","GetEntriesByIdsUseCase","getContentEntries","params","args","method","modelsResult","ListModelsUseCase","models","modelsMap","collection","argsEntries","entriesByModel","ref","getters","Object","modelId","Response","results","Promise","entries","items","item","Boolean","ex","ErrorResponse","getContentEntry","id","m","NotAuthorizedResponse","createResolveDescription","parent","_","field","f","value","entryFieldFromStorageTransform","createContentEntriesSchema","enhancerConfig","HeadlessCmsEndpointConfig","plugin","createCmsGraphQLSchemaPlugin","onByMetaFields","ENTRY_META_FIELDS","fieldType","isDateTimeEntryMetaField","modelIds","fields","query","limit","listLatest","ListLatestEntriesUseCase","where","undefined","a","b"],"mappings":"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"}
@@ -1,9 +1,18 @@
1
- import { ErrorResponse, NotFoundError, Response } from "@webiny/handler-graphql";
2
- import { CmsGroupPlugin } from "../../plugins/CmsGroupPlugin.js";
1
+ import { ErrorResponse, NotFoundError, Response } from "@webiny/api-graphql";
2
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
3
3
  import { createCmsGraphQLSchemaPlugin } from "../../plugins/index.js";
4
+ import { GetGroupUseCase } from "../../features/contentModelGroup/GetGroup/index.js";
5
+ import { ListGroupsUseCase } from "../../features/contentModelGroup/ListGroups/index.js";
6
+ import { CreateGroupUseCase } from "../../features/contentModelGroup/CreateGroup/index.js";
7
+ import { UpdateGroupUseCase } from "../../features/contentModelGroup/UpdateGroup/index.js";
8
+ import { DeleteGroupUseCase } from "../../features/contentModelGroup/DeleteGroup/index.js";
9
+ import { PluginGroupsProvider } from "../../features/contentModelGroup/shared/index.js";
10
+ import { ListModelsUseCase } from "../../features/contentModel/ListModels/index.js";
11
+ import { HeadlessCmsEndpointConfig } from "../../HeadlessCmsEndpointConfig.js";
4
12
  const createGroupsSchema = ({ context })=>{
13
+ const isManage = "manage" === context.container.resolve(HeadlessCmsEndpointConfig).type;
5
14
  let manageSchema = "";
6
- if (context.cms.MANAGE) manageSchema = `
15
+ if (isManage) manageSchema = `
7
16
  input CmsContentModelGroupInput {
8
17
  id: ID
9
18
  name: String!
@@ -42,29 +51,36 @@ const createGroupsSchema = ({ context })=>{
42
51
  }
43
52
  `;
44
53
  let resolvers = {};
45
- if (context.cms.MANAGE) resolvers = {
54
+ if (isManage) resolvers = {
46
55
  CmsContentModelGroup: {
47
56
  contentModels: async (group, _, context)=>{
48
- const models = await context.security.withoutAuthorization(async ()=>context.cms.listModels());
49
- return models.filter((model)=>{
57
+ const result = await context.container.resolve(IdentityContext).withoutAuthorization(async ()=>context.container.resolve(ListModelsUseCase).execute());
58
+ if (result.isFail()) return [];
59
+ return result.value.filter((model)=>{
50
60
  if (true === model.isPrivate) return false;
51
61
  return model.group === group.slug;
52
62
  });
53
63
  },
54
64
  totalContentModels: async (group, _, context)=>{
55
- const models = await context.security.withoutAuthorization(async ()=>context.cms.listModels());
56
- return models.filter((model)=>{
65
+ const result = await context.container.resolve(IdentityContext).withoutAuthorization(async ()=>context.container.resolve(ListModelsUseCase).execute());
66
+ if (result.isFail()) return 0;
67
+ return result.value.filter((model)=>{
57
68
  if (true === model.isPrivate) return false;
58
69
  return model.group === group.slug;
59
70
  }).length;
60
71
  },
61
- plugin: async (group, _, context)=>context.plugins.byType(CmsGroupPlugin.type).some((item)=>item.contentModelGroup.id === group.id)
72
+ plugin: async (group, _, context)=>{
73
+ const pluginGroups = await context.container.resolve(PluginGroupsProvider).getGroups();
74
+ return pluginGroups.some((pg)=>pg.id === group.id);
75
+ }
62
76
  },
63
77
  Query: {
64
78
  getContentModelGroup: async (_, args, context)=>{
65
79
  try {
66
80
  const { id } = args;
67
- const group = await context.cms.getGroup(id);
81
+ const result = await context.container.resolve(GetGroupUseCase).execute(id);
82
+ if (result.isFail()) throw result.error;
83
+ const group = result.value;
68
84
  if (group?.isPrivate) throw new NotFoundError(`Cms Group "${id}" was not found!`);
69
85
  return new Response(group);
70
86
  } catch (e) {
@@ -73,8 +89,9 @@ const createGroupsSchema = ({ context })=>{
73
89
  },
74
90
  listContentModelGroups: async (_, __, context)=>{
75
91
  try {
76
- const groups = await context.cms.listGroups();
77
- return new Response(groups.filter((group)=>true !== group.isPrivate));
92
+ const result = await context.container.resolve(ListGroupsUseCase).execute();
93
+ if (result.isFail()) throw result.error;
94
+ return new Response(result.value.filter((group)=>true !== group.isPrivate));
78
95
  } catch (e) {
79
96
  return new ErrorResponse(e);
80
97
  }
@@ -83,23 +100,26 @@ const createGroupsSchema = ({ context })=>{
83
100
  Mutation: {
84
101
  createContentModelGroup: async (_, args, context)=>{
85
102
  try {
86
- const model = await context.cms.createGroup(args.data);
87
- return new Response(model);
103
+ const result = await context.container.resolve(CreateGroupUseCase).execute(args.data);
104
+ if (result.isFail()) throw result.error;
105
+ return new Response(result.value);
88
106
  } catch (e) {
89
107
  return new ErrorResponse(e);
90
108
  }
91
109
  },
92
110
  updateContentModelGroup: async (_, args, context)=>{
93
111
  try {
94
- const group = await context.cms.updateGroup(args.id, args.data);
95
- return new Response(group);
112
+ const result = await context.container.resolve(UpdateGroupUseCase).execute(args.id, args.data);
113
+ if (result.isFail()) throw result.error;
114
+ return new Response(result.value);
96
115
  } catch (e) {
97
116
  return new ErrorResponse(e);
98
117
  }
99
118
  },
100
119
  deleteContentModelGroup: async (_, args, context)=>{
101
120
  try {
102
- await context.cms.deleteGroup(args.id);
121
+ const result = await context.container.resolve(DeleteGroupUseCase).execute(args.id);
122
+ if (result.isFail()) throw result.error;
103
123
  return new Response(true);
104
124
  } catch (e) {
105
125
  return new ErrorResponse(e);
@@ -128,7 +148,8 @@ const createGroupsSchema = ({ context })=>{
128
148
  `,
129
149
  resolvers
130
150
  });
131
- plugin.name = `headless-cms.graphql.schema.${context.cms.type}.content-model-groups`;
151
+ const endpointType = context.container.resolve(HeadlessCmsEndpointConfig).type;
152
+ plugin.name = `headless-cms.graphql.schema.${endpointType}.content-model-groups`;
132
153
  return plugin;
133
154
  };
134
155
  export { createGroupsSchema };
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/schema/contentModelGroups.js","sources":["../../../src/graphql/schema/contentModelGroups.ts"],"sourcesContent":["import { ErrorResponse, NotFoundError, Response } from \"@webiny/handler-graphql\";\nimport type { CmsContext } from \"~/types/index.js\";\nimport type { Resolvers } from \"@webiny/handler-graphql/types.js\";\nimport { CmsGroupPlugin } from \"~/plugins/CmsGroupPlugin.js\";\nimport type { ICmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport { createCmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\n\ninterface Params {\n context: CmsContext;\n}\nexport const createGroupsSchema = ({ context }: Params): ICmsGraphQLSchemaPlugin => {\n let manageSchema = \"\";\n if (context.cms.MANAGE) {\n manageSchema = /* GraphQL */ `\n input CmsContentModelGroupInput {\n id: ID\n name: String!\n slug: String\n description: String\n icon: Icon!\n }\n\n type CmsContentModelGroupResponse {\n data: CmsContentModelGroup\n error: CmsError\n }\n\n type CmsContentModelGroupListResponse {\n data: [CmsContentModelGroup]\n meta: CmsListMeta\n error: CmsError\n }\n\n extend type Query {\n getContentModelGroup(id: ID): CmsContentModelGroupResponse\n listContentModelGroups: CmsContentModelGroupListResponse\n }\n\n extend type Mutation {\n createContentModelGroup(\n data: CmsContentModelGroupInput!\n ): CmsContentModelGroupResponse\n\n updateContentModelGroup(\n id: ID!\n data: CmsContentModelGroupInput!\n ): CmsContentModelGroupResponse\n\n deleteContentModelGroup(id: ID!): CmsDeleteResponse\n }\n `;\n }\n\n let resolvers: Resolvers<CmsContext> = {};\n\n if (context.cms.MANAGE) {\n resolvers = {\n CmsContentModelGroup: {\n contentModels: async (group, _, context) => {\n const models = await context.security.withoutAuthorization(async () => {\n return context.cms.listModels();\n });\n return models.filter(model => {\n if (model.isPrivate === true) {\n return false;\n }\n return model.group === group.slug;\n });\n },\n totalContentModels: async (group, _, context) => {\n const models = await context.security.withoutAuthorization(async () => {\n return context.cms.listModels();\n });\n return models.filter(model => {\n if (model.isPrivate === true) {\n return false;\n }\n return model.group === group.slug;\n }).length;\n },\n plugin: async (group, _, context: CmsContext): Promise<boolean> => {\n return context.plugins\n .byType<CmsGroupPlugin>(CmsGroupPlugin.type)\n .some(item => item.contentModelGroup.id === group.id);\n }\n },\n Query: {\n getContentModelGroup: async (_, args: any, context) => {\n try {\n const { id } = args;\n const group = await context.cms.getGroup(id);\n if (group?.isPrivate) {\n throw new NotFoundError(`Cms Group \"${id}\" was not found!`);\n }\n return new Response(group);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n listContentModelGroups: async (_, __, context) => {\n try {\n const groups = await context.cms.listGroups();\n return new Response(groups.filter(group => group.isPrivate !== true));\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n },\n Mutation: {\n createContentModelGroup: async (_, args: any, context) => {\n try {\n const model = await context.cms.createGroup(args.data);\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n updateContentModelGroup: async (_, args: any, context) => {\n try {\n const group = await context.cms.updateGroup(args.id, args.data);\n return new Response(group);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n deleteContentModelGroup: async (_, args: any, context) => {\n try {\n await context.cms.deleteGroup(args.id);\n return new Response(true);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n }\n };\n }\n\n const plugin = createCmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type CmsContentModelGroup {\n id: ID!\n createdOn: DateTime\n savedOn: DateTime\n name: String!\n contentModels: [CmsContentModel!]\n totalContentModels: Int!\n slug: String!\n description: String\n icon: Icon\n createdBy: CmsIdentity\n\n # Returns true if the content model group is registered via a plugin.\n plugin: Boolean!\n }\n ${manageSchema}\n `,\n resolvers\n });\n\n plugin.name = `headless-cms.graphql.schema.${context.cms.type}.content-model-groups`;\n\n return plugin;\n};\n"],"names":["createGroupsSchema","context","manageSchema","resolvers","group","_","models","model","CmsGroupPlugin","item","args","id","NotFoundError","Response","e","ErrorResponse","__","groups","plugin","createCmsGraphQLSchemaPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"graphql/schema/contentModelGroups.js","sources":["../../../src/graphql/schema/contentModelGroups.ts"],"sourcesContent":["import { ErrorResponse, NotFoundError, Response } from \"@webiny/api-graphql\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/abstractions.js\";\nimport type { CmsContext } from \"~/types/index.js\";\nimport type { Resolvers } from \"@webiny/api-graphql/types.js\";\nimport type { ICmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport { createCmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport { GetGroupUseCase } from \"~/features/contentModelGroup/GetGroup/index.js\";\nimport { ListGroupsUseCase } from \"~/features/contentModelGroup/ListGroups/index.js\";\nimport { CreateGroupUseCase } from \"~/features/contentModelGroup/CreateGroup/index.js\";\nimport { UpdateGroupUseCase } from \"~/features/contentModelGroup/UpdateGroup/index.js\";\nimport { DeleteGroupUseCase } from \"~/features/contentModelGroup/DeleteGroup/index.js\";\nimport { PluginGroupsProvider } from \"~/features/contentModelGroup/shared/index.js\";\nimport { ListModelsUseCase } from \"~/features/contentModel/ListModels/index.js\";\nimport { HeadlessCmsEndpointConfig } from \"~/HeadlessCmsEndpointConfig.js\";\n\ninterface Params {\n context: CmsContext;\n}\nexport const createGroupsSchema = ({ context }: Params): ICmsGraphQLSchemaPlugin => {\n const isManage = context.container.resolve(HeadlessCmsEndpointConfig).type === \"manage\";\n\n let manageSchema = \"\";\n if (isManage) {\n manageSchema = /* GraphQL */ `\n input CmsContentModelGroupInput {\n id: ID\n name: String!\n slug: String\n description: String\n icon: Icon!\n }\n\n type CmsContentModelGroupResponse {\n data: CmsContentModelGroup\n error: CmsError\n }\n\n type CmsContentModelGroupListResponse {\n data: [CmsContentModelGroup]\n meta: CmsListMeta\n error: CmsError\n }\n\n extend type Query {\n getContentModelGroup(id: ID): CmsContentModelGroupResponse\n listContentModelGroups: CmsContentModelGroupListResponse\n }\n\n extend type Mutation {\n createContentModelGroup(\n data: CmsContentModelGroupInput!\n ): CmsContentModelGroupResponse\n\n updateContentModelGroup(\n id: ID!\n data: CmsContentModelGroupInput!\n ): CmsContentModelGroupResponse\n\n deleteContentModelGroup(id: ID!): CmsDeleteResponse\n }\n `;\n }\n\n let resolvers: Resolvers<CmsContext> = {};\n\n if (isManage) {\n resolvers = {\n CmsContentModelGroup: {\n contentModels: async (group, _, context) => {\n const result = await context.container\n .resolve(IdentityContext)\n .withoutAuthorization(async () => {\n return context.container.resolve(ListModelsUseCase).execute();\n });\n if (result.isFail()) {\n return [];\n }\n return result.value.filter(model => {\n if (model.isPrivate === true) {\n return false;\n }\n return model.group === group.slug;\n });\n },\n totalContentModels: async (group, _, context) => {\n const result = await context.container\n .resolve(IdentityContext)\n .withoutAuthorization(async () => {\n return context.container.resolve(ListModelsUseCase).execute();\n });\n if (result.isFail()) {\n return 0;\n }\n return result.value.filter(model => {\n if (model.isPrivate === true) {\n return false;\n }\n return model.group === group.slug;\n }).length;\n },\n plugin: async (group, _, context) => {\n const pluginGroups = await context.container\n .resolve(PluginGroupsProvider)\n .getGroups();\n return pluginGroups.some(pg => pg.id === group.id);\n }\n },\n Query: {\n getContentModelGroup: async (_, args: any, context) => {\n try {\n const { id } = args;\n const result = await context.container.resolve(GetGroupUseCase).execute(id);\n if (result.isFail()) {\n throw result.error;\n }\n const group = result.value;\n if (group?.isPrivate) {\n throw new NotFoundError(`Cms Group \"${id}\" was not found!`);\n }\n return new Response(group);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n listContentModelGroups: async (_, __, context) => {\n try {\n const result = await context.container.resolve(ListGroupsUseCase).execute();\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(result.value.filter(group => group.isPrivate !== true));\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n },\n Mutation: {\n createContentModelGroup: async (_, args: any, context) => {\n try {\n const result = await context.container\n .resolve(CreateGroupUseCase)\n .execute(args.data);\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(result.value);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n updateContentModelGroup: async (_, args: any, context) => {\n try {\n const result = await context.container\n .resolve(UpdateGroupUseCase)\n .execute(args.id, args.data);\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(result.value);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n deleteContentModelGroup: async (_, args: any, context) => {\n try {\n const result = await context.container\n .resolve(DeleteGroupUseCase)\n .execute(args.id);\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(true);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n }\n };\n }\n\n const plugin = createCmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type CmsContentModelGroup {\n id: ID!\n createdOn: DateTime\n savedOn: DateTime\n name: String!\n contentModels: [CmsContentModel!]\n totalContentModels: Int!\n slug: String!\n description: String\n icon: Icon\n createdBy: CmsIdentity\n\n # Returns true if the content model group is registered via a plugin.\n plugin: Boolean!\n }\n ${manageSchema}\n `,\n resolvers\n });\n\n const endpointType = context.container.resolve(HeadlessCmsEndpointConfig).type;\n plugin.name = `headless-cms.graphql.schema.${endpointType}.content-model-groups`;\n\n return plugin;\n};\n"],"names":["createGroupsSchema","context","isManage","HeadlessCmsEndpointConfig","manageSchema","resolvers","group","_","result","IdentityContext","ListModelsUseCase","model","pluginGroups","PluginGroupsProvider","pg","args","id","GetGroupUseCase","NotFoundError","Response","e","ErrorResponse","__","ListGroupsUseCase","CreateGroupUseCase","UpdateGroupUseCase","DeleteGroupUseCase","plugin","createCmsGraphQLSchemaPlugin","endpointType"],"mappings":"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"}
@@ -1,24 +1,37 @@
1
- import { ErrorResponse, NotFoundError, Response } from "@webiny/handler-graphql";
1
+ import { ErrorResponse, NotFoundError, Response } from "@webiny/api-graphql";
2
2
  import { createCmsGraphQLSchemaPlugin } from "../../plugins/index.js";
3
+ import { GetModelUseCase } from "../../features/contentModel/GetModel/index.js";
4
+ import { ListModelsUseCase } from "../../features/contentModel/ListModels/index.js";
5
+ import { CreateModelUseCase } from "../../features/contentModel/CreateModel/index.js";
6
+ import { CreateModelFromUseCase } from "../../features/contentModel/CreateModelFrom/index.js";
7
+ import { UpdateModelUseCase } from "../../features/contentModel/UpdateModel/index.js";
8
+ import { DeleteModelUseCase } from "../../features/contentModel/DeleteModel/index.js";
9
+ import { HeadlessCmsEndpointConfig } from "../../HeadlessCmsEndpointConfig.js";
10
+ import { ValuesSelectionGenerator } from "../../features/contentModel/ValuesSelectionGenerator/abstractions.js";
11
+ import { ComponentMapGenerator } from "../../features/contentModel/ComponentMapGenerator/abstractions.js";
12
+ import { RefModelsGenerator } from "../../features/contentModel/RefModelsGenerator/abstractions.js";
3
13
  const createModelsSchema = ({ context })=>{
14
+ const isManage = "manage" === context.container.resolve(HeadlessCmsEndpointConfig).type;
4
15
  const resolvers = {
5
16
  Query: {
6
17
  getContentModel: async (_, args, context)=>{
7
18
  try {
8
- const model = await context.cms.getModel(args.modelId);
9
- if (!model) throw new NotFoundError(`Content model "${args.modelId}" was not found!`);
10
- return new Response(model);
19
+ const result = await context.container.resolve(GetModelUseCase).execute(args.modelId);
20
+ if (result.isFail()) throw result.error;
21
+ if (!result.value) throw new NotFoundError(`Content model "${args.modelId}" was not found!`);
22
+ return new Response(result.value);
11
23
  } catch (e) {
12
24
  return new ErrorResponse(e);
13
25
  }
14
26
  },
15
27
  listContentModels: async (_, args, context)=>{
16
28
  try {
17
- const models = await context.cms.listModels({
29
+ const result = await context.container.resolve(ListModelsUseCase).execute({
18
30
  includePrivate: false,
19
31
  includePlugins: args?.includePlugins !== false
20
32
  });
21
- return new Response(models);
33
+ if (result.isFail()) throw result.error;
34
+ return new Response(result.value);
22
35
  } catch (e) {
23
36
  return new ErrorResponse(e);
24
37
  }
@@ -36,7 +49,22 @@ const createModelsSchema = ({ context })=>{
36
49
  return Array.isArray(field.tags) ? field.tags : [];
37
50
  }
38
51
  },
52
+ CmsContentModelMetadata: {
53
+ valuesSelection: (model, _, ctx)=>{
54
+ const generator = ctx.container.resolve(ValuesSelectionGenerator);
55
+ return generator.generate(model);
56
+ },
57
+ componentMap: (model, _, ctx)=>{
58
+ const generator = ctx.container.resolve(ComponentMapGenerator);
59
+ return generator.generate(model);
60
+ },
61
+ refModels: async (model, _, ctx)=>{
62
+ const generator = ctx.container.resolve(RefModelsGenerator);
63
+ return generator.generate(model);
64
+ }
65
+ },
39
66
  CmsContentModel: {
67
+ metadata: (model)=>model,
40
68
  tags (model) {
41
69
  const hasType = (model.tags || []).find((tag)=>tag.startsWith("type:"));
42
70
  return hasType ? model.tags : [
@@ -44,24 +72,30 @@ const createModelsSchema = ({ context })=>{
44
72
  ...model.tags || []
45
73
  ];
46
74
  },
47
- plugin: (model)=>model.isPlugin ?? false
75
+ plugin: (model)=>model.isPlugin ?? false,
76
+ valuesSelection: (model, _, ctx)=>{
77
+ const generator = ctx.container.resolve(ValuesSelectionGenerator);
78
+ return generator.generate(model);
79
+ }
48
80
  }
49
81
  };
50
82
  let manageSchema = "";
51
- if (context.cms.MANAGE) {
83
+ if (isManage) {
52
84
  resolvers["Mutation"] = {
53
85
  createContentModel: async (_, args, context)=>{
54
86
  try {
55
- const model = await context.cms.createModel(args.data);
56
- return new Response(model);
87
+ const result = await context.container.resolve(CreateModelUseCase).execute(args.data);
88
+ if (result.isFail()) throw result.error;
89
+ return new Response(result.value);
57
90
  } catch (e) {
58
91
  return new ErrorResponse(e);
59
92
  }
60
93
  },
61
94
  createContentModelFrom: async (_, args, context)=>{
62
95
  try {
63
- const model = await context.cms.createModelFrom(args.modelId, args.data);
64
- return new Response(model);
96
+ const result = await context.container.resolve(CreateModelFromUseCase).execute(args.modelId, args.data);
97
+ if (result.isFail()) throw result.error;
98
+ return new Response(result.value);
65
99
  } catch (e) {
66
100
  return new ErrorResponse(e);
67
101
  }
@@ -69,8 +103,9 @@ const createModelsSchema = ({ context })=>{
69
103
  updateContentModel: async (_, args, context)=>{
70
104
  const { modelId, data } = args;
71
105
  try {
72
- const model = await context.cms.updateModel(modelId, data);
73
- return new Response(model);
106
+ const result = await context.container.resolve(UpdateModelUseCase).execute(modelId, data);
107
+ if (result.isFail()) throw result.error;
108
+ return new Response(result.value);
74
109
  } catch (e) {
75
110
  return new ErrorResponse(e);
76
111
  }
@@ -78,7 +113,8 @@ const createModelsSchema = ({ context })=>{
78
113
  deleteContentModel: async (_, args, context)=>{
79
114
  const { modelId } = args;
80
115
  try {
81
- await context.cms.deleteModel(modelId);
116
+ const result = await context.container.resolve(DeleteModelUseCase).execute(modelId);
117
+ if (result.isFail()) throw result.error;
82
118
  return new Response(true);
83
119
  } catch (e) {
84
120
  return new ErrorResponse(e);
@@ -153,6 +189,7 @@ const createModelsSchema = ({ context })=>{
153
189
  imageFieldId: String
154
190
  tags: [String!]
155
191
  defaultFields: Boolean
192
+ settings: JSON
156
193
  }
157
194
 
158
195
  input CmsContentModelCreateFromInput {
@@ -178,6 +215,7 @@ const createModelsSchema = ({ context })=>{
178
215
  descriptionFieldId: String
179
216
  imageFieldId: String
180
217
  tags: [String!]
218
+ settings: JSON
181
219
  }
182
220
 
183
221
  extend type Mutation {
@@ -251,6 +289,16 @@ const createModelsSchema = ({ context })=>{
251
289
  rules: [CmsFieldRule!]
252
290
  }
253
291
 
292
+ type CmsContentModelRefModel {
293
+ valuesSelection: String
294
+ }
295
+
296
+ type CmsContentModelMetadata {
297
+ valuesSelection: String
298
+ componentMap: JSON
299
+ refModels: JSON
300
+ }
301
+
254
302
  type CmsContentModel {
255
303
  name: String!
256
304
  singularApiName: String!
@@ -269,8 +317,11 @@ const createModelsSchema = ({ context })=>{
269
317
  imageFieldId: String
270
318
  tags: [String!]!
271
319
  tenant: String!
320
+ settings: JSON
272
321
  # Returns true if the content model is registered via a plugin.
273
322
  plugin: Boolean!
323
+ valuesSelection: String
324
+ metadata: CmsContentModelMetadata
274
325
  }
275
326
 
276
327
  type CmsContentModelResponse {
@@ -294,7 +345,8 @@ const createModelsSchema = ({ context })=>{
294
345
  `,
295
346
  resolvers
296
347
  });
297
- plugin.name = `headless-cms.graphql.schema.${context.cms.type}.content-models`;
348
+ const endpointType = context.container.resolve(HeadlessCmsEndpointConfig).type;
349
+ plugin.name = `headless-cms.graphql.schema.${endpointType}.content-models`;
298
350
  return plugin;
299
351
  };
300
352
  export { createModelsSchema };
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/schema/contentModels.js","sources":["../../../src/graphql/schema/contentModels.ts"],"sourcesContent":["import { ErrorResponse, NotFoundError, Response } from \"@webiny/handler-graphql\";\nimport type { CmsContext, CmsModel } from \"~/types/index.js\";\nimport type { Resolvers } from \"@webiny/handler-graphql/types.js\";\nimport type { ICmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport { createCmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\nexport interface CreateModelsSchemaParams {\n context: CmsContext;\n}\n\nexport const createModelsSchema = ({\n context\n}: CreateModelsSchemaParams): ICmsGraphQLSchemaPlugin => {\n const resolvers: Resolvers<CmsContext> = {\n Query: {\n getContentModel: async (_: unknown, args: GenericRecord, context) => {\n try {\n const model = await context.cms.getModel(args.modelId);\n\n if (!model) {\n throw new NotFoundError(`Content model \"${args.modelId}\" was not found!`);\n }\n\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n listContentModels: async (_: unknown, args: GenericRecord, context: CmsContext) => {\n try {\n const models = await context.cms.listModels({\n includePrivate: false,\n includePlugins: args?.includePlugins === false ? false : true\n });\n return new Response(models);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n },\n CmsContentModelField: {\n renderer: field => {\n // Make sure `settings` is an object.\n if (field.renderer) {\n // We're using `||` here, because we want to use the fallback value for both `undefined` and `null`.\n return { ...field.renderer, settings: field.renderer.settings || {} };\n }\n\n return field.renderer;\n },\n tags(field) {\n // Make sure `tags` are always returned as an array.\n return Array.isArray(field.tags) ? field.tags : [];\n }\n },\n CmsContentModel: {\n tags(model: CmsModel) {\n // Make sure `tags` always contain a `type` tag, to differentiate between models.\n const hasType = (model.tags || []).find(tag => tag.startsWith(\"type:\"));\n\n return hasType ? model.tags : [\"type:model\", ...(model.tags || [])];\n },\n plugin: (model: CmsModel) => {\n return model.isPlugin ?? false;\n }\n }\n };\n\n let manageSchema = \"\";\n if (context.cms.MANAGE) {\n resolvers[\"Mutation\"] = {\n createContentModel: async (_: unknown, args: any, context) => {\n try {\n const model = await context.cms.createModel(args.data);\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n createContentModelFrom: async (_: unknown, args: any, context) => {\n try {\n const model = await context.cms.createModelFrom(args.modelId, args.data);\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n updateContentModel: async (_: unknown, args: any, context) => {\n const { modelId, data } = args;\n try {\n const model = await context.cms.updateModel(modelId, data);\n return new Response(model);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n deleteContentModel: async (_: unknown, args: any, context) => {\n const { modelId } = args;\n try {\n await context.cms.deleteModel(modelId);\n return new Response(true);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n };\n\n manageSchema = /* GraphQL */ `\n input CmsPredefinedValueInput {\n label: String!\n value: String!\n selected: Boolean\n }\n\n input CmsPredefinedValuesInput {\n enabled: Boolean\n values: [CmsPredefinedValueInput]\n }\n input CmsFieldRendererInput {\n name: String\n settings: JSON\n }\n\n input CmsFieldValidationInput {\n name: String!\n message: String\n settings: JSON\n }\n\n input CmsFieldRuleInput {\n type: String!\n target: String!\n operator: String!\n value: JSON\n action: String!\n }\n\n input CmsContentModelFieldInput {\n id: ID!\n label: String!\n help: String\n description: String\n note: String\n placeholder: String\n # we never use user input - this is here to the GraphQL does not break when posting from our UI\n # used for debugging purposes\n storageId: String\n fieldId: String!\n type: String!\n tags: [String!]\n list: Boolean\n predefinedValues: CmsPredefinedValuesInput\n renderer: CmsFieldRendererInput\n validation: [CmsFieldValidationInput]\n listValidation: [CmsFieldValidationInput]\n settings: JSON\n rules: [CmsFieldRuleInput!]\n }\n\n input CmsContentModelCreateInput {\n name: String!\n singularApiName: String!\n pluralApiName: String!\n modelId: String\n group: String!\n icon: Icon\n singleEntry: Boolean\n description: String\n layout: JSON\n fields: [CmsContentModelFieldInput!]\n titleFieldId: String\n descriptionFieldId: String\n imageFieldId: String\n tags: [String!]\n defaultFields: Boolean\n }\n\n input CmsContentModelCreateFromInput {\n name: String!\n singularApiName: String!\n pluralApiName: String!\n modelId: String\n group: String!\n icon: Icon\n description: String\n }\n\n input CmsContentModelUpdateInput {\n name: String\n singularApiName: String\n pluralApiName: String\n group: String\n icon: Icon\n description: String\n layout: JSON!\n fields: [CmsContentModelFieldInput!]!\n titleFieldId: String\n descriptionFieldId: String\n imageFieldId: String\n tags: [String!]\n }\n\n extend type Mutation {\n createContentModel(data: CmsContentModelCreateInput!): CmsContentModelResponse\n\n createContentModelFrom(\n modelId: ID!\n data: CmsContentModelCreateFromInput!\n ): CmsContentModelResponse\n\n updateContentModel(\n modelId: ID!\n data: CmsContentModelUpdateInput!\n ): CmsContentModelResponse\n\n deleteContentModel(modelId: ID!): CmsDeleteResponse\n }\n `;\n }\n\n const plugin = createCmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type CmsFieldValidation {\n name: String!\n message: String\n settings: JSON\n }\n\n type CmsFieldRenderer {\n name: String\n settings: JSON\n }\n\n type CmsPredefinedValue {\n label: String\n value: String\n selected: Boolean\n }\n\n type CmsPredefinedValues {\n enabled: Boolean\n values: [CmsPredefinedValue]\n }\n\n type CmsFieldRule {\n type: String!\n target: String!\n operator: String!\n value: JSON\n action: String!\n }\n\n type CmsContentModelField {\n id: ID!\n # auto-generated value\n # used for debugging purposes\n storageId: String\n fieldId: String!\n label: String!\n help: String\n description: String\n note: String\n placeholder: String\n type: String!\n tags: [String!]!\n list: Boolean\n predefinedValues: CmsPredefinedValues\n renderer: CmsFieldRenderer\n validation: [CmsFieldValidation!]\n listValidation: [CmsFieldValidation!]\n settings: JSON\n rules: [CmsFieldRule!]\n }\n\n type CmsContentModel {\n name: String!\n singularApiName: String!\n pluralApiName: String!\n modelId: String!\n description: String\n group: String!\n icon: Icon\n createdOn: DateTime\n savedOn: DateTime\n createdBy: CmsIdentity\n fields: [CmsContentModelField!]!\n layout: JSON!\n titleFieldId: String\n descriptionFieldId: String\n imageFieldId: String\n tags: [String!]!\n tenant: String!\n # Returns true if the content model is registered via a plugin.\n plugin: Boolean!\n }\n\n type CmsContentModelResponse {\n data: CmsContentModel\n error: CmsError\n }\n\n type CmsContentModelListResponse {\n data: [CmsContentModel]\n meta: CmsListMeta\n error: CmsError\n }\n\n extend type Query {\n getContentModel(modelId: ID!, where: JSON, sort: String): CmsContentModelResponse\n\n listContentModels(includePlugins: Boolean = true): CmsContentModelListResponse\n }\n\n ${manageSchema}\n `,\n resolvers\n });\n plugin.name = `headless-cms.graphql.schema.${context.cms.type}.content-models`;\n return plugin;\n};\n"],"names":["createModelsSchema","context","resolvers","_","args","model","NotFoundError","Response","e","ErrorResponse","models","field","Array","hasType","tag","manageSchema","modelId","data","plugin","createCmsGraphQLSchemaPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"graphql/schema/contentModels.js","sources":["../../../src/graphql/schema/contentModels.ts"],"sourcesContent":["import { ErrorResponse, NotFoundError, Response } from \"@webiny/api-graphql\";\nimport type { CmsContext, CmsModel } from \"~/types/index.js\";\nimport type { Resolvers } from \"@webiny/api-graphql/types.js\";\nimport type { ICmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport { createCmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\nimport { GetModelUseCase } from \"~/features/contentModel/GetModel/index.js\";\nimport { ListModelsUseCase } from \"~/features/contentModel/ListModels/index.js\";\nimport { CreateModelUseCase } from \"~/features/contentModel/CreateModel/index.js\";\nimport { CreateModelFromUseCase } from \"~/features/contentModel/CreateModelFrom/index.js\";\nimport { UpdateModelUseCase } from \"~/features/contentModel/UpdateModel/index.js\";\nimport { DeleteModelUseCase } from \"~/features/contentModel/DeleteModel/index.js\";\nimport { HeadlessCmsEndpointConfig } from \"~/HeadlessCmsEndpointConfig.js\";\nimport { ValuesSelectionGenerator } from \"~/features/contentModel/ValuesSelectionGenerator/abstractions.js\";\nimport { ComponentMapGenerator } from \"~/features/contentModel/ComponentMapGenerator/abstractions.js\";\nimport { RefModelsGenerator } from \"~/features/contentModel/RefModelsGenerator/abstractions.js\";\n\nexport interface CreateModelsSchemaParams {\n context: CmsContext;\n}\n\nexport const createModelsSchema = ({\n context\n}: CreateModelsSchemaParams): ICmsGraphQLSchemaPlugin => {\n const isManage = context.container.resolve(HeadlessCmsEndpointConfig).type === \"manage\";\n\n const resolvers: Resolvers<CmsContext> = {\n Query: {\n getContentModel: async (_: unknown, args: GenericRecord, context) => {\n try {\n const result = await context.container\n .resolve(GetModelUseCase)\n .execute(args.modelId);\n if (result.isFail()) {\n throw result.error;\n }\n if (!result.value) {\n throw new NotFoundError(`Content model \"${args.modelId}\" was not found!`);\n }\n return new Response(result.value);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n listContentModels: async (_: unknown, args: GenericRecord, context: CmsContext) => {\n try {\n const result = await context.container.resolve(ListModelsUseCase).execute({\n includePrivate: false,\n includePlugins: args?.includePlugins === false ? false : true\n });\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(result.value);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n },\n CmsContentModelField: {\n renderer: field => {\n // Make sure `settings` is an object.\n if (field.renderer) {\n // We're using `||` here, because we want to use the fallback value for both `undefined` and `null`.\n return { ...field.renderer, settings: field.renderer.settings || {} };\n }\n\n return field.renderer;\n },\n tags(field) {\n // Make sure `tags` are always returned as an array.\n return Array.isArray(field.tags) ? field.tags : [];\n }\n },\n CmsContentModelMetadata: {\n valuesSelection: (model: CmsModel, _: unknown, ctx: CmsContext) => {\n const generator = ctx.container.resolve(ValuesSelectionGenerator);\n return generator.generate(model);\n },\n componentMap: (model: CmsModel, _: unknown, ctx: CmsContext) => {\n const generator = ctx.container.resolve(ComponentMapGenerator);\n return generator.generate(model);\n },\n refModels: async (model: CmsModel, _: unknown, ctx: CmsContext) => {\n const generator = ctx.container.resolve(RefModelsGenerator);\n return generator.generate(model);\n }\n },\n CmsContentModel: {\n metadata: (model: CmsModel) => model,\n tags(model: CmsModel) {\n // Make sure `tags` always contain a `type` tag, to differentiate between models.\n const hasType = (model.tags || []).find(tag => tag.startsWith(\"type:\"));\n\n return hasType ? model.tags : [\"type:model\", ...(model.tags || [])];\n },\n plugin: (model: CmsModel) => {\n return model.isPlugin ?? false;\n },\n valuesSelection: (model: CmsModel, _: unknown, ctx: CmsContext) => {\n const generator = ctx.container.resolve(ValuesSelectionGenerator);\n return generator.generate(model);\n }\n }\n };\n\n let manageSchema = \"\";\n if (isManage) {\n resolvers[\"Mutation\"] = {\n createContentModel: async (_: unknown, args: any, context) => {\n try {\n const result = await context.container\n .resolve(CreateModelUseCase)\n .execute(args.data);\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(result.value);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n createContentModelFrom: async (_: unknown, args: any, context) => {\n try {\n const result = await context.container\n .resolve(CreateModelFromUseCase)\n .execute(args.modelId, args.data);\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(result.value);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n updateContentModel: async (_: unknown, args: any, context) => {\n const { modelId, data } = args;\n try {\n const result = await context.container\n .resolve(UpdateModelUseCase)\n .execute(modelId, data);\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(result.value);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n deleteContentModel: async (_: unknown, args: any, context) => {\n const { modelId } = args;\n try {\n const result = await context.container\n .resolve(DeleteModelUseCase)\n .execute(modelId);\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(true);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n };\n\n manageSchema = /* GraphQL */ `\n input CmsPredefinedValueInput {\n label: String!\n value: String!\n selected: Boolean\n }\n\n input CmsPredefinedValuesInput {\n enabled: Boolean\n values: [CmsPredefinedValueInput]\n }\n input CmsFieldRendererInput {\n name: String\n settings: JSON\n }\n\n input CmsFieldValidationInput {\n name: String!\n message: String\n settings: JSON\n }\n\n input CmsFieldRuleInput {\n type: String!\n target: String!\n operator: String!\n value: JSON\n action: String!\n }\n\n input CmsContentModelFieldInput {\n id: ID!\n label: String!\n help: String\n description: String\n note: String\n placeholder: String\n # we never use user input - this is here to the GraphQL does not break when posting from our UI\n # used for debugging purposes\n storageId: String\n fieldId: String!\n type: String!\n tags: [String!]\n list: Boolean\n predefinedValues: CmsPredefinedValuesInput\n renderer: CmsFieldRendererInput\n validation: [CmsFieldValidationInput]\n listValidation: [CmsFieldValidationInput]\n settings: JSON\n rules: [CmsFieldRuleInput!]\n }\n\n input CmsContentModelCreateInput {\n name: String!\n singularApiName: String!\n pluralApiName: String!\n modelId: String\n group: String!\n icon: Icon\n singleEntry: Boolean\n description: String\n layout: JSON\n fields: [CmsContentModelFieldInput!]\n titleFieldId: String\n descriptionFieldId: String\n imageFieldId: String\n tags: [String!]\n defaultFields: Boolean\n settings: JSON\n }\n\n input CmsContentModelCreateFromInput {\n name: String!\n singularApiName: String!\n pluralApiName: String!\n modelId: String\n group: String!\n icon: Icon\n description: String\n }\n\n input CmsContentModelUpdateInput {\n name: String\n singularApiName: String\n pluralApiName: String\n group: String\n icon: Icon\n description: String\n layout: JSON!\n fields: [CmsContentModelFieldInput!]!\n titleFieldId: String\n descriptionFieldId: String\n imageFieldId: String\n tags: [String!]\n settings: JSON\n }\n\n extend type Mutation {\n createContentModel(data: CmsContentModelCreateInput!): CmsContentModelResponse\n\n createContentModelFrom(\n modelId: ID!\n data: CmsContentModelCreateFromInput!\n ): CmsContentModelResponse\n\n updateContentModel(\n modelId: ID!\n data: CmsContentModelUpdateInput!\n ): CmsContentModelResponse\n\n deleteContentModel(modelId: ID!): CmsDeleteResponse\n }\n `;\n }\n\n const plugin = createCmsGraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type CmsFieldValidation {\n name: String!\n message: String\n settings: JSON\n }\n\n type CmsFieldRenderer {\n name: String\n settings: JSON\n }\n\n type CmsPredefinedValue {\n label: String\n value: String\n selected: Boolean\n }\n\n type CmsPredefinedValues {\n enabled: Boolean\n values: [CmsPredefinedValue]\n }\n\n type CmsFieldRule {\n type: String!\n target: String!\n operator: String!\n value: JSON\n action: String!\n }\n\n type CmsContentModelField {\n id: ID!\n # auto-generated value\n # used for debugging purposes\n storageId: String\n fieldId: String!\n label: String!\n help: String\n description: String\n note: String\n placeholder: String\n type: String!\n tags: [String!]!\n list: Boolean\n predefinedValues: CmsPredefinedValues\n renderer: CmsFieldRenderer\n validation: [CmsFieldValidation!]\n listValidation: [CmsFieldValidation!]\n settings: JSON\n rules: [CmsFieldRule!]\n }\n\n type CmsContentModelRefModel {\n valuesSelection: String\n }\n\n type CmsContentModelMetadata {\n valuesSelection: String\n componentMap: JSON\n refModels: JSON\n }\n\n type CmsContentModel {\n name: String!\n singularApiName: String!\n pluralApiName: String!\n modelId: String!\n description: String\n group: String!\n icon: Icon\n createdOn: DateTime\n savedOn: DateTime\n createdBy: CmsIdentity\n fields: [CmsContentModelField!]!\n layout: JSON!\n titleFieldId: String\n descriptionFieldId: String\n imageFieldId: String\n tags: [String!]!\n tenant: String!\n settings: JSON\n # Returns true if the content model is registered via a plugin.\n plugin: Boolean!\n valuesSelection: String\n metadata: CmsContentModelMetadata\n }\n\n type CmsContentModelResponse {\n data: CmsContentModel\n error: CmsError\n }\n\n type CmsContentModelListResponse {\n data: [CmsContentModel]\n meta: CmsListMeta\n error: CmsError\n }\n\n extend type Query {\n getContentModel(modelId: ID!, where: JSON, sort: String): CmsContentModelResponse\n\n listContentModels(includePlugins: Boolean = true): CmsContentModelListResponse\n }\n\n ${manageSchema}\n `,\n resolvers\n });\n\n const endpointType = context.container.resolve(HeadlessCmsEndpointConfig).type;\n plugin.name = `headless-cms.graphql.schema.${endpointType}.content-models`;\n return plugin;\n};\n"],"names":["createModelsSchema","context","isManage","HeadlessCmsEndpointConfig","resolvers","_","args","result","GetModelUseCase","NotFoundError","Response","e","ErrorResponse","ListModelsUseCase","field","Array","model","ctx","generator","ValuesSelectionGenerator","ComponentMapGenerator","RefModelsGenerator","hasType","tag","manageSchema","CreateModelUseCase","CreateModelFromUseCase","modelId","data","UpdateModelUseCase","DeleteModelUseCase","plugin","createCmsGraphQLSchemaPlugin","endpointType"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Resolvers } from "@webiny/handler-graphql/types.js";
1
+ import type { Resolvers } from "@webiny/api-graphql/types.js";
2
2
  import type { ApiEndpoint, CmsModel, CmsModelField } from "../../types/index.js";
3
3
  import type { CmsModelFieldToGraphQLRegistry } from "../../features/graphql/index.js";
4
4
  interface CreateFieldResolvers {
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/schema/createFieldResolvers.js","sources":["../../../src/graphql/schema/createFieldResolvers.ts"],"sourcesContent":["import set from \"lodash/set.js\";\nimport type { Resolvers } from \"@webiny/handler-graphql/types.js\";\nimport WebinyError from \"@webiny/error\";\nimport type { ApiEndpoint, CmsContext, CmsModel, CmsModelField } from \"~/types/index.js\";\nimport { entryFieldFromStorageTransform } from \"~/utils/entryStorage.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport type {\n CmsModelFieldToGraphQL,\n CmsModelFieldToGraphQLRegistry\n} from \"~/features/graphql/index.js\";\n\ninterface CreateFieldResolvers {\n graphQLType: string;\n fields: CmsModelField[];\n isRoot: boolean;\n extraResolvers?: Resolvers<any>;\n}\n\ninterface CreateFieldResolversFactoryParams {\n endpointType: ApiEndpoint;\n models: CmsModel[];\n model: CmsModel;\n fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface;\n}\n\n/**\n * We use a factory to avoid passing the parameters for recursive invocations.\n * This way they will always be in the function scope, and we can only pass \"fields\".\n */\nexport const createFieldResolversFactory = (factoryParams: CreateFieldResolversFactoryParams) => {\n const { endpointType, models, model, fieldRegistry } = factoryParams;\n return function createFieldResolvers(params: CreateFieldResolvers) {\n const { graphQLType, fields, isRoot = false, extraResolvers = {} } = params;\n\n const fieldResolvers: Resolvers<any> = {};\n const typeResolvers = {};\n\n for (const field of fields) {\n const plugin = fieldRegistry.get(getBaseFieldType(field));\n if (!plugin) {\n continue;\n }\n /**\n * Field that is passed into this factory MUST have fieldId, so filter it before the method call.\n */\n if (!field.fieldId) {\n throw new WebinyError(\n \"Field is missing an `fieldId`. Cannot process field without the `fieldId` in the resolvers.\",\n \"FIELD_ID_ERROR\",\n {\n field\n }\n );\n }\n\n const api: CmsModelFieldToGraphQL.ReadApi | CmsModelFieldToGraphQL.ManageApi =\n endpointType === \"manage\" ? plugin.manage : plugin.read;\n const createResolver = api?.createResolver || null;\n\n let resolver: any;\n const fieldResolver = createResolver\n ? createResolver({\n graphQLType,\n models,\n model,\n field,\n createFieldResolvers,\n fieldRegistry\n })\n : null;\n\n /**\n * When fieldResolver is false it will completely skip adding field fieldId into the resolvers.\n * This is to fix the breaking of GraphQL schema.\n */\n if (fieldResolver === false) {\n continue;\n } else if (typeof fieldResolver === \"function\") {\n resolver = fieldResolver;\n } else if (fieldResolver) {\n resolver = fieldResolver.resolver;\n Object.assign(typeResolvers, fieldResolver.typeResolvers);\n }\n\n const { fieldId } = field;\n /**\n * Figure out a better way to extract value from parent.\n * // TODO fix\n */\n const getValue = (parent: any) => {\n if (!parent?.values || !parent?.values[fieldId]) {\n return {\n isRoot: false,\n value: parent?.[fieldId]\n };\n }\n return {\n isRoot: true,\n value: parent.values[fieldId]\n };\n };\n\n fieldResolvers[fieldId] = async (parent, args, context: CmsContext, info) => {\n /**\n * This is required because due to ref field can be requested without the populated data.\n * At that point there is no .values no fieldId property on the parent\n */\n const { isRoot: valueIsRoot, value } = getValue(parent);\n if (value === undefined) {\n return undefined;\n }\n // Get transformed value (eg. data decompression)\n const transformedValue = await entryFieldFromStorageTransform({\n context,\n model,\n field,\n value\n });\n\n set(\n valueIsRoot && parent.values ? parent.values : parent,\n fieldId,\n transformedValue\n );\n\n if (!resolver) {\n return valueIsRoot && parent.values[fieldId]\n ? parent.values[fieldId]\n : parent[fieldId];\n }\n\n return await resolver(valueIsRoot ? parent.values : parent, args, context, info);\n };\n }\n\n /**\n * Difference between root and non-root (object and dz, etc... fields) is that root has a values wrapper.\n * Subtypes must not have it.\n */\n if (!isRoot) {\n return {\n [graphQLType]: {\n ...fieldResolvers,\n ...extraResolvers\n },\n ...typeResolvers\n };\n }\n\n return {\n [graphQLType]: {\n ...extraResolvers\n },\n [`${graphQLType}Values`]: fieldResolvers,\n ...typeResolvers\n };\n };\n};\n"],"names":["createFieldResolversFactory","factoryParams","endpointType","models","model","fieldRegistry","createFieldResolvers","params","graphQLType","fields","isRoot","extraResolvers","fieldResolvers","typeResolvers","field","plugin","getBaseFieldType","WebinyError","api","createResolver","resolver","fieldResolver","Object","fieldId","getValue","parent","args","context","info","valueIsRoot","value","undefined","transformedValue","entryFieldFromStorageTransform","set"],"mappings":";;;;AA6BO,MAAMA,8BAA8B,CAACC;IACxC,MAAM,EAAEC,YAAY,EAAEC,MAAM,EAAEC,KAAK,EAAEC,aAAa,EAAE,GAAGJ;IACvD,OAAO,SAASK,qBAAqBC,MAA4B;QAC7D,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAEC,SAAS,KAAK,EAAEC,iBAAiB,CAAC,CAAC,EAAE,GAAGJ;QAErE,MAAMK,iBAAiC,CAAC;QACxC,MAAMC,gBAAgB,CAAC;QAEvB,KAAK,MAAMC,SAASL,OAAQ;YACxB,MAAMM,SAASV,cAAc,GAAG,CAACW,iBAAiBF;YAClD,IAAI,CAACC,QACD;YAKJ,IAAI,CAACD,MAAM,OAAO,EACd,MAAM,IAAIG,MACN,+FACA,kBACA;gBACIH;YACJ;YAIR,MAAMI,MACFhB,AAAiB,aAAjBA,eAA4Ba,OAAO,MAAM,GAAGA,OAAO,IAAI;YAC3D,MAAMI,iBAAiBD,KAAK,kBAAkB;YAE9C,IAAIE;YACJ,MAAMC,gBAAgBF,iBAChBA,eAAe;gBACXX;gBACAL;gBACAC;gBACAU;gBACAR;gBACAD;YACJ,KACA;YAMN,IAAIgB,AAAkB,UAAlBA,eACA;YACG,IAAI,AAAyB,cAAzB,OAAOA,eACdD,WAAWC;iBACR,IAAIA,eAAe;gBACtBD,WAAWC,cAAc,QAAQ;gBACjCC,OAAO,MAAM,CAACT,eAAeQ,cAAc,aAAa;YAC5D;YAEA,MAAM,EAAEE,OAAO,EAAE,GAAGT;YAKpB,MAAMU,WAAW,CAACC;gBACd,IAAI,CAACA,QAAQ,UAAU,CAACA,QAAQ,MAAM,CAACF,QAAQ,EAC3C,OAAO;oBACH,QAAQ;oBACR,OAAOE,QAAQ,CAACF,QAAQ;gBAC5B;gBAEJ,OAAO;oBACH,QAAQ;oBACR,OAAOE,OAAO,MAAM,CAACF,QAAQ;gBACjC;YACJ;YAEAX,cAAc,CAACW,QAAQ,GAAG,OAAOE,QAAQC,MAAMC,SAAqBC;gBAKhE,MAAM,EAAE,QAAQC,WAAW,EAAEC,KAAK,EAAE,GAAGN,SAASC;gBAChD,IAAIK,AAAUC,WAAVD,OACA;gBAGJ,MAAME,mBAAmB,MAAMC,+BAA+B;oBAC1DN;oBACAvB;oBACAU;oBACAgB;gBACJ;gBAEAI,IACIL,eAAeJ,OAAO,MAAM,GAAGA,OAAO,MAAM,GAAGA,QAC/CF,SACAS;gBAGJ,IAAI,CAACZ,UACD,OAAOS,eAAeJ,OAAO,MAAM,CAACF,QAAQ,GACtCE,OAAO,MAAM,CAACF,QAAQ,GACtBE,MAAM,CAACF,QAAQ;gBAGzB,OAAO,MAAMH,SAASS,cAAcJ,OAAO,MAAM,GAAGA,QAAQC,MAAMC,SAASC;YAC/E;QACJ;QAMA,IAAI,CAAClB,QACD,OAAO;YACH,CAACF,YAAY,EAAE;gBACX,GAAGI,cAAc;gBACjB,GAAGD,cAAc;YACrB;YACA,GAAGE,aAAa;QACpB;QAGJ,OAAO;YACH,CAACL,YAAY,EAAE;gBACX,GAAGG,cAAc;YACrB;YACA,CAAC,GAAGH,YAAY,MAAM,CAAC,CAAC,EAAEI;YAC1B,GAAGC,aAAa;QACpB;IACJ;AACJ"}
1
+ {"version":3,"file":"graphql/schema/createFieldResolvers.js","sources":["../../../src/graphql/schema/createFieldResolvers.ts"],"sourcesContent":["import set from \"lodash/set.js\";\nimport type { Resolvers } from \"@webiny/api-graphql/types.js\";\nimport WebinyError from \"@webiny/error\";\nimport type { ApiEndpoint, CmsContext, CmsModel, CmsModelField } from \"~/types/index.js\";\nimport { entryFieldFromStorageTransform } from \"~/utils/entryStorage.js\";\nimport { getBaseFieldType } from \"~/utils/getBaseFieldType.js\";\nimport type {\n CmsModelFieldToGraphQL,\n CmsModelFieldToGraphQLRegistry\n} from \"~/features/graphql/index.js\";\n\ninterface CreateFieldResolvers {\n graphQLType: string;\n fields: CmsModelField[];\n isRoot: boolean;\n extraResolvers?: Resolvers<any>;\n}\n\ninterface CreateFieldResolversFactoryParams {\n endpointType: ApiEndpoint;\n models: CmsModel[];\n model: CmsModel;\n fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface;\n}\n\n/**\n * We use a factory to avoid passing the parameters for recursive invocations.\n * This way they will always be in the function scope, and we can only pass \"fields\".\n */\nexport const createFieldResolversFactory = (factoryParams: CreateFieldResolversFactoryParams) => {\n const { endpointType, models, model, fieldRegistry } = factoryParams;\n return function createFieldResolvers(params: CreateFieldResolvers) {\n const { graphQLType, fields, isRoot = false, extraResolvers = {} } = params;\n\n const fieldResolvers: Resolvers<any> = {};\n const typeResolvers = {};\n\n for (const field of fields) {\n const plugin = fieldRegistry.get(getBaseFieldType(field));\n if (!plugin) {\n continue;\n }\n /**\n * Field that is passed into this factory MUST have fieldId, so filter it before the method call.\n */\n if (!field.fieldId) {\n throw new WebinyError(\n \"Field is missing an `fieldId`. Cannot process field without the `fieldId` in the resolvers.\",\n \"FIELD_ID_ERROR\",\n {\n field\n }\n );\n }\n\n const api: CmsModelFieldToGraphQL.ReadApi | CmsModelFieldToGraphQL.ManageApi =\n endpointType === \"manage\" ? plugin.manage : plugin.read;\n const createResolver = api?.createResolver || null;\n\n let resolver: any;\n const fieldResolver = createResolver\n ? createResolver({\n graphQLType,\n models,\n model,\n field,\n createFieldResolvers,\n fieldRegistry\n })\n : null;\n\n /**\n * When fieldResolver is false it will completely skip adding field fieldId into the resolvers.\n * This is to fix the breaking of GraphQL schema.\n */\n if (fieldResolver === false) {\n continue;\n } else if (typeof fieldResolver === \"function\") {\n resolver = fieldResolver;\n } else if (fieldResolver) {\n resolver = fieldResolver.resolver;\n Object.assign(typeResolvers, fieldResolver.typeResolvers);\n }\n\n const { fieldId } = field;\n /**\n * Figure out a better way to extract value from parent.\n * // TODO fix\n */\n const getValue = (parent: any) => {\n if (!parent?.values || !parent?.values[fieldId]) {\n return {\n isRoot: false,\n value: parent?.[fieldId]\n };\n }\n return {\n isRoot: true,\n value: parent.values[fieldId]\n };\n };\n\n fieldResolvers[fieldId] = async (parent, args, context: CmsContext, info) => {\n /**\n * This is required because due to ref field can be requested without the populated data.\n * At that point there is no .values no fieldId property on the parent\n */\n const { isRoot: valueIsRoot, value } = getValue(parent);\n if (value === undefined) {\n return undefined;\n }\n // Get transformed value (eg. data decompression)\n const transformedValue = await entryFieldFromStorageTransform({\n context,\n model,\n field,\n value\n });\n\n set(\n valueIsRoot && parent.values ? parent.values : parent,\n fieldId,\n transformedValue\n );\n\n if (!resolver) {\n return valueIsRoot && parent.values[fieldId]\n ? parent.values[fieldId]\n : parent[fieldId];\n }\n\n return await resolver(valueIsRoot ? parent.values : parent, args, context, info);\n };\n }\n\n /**\n * Difference between root and non-root (object and dz, etc... fields) is that root has a values wrapper.\n * Subtypes must not have it.\n */\n if (!isRoot) {\n return {\n [graphQLType]: {\n ...fieldResolvers,\n ...extraResolvers\n },\n ...typeResolvers\n };\n }\n\n return {\n [graphQLType]: {\n ...extraResolvers\n },\n [`${graphQLType}Values`]: fieldResolvers,\n ...typeResolvers\n };\n };\n};\n"],"names":["createFieldResolversFactory","factoryParams","endpointType","models","model","fieldRegistry","createFieldResolvers","params","graphQLType","fields","isRoot","extraResolvers","fieldResolvers","typeResolvers","field","plugin","getBaseFieldType","WebinyError","api","createResolver","resolver","fieldResolver","Object","fieldId","getValue","parent","args","context","info","valueIsRoot","value","undefined","transformedValue","entryFieldFromStorageTransform","set"],"mappings":";;;;AA6BO,MAAMA,8BAA8B,CAACC;IACxC,MAAM,EAAEC,YAAY,EAAEC,MAAM,EAAEC,KAAK,EAAEC,aAAa,EAAE,GAAGJ;IACvD,OAAO,SAASK,qBAAqBC,MAA4B;QAC7D,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAEC,SAAS,KAAK,EAAEC,iBAAiB,CAAC,CAAC,EAAE,GAAGJ;QAErE,MAAMK,iBAAiC,CAAC;QACxC,MAAMC,gBAAgB,CAAC;QAEvB,KAAK,MAAMC,SAASL,OAAQ;YACxB,MAAMM,SAASV,cAAc,GAAG,CAACW,iBAAiBF;YAClD,IAAI,CAACC,QACD;YAKJ,IAAI,CAACD,MAAM,OAAO,EACd,MAAM,IAAIG,MACN,+FACA,kBACA;gBACIH;YACJ;YAIR,MAAMI,MACFhB,AAAiB,aAAjBA,eAA4Ba,OAAO,MAAM,GAAGA,OAAO,IAAI;YAC3D,MAAMI,iBAAiBD,KAAK,kBAAkB;YAE9C,IAAIE;YACJ,MAAMC,gBAAgBF,iBAChBA,eAAe;gBACXX;gBACAL;gBACAC;gBACAU;gBACAR;gBACAD;YACJ,KACA;YAMN,IAAIgB,AAAkB,UAAlBA,eACA;YACG,IAAI,AAAyB,cAAzB,OAAOA,eACdD,WAAWC;iBACR,IAAIA,eAAe;gBACtBD,WAAWC,cAAc,QAAQ;gBACjCC,OAAO,MAAM,CAACT,eAAeQ,cAAc,aAAa;YAC5D;YAEA,MAAM,EAAEE,OAAO,EAAE,GAAGT;YAKpB,MAAMU,WAAW,CAACC;gBACd,IAAI,CAACA,QAAQ,UAAU,CAACA,QAAQ,MAAM,CAACF,QAAQ,EAC3C,OAAO;oBACH,QAAQ;oBACR,OAAOE,QAAQ,CAACF,QAAQ;gBAC5B;gBAEJ,OAAO;oBACH,QAAQ;oBACR,OAAOE,OAAO,MAAM,CAACF,QAAQ;gBACjC;YACJ;YAEAX,cAAc,CAACW,QAAQ,GAAG,OAAOE,QAAQC,MAAMC,SAAqBC;gBAKhE,MAAM,EAAE,QAAQC,WAAW,EAAEC,KAAK,EAAE,GAAGN,SAASC;gBAChD,IAAIK,AAAUC,WAAVD,OACA;gBAGJ,MAAME,mBAAmB,MAAMC,+BAA+B;oBAC1DN;oBACAvB;oBACAU;oBACAgB;gBACJ;gBAEAI,IACIL,eAAeJ,OAAO,MAAM,GAAGA,OAAO,MAAM,GAAGA,QAC/CF,SACAS;gBAGJ,IAAI,CAACZ,UACD,OAAOS,eAAeJ,OAAO,MAAM,CAACF,QAAQ,GACtCE,OAAO,MAAM,CAACF,QAAQ,GACtBE,MAAM,CAACF,QAAQ;gBAGzB,OAAO,MAAMH,SAASS,cAAcJ,OAAO,MAAM,GAAGA,QAAQC,MAAMC,SAASC;YAC/E;QACJ;QAMA,IAAI,CAAClB,QACD,OAAO;YACH,CAACF,YAAY,EAAE;gBACX,GAAGI,cAAc;gBACjB,GAAGD,cAAc;YACrB;YACA,GAAGE,aAAa;QACpB;QAGJ,OAAO;YACH,CAACL,YAAY,EAAE;gBACX,GAAGG,cAAc;YACrB;YACA,CAAC,GAAGH,YAAY,MAAM,CAAC,CAAC,EAAEI;YAC1B,GAAGC,aAAa;QACpB;IACJ;AACJ"}