@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":"features/contentModel/CreateModelFrom/CreateModelFromRepository.js","sources":["../../../../src/features/contentModel/CreateModelFrom/CreateModelFromRepository.ts"],"sourcesContent":["import camelCase from \"lodash/camelCase.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { CreateModelFromRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport {\n ModelCache,\n ModelsFetcher,\n PluginModelsProvider\n} from \"~/features/contentModel/shared/abstractions.js\";\nimport {\n ModelAlreadyExistsError,\n ModelPersistenceError,\n ModelValidationError\n} from \"~/domain/contentModel/errors.js\";\nimport { CmsContext, StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport {\n validateExistingModelId,\n validateModelIdAllowed\n} from \"~/crud/contentModel/validate/modelId.js\";\nimport { validateEndingAllowed } from \"~/crud/contentModel/validate/endingAllowed.js\";\nimport { validateSingularApiName } from \"~/domain/contentModel/validation/singularApiName.js\";\nimport { validatePluralApiName } from \"~/domain/contentModel/validation/pluralApiName.js\";\nimport { validateModelFields } from \"~/domain/contentModel/validation/modelFields.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { ensureTypeTag } from \"~/domain/contentModel/ensureTypeTag.js\";\nimport { ModelFieldCompression } from \"~/features/contentModel/ModelFieldCompression/index.js\";\nimport { RuntimeTenant } from \"~/features/runtimeTenant/abstractions.js\";\n\n/**\n * Generate modelId from model following the exact logic from beforeCreate.ts\n */\nconst getModelId = (model: { modelId?: string; name?: string }): string => {\n const { modelId, name } = model;\n const value = modelId ? modelId.trim() : null;\n if (value) {\n const isModelIdValid = camelCase(value).toLowerCase() === value.toLowerCase();\n if (isModelIdValid) {\n return value;\n }\n return camelCase(value);\n } else if (name) {\n return camelCase(name.trim());\n }\n throw new ModelValidationError(\n `There is no \"modelId\" or \"name\" passed into the create model from method.`\n );\n};\n\n/**\n * CreateModelFromRepository - Validates domain rules and persists cloned model.\n *\n * Responsibilities:\n * - Generate modelId from input\n * - Validate modelId is allowed (not in disallowed list)\n * - Validate API name endings\n * - Validate modelId uniqueness (database + plugins)\n * - Validate API name uniqueness (database + plugins)\n * - Validate plugin conflicts\n * - Validate model fields\n * - Persist to storage\n * - Clear ModelCache after successful create\n */\nclass CreateModelFromRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private readonly modelCache: ModelCache.Interface,\n private readonly pluginModelsProvider: PluginModelsProvider.Interface,\n private readonly modelsFetcher: ModelsFetcher.Interface,\n private readonly storageOperations: StorageOperations.Interface,\n private readonly tenantContext: TenantContext.Interface,\n private readonly cmsContext: CmsContext.Interface,\n private readonly modelFieldCompression: ModelFieldCompression.Interface,\n private readonly runtimeTenant: RuntimeTenant.Interface\n ) {}\n\n async execute(initialModel: CmsModel): Promise<Result<CmsModel, RepositoryAbstraction.Error>> {\n const model = this.runtimeTenant.assign(initialModel);\n try {\n const tenant = this.tenantContext.getTenant();\n\n // Generate modelId using the exact logic from beforeCreate.ts\n const modelId = getModelId(model);\n model.modelId = modelId;\n\n // Validate modelId is allowed (not in disallowed list)\n try {\n validateModelIdAllowed({ model });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({ message: error.message, data: error.data })\n );\n }\n\n // Validate API name endings\n try {\n validateEndingAllowed({ model });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({ message: error.message, data: error.data })\n );\n }\n\n // Validate modelId uniqueness (database)\n const modelsResult = await this.modelsFetcher.fetchAll();\n if (modelsResult.isFail()) {\n return Result.fail(new ModelPersistenceError(modelsResult.error));\n }\n\n const existingModel = modelsResult.value.find(m => m.modelId === modelId);\n if (existingModel) {\n return Result.fail(new ModelAlreadyExistsError({ modelId }));\n }\n\n // Check for plugin model conflicts\n const pluginModels = await this.pluginModelsProvider.list(tenant.id);\n const pluginModelConflict = pluginModels.find(pm => {\n return (\n pm.modelId === model.modelId ||\n pm.singularApiName === model.singularApiName ||\n pm.pluralApiName === model.pluralApiName\n );\n });\n\n if (pluginModelConflict) {\n return Result.fail(\n new ModelAlreadyExistsError({\n modelId,\n message: `Model \"${modelId}\" is already registered via a plugin.`\n })\n );\n }\n\n const models = modelsResult.value;\n\n try {\n // Validate uniqueness\n for (const existingModel of models) {\n validateExistingModelId({\n existingModel,\n model\n });\n validateSingularApiName({\n existingModel,\n model\n });\n validatePluralApiName({\n existingModel,\n model\n });\n }\n\n // Validate model fields\n await validateModelFields({\n models,\n model,\n context: this.cmsContext\n });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({ message: error.message, data: error.data })\n );\n }\n\n // Ensure type tags\n model.tags = ensureTypeTag(model);\n\n const fields = await this.modelFieldCompression.compress(model.fields);\n\n // Persist to storage\n await this.storageOperations.models.create({\n model: {\n ...model,\n fields\n }\n });\n\n // Clear cache\n this.modelCache.clear();\n\n return Result.ok(model);\n } catch (error) {\n return Result.fail(new ModelPersistenceError(error as Error));\n }\n }\n}\n\nexport const CreateModelFromRepository = RepositoryAbstraction.createImplementation({\n implementation: CreateModelFromRepositoryImpl,\n dependencies: [\n ModelCache,\n PluginModelsProvider,\n ModelsFetcher,\n StorageOperations,\n TenantContext,\n CmsContext,\n ModelFieldCompression,\n RuntimeTenant\n ]\n});\n"],"names":["getModelId","model","modelId","name","value","isModelIdValid","camelCase","ModelValidationError","CreateModelFromRepositoryImpl","modelCache","pluginModelsProvider","modelsFetcher","storageOperations","tenantContext","cmsContext","modelFieldCompression","runtimeTenant","initialModel","tenant","validateModelIdAllowed","error","Result","validateEndingAllowed","modelsResult","ModelPersistenceError","existingModel","m","ModelAlreadyExistsError","pluginModels","pluginModelConflict","pm","models","validateExistingModelId","validateSingularApiName","validatePluralApiName","validateModelFields","ensureTypeTag","fields","CreateModelFromRepository","RepositoryAbstraction","ModelCache","PluginModelsProvider","ModelsFetcher","StorageOperations","TenantContext","CmsContext","ModelFieldCompression","RuntimeTenant"],"mappings":";;;;;;;;;;;;;;;AA+BA,MAAMA,aAAa,CAACC;IAChB,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAE,GAAGF;IAC1B,MAAMG,QAAQF,UAAUA,QAAQ,IAAI,KAAK;IACzC,IAAIE,OAAO;QACP,MAAMC,iBAAiBC,UAAUF,OAAO,WAAW,OAAOA,MAAM,WAAW;QAC3E,IAAIC,gBACA,OAAOD;QAEX,OAAOE,UAAUF;IACrB;IAAO,IAAID,MACP,OAAOG,UAAUH,KAAK,IAAI;IAE9B,MAAM,IAAII,qBACN;AAER;AAgBA,MAAMC;IACF,YACqBC,UAAgC,EAChCC,oBAAoD,EACpDC,aAAsC,EACtCC,iBAA8C,EAC9CC,aAAsC,EACtCC,UAAgC,EAChCC,qBAAsD,EACtDC,aAAsC,CACzD;aARmBP,UAAU,GAAVA;aACAC,oBAAoB,GAApBA;aACAC,aAAa,GAAbA;aACAC,iBAAiB,GAAjBA;aACAC,aAAa,GAAbA;aACAC,UAAU,GAAVA;aACAC,qBAAqB,GAArBA;aACAC,aAAa,GAAbA;IAClB;IAEH,MAAM,QAAQC,YAAsB,EAA0D;QAC1F,MAAMhB,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAACgB;QACxC,IAAI;YACA,MAAMC,SAAS,IAAI,CAAC,aAAa,CAAC,SAAS;YAG3C,MAAMhB,UAAUF,WAAWC;YAC3BA,MAAM,OAAO,GAAGC;YAGhB,IAAI;gBACAiB,uBAAuB;oBAAElB;gBAAM;YACnC,EAAE,OAAOmB,OAAO;gBACZ,OAAOC,OAAO,IAAI,CACd,IAAId,qBAAqB;oBAAE,SAASa,MAAM,OAAO;oBAAE,MAAMA,MAAM,IAAI;gBAAC;YAE5E;YAGA,IAAI;gBACAE,sBAAsB;oBAAErB;gBAAM;YAClC,EAAE,OAAOmB,OAAO;gBACZ,OAAOC,OAAO,IAAI,CACd,IAAId,qBAAqB;oBAAE,SAASa,MAAM,OAAO;oBAAE,MAAMA,MAAM,IAAI;gBAAC;YAE5E;YAGA,MAAMG,eAAe,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ;YACtD,IAAIA,aAAa,MAAM,IACnB,OAAOF,OAAO,IAAI,CAAC,IAAIG,sBAAsBD,aAAa,KAAK;YAGnE,MAAME,gBAAgBF,aAAa,KAAK,CAAC,IAAI,CAACG,CAAAA,IAAKA,EAAE,OAAO,KAAKxB;YACjE,IAAIuB,eACA,OAAOJ,OAAO,IAAI,CAAC,IAAIM,wBAAwB;gBAAEzB;YAAQ;YAI7D,MAAM0B,eAAe,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAACV,OAAO,EAAE;YACnE,MAAMW,sBAAsBD,aAAa,IAAI,CAACE,CAAAA,KAEtCA,GAAG,OAAO,KAAK7B,MAAM,OAAO,IAC5B6B,GAAG,eAAe,KAAK7B,MAAM,eAAe,IAC5C6B,GAAG,aAAa,KAAK7B,MAAM,aAAa;YAIhD,IAAI4B,qBACA,OAAOR,OAAO,IAAI,CACd,IAAIM,wBAAwB;gBACxBzB;gBACA,SAAS,CAAC,OAAO,EAAEA,QAAQ,qCAAqC,CAAC;YACrE;YAIR,MAAM6B,SAASR,aAAa,KAAK;YAEjC,IAAI;gBAEA,KAAK,MAAME,iBAAiBM,OAAQ;oBAChCC,wBAAwB;wBACpBP;wBACAxB;oBACJ;oBACAgC,wBAAwB;wBACpBR;wBACAxB;oBACJ;oBACAiC,sBAAsB;wBAClBT;wBACAxB;oBACJ;gBACJ;gBAGA,MAAMkC,oBAAoB;oBACtBJ;oBACA9B;oBACA,SAAS,IAAI,CAAC,UAAU;gBAC5B;YACJ,EAAE,OAAOmB,OAAO;gBACZ,OAAOC,OAAO,IAAI,CACd,IAAId,qBAAqB;oBAAE,SAASa,MAAM,OAAO;oBAAE,MAAMA,MAAM,IAAI;gBAAC;YAE5E;YAGAnB,MAAM,IAAI,GAAGmC,cAAcnC;YAE3B,MAAMoC,SAAS,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAACpC,MAAM,MAAM;YAGrE,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACvC,OAAO;oBACH,GAAGA,KAAK;oBACRoC;gBACJ;YACJ;YAGA,IAAI,CAAC,UAAU,CAAC,KAAK;YAErB,OAAOhB,OAAO,EAAE,CAACpB;QACrB,EAAE,OAAOmB,OAAO;YACZ,OAAOC,OAAO,IAAI,CAAC,IAAIG,sBAAsBJ;QACjD;IACJ;AACJ;AAEO,MAAMkB,sDAA4BC,0BAAAA,oBAA0C,CAAC;IAChF,gBAAgB/B;IAChB,cAAc;QACVgC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"features/contentModel/CreateModelFrom/CreateModelFromRepository.js","sources":["../../../../src/features/contentModel/CreateModelFrom/CreateModelFromRepository.ts"],"sourcesContent":["import camelCase from \"lodash/camelCase.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { CreateModelFromRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport {\n ModelCache,\n ModelsFetcher,\n PluginModelsProvider\n} from \"~/features/contentModel/shared/abstractions.js\";\nimport {\n ModelAlreadyExistsError,\n ModelPersistenceError,\n ModelValidationError\n} from \"~/domain/contentModel/errors.js\";\nimport { CmsContext } from \"~/features/shared/abstractions.js\";\nimport { CreateModelStorageOperation } from \"~/features/shared/storageOperations/model/CreateModelStorageOperation.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport {\n validateExistingModelId,\n validateModelIdAllowed\n} from \"~/crud/contentModel/validate/modelId.js\";\nimport { validateEndingAllowed } from \"~/crud/contentModel/validate/endingAllowed.js\";\nimport { validateSingularApiName } from \"~/domain/contentModel/validation/singularApiName.js\";\nimport { validatePluralApiName } from \"~/domain/contentModel/validation/pluralApiName.js\";\nimport { validateModelFields } from \"~/domain/contentModel/validation/modelFields.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { ensureTypeTag } from \"~/domain/contentModel/ensureTypeTag.js\";\nimport { ModelFieldCompression } from \"~/features/contentModel/ModelFieldCompression/index.js\";\n\n/**\n * Generate modelId from model following the exact logic from beforeCreate.ts\n */\nconst getModelId = (model: { modelId?: string; name?: string }): string => {\n const { modelId, name } = model;\n const value = modelId ? modelId.trim() : null;\n if (value) {\n const isModelIdValid = camelCase(value).toLowerCase() === value.toLowerCase();\n if (isModelIdValid) {\n return value;\n }\n return camelCase(value);\n } else if (name) {\n return camelCase(name.trim());\n }\n throw new ModelValidationError(\n `There is no \"modelId\" or \"name\" passed into the create model from method.`\n );\n};\n\n/**\n * CreateModelFromRepository - Validates domain rules and persists cloned model.\n *\n * Responsibilities:\n * - Generate modelId from input\n * - Validate modelId is allowed (not in disallowed list)\n * - Validate API name endings\n * - Validate modelId uniqueness (database + plugins)\n * - Validate API name uniqueness (database + plugins)\n * - Validate plugin conflicts\n * - Validate model fields\n * - Persist to storage\n * - Clear ModelCache after successful create\n */\nclass CreateModelFromRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private readonly modelCache: ModelCache.Interface,\n private readonly pluginModelsProvider: PluginModelsProvider.Interface,\n private readonly modelsFetcher: ModelsFetcher.Interface,\n private readonly createModel: CreateModelStorageOperation.Interface,\n private readonly tenantContext: TenantContext.Interface,\n private readonly cmsContext: CmsContext.Interface,\n private readonly modelFieldCompression: ModelFieldCompression.Interface\n ) {}\n\n async execute(model: CmsModel): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n\n // Generate modelId using the exact logic from beforeCreate.ts\n const modelId = getModelId(model);\n model.modelId = modelId;\n\n // Validate modelId is allowed (not in disallowed list)\n try {\n validateModelIdAllowed({ model });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({ message: error.message, data: error.data })\n );\n }\n\n // Validate API name endings\n try {\n validateEndingAllowed({ model });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({ message: error.message, data: error.data })\n );\n }\n\n // Validate modelId uniqueness (database)\n const modelsResult = await this.modelsFetcher.fetchAll();\n if (modelsResult.isFail()) {\n return Result.fail(new ModelPersistenceError(modelsResult.error));\n }\n\n const existingModel = modelsResult.value.find(m => m.modelId === modelId);\n if (existingModel) {\n return Result.fail(new ModelAlreadyExistsError({ modelId }));\n }\n\n // Check for plugin model conflicts\n const pluginModels = await this.pluginModelsProvider.list(tenant.id);\n const pluginModelConflict = pluginModels.find(pm => {\n return (\n pm.modelId === model.modelId ||\n pm.singularApiName === model.singularApiName ||\n pm.pluralApiName === model.pluralApiName\n );\n });\n\n if (pluginModelConflict) {\n return Result.fail(\n new ModelAlreadyExistsError({\n modelId,\n message: `Model \"${modelId}\" is already registered via a plugin.`\n })\n );\n }\n\n const models = modelsResult.value;\n\n try {\n // Validate uniqueness\n for (const existingModel of models) {\n validateExistingModelId({\n existingModel,\n model\n });\n validateSingularApiName({\n existingModel,\n model\n });\n validatePluralApiName({\n existingModel,\n model\n });\n }\n\n // Validate model fields\n await validateModelFields({\n models,\n model,\n context: this.cmsContext\n });\n } catch (error) {\n return Result.fail(\n new ModelValidationError({ message: error.message, data: error.data })\n );\n }\n\n // Ensure type tags\n model.tags = ensureTypeTag(model);\n\n const fields = await this.modelFieldCompression.compress(model.fields);\n\n // Persist to storage\n await this.createModel.execute({\n model: {\n ...model,\n fields\n }\n });\n\n // Clear cache\n this.modelCache.clear();\n\n return Result.ok();\n } catch (error) {\n return Result.fail(new ModelPersistenceError(error as Error));\n }\n }\n}\n\nexport const CreateModelFromRepository = RepositoryAbstraction.createImplementation({\n implementation: CreateModelFromRepositoryImpl,\n dependencies: [\n ModelCache,\n PluginModelsProvider,\n ModelsFetcher,\n CreateModelStorageOperation,\n TenantContext,\n CmsContext,\n ModelFieldCompression\n ]\n});\n"],"names":["getModelId","model","modelId","name","value","isModelIdValid","camelCase","ModelValidationError","CreateModelFromRepositoryImpl","modelCache","pluginModelsProvider","modelsFetcher","createModel","tenantContext","cmsContext","modelFieldCompression","tenant","validateModelIdAllowed","error","Result","validateEndingAllowed","modelsResult","ModelPersistenceError","existingModel","m","ModelAlreadyExistsError","pluginModels","pluginModelConflict","pm","models","validateExistingModelId","validateSingularApiName","validatePluralApiName","validateModelFields","ensureTypeTag","fields","CreateModelFromRepository","RepositoryAbstraction","ModelCache","PluginModelsProvider","ModelsFetcher","CreateModelStorageOperation","TenantContext","CmsContext","ModelFieldCompression"],"mappings":";;;;;;;;;;;;;;;AA+BA,MAAMA,aAAa,CAACC;IAChB,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAE,GAAGF;IAC1B,MAAMG,QAAQF,UAAUA,QAAQ,IAAI,KAAK;IACzC,IAAIE,OAAO;QACP,MAAMC,iBAAiBC,UAAUF,OAAO,WAAW,OAAOA,MAAM,WAAW;QAC3E,IAAIC,gBACA,OAAOD;QAEX,OAAOE,UAAUF;IACrB;IAAO,IAAID,MACP,OAAOG,UAAUH,KAAK,IAAI;IAE9B,MAAM,IAAII,qBACN;AAER;AAgBA,MAAMC;IACF,YACqBC,UAAgC,EAChCC,oBAAoD,EACpDC,aAAsC,EACtCC,WAAkD,EAClDC,aAAsC,EACtCC,UAAgC,EAChCC,qBAAsD,CACzE;aAPmBN,UAAU,GAAVA;aACAC,oBAAoB,GAApBA;aACAC,aAAa,GAAbA;aACAC,WAAW,GAAXA;aACAC,aAAa,GAAbA;aACAC,UAAU,GAAVA;aACAC,qBAAqB,GAArBA;IAClB;IAEH,MAAM,QAAQd,KAAe,EAAsD;QAC/E,IAAI;YACA,MAAMe,SAAS,IAAI,CAAC,aAAa,CAAC,SAAS;YAG3C,MAAMd,UAAUF,WAAWC;YAC3BA,MAAM,OAAO,GAAGC;YAGhB,IAAI;gBACAe,uBAAuB;oBAAEhB;gBAAM;YACnC,EAAE,OAAOiB,OAAO;gBACZ,OAAOC,OAAO,IAAI,CACd,IAAIZ,qBAAqB;oBAAE,SAASW,MAAM,OAAO;oBAAE,MAAMA,MAAM,IAAI;gBAAC;YAE5E;YAGA,IAAI;gBACAE,sBAAsB;oBAAEnB;gBAAM;YAClC,EAAE,OAAOiB,OAAO;gBACZ,OAAOC,OAAO,IAAI,CACd,IAAIZ,qBAAqB;oBAAE,SAASW,MAAM,OAAO;oBAAE,MAAMA,MAAM,IAAI;gBAAC;YAE5E;YAGA,MAAMG,eAAe,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ;YACtD,IAAIA,aAAa,MAAM,IACnB,OAAOF,OAAO,IAAI,CAAC,IAAIG,sBAAsBD,aAAa,KAAK;YAGnE,MAAME,gBAAgBF,aAAa,KAAK,CAAC,IAAI,CAACG,CAAAA,IAAKA,EAAE,OAAO,KAAKtB;YACjE,IAAIqB,eACA,OAAOJ,OAAO,IAAI,CAAC,IAAIM,wBAAwB;gBAAEvB;YAAQ;YAI7D,MAAMwB,eAAe,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAACV,OAAO,EAAE;YACnE,MAAMW,sBAAsBD,aAAa,IAAI,CAACE,CAAAA,KAEtCA,GAAG,OAAO,KAAK3B,MAAM,OAAO,IAC5B2B,GAAG,eAAe,KAAK3B,MAAM,eAAe,IAC5C2B,GAAG,aAAa,KAAK3B,MAAM,aAAa;YAIhD,IAAI0B,qBACA,OAAOR,OAAO,IAAI,CACd,IAAIM,wBAAwB;gBACxBvB;gBACA,SAAS,CAAC,OAAO,EAAEA,QAAQ,qCAAqC,CAAC;YACrE;YAIR,MAAM2B,SAASR,aAAa,KAAK;YAEjC,IAAI;gBAEA,KAAK,MAAME,iBAAiBM,OAAQ;oBAChCC,wBAAwB;wBACpBP;wBACAtB;oBACJ;oBACA8B,wBAAwB;wBACpBR;wBACAtB;oBACJ;oBACA+B,sBAAsB;wBAClBT;wBACAtB;oBACJ;gBACJ;gBAGA,MAAMgC,oBAAoB;oBACtBJ;oBACA5B;oBACA,SAAS,IAAI,CAAC,UAAU;gBAC5B;YACJ,EAAE,OAAOiB,OAAO;gBACZ,OAAOC,OAAO,IAAI,CACd,IAAIZ,qBAAqB;oBAAE,SAASW,MAAM,OAAO;oBAAE,MAAMA,MAAM,IAAI;gBAAC;YAE5E;YAGAjB,MAAM,IAAI,GAAGiC,cAAcjC;YAE3B,MAAMkC,SAAS,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAClC,MAAM,MAAM;YAGrE,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;gBAC3B,OAAO;oBACH,GAAGA,KAAK;oBACRkC;gBACJ;YACJ;YAGA,IAAI,CAAC,UAAU,CAAC,KAAK;YAErB,OAAOhB,OAAO,EAAE;QACpB,EAAE,OAAOD,OAAO;YACZ,OAAOC,OAAO,IAAI,CAAC,IAAIG,sBAAsBJ;QACjD;IACJ;AACJ;AAEO,MAAMkB,sDAA4BC,0BAAAA,oBAA0C,CAAC;IAChF,gBAAgB7B;IAChB,cAAc;QACV8B;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -77,10 +77,10 @@ class CreateModelFromUseCaseImpl {
77
77
  return Result.fail(result.error);
78
78
  }
79
79
  await this.eventPublisher.publish(new ModelAfterCreateFromEvent({
80
- model: result.value,
80
+ model,
81
81
  original
82
82
  }));
83
- return Result.ok(result.value);
83
+ return Result.ok(model);
84
84
  }
85
85
  }
86
86
  const CreateModelFromUseCase_CreateModelFromUseCase = CreateModelFromUseCase.createImplementation({
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentModel/CreateModelFrom/CreateModelFromUseCase.js","sources":["../../../../src/features/contentModel/CreateModelFrom/CreateModelFromUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { CreateModelFromUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { CreateModelFromRepository } from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { ModelBeforeCreateFromEvent } from \"./events.js\";\nimport { ModelAfterCreateFromEvent } from \"./events.js\";\nimport { ModelCreateFromErrorEvent } from \"./events.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { ModelNotAuthorizedError, ModelValidationError } from \"~/domain/contentModel/errors.js\";\nimport { createZodError } from \"@webiny/utils\";\nimport { removeUndefinedValues } from \"@webiny/utils\";\nimport { createModelCreateFromValidation } from \"~/domain/contentModel/schemas.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport type { CmsModelCreateFromInput } from \"~/types/index.js\";\nimport { GetModelUseCase } from \"~/features/contentModel/GetModel/index.js\";\n\n/**\n * CreateModelFromUseCase - Clone/copy a model from existing model.\n *\n * Responsibilities:\n * - Validate input (Zod)\n * - Fetch original model\n * - Create new model preserving fields and layout\n * - Handle group changes\n * - Access control checks\n * - Publish before event\n * - Delegate to repository for validation and persistence\n * - Publish after event or error event\n *\n * Note: Repository handles domain validations (modelId generation, uniqueness, etc.)\n */\nclass CreateModelFromUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private getModelUseCase: GetModelUseCase.Interface,\n private eventPublisher: EventPublisher.Interface,\n private repository: CreateModelFromRepository.Interface,\n private accessControl: AccessControl.Interface,\n private tenantContext: TenantContext.Interface,\n private identityContext: IdentityContext.Interface\n ) {}\n\n async execute(\n modelId: string,\n input: CmsModelCreateFromInput\n ): Promise<Result<CmsModel, UseCaseAbstraction.Error>> {\n // Initial access control check\n const canAccess = await this.accessControl.canAccessModel({ rwd: \"w\" });\n if (!canAccess) {\n return Result.fail(new ModelNotAuthorizedError());\n }\n\n // Get the original model (with access control check)\n const getResult = await this.getModelUseCase.execute(modelId);\n if (getResult.isFail()) {\n return getResult;\n }\n\n const original = getResult.value;\n\n // Validate input (merge with original description if not provided)\n const validationResult = await createModelCreateFromValidation().safeParseAsync({\n ...input,\n description: input.description || original.description\n });\n\n if (!validationResult.success) {\n const zodError = createZodError(validationResult.error);\n return Result.fail(new ModelValidationError(zodError.message));\n }\n\n const data = removeUndefinedValues(validationResult.data);\n\n // Create new model from original (preserve fields and layout)\n const identity = this.identityContext.getIdentity();\n const tenant = this.tenantContext.getTenant();\n\n const model: CmsModel = {\n ...original,\n isPlugin: undefined,\n group: input.group || original.group,\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n icon: data.icon,\n name: data.name,\n modelId: data.modelId || \"\", // Will be set by repository\n description: data.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n tenant: original.tenant || tenant.id\n };\n\n // Access control check on the new model\n const canAccessModel = await this.accessControl.canAccessModel({ model, rwd: \"w\" });\n if (!canAccessModel) {\n return Result.fail(ModelNotAuthorizedError.fromModel(model));\n }\n\n // Publish before event\n await this.eventPublisher.publish(\n new ModelBeforeCreateFromEvent({ model, original, input: data })\n );\n\n // Persist via repository (repository will validate and set modelId)\n const result = await this.repository.execute(model);\n if (result.isFail()) {\n // Publish error event\n await this.eventPublisher.publish(\n new ModelCreateFromErrorEvent({\n input: data,\n model,\n original,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new ModelAfterCreateFromEvent({\n model: result.value,\n original\n })\n );\n\n return Result.ok(result.value);\n }\n}\n\nexport const CreateModelFromUseCase = UseCaseAbstraction.createImplementation({\n implementation: CreateModelFromUseCaseImpl,\n dependencies: [\n GetModelUseCase,\n EventPublisher,\n CreateModelFromRepository,\n AccessControl,\n TenantContext,\n IdentityContext\n ]\n});\n"],"names":["CreateModelFromUseCaseImpl","getModelUseCase","eventPublisher","repository","accessControl","tenantContext","identityContext","modelId","input","canAccess","Result","ModelNotAuthorizedError","getResult","original","validationResult","createModelCreateFromValidation","zodError","createZodError","ModelValidationError","data","removeUndefinedValues","identity","tenant","model","undefined","Date","canAccessModel","ModelBeforeCreateFromEvent","result","ModelCreateFromErrorEvent","ModelAfterCreateFromEvent","CreateModelFromUseCase","UseCaseAbstraction","GetModelUseCase","EventPublisher","CreateModelFromRepository","AccessControl","TenantContext","IdentityContext"],"mappings":";;;;;;;;;;;AAiCA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,cAAwC,EACxCC,UAA+C,EAC/CC,aAAsC,EACtCC,aAAsC,EACtCC,eAA0C,CACpD;aANUL,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAM,QACFC,OAAe,EACfC,KAA8B,EACqB;QAEnD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,KAAK;QAAI;QACrE,IAAI,CAACA,WACD,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAI3B,MAAMC,YAAY,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACL;QACrD,IAAIK,UAAU,MAAM,IAChB,OAAOA;QAGX,MAAMC,WAAWD,UAAU,KAAK;QAGhC,MAAME,mBAAmB,MAAMC,kCAAkC,cAAc,CAAC;YAC5E,GAAGP,KAAK;YACR,aAAaA,MAAM,WAAW,IAAIK,SAAS,WAAW;QAC1D;QAEA,IAAI,CAACC,iBAAiB,OAAO,EAAE;YAC3B,MAAME,WAAWC,eAAeH,iBAAiB,KAAK;YACtD,OAAOJ,OAAO,IAAI,CAAC,IAAIQ,qBAAqBF,SAAS,OAAO;QAChE;QAEA,MAAMG,OAAOC,sBAAsBN,iBAAiB,IAAI;QAGxD,MAAMO,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,MAAMC,SAAS,IAAI,CAAC,aAAa,CAAC,SAAS;QAE3C,MAAMC,QAAkB;YACpB,GAAGV,QAAQ;YACX,UAAUW;YACV,OAAOhB,MAAM,KAAK,IAAIK,SAAS,KAAK;YACpC,iBAAiBM,KAAK,eAAe;YACrC,eAAeA,KAAK,aAAa;YACjC,MAAMA,KAAK,IAAI;YACf,MAAMA,KAAK,IAAI;YACf,SAASA,KAAK,OAAO,IAAI;YACzB,aAAaA,KAAK,WAAW,IAAI;YACjC,WAAW;gBACP,IAAIE,SAAS,EAAE;gBACf,aAAaA,SAAS,WAAW;gBACjC,MAAMA,SAAS,IAAI;YACvB;YACA,WAAW,IAAII,OAAO,WAAW;YACjC,SAAS,IAAIA,OAAO,WAAW;YAC/B,QAAQZ,SAAS,MAAM,IAAIS,OAAO,EAAE;QACxC;QAGA,MAAMI,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEH;YAAO,KAAK;QAAI;QACjF,IAAI,CAACG,gBACD,OAAOhB,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACY;QAIzD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAII,2BAA2B;YAAEJ;YAAOV;YAAU,OAAOM;QAAK;QAIlE,MAAMS,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACL;QAC7C,IAAIK,OAAO,MAAM,IAAI;YAEjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,0BAA0B;gBAC1B,OAAOV;gBACPI;gBACAV;gBACA,OAAOe,OAAO,KAAK;YACvB;YAEJ,OAAOlB,OAAO,IAAI,CAACkB,OAAO,KAAK;QACnC;QAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,0BAA0B;YAC1B,OAAOF,OAAO,KAAK;YACnBf;QACJ;QAGJ,OAAOH,OAAO,EAAE,CAACkB,OAAO,KAAK;IACjC;AACJ;AAEO,MAAMG,gDAAyBC,uBAAAA,oBAAuC,CAAC;IAC1E,gBAAgBhC;IAChB,cAAc;QACViC;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"features/contentModel/CreateModelFrom/CreateModelFromUseCase.js","sources":["../../../../src/features/contentModel/CreateModelFrom/CreateModelFromUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { CreateModelFromUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { CreateModelFromRepository } from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { ModelBeforeCreateFromEvent } from \"./events.js\";\nimport { ModelAfterCreateFromEvent } from \"./events.js\";\nimport { ModelCreateFromErrorEvent } from \"./events.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { ModelNotAuthorizedError, ModelValidationError } from \"~/domain/contentModel/errors.js\";\nimport { createZodError } from \"@webiny/utils\";\nimport { removeUndefinedValues } from \"@webiny/utils\";\nimport { createModelCreateFromValidation } from \"~/domain/contentModel/schemas.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport type { CmsModelCreateFromInput } from \"~/types/index.js\";\nimport { GetModelUseCase } from \"~/features/contentModel/GetModel/index.js\";\n\n/**\n * CreateModelFromUseCase - Clone/copy a model from existing model.\n *\n * Responsibilities:\n * - Validate input (Zod)\n * - Fetch original model\n * - Create new model preserving fields and layout\n * - Handle group changes\n * - Access control checks\n * - Publish before event\n * - Delegate to repository for validation and persistence\n * - Publish after event or error event\n *\n * Note: Repository handles domain validations (modelId generation, uniqueness, etc.)\n */\nclass CreateModelFromUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private getModelUseCase: GetModelUseCase.Interface,\n private eventPublisher: EventPublisher.Interface,\n private repository: CreateModelFromRepository.Interface,\n private accessControl: AccessControl.Interface,\n private tenantContext: TenantContext.Interface,\n private identityContext: IdentityContext.Interface\n ) {}\n\n async execute(\n modelId: string,\n input: CmsModelCreateFromInput\n ): Promise<Result<CmsModel, UseCaseAbstraction.Error>> {\n // Initial access control check\n const canAccess = await this.accessControl.canAccessModel({ rwd: \"w\" });\n if (!canAccess) {\n return Result.fail(new ModelNotAuthorizedError());\n }\n\n // Get the original model (with access control check)\n const getResult = await this.getModelUseCase.execute(modelId);\n if (getResult.isFail()) {\n return getResult;\n }\n\n const original = getResult.value;\n\n // Validate input (merge with original description if not provided)\n const validationResult = await createModelCreateFromValidation().safeParseAsync({\n ...input,\n description: input.description || original.description\n });\n\n if (!validationResult.success) {\n const zodError = createZodError(validationResult.error);\n return Result.fail(new ModelValidationError(zodError.message));\n }\n\n const data = removeUndefinedValues(validationResult.data);\n\n // Create new model from original (preserve fields and layout)\n const identity = this.identityContext.getIdentity();\n const tenant = this.tenantContext.getTenant();\n\n const model: CmsModel = {\n ...original,\n isPlugin: undefined,\n group: input.group || original.group,\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n icon: data.icon,\n name: data.name,\n modelId: data.modelId || \"\", // Will be set by repository\n description: data.description || \"\",\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n tenant: original.tenant || tenant.id\n };\n\n // Access control check on the new model\n const canAccessModel = await this.accessControl.canAccessModel({ model, rwd: \"w\" });\n if (!canAccessModel) {\n return Result.fail(ModelNotAuthorizedError.fromModel(model));\n }\n\n // Publish before event\n await this.eventPublisher.publish(\n new ModelBeforeCreateFromEvent({ model, original, input: data })\n );\n\n // Persist via repository (repository will validate and set modelId)\n const result = await this.repository.execute(model);\n if (result.isFail()) {\n // Publish error event\n await this.eventPublisher.publish(\n new ModelCreateFromErrorEvent({\n input: data,\n model,\n original,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(new ModelAfterCreateFromEvent({ model, original }));\n\n return Result.ok(model);\n }\n}\n\nexport const CreateModelFromUseCase = UseCaseAbstraction.createImplementation({\n implementation: CreateModelFromUseCaseImpl,\n dependencies: [\n GetModelUseCase,\n EventPublisher,\n CreateModelFromRepository,\n AccessControl,\n TenantContext,\n IdentityContext\n ]\n});\n"],"names":["CreateModelFromUseCaseImpl","getModelUseCase","eventPublisher","repository","accessControl","tenantContext","identityContext","modelId","input","canAccess","Result","ModelNotAuthorizedError","getResult","original","validationResult","createModelCreateFromValidation","zodError","createZodError","ModelValidationError","data","removeUndefinedValues","identity","tenant","model","undefined","Date","canAccessModel","ModelBeforeCreateFromEvent","result","ModelCreateFromErrorEvent","ModelAfterCreateFromEvent","CreateModelFromUseCase","UseCaseAbstraction","GetModelUseCase","EventPublisher","CreateModelFromRepository","AccessControl","TenantContext","IdentityContext"],"mappings":";;;;;;;;;;;AAiCA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,cAAwC,EACxCC,UAA+C,EAC/CC,aAAsC,EACtCC,aAAsC,EACtCC,eAA0C,CACpD;aANUL,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAM,QACFC,OAAe,EACfC,KAA8B,EACqB;QAEnD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,KAAK;QAAI;QACrE,IAAI,CAACA,WACD,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAI3B,MAAMC,YAAY,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACL;QACrD,IAAIK,UAAU,MAAM,IAChB,OAAOA;QAGX,MAAMC,WAAWD,UAAU,KAAK;QAGhC,MAAME,mBAAmB,MAAMC,kCAAkC,cAAc,CAAC;YAC5E,GAAGP,KAAK;YACR,aAAaA,MAAM,WAAW,IAAIK,SAAS,WAAW;QAC1D;QAEA,IAAI,CAACC,iBAAiB,OAAO,EAAE;YAC3B,MAAME,WAAWC,eAAeH,iBAAiB,KAAK;YACtD,OAAOJ,OAAO,IAAI,CAAC,IAAIQ,qBAAqBF,SAAS,OAAO;QAChE;QAEA,MAAMG,OAAOC,sBAAsBN,iBAAiB,IAAI;QAGxD,MAAMO,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,MAAMC,SAAS,IAAI,CAAC,aAAa,CAAC,SAAS;QAE3C,MAAMC,QAAkB;YACpB,GAAGV,QAAQ;YACX,UAAUW;YACV,OAAOhB,MAAM,KAAK,IAAIK,SAAS,KAAK;YACpC,iBAAiBM,KAAK,eAAe;YACrC,eAAeA,KAAK,aAAa;YACjC,MAAMA,KAAK,IAAI;YACf,MAAMA,KAAK,IAAI;YACf,SAASA,KAAK,OAAO,IAAI;YACzB,aAAaA,KAAK,WAAW,IAAI;YACjC,WAAW;gBACP,IAAIE,SAAS,EAAE;gBACf,aAAaA,SAAS,WAAW;gBACjC,MAAMA,SAAS,IAAI;YACvB;YACA,WAAW,IAAII,OAAO,WAAW;YACjC,SAAS,IAAIA,OAAO,WAAW;YAC/B,QAAQZ,SAAS,MAAM,IAAIS,OAAO,EAAE;QACxC;QAGA,MAAMI,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEH;YAAO,KAAK;QAAI;QACjF,IAAI,CAACG,gBACD,OAAOhB,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACY;QAIzD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAII,2BAA2B;YAAEJ;YAAOV;YAAU,OAAOM;QAAK;QAIlE,MAAMS,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACL;QAC7C,IAAIK,OAAO,MAAM,IAAI;YAEjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,0BAA0B;gBAC1B,OAAOV;gBACPI;gBACAV;gBACA,OAAOe,OAAO,KAAK;YACvB;YAEJ,OAAOlB,OAAO,IAAI,CAACkB,OAAO,KAAK;QACnC;QAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAIE,0BAA0B;YAAEP;YAAOV;QAAS;QAElF,OAAOH,OAAO,EAAE,CAACa;IACrB;AACJ;AAEO,MAAMQ,gDAAyBC,uBAAAA,oBAAuC,CAAC;IAC1E,gBAAgBhC;IAChB,cAAc;QACViC;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -30,7 +30,7 @@ export declare namespace CreateModelFromUseCase {
30
30
  * CreateModelFromRepository - Validates domain rules and persists cloned model.
31
31
  */
32
32
  export interface ICreateModelFromRepository {
33
- execute(model: CmsModel): Promise<Result<CmsModel, RepositoryError>>;
33
+ execute(model: CmsModel): Promise<Result<void, RepositoryError>>;
34
34
  }
35
35
  export interface ICreateModelFromRepositoryErrors {
36
36
  alreadyExists: ModelAlreadyExistsError;
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentModel/CreateModelFrom/abstractions.js","sources":["../../../../src/features/contentModel/CreateModelFrom/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { CmsModel, CmsModelCreateFromInput } from \"~/types/index.js\";\nimport {\n ModelAlreadyExistsError,\n ModelNotAuthorizedError,\n type ModelNotFoundError,\n type ModelPersistenceError,\n type ModelValidationError\n} from \"~/domain/contentModel/errors.js\";\nimport {\n type GroupNotAuthorizedError,\n type GroupNotFoundError\n} from \"~/domain/contentModelGroup/errors.js\";\n\n/**\n * CreateModelFrom Use Case (Clone/Copy Model)\n */\nexport interface ICreateModelFromUseCase {\n execute(\n modelId: string,\n input: CmsModelCreateFromInput\n ): Promise<Result<CmsModel, UseCaseError>>;\n}\n\nexport interface ICreateModelFromUseCaseErrors {\n notFound: ModelNotFoundError;\n notAuthorized: ModelNotAuthorizedError;\n validation: ModelValidationError;\n alreadyExists: ModelAlreadyExistsError;\n persistence: ModelPersistenceError;\n groupNotFound: GroupNotFoundError;\n groupNotAccessible: GroupNotAuthorizedError;\n}\n\ntype UseCaseError = ICreateModelFromUseCaseErrors[keyof ICreateModelFromUseCaseErrors];\n\n/** Create a content model by cloning an existing one. */\nexport const CreateModelFromUseCase =\n createAbstraction<ICreateModelFromUseCase>(\"CreateModelFromUseCase\");\n\nexport namespace CreateModelFromUseCase {\n export type Interface = ICreateModelFromUseCase;\n export type Input = CmsModelCreateFromInput;\n\n export type Error = UseCaseError;\n export type Return = Promise<Result<CmsModel, UseCaseError>>;\n}\n\n/**\n * CreateModelFromRepository - Validates domain rules and persists cloned model.\n */\nexport interface ICreateModelFromRepository {\n execute(model: CmsModel): Promise<Result<CmsModel, RepositoryError>>;\n}\n\nexport interface ICreateModelFromRepositoryErrors {\n alreadyExists: ModelAlreadyExistsError;\n validation: ModelValidationError;\n persistence: ModelPersistenceError;\n}\n\ntype RepositoryError = ICreateModelFromRepositoryErrors[keyof ICreateModelFromRepositoryErrors];\n\nexport const CreateModelFromRepository = createAbstraction<ICreateModelFromRepository>(\n \"CreateModelFromRepository\"\n);\n\nexport namespace CreateModelFromRepository {\n export type Interface = ICreateModelFromRepository;\n export type Error = RepositoryError;\n}\n"],"names":["CreateModelFromUseCase","createAbstraction","CreateModelFromRepository"],"mappings":";AAqCO,MAAMA,yBACTC,kBAA2C;AAyBxC,MAAMC,4BAA4BD,kBACrC"}
1
+ {"version":3,"file":"features/contentModel/CreateModelFrom/abstractions.js","sources":["../../../../src/features/contentModel/CreateModelFrom/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { CmsModel, CmsModelCreateFromInput } from \"~/types/index.js\";\nimport {\n ModelAlreadyExistsError,\n ModelNotAuthorizedError,\n type ModelNotFoundError,\n type ModelPersistenceError,\n type ModelValidationError\n} from \"~/domain/contentModel/errors.js\";\nimport {\n type GroupNotAuthorizedError,\n type GroupNotFoundError\n} from \"~/domain/contentModelGroup/errors.js\";\n\n/**\n * CreateModelFrom Use Case (Clone/Copy Model)\n */\nexport interface ICreateModelFromUseCase {\n execute(\n modelId: string,\n input: CmsModelCreateFromInput\n ): Promise<Result<CmsModel, UseCaseError>>;\n}\n\nexport interface ICreateModelFromUseCaseErrors {\n notFound: ModelNotFoundError;\n notAuthorized: ModelNotAuthorizedError;\n validation: ModelValidationError;\n alreadyExists: ModelAlreadyExistsError;\n persistence: ModelPersistenceError;\n groupNotFound: GroupNotFoundError;\n groupNotAccessible: GroupNotAuthorizedError;\n}\n\ntype UseCaseError = ICreateModelFromUseCaseErrors[keyof ICreateModelFromUseCaseErrors];\n\n/** Create a content model by cloning an existing one. */\nexport const CreateModelFromUseCase =\n createAbstraction<ICreateModelFromUseCase>(\"CreateModelFromUseCase\");\n\nexport namespace CreateModelFromUseCase {\n export type Interface = ICreateModelFromUseCase;\n export type Input = CmsModelCreateFromInput;\n\n export type Error = UseCaseError;\n export type Return = Promise<Result<CmsModel, UseCaseError>>;\n}\n\n/**\n * CreateModelFromRepository - Validates domain rules and persists cloned model.\n */\nexport interface ICreateModelFromRepository {\n execute(model: CmsModel): Promise<Result<void, RepositoryError>>;\n}\n\nexport interface ICreateModelFromRepositoryErrors {\n alreadyExists: ModelAlreadyExistsError;\n validation: ModelValidationError;\n persistence: ModelPersistenceError;\n}\n\ntype RepositoryError = ICreateModelFromRepositoryErrors[keyof ICreateModelFromRepositoryErrors];\n\nexport const CreateModelFromRepository = createAbstraction<ICreateModelFromRepository>(\n \"CreateModelFromRepository\"\n);\n\nexport namespace CreateModelFromRepository {\n export type Interface = ICreateModelFromRepository;\n export type Error = RepositoryError;\n}\n"],"names":["CreateModelFromUseCase","createAbstraction","CreateModelFromRepository"],"mappings":";AAqCO,MAAMA,yBACTC,kBAA2C;AAyBxC,MAAMC,4BAA4BD,kBACrC"}
@@ -1,9 +1,8 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { DeleteModelRepository as RepositoryAbstraction } from "./abstractions.js";
3
3
  import { ModelCache, ModelsFetcher } from "../../../features/contentModel/shared/abstractions.js";
4
- import { StorageOperations } from "../../../features/shared/abstractions.js";
4
+ import { DeleteModelStorageOperation } from "../../../features/shared/storageOperations/model/DeleteModelStorageOperation.js";
5
5
  import type { CmsModel } from "../../../types/index.js";
6
- import { RuntimeTenant } from "../../../features/runtimeTenant/abstractions.js";
7
6
  /**
8
7
  * DeleteModelRepository - Validates and deletes a model from storage.
9
8
  *
@@ -17,10 +16,9 @@ import { RuntimeTenant } from "../../../features/runtimeTenant/abstractions.js";
17
16
  declare class DeleteModelRepositoryImpl implements RepositoryAbstraction.Interface {
18
17
  private modelCache;
19
18
  private modelsFetcher;
20
- private storageOperations;
21
- private runtimeTenant;
22
- constructor(modelCache: ModelCache.Interface, modelsFetcher: ModelsFetcher.Interface, storageOperations: StorageOperations.Interface, runtimeTenant: RuntimeTenant.Interface);
23
- execute(initialModel: CmsModel): Promise<Result<void, RepositoryAbstraction.Error>>;
19
+ private deleteModel;
20
+ constructor(modelCache: ModelCache.Interface, modelsFetcher: ModelsFetcher.Interface, deleteModel: DeleteModelStorageOperation.Interface);
21
+ execute(model: CmsModel): Promise<Result<void, RepositoryAbstraction.Error>>;
24
22
  }
25
23
  export declare const DeleteModelRepository: typeof DeleteModelRepositoryImpl & {
26
24
  __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IDeleteModelRepository>;
@@ -2,22 +2,19 @@ import { Result } from "@webiny/feature/api";
2
2
  import { DeleteModelRepository } from "./abstractions.js";
3
3
  import { ModelCache, ModelsFetcher } from "../shared/abstractions.js";
4
4
  import { ModelCannotDeleteCodeModelError, ModelPersistenceError } from "../../../domain/contentModel/errors.js";
5
- import { StorageOperations } from "../../shared/abstractions.js";
6
- import { RuntimeTenant } from "../../runtimeTenant/abstractions.js";
5
+ import { DeleteModelStorageOperation } from "../../shared/storageOperations/model/DeleteModelStorageOperation.js";
7
6
  class DeleteModelRepositoryImpl {
8
- constructor(modelCache, modelsFetcher, storageOperations, runtimeTenant){
7
+ constructor(modelCache, modelsFetcher, deleteModel){
9
8
  this.modelCache = modelCache;
10
9
  this.modelsFetcher = modelsFetcher;
11
- this.storageOperations = storageOperations;
12
- this.runtimeTenant = runtimeTenant;
10
+ this.deleteModel = deleteModel;
13
11
  }
14
- async execute(initialModel) {
15
- const model = this.runtimeTenant.assign(initialModel);
12
+ async execute(model) {
16
13
  try {
17
14
  const existingModelResult = await this.modelsFetcher.fetchById(model.modelId);
18
15
  if (existingModelResult.isFail()) return Result.fail(new ModelPersistenceError(existingModelResult.error));
19
16
  if (existingModelResult.value.isPlugin) return Result.fail(new ModelCannotDeleteCodeModelError(model.modelId));
20
- await this.storageOperations.models.delete({
17
+ await this.deleteModel.execute({
21
18
  model
22
19
  });
23
20
  this.modelCache.clear();
@@ -32,8 +29,7 @@ const DeleteModelRepository_DeleteModelRepository = DeleteModelRepository.create
32
29
  dependencies: [
33
30
  ModelCache,
34
31
  ModelsFetcher,
35
- StorageOperations,
36
- RuntimeTenant
32
+ DeleteModelStorageOperation
37
33
  ]
38
34
  });
39
35
  export { DeleteModelRepository_DeleteModelRepository as DeleteModelRepository };
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentModel/DeleteModel/DeleteModelRepository.js","sources":["../../../../src/features/contentModel/DeleteModel/DeleteModelRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { DeleteModelRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { ModelCache, ModelsFetcher } from \"~/features/contentModel/shared/abstractions.js\";\nimport {\n ModelCannotDeleteCodeModelError,\n ModelPersistenceError\n} from \"~/domain/contentModel/errors.js\";\nimport { StorageOperations } from \"~/features/shared/abstractions.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { RuntimeTenant } from \"~/features/runtimeTenant/abstractions.js\";\n\n/**\n * DeleteModelRepository - Validates and deletes a model from storage.\n *\n * Responsibilities:\n * - Validate model is not defined via plugin (core domain rule)\n * - Delete from storage\n * - Clear ModelCache after successful deletion\n *\n * Note: Entry validation and cleanup is handled by decorator\n */\nclass DeleteModelRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private modelCache: ModelCache.Interface,\n private modelsFetcher: ModelsFetcher.Interface,\n private storageOperations: StorageOperations.Interface,\n private runtimeTenant: RuntimeTenant.Interface\n ) {}\n\n async execute(initialModel: CmsModel): Promise<Result<void, RepositoryAbstraction.Error>> {\n const model = this.runtimeTenant.assign(initialModel);\n try {\n // Check if this is a plugin model\n const existingModelResult = await this.modelsFetcher.fetchById(model.modelId);\n if (existingModelResult.isFail()) {\n return Result.fail(new ModelPersistenceError(existingModelResult.error));\n }\n\n if (existingModelResult.value.isPlugin) {\n return Result.fail(new ModelCannotDeleteCodeModelError(model.modelId));\n }\n\n // Delete from storage\n await this.storageOperations.models.delete({ model });\n\n // Clear cache\n this.modelCache.clear();\n\n return Result.ok();\n } catch (error) {\n return Result.fail(new ModelPersistenceError(error as Error));\n }\n }\n}\n\nexport const DeleteModelRepository = RepositoryAbstraction.createImplementation({\n implementation: DeleteModelRepositoryImpl,\n dependencies: [ModelCache, ModelsFetcher, StorageOperations, RuntimeTenant]\n});\n"],"names":["DeleteModelRepositoryImpl","modelCache","modelsFetcher","storageOperations","runtimeTenant","initialModel","model","existingModelResult","Result","ModelPersistenceError","ModelCannotDeleteCodeModelError","error","DeleteModelRepository","RepositoryAbstraction","ModelCache","ModelsFetcher","StorageOperations","RuntimeTenant"],"mappings":";;;;;;AAqBA,MAAMA;IACF,YACYC,UAAgC,EAChCC,aAAsC,EACtCC,iBAA8C,EAC9CC,aAAsC,CAChD;aAJUH,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,iBAAiB,GAAjBA;aACAC,aAAa,GAAbA;IACT;IAEH,MAAM,QAAQC,YAAsB,EAAsD;QACtF,MAAMC,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAACD;QACxC,IAAI;YAEA,MAAME,sBAAsB,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAACD,MAAM,OAAO;YAC5E,IAAIC,oBAAoB,MAAM,IAC1B,OAAOC,OAAO,IAAI,CAAC,IAAIC,sBAAsBF,oBAAoB,KAAK;YAG1E,IAAIA,oBAAoB,KAAK,CAAC,QAAQ,EAClC,OAAOC,OAAO,IAAI,CAAC,IAAIE,gCAAgCJ,MAAM,OAAO;YAIxE,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;gBAAEA;YAAM;YAGnD,IAAI,CAAC,UAAU,CAAC,KAAK;YAErB,OAAOE,OAAO,EAAE;QACpB,EAAE,OAAOG,OAAO;YACZ,OAAOH,OAAO,IAAI,CAAC,IAAIC,sBAAsBE;QACjD;IACJ;AACJ;AAEO,MAAMC,8CAAwBC,sBAAAA,oBAA0C,CAAC;IAC5E,gBAAgBb;IAChB,cAAc;QAACc;QAAYC;QAAeC;QAAmBC;KAAc;AAC/E"}
1
+ {"version":3,"file":"features/contentModel/DeleteModel/DeleteModelRepository.js","sources":["../../../../src/features/contentModel/DeleteModel/DeleteModelRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { DeleteModelRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { ModelCache, ModelsFetcher } from \"~/features/contentModel/shared/abstractions.js\";\nimport {\n ModelCannotDeleteCodeModelError,\n ModelPersistenceError\n} from \"~/domain/contentModel/errors.js\";\nimport { DeleteModelStorageOperation } from \"~/features/shared/storageOperations/model/DeleteModelStorageOperation.js\";\nimport type { CmsModel } from \"~/types/index.js\";\n\n/**\n * DeleteModelRepository - Validates and deletes a model from storage.\n *\n * Responsibilities:\n * - Validate model is not defined via plugin (core domain rule)\n * - Delete from storage\n * - Clear ModelCache after successful deletion\n *\n * Note: Entry validation and cleanup is handled by decorator\n */\nclass DeleteModelRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private modelCache: ModelCache.Interface,\n private modelsFetcher: ModelsFetcher.Interface,\n private deleteModel: DeleteModelStorageOperation.Interface\n ) {}\n\n async execute(model: CmsModel): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n // Check if this is a plugin model\n const existingModelResult = await this.modelsFetcher.fetchById(model.modelId);\n if (existingModelResult.isFail()) {\n return Result.fail(new ModelPersistenceError(existingModelResult.error));\n }\n\n if (existingModelResult.value.isPlugin) {\n return Result.fail(new ModelCannotDeleteCodeModelError(model.modelId));\n }\n\n // Delete from storage\n await this.deleteModel.execute({ model });\n\n // Clear cache\n this.modelCache.clear();\n\n return Result.ok();\n } catch (error) {\n return Result.fail(new ModelPersistenceError(error as Error));\n }\n }\n}\n\nexport const DeleteModelRepository = RepositoryAbstraction.createImplementation({\n implementation: DeleteModelRepositoryImpl,\n dependencies: [ModelCache, ModelsFetcher, DeleteModelStorageOperation]\n});\n"],"names":["DeleteModelRepositoryImpl","modelCache","modelsFetcher","deleteModel","model","existingModelResult","Result","ModelPersistenceError","ModelCannotDeleteCodeModelError","error","DeleteModelRepository","RepositoryAbstraction","ModelCache","ModelsFetcher","DeleteModelStorageOperation"],"mappings":";;;;;AAoBA,MAAMA;IACF,YACYC,UAAgC,EAChCC,aAAsC,EACtCC,WAAkD,CAC5D;aAHUF,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,WAAW,GAAXA;IACT;IAEH,MAAM,QAAQC,KAAe,EAAsD;QAC/E,IAAI;YAEA,MAAMC,sBAAsB,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAACD,MAAM,OAAO;YAC5E,IAAIC,oBAAoB,MAAM,IAC1B,OAAOC,OAAO,IAAI,CAAC,IAAIC,sBAAsBF,oBAAoB,KAAK;YAG1E,IAAIA,oBAAoB,KAAK,CAAC,QAAQ,EAClC,OAAOC,OAAO,IAAI,CAAC,IAAIE,gCAAgCJ,MAAM,OAAO;YAIxE,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;gBAAEA;YAAM;YAGvC,IAAI,CAAC,UAAU,CAAC,KAAK;YAErB,OAAOE,OAAO,EAAE;QACpB,EAAE,OAAOG,OAAO;YACZ,OAAOH,OAAO,IAAI,CAAC,IAAIC,sBAAsBE;QACjD;IACJ;AACJ;AAEO,MAAMC,8CAAwBC,sBAAAA,oBAA0C,CAAC;IAC5E,gBAAgBX;IAChB,cAAc;QAACY;QAAYC;QAAeC;KAA4B;AAC1E"}
@@ -13,6 +13,7 @@ declare class DeleteModelWithEntryCleanupImpl implements DeleteModelUseCase.Inte
13
13
  private cmsContext;
14
14
  private decoratee;
15
15
  constructor(cmsContext: CmsContext.Interface, decoratee: DeleteModelUseCase.Interface);
16
+ private get cms();
16
17
  execute(modelId: string): Promise<Result<void, DeleteModelUseCase.Error>>;
17
18
  private deleteSingletonEntries;
18
19
  private canDelete;
@@ -1,6 +1,6 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { DeleteModelUseCase } from "./abstractions.js";
3
- import { CmsContext } from "../../shared/abstractions.js";
3
+ import { CmsContext, HeadlessCms } from "../../shared/abstractions.js";
4
4
  import { CMS_MODEL_SINGLETON_TAG } from "../../../constants.js";
5
5
  import { ModelCannotDeleteHasEntriesError, ModelCannotDeleteHasEntriesInTrashError, ModelPersistenceError, ModelValidationError } from "../../../domain/contentModel/errors.js";
6
6
  class DeleteModelWithEntryCleanupImpl {
@@ -8,8 +8,11 @@ class DeleteModelWithEntryCleanupImpl {
8
8
  this.cmsContext = cmsContext;
9
9
  this.decoratee = decoratee;
10
10
  }
11
+ get cms() {
12
+ return this.cmsContext.container.resolve(HeadlessCms);
13
+ }
11
14
  async execute(modelId) {
12
- const model = await this.cmsContext.cms.getModel(modelId);
15
+ const model = await this.cms.getModel(modelId);
13
16
  const tags = Array.isArray(model.tags) ? model.tags : [];
14
17
  if (tags.includes(CMS_MODEL_SINGLETON_TAG)) {
15
18
  try {
@@ -24,26 +27,26 @@ class DeleteModelWithEntryCleanupImpl {
24
27
  return this.decoratee.execute(modelId);
25
28
  }
26
29
  async deleteSingletonEntries(model) {
27
- const [latestEntries] = await this.cmsContext.cms.listLatestEntries(model, {
30
+ const [latestEntries] = await this.cms.listLatestEntries(model, {
28
31
  limit: 10000
29
32
  });
30
- for (const item of latestEntries)await this.cmsContext.cms.deleteEntry(model, item.id, {
33
+ for (const item of latestEntries)await this.cms.deleteEntry(model, item.id, {
31
34
  permanently: true
32
35
  });
33
- const [deletedEntries] = await this.cmsContext.cms.listDeletedEntries(model, {
36
+ const [deletedEntries] = await this.cms.listDeletedEntries(model, {
34
37
  limit: 10000
35
38
  });
36
- for (const item of deletedEntries)await this.cmsContext.cms.deleteEntry(model, item.id, {
39
+ for (const item of deletedEntries)await this.cms.deleteEntry(model, item.id, {
37
40
  permanently: true
38
41
  });
39
42
  }
40
43
  async canDelete(model) {
41
44
  try {
42
- const [latestEntries] = await this.cmsContext.cms.listLatestEntries(model, {
45
+ const [latestEntries] = await this.cms.listLatestEntries(model, {
43
46
  limit: 1
44
47
  });
45
48
  if (latestEntries.length > 0) return Result.fail(new ModelCannotDeleteHasEntriesError(model.modelId));
46
- const [deletedEntries] = await this.cmsContext.cms.listDeletedEntries(model, {
49
+ const [deletedEntries] = await this.cms.listDeletedEntries(model, {
47
50
  limit: 1
48
51
  });
49
52
  if (deletedEntries.length > 0) return Result.fail(new ModelCannotDeleteHasEntriesInTrashError(model.modelId));
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentModel/DeleteModel/DeleteModelWithEntryCleanup.js","sources":["../../../../src/features/contentModel/DeleteModel/DeleteModelWithEntryCleanup.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { DeleteModelUseCase } from \"./abstractions.js\";\nimport { CmsContext } from \"~/features/shared/abstractions.js\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"~/constants.js\";\nimport {\n ModelCannotDeleteHasEntriesError,\n ModelCannotDeleteHasEntriesInTrashError,\n ModelPersistenceError,\n ModelValidationError\n} from \"~/domain/contentModel/errors.js\";\nimport { CmsModel } from \"~/types/model.js\";\n\n/**\n * DeleteModelWithEntryCleanup - Decorator that handles entry cleanup/validation before deletion.\n *\n * Responsibilities:\n * 1. For singleton models: Delete all entries (latest + deleted)\n * 2. For regular models: Check if there are any entries - if yes, throw error\n * 3. Only proceed to the base use case if validations pass\n */\nclass DeleteModelWithEntryCleanupImpl implements DeleteModelUseCase.Interface {\n public constructor(\n private cmsContext: CmsContext.Interface,\n private decoratee: DeleteModelUseCase.Interface\n ) {}\n\n async execute(modelId: string): Promise<Result<void, DeleteModelUseCase.Error>> {\n // First, get the model through the decorated use case's flow (up to before deletion)\n // We need to perform validation before the actual deletion happens\n\n // Get the model from context to check entries\n const model = await this.cmsContext.cms.getModel(modelId);\n\n const tags = Array.isArray(model.tags) ? model.tags : [];\n\n // Handle singleton models: delete all entries\n if (tags.includes(CMS_MODEL_SINGLETON_TAG)) {\n try {\n await this.deleteSingletonEntries(model);\n } catch (error) {\n return Result.fail(\n new ModelValidationError(\n `Failed to delete singleton entries: ${(error as Error).message}`\n )\n );\n }\n\n // Proceed with the actual deletion\n return this.decoratee.execute(modelId);\n }\n\n // Regular models\n const canDelete = await this.canDelete(model);\n if (canDelete.isFail()) {\n return Result.fail(canDelete.error);\n }\n\n // Proceed with the actual deletion\n return this.decoratee.execute(modelId);\n }\n\n private async deleteSingletonEntries(model: any): Promise<void> {\n // Delete all latest entries\n const [latestEntries] = await this.cmsContext.cms.listLatestEntries(model, {\n limit: 10000\n });\n\n for (const item of latestEntries) {\n await this.cmsContext.cms.deleteEntry(model, item.id, {\n permanently: true\n });\n }\n\n // Delete all deleted entries (trash)\n const [deletedEntries] = await this.cmsContext.cms.listDeletedEntries(model, {\n limit: 10000\n });\n\n for (const item of deletedEntries) {\n await this.cmsContext.cms.deleteEntry(model, item.id, {\n permanently: true\n });\n }\n }\n\n private async canDelete(\n model: CmsModel\n ): Promise<\n Result<\n boolean,\n | ModelCannotDeleteHasEntriesError\n | ModelCannotDeleteHasEntriesInTrashError\n | ModelPersistenceError\n >\n > {\n try {\n // Check for latest entries\n const [latestEntries] = await this.cmsContext.cms.listLatestEntries(model, {\n limit: 1\n });\n\n if (latestEntries.length > 0) {\n return Result.fail(new ModelCannotDeleteHasEntriesError(model.modelId));\n }\n\n // Check for deleted entries (trash)\n const [deletedEntries] = await this.cmsContext.cms.listDeletedEntries(model, {\n limit: 1\n });\n\n if (deletedEntries.length > 0) {\n return Result.fail(new ModelCannotDeleteHasEntriesInTrashError(model.modelId));\n }\n } catch (error) {\n return Result.fail(new ModelPersistenceError(error));\n }\n\n return Result.ok(true);\n }\n}\n\nexport const DeleteModelWithEntryCleanup = DeleteModelUseCase.createDecorator({\n decorator: DeleteModelWithEntryCleanupImpl,\n dependencies: [CmsContext]\n});\n"],"names":["DeleteModelWithEntryCleanupImpl","cmsContext","decoratee","modelId","model","tags","Array","CMS_MODEL_SINGLETON_TAG","error","Result","ModelValidationError","canDelete","latestEntries","item","deletedEntries","ModelCannotDeleteHasEntriesError","ModelCannotDeleteHasEntriesInTrashError","ModelPersistenceError","DeleteModelWithEntryCleanup","DeleteModelUseCase","CmsContext"],"mappings":";;;;;AAoBA,MAAMA;IACF,YACYC,UAAgC,EAChCC,SAAuC,CACjD;aAFUD,UAAU,GAAVA;aACAC,SAAS,GAATA;IACT;IAEH,MAAM,QAAQC,OAAe,EAAmD;QAK5E,MAAMC,QAAQ,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAACD;QAEjD,MAAME,OAAOC,MAAM,OAAO,CAACF,MAAM,IAAI,IAAIA,MAAM,IAAI,GAAG,EAAE;QAGxD,IAAIC,KAAK,QAAQ,CAACE,0BAA0B;YACxC,IAAI;gBACA,MAAM,IAAI,CAAC,sBAAsB,CAACH;YACtC,EAAE,OAAOI,OAAO;gBACZ,OAAOC,OAAO,IAAI,CACd,IAAIC,qBACA,CAAC,oCAAoC,EAAGF,MAAgB,OAAO,EAAE;YAG7E;YAGA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACL;QAClC;QAGA,MAAMQ,YAAY,MAAM,IAAI,CAAC,SAAS,CAACP;QACvC,IAAIO,UAAU,MAAM,IAChB,OAAOF,OAAO,IAAI,CAACE,UAAU,KAAK;QAItC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACR;IAClC;IAEA,MAAc,uBAAuBC,KAAU,EAAiB;QAE5D,MAAM,CAACQ,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAACR,OAAO;YACvE,OAAO;QACX;QAEA,KAAK,MAAMS,QAAQD,cACf,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAACR,OAAOS,KAAK,EAAE,EAAE;YAClD,aAAa;QACjB;QAIJ,MAAM,CAACC,eAAe,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAACV,OAAO;YACzE,OAAO;QACX;QAEA,KAAK,MAAMS,QAAQC,eACf,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAACV,OAAOS,KAAK,EAAE,EAAE;YAClD,aAAa;QACjB;IAER;IAEA,MAAc,UACVT,KAAe,EAQjB;QACE,IAAI;YAEA,MAAM,CAACQ,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAACR,OAAO;gBACvE,OAAO;YACX;YAEA,IAAIQ,cAAc,MAAM,GAAG,GACvB,OAAOH,OAAO,IAAI,CAAC,IAAIM,iCAAiCX,MAAM,OAAO;YAIzE,MAAM,CAACU,eAAe,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAACV,OAAO;gBACzE,OAAO;YACX;YAEA,IAAIU,eAAe,MAAM,GAAG,GACxB,OAAOL,OAAO,IAAI,CAAC,IAAIO,wCAAwCZ,MAAM,OAAO;QAEpF,EAAE,OAAOI,OAAO;YACZ,OAAOC,OAAO,IAAI,CAAC,IAAIQ,sBAAsBT;QACjD;QAEA,OAAOC,OAAO,EAAE,CAAC;IACrB;AACJ;AAEO,MAAMS,8BAA8BC,mBAAmB,eAAe,CAAC;IAC1E,WAAWnB;IACX,cAAc;QAACoB;KAAW;AAC9B"}
1
+ {"version":3,"file":"features/contentModel/DeleteModel/DeleteModelWithEntryCleanup.js","sources":["../../../../src/features/contentModel/DeleteModel/DeleteModelWithEntryCleanup.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { DeleteModelUseCase } from \"./abstractions.js\";\nimport { CmsContext, HeadlessCms } from \"~/features/shared/abstractions.js\";\nimport { CMS_MODEL_SINGLETON_TAG } from \"~/constants.js\";\nimport {\n ModelCannotDeleteHasEntriesError,\n ModelCannotDeleteHasEntriesInTrashError,\n ModelPersistenceError,\n ModelValidationError\n} from \"~/domain/contentModel/errors.js\";\nimport { CmsModel } from \"~/types/model.js\";\n\n/**\n * DeleteModelWithEntryCleanup - Decorator that handles entry cleanup/validation before deletion.\n *\n * Responsibilities:\n * 1. For singleton models: Delete all entries (latest + deleted)\n * 2. For regular models: Check if there are any entries - if yes, throw error\n * 3. Only proceed to the base use case if validations pass\n */\nclass DeleteModelWithEntryCleanupImpl implements DeleteModelUseCase.Interface {\n public constructor(\n private cmsContext: CmsContext.Interface,\n private decoratee: DeleteModelUseCase.Interface\n ) {}\n\n private get cms(): HeadlessCms.Interface {\n return this.cmsContext.container.resolve(HeadlessCms);\n }\n\n async execute(modelId: string): Promise<Result<void, DeleteModelUseCase.Error>> {\n // First, get the model through the decorated use case's flow (up to before deletion)\n // We need to perform validation before the actual deletion happens\n\n // Get the model from context to check entries\n const model = await this.cms.getModel(modelId);\n\n const tags = Array.isArray(model.tags) ? model.tags : [];\n\n // Handle singleton models: delete all entries\n if (tags.includes(CMS_MODEL_SINGLETON_TAG)) {\n try {\n await this.deleteSingletonEntries(model);\n } catch (error) {\n return Result.fail(\n new ModelValidationError(\n `Failed to delete singleton entries: ${(error as Error).message}`\n )\n );\n }\n\n // Proceed with the actual deletion\n return this.decoratee.execute(modelId);\n }\n\n // Regular models\n const canDelete = await this.canDelete(model);\n if (canDelete.isFail()) {\n return Result.fail(canDelete.error);\n }\n\n // Proceed with the actual deletion\n return this.decoratee.execute(modelId);\n }\n\n private async deleteSingletonEntries(model: any): Promise<void> {\n // Delete all latest entries\n const [latestEntries] = await this.cms.listLatestEntries(model, {\n limit: 10000\n });\n\n for (const item of latestEntries) {\n await this.cms.deleteEntry(model, item.id, {\n permanently: true\n });\n }\n\n // Delete all deleted entries (trash)\n const [deletedEntries] = await this.cms.listDeletedEntries(model, {\n limit: 10000\n });\n\n for (const item of deletedEntries) {\n await this.cms.deleteEntry(model, item.id, {\n permanently: true\n });\n }\n }\n\n private async canDelete(\n model: CmsModel\n ): Promise<\n Result<\n boolean,\n | ModelCannotDeleteHasEntriesError\n | ModelCannotDeleteHasEntriesInTrashError\n | ModelPersistenceError\n >\n > {\n try {\n // Check for latest entries\n const [latestEntries] = await this.cms.listLatestEntries(model, {\n limit: 1\n });\n\n if (latestEntries.length > 0) {\n return Result.fail(new ModelCannotDeleteHasEntriesError(model.modelId));\n }\n\n // Check for deleted entries (trash)\n const [deletedEntries] = await this.cms.listDeletedEntries(model, {\n limit: 1\n });\n\n if (deletedEntries.length > 0) {\n return Result.fail(new ModelCannotDeleteHasEntriesInTrashError(model.modelId));\n }\n } catch (error) {\n return Result.fail(new ModelPersistenceError(error));\n }\n\n return Result.ok(true);\n }\n}\n\nexport const DeleteModelWithEntryCleanup = DeleteModelUseCase.createDecorator({\n decorator: DeleteModelWithEntryCleanupImpl,\n dependencies: [CmsContext]\n});\n"],"names":["DeleteModelWithEntryCleanupImpl","cmsContext","decoratee","HeadlessCms","modelId","model","tags","Array","CMS_MODEL_SINGLETON_TAG","error","Result","ModelValidationError","canDelete","latestEntries","item","deletedEntries","ModelCannotDeleteHasEntriesError","ModelCannotDeleteHasEntriesInTrashError","ModelPersistenceError","DeleteModelWithEntryCleanup","DeleteModelUseCase","CmsContext"],"mappings":";;;;;AAoBA,MAAMA;IACF,YACYC,UAAgC,EAChCC,SAAuC,CACjD;aAFUD,UAAU,GAAVA;aACAC,SAAS,GAATA;IACT;IAEH,IAAY,MAA6B;QACrC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAACC;IAC7C;IAEA,MAAM,QAAQC,OAAe,EAAmD;QAK5E,MAAMC,QAAQ,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAACD;QAEtC,MAAME,OAAOC,MAAM,OAAO,CAACF,MAAM,IAAI,IAAIA,MAAM,IAAI,GAAG,EAAE;QAGxD,IAAIC,KAAK,QAAQ,CAACE,0BAA0B;YACxC,IAAI;gBACA,MAAM,IAAI,CAAC,sBAAsB,CAACH;YACtC,EAAE,OAAOI,OAAO;gBACZ,OAAOC,OAAO,IAAI,CACd,IAAIC,qBACA,CAAC,oCAAoC,EAAGF,MAAgB,OAAO,EAAE;YAG7E;YAGA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACL;QAClC;QAGA,MAAMQ,YAAY,MAAM,IAAI,CAAC,SAAS,CAACP;QACvC,IAAIO,UAAU,MAAM,IAChB,OAAOF,OAAO,IAAI,CAACE,UAAU,KAAK;QAItC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACR;IAClC;IAEA,MAAc,uBAAuBC,KAAU,EAAiB;QAE5D,MAAM,CAACQ,cAAc,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAACR,OAAO;YAC5D,OAAO;QACX;QAEA,KAAK,MAAMS,QAAQD,cACf,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAACR,OAAOS,KAAK,EAAE,EAAE;YACvC,aAAa;QACjB;QAIJ,MAAM,CAACC,eAAe,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAACV,OAAO;YAC9D,OAAO;QACX;QAEA,KAAK,MAAMS,QAAQC,eACf,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAACV,OAAOS,KAAK,EAAE,EAAE;YACvC,aAAa;QACjB;IAER;IAEA,MAAc,UACVT,KAAe,EAQjB;QACE,IAAI;YAEA,MAAM,CAACQ,cAAc,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAACR,OAAO;gBAC5D,OAAO;YACX;YAEA,IAAIQ,cAAc,MAAM,GAAG,GACvB,OAAOH,OAAO,IAAI,CAAC,IAAIM,iCAAiCX,MAAM,OAAO;YAIzE,MAAM,CAACU,eAAe,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAACV,OAAO;gBAC9D,OAAO;YACX;YAEA,IAAIU,eAAe,MAAM,GAAG,GACxB,OAAOL,OAAO,IAAI,CAAC,IAAIO,wCAAwCZ,MAAM,OAAO;QAEpF,EAAE,OAAOI,OAAO;YACZ,OAAOC,OAAO,IAAI,CAAC,IAAIQ,sBAAsBT;QACjD;QAEA,OAAOC,OAAO,EAAE,CAAC;IACrB;AACJ;AAEO,MAAMS,8BAA8BC,mBAAmB,eAAe,CAAC;IAC1E,WAAWpB;IACX,cAAc;QAACqB;KAAW;AAC9B"}
@@ -0,0 +1,19 @@
1
+ import { type IRefModelsGenerator, type RefModelMetadata } from "./abstractions.js";
2
+ import { ModelToAstConverter } from "../ModelToAstConverter/abstractions.js";
3
+ import { ValuesSelectionGenerator } from "../ValuesSelectionGenerator/abstractions.js";
4
+ import { ModelsFetcher } from "../shared/abstractions.js";
5
+ import type { CmsModel } from "../../../types/index.js";
6
+ declare class RefModelsGeneratorImpl implements IRefModelsGenerator {
7
+ private readonly modelToAst;
8
+ private readonly modelsFetcher;
9
+ private readonly valuesSelectionGenerator;
10
+ constructor(modelToAst: ModelToAstConverter.Interface, modelsFetcher: ModelsFetcher.Interface, valuesSelectionGenerator: ValuesSelectionGenerator.Interface);
11
+ generate(model: CmsModel): Promise<Record<string, RefModelMetadata>>;
12
+ private collectRefModelIds;
13
+ private collectFromFieldNode;
14
+ private collectFromCollectionNode;
15
+ }
16
+ export declare const RefModelsGenerator: typeof RefModelsGeneratorImpl & {
17
+ __abstraction: import("@webiny/di").Abstraction<IRefModelsGenerator>;
18
+ };
19
+ export {};
@@ -0,0 +1,56 @@
1
+ import { RefModelsGenerator } from "./abstractions.js";
2
+ import { ModelToAstConverter } from "../ModelToAstConverter/abstractions.js";
3
+ import { ValuesSelectionGenerator } from "../ValuesSelectionGenerator/abstractions.js";
4
+ import { ModelsFetcher } from "../shared/abstractions.js";
5
+ class RefModelsGeneratorImpl {
6
+ constructor(modelToAst, modelsFetcher, valuesSelectionGenerator){
7
+ this.modelToAst = modelToAst;
8
+ this.modelsFetcher = modelsFetcher;
9
+ this.valuesSelectionGenerator = valuesSelectionGenerator;
10
+ }
11
+ async generate(model) {
12
+ const ast = this.modelToAst.toAst(model);
13
+ const refModelIds = new Set();
14
+ for (const node of ast.children)this.collectRefModelIds(node, refModelIds);
15
+ const result = {};
16
+ for (const modelId of refModelIds){
17
+ const fetchResult = await this.modelsFetcher.fetchById(modelId);
18
+ if (fetchResult.isFail()) continue;
19
+ const refModel = fetchResult.value;
20
+ const valuesSelection = this.valuesSelectionGenerator.generate(refModel);
21
+ result[modelId] = {
22
+ valuesSelection
23
+ };
24
+ }
25
+ return result;
26
+ }
27
+ collectRefModelIds(node, modelIds) {
28
+ if ("field" === node.type) this.collectFromFieldNode(node, modelIds);
29
+ else if ("collection" === node.type) this.collectFromCollectionNode(node, modelIds);
30
+ }
31
+ collectFromFieldNode(node, modelIds) {
32
+ const { field, children } = node;
33
+ if ("ref" === field.type) {
34
+ const models = field.settings?.models;
35
+ if (Array.isArray(models)) {
36
+ for (const refModel of models)if (refModel.modelId) modelIds.add(refModel.modelId);
37
+ }
38
+ return;
39
+ }
40
+ for (const child of children)this.collectRefModelIds(child, modelIds);
41
+ }
42
+ collectFromCollectionNode(node, modelIds) {
43
+ for (const child of node.children)this.collectRefModelIds(child, modelIds);
44
+ }
45
+ }
46
+ const RefModelsGenerator_RefModelsGenerator = RefModelsGenerator.createImplementation({
47
+ implementation: RefModelsGeneratorImpl,
48
+ dependencies: [
49
+ ModelToAstConverter,
50
+ ModelsFetcher,
51
+ ValuesSelectionGenerator
52
+ ]
53
+ });
54
+ export { RefModelsGenerator_RefModelsGenerator as RefModelsGenerator };
55
+
56
+ //# sourceMappingURL=RefModelsGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/contentModel/RefModelsGenerator/RefModelsGenerator.js","sources":["../../../../src/features/contentModel/RefModelsGenerator/RefModelsGenerator.ts"],"sourcesContent":["import {\n RefModelsGenerator as Abstraction,\n type IRefModelsGenerator,\n type RefModelMetadata\n} from \"./abstractions.js\";\nimport { ModelToAstConverter } from \"../ModelToAstConverter/abstractions.js\";\nimport { ValuesSelectionGenerator } from \"../ValuesSelectionGenerator/abstractions.js\";\nimport { ModelsFetcher } from \"../shared/abstractions.js\";\nimport type {\n CmsModel,\n CmsModelFieldAstNode,\n CmsModelFieldAstNodeField,\n CmsModelFieldAstNodeCollection\n} from \"~/types/index.js\";\n\nclass RefModelsGeneratorImpl implements IRefModelsGenerator {\n constructor(\n private readonly modelToAst: ModelToAstConverter.Interface,\n private readonly modelsFetcher: ModelsFetcher.Interface,\n private readonly valuesSelectionGenerator: ValuesSelectionGenerator.Interface\n ) {}\n\n async generate(model: CmsModel): Promise<Record<string, RefModelMetadata>> {\n const ast = this.modelToAst.toAst(model);\n const refModelIds = new Set<string>();\n\n for (const node of ast.children) {\n this.collectRefModelIds(node, refModelIds);\n }\n\n const result: Record<string, RefModelMetadata> = {};\n\n for (const modelId of refModelIds) {\n const fetchResult = await this.modelsFetcher.fetchById(modelId);\n if (fetchResult.isFail()) {\n continue;\n }\n\n const refModel = fetchResult.value;\n const valuesSelection = this.valuesSelectionGenerator.generate(refModel);\n\n result[modelId] = { valuesSelection };\n }\n\n return result;\n }\n\n private collectRefModelIds(node: CmsModelFieldAstNode, modelIds: Set<string>): void {\n if (node.type === \"field\") {\n this.collectFromFieldNode(node, modelIds);\n } else if (node.type === \"collection\") {\n this.collectFromCollectionNode(node, modelIds);\n }\n }\n\n private collectFromFieldNode(node: CmsModelFieldAstNodeField, modelIds: Set<string>): void {\n const { field, children } = node;\n\n if (field.type === \"ref\") {\n const models = field.settings?.models;\n if (Array.isArray(models)) {\n for (const refModel of models) {\n if (refModel.modelId) {\n modelIds.add(refModel.modelId);\n }\n }\n }\n return;\n }\n\n for (const child of children) {\n this.collectRefModelIds(child, modelIds);\n }\n }\n\n private collectFromCollectionNode(\n node: CmsModelFieldAstNodeCollection,\n modelIds: Set<string>\n ): void {\n for (const child of node.children) {\n this.collectRefModelIds(child, modelIds);\n }\n }\n}\n\nexport const RefModelsGenerator = Abstraction.createImplementation({\n implementation: RefModelsGeneratorImpl,\n dependencies: [ModelToAstConverter, ModelsFetcher, ValuesSelectionGenerator]\n});\n"],"names":["RefModelsGeneratorImpl","modelToAst","modelsFetcher","valuesSelectionGenerator","model","ast","refModelIds","Set","node","result","modelId","fetchResult","refModel","valuesSelection","modelIds","field","children","models","Array","child","RefModelsGenerator","Abstraction","ModelToAstConverter","ModelsFetcher","ValuesSelectionGenerator"],"mappings":";;;;AAeA,MAAMA;IACF,YACqBC,UAAyC,EACzCC,aAAsC,EACtCC,wBAA4D,CAC/E;aAHmBF,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,wBAAwB,GAAxBA;IAClB;IAEH,MAAM,SAASC,KAAe,EAA6C;QACvE,MAAMC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAACD;QAClC,MAAME,cAAc,IAAIC;QAExB,KAAK,MAAMC,QAAQH,IAAI,QAAQ,CAC3B,IAAI,CAAC,kBAAkB,CAACG,MAAMF;QAGlC,MAAMG,SAA2C,CAAC;QAElD,KAAK,MAAMC,WAAWJ,YAAa;YAC/B,MAAMK,cAAc,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAACD;YACvD,IAAIC,YAAY,MAAM,IAClB;YAGJ,MAAMC,WAAWD,YAAY,KAAK;YAClC,MAAME,kBAAkB,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAACD;YAE/DH,MAAM,CAACC,QAAQ,GAAG;gBAAEG;YAAgB;QACxC;QAEA,OAAOJ;IACX;IAEQ,mBAAmBD,IAA0B,EAAEM,QAAqB,EAAQ;QAChF,IAAIN,AAAc,YAAdA,KAAK,IAAI,EACT,IAAI,CAAC,oBAAoB,CAACA,MAAMM;aAC7B,IAAIN,AAAc,iBAAdA,KAAK,IAAI,EAChB,IAAI,CAAC,yBAAyB,CAACA,MAAMM;IAE7C;IAEQ,qBAAqBN,IAA+B,EAAEM,QAAqB,EAAQ;QACvF,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGR;QAE5B,IAAIO,AAAe,UAAfA,MAAM,IAAI,EAAY;YACtB,MAAME,SAASF,MAAM,QAAQ,EAAE;YAC/B,IAAIG,MAAM,OAAO,CAACD,SACd;gBAAA,KAAK,MAAML,YAAYK,OACnB,IAAIL,SAAS,OAAO,EAChBE,SAAS,GAAG,CAACF,SAAS,OAAO;YAErC;YAEJ;QACJ;QAEA,KAAK,MAAMO,SAASH,SAChB,IAAI,CAAC,kBAAkB,CAACG,OAAOL;IAEvC;IAEQ,0BACJN,IAAoC,EACpCM,QAAqB,EACjB;QACJ,KAAK,MAAMK,SAASX,KAAK,QAAQ,CAC7B,IAAI,CAAC,kBAAkB,CAACW,OAAOL;IAEvC;AACJ;AAEO,MAAMM,wCAAqBC,mBAAAA,oBAAgC,CAAC;IAC/D,gBAAgBrB;IAChB,cAAc;QAACsB;QAAqBC;QAAeC;KAAyB;AAChF"}
@@ -0,0 +1,11 @@
1
+ import type { CmsModel } from "../../../types/index.js";
2
+ export interface RefModelMetadata {
3
+ valuesSelection: string;
4
+ }
5
+ export interface IRefModelsGenerator {
6
+ generate(model: CmsModel): Promise<Record<string, RefModelMetadata>>;
7
+ }
8
+ export declare const RefModelsGenerator: import("@webiny/di").Abstraction<IRefModelsGenerator>;
9
+ export declare namespace RefModelsGenerator {
10
+ type Interface = IRefModelsGenerator;
11
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const RefModelsGenerator = createAbstraction("RefModelsGenerator");
3
+ export { RefModelsGenerator };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/contentModel/RefModelsGenerator/abstractions.js","sources":["../../../../src/features/contentModel/RefModelsGenerator/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsModel } from \"~/types/index.js\";\n\nexport interface RefModelMetadata {\n valuesSelection: string;\n}\n\nexport interface IRefModelsGenerator {\n generate(model: CmsModel): Promise<Record<string, RefModelMetadata>>;\n}\n\nexport const RefModelsGenerator = createAbstraction<IRefModelsGenerator>(\"RefModelsGenerator\");\n\nexport namespace RefModelsGenerator {\n export type Interface = IRefModelsGenerator;\n}\n"],"names":["RefModelsGenerator","createAbstraction"],"mappings":";AAWO,MAAMA,qBAAqBC,kBAAuC"}
@@ -0,0 +1,4 @@
1
+ export declare const RefModelsGeneratorFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { RefModelsGenerator } from "./RefModelsGenerator.js";
3
+ const RefModelsGeneratorFeature = createFeature({
4
+ name: "RefModelsGenerator",
5
+ register (container) {
6
+ container.register(RefModelsGenerator);
7
+ }
8
+ });
9
+ export { RefModelsGeneratorFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/contentModel/RefModelsGenerator/feature.js","sources":["../../../../src/features/contentModel/RefModelsGenerator/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { RefModelsGenerator } from \"./RefModelsGenerator.js\";\n\nexport const RefModelsGeneratorFeature = createFeature({\n name: \"RefModelsGenerator\",\n register(container) {\n container.register(RefModelsGenerator);\n }\n});\n"],"names":["RefModelsGeneratorFeature","createFeature","container","RefModelsGenerator"],"mappings":";;AAGO,MAAMA,4BAA4BC,cAAc;IACnD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -0,0 +1,2 @@
1
+ export { RefModelsGenerator } from "./abstractions.js";
2
+ export { RefModelsGeneratorFeature } from "./feature.js";
@@ -0,0 +1,2 @@
1
+ export { RefModelsGenerator } from "./abstractions.js";
2
+ export { RefModelsGeneratorFeature } from "./feature.js";
@@ -1,10 +1,11 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { UpdateModelRepository as RepositoryAbstraction } from "./abstractions.js";
3
3
  import { ModelCache, ModelsFetcher } from "../../../features/contentModel/shared/abstractions.js";
4
- import { CmsContext, StorageOperations } from "../../../features/shared/abstractions.js";
4
+ import { CmsContext } from "../../../features/shared/abstractions.js";
5
+ import { UpdateModelStorageOperation } from "../../../features/shared/storageOperations/model/UpdateModelStorageOperation.js";
6
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
5
7
  import type { CmsModel } from "../../../types/index.js";
6
8
  import { ModelFieldCompression } from "../../../features/contentModel/ModelFieldCompression/index.js";
7
- import { RuntimeTenant } from "../../../features/runtimeTenant/abstractions.js";
8
9
  /**
9
10
  * UpdateModelRepository - Validates domain rules and persists model updates.
10
11
  *
@@ -19,12 +20,12 @@ import { RuntimeTenant } from "../../../features/runtimeTenant/abstractions.js";
19
20
  declare class UpdateModelRepositoryImpl implements RepositoryAbstraction.Interface {
20
21
  private readonly modelCache;
21
22
  private readonly modelsFetcher;
22
- private readonly storageOperations;
23
+ private readonly updateModel;
23
24
  private readonly cmsContext;
24
25
  private readonly modelFieldCompression;
25
- private readonly runtimeTenant;
26
- constructor(modelCache: ModelCache.Interface, modelsFetcher: ModelsFetcher.Interface, storageOperations: StorageOperations.Interface, cmsContext: CmsContext.Interface, modelFieldCompression: ModelFieldCompression.Interface, runtimeTenant: RuntimeTenant.Interface);
27
- execute(initialModel: CmsModel, original: CmsModel): Promise<Result<CmsModel, RepositoryAbstraction.Error>>;
26
+ private readonly identityContext;
27
+ constructor(modelCache: ModelCache.Interface, modelsFetcher: ModelsFetcher.Interface, updateModel: UpdateModelStorageOperation.Interface, cmsContext: CmsContext.Interface, modelFieldCompression: ModelFieldCompression.Interface, identityContext: IdentityContext.Interface);
28
+ execute(model: CmsModel, original: CmsModel): Promise<Result<void, RepositoryAbstraction.Error>>;
28
29
  }
29
30
  export declare const UpdateModelRepository: typeof UpdateModelRepositoryImpl & {
30
31
  __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IUpdateModelRepository>;
@@ -2,24 +2,24 @@ import { Result } from "@webiny/feature/api";
2
2
  import { UpdateModelRepository } from "./abstractions.js";
3
3
  import { ModelCache, ModelsFetcher } from "../shared/abstractions.js";
4
4
  import { ModelCannotUpdateCodeModelError, ModelPersistenceError, ModelValidationError } from "../../../domain/contentModel/errors.js";
5
- import { CmsContext, StorageOperations } from "../../shared/abstractions.js";
5
+ import { CmsContext } from "../../shared/abstractions.js";
6
+ import { UpdateModelStorageOperation } from "../../shared/storageOperations/model/UpdateModelStorageOperation.js";
7
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
6
8
  import { validateEndingAllowed } from "../../../crud/contentModel/validate/endingAllowed.js";
7
9
  import { validateSingularApiName } from "../../../domain/contentModel/validation/singularApiName.js";
8
10
  import { validatePluralApiName } from "../../../domain/contentModel/validation/pluralApiName.js";
9
11
  import { validateModelFields } from "../../../domain/contentModel/validation/modelFields.js";
10
12
  import { ModelFieldCompression } from "../ModelFieldCompression/index.js";
11
- import { RuntimeTenant } from "../../runtimeTenant/abstractions.js";
12
13
  class UpdateModelRepositoryImpl {
13
- constructor(modelCache, modelsFetcher, storageOperations, cmsContext, modelFieldCompression, runtimeTenant){
14
+ constructor(modelCache, modelsFetcher, updateModel, cmsContext, modelFieldCompression, identityContext){
14
15
  this.modelCache = modelCache;
15
16
  this.modelsFetcher = modelsFetcher;
16
- this.storageOperations = storageOperations;
17
+ this.updateModel = updateModel;
17
18
  this.cmsContext = cmsContext;
18
19
  this.modelFieldCompression = modelFieldCompression;
19
- this.runtimeTenant = runtimeTenant;
20
+ this.identityContext = identityContext;
20
21
  }
21
- async execute(initialModel, original) {
22
- const model = this.runtimeTenant.assign(initialModel);
22
+ async execute(model, original) {
23
23
  try {
24
24
  try {
25
25
  validateEndingAllowed({
@@ -31,7 +31,7 @@ class UpdateModelRepositoryImpl {
31
31
  data: error.data
32
32
  }));
33
33
  }
34
- const modelsResult = await this.cmsContext.security.withoutAuthorization(async ()=>await this.modelsFetcher.fetchAll());
34
+ const modelsResult = await this.identityContext.withoutAuthorization(async ()=>await this.modelsFetcher.fetchAll());
35
35
  if (modelsResult.isFail()) return Result.fail(new ModelPersistenceError(modelsResult.error));
36
36
  const allModels = modelsResult.value;
37
37
  const models = allModels.filter((m)=>m.modelId !== model.modelId);
@@ -62,14 +62,14 @@ class UpdateModelRepositoryImpl {
62
62
  }));
63
63
  }
64
64
  const fields = await this.modelFieldCompression.compress(model.fields);
65
- await this.storageOperations.models.update({
65
+ await this.updateModel.execute({
66
66
  model: {
67
67
  ...model,
68
68
  fields
69
69
  }
70
70
  });
71
71
  this.modelCache.clear();
72
- return Result.ok(model);
72
+ return Result.ok();
73
73
  } catch (error) {
74
74
  return Result.fail(new ModelPersistenceError(error));
75
75
  }
@@ -80,10 +80,10 @@ const UpdateModelRepository_UpdateModelRepository = UpdateModelRepository.create
80
80
  dependencies: [
81
81
  ModelCache,
82
82
  ModelsFetcher,
83
- StorageOperations,
83
+ UpdateModelStorageOperation,
84
84
  CmsContext,
85
85
  ModelFieldCompression,
86
- RuntimeTenant
86
+ IdentityContext
87
87
  ]
88
88
  });
89
89
  export { UpdateModelRepository_UpdateModelRepository as UpdateModelRepository };