@webiny/api-headless-cms 6.4.12-beta.5 → 6.5.0-beta.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 (275) hide show
  1. package/crud/contentEntry/entryDataValidation.d.ts +1 -1
  2. package/crud/contentEntry/entryDataValidation.js +33 -18
  3. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  4. package/crud/contentEntry.crud.js +12 -39
  5. package/crud/contentEntry.crud.js.map +1 -1
  6. package/crud/contentModel/defaultFields.js +3 -2
  7. package/crud/contentModel/defaultFields.js.map +1 -1
  8. package/crud/contentModel/validate/endingAllowed.js +1 -1
  9. package/crud/contentModel/validate/endingAllowed.js.map +1 -1
  10. package/crud/contentModel/validate/pluralApiName.js +1 -1
  11. package/crud/contentModel/validate/pluralApiName.js.map +1 -1
  12. package/crud/contentModel/validate/singularApiName.js +1 -1
  13. package/crud/contentModel/validate/singularApiName.js.map +1 -1
  14. package/crud/contentModel/validation.js +2 -2
  15. package/crud/contentModel/validation.js.map +1 -1
  16. package/domain/contentModel/schemas.d.ts +4 -0
  17. package/domain/contentModel/schemas.js +5 -2
  18. package/domain/contentModel/schemas.js.map +1 -1
  19. package/domain/contentModel/validation/endingAllowed.js +1 -1
  20. package/domain/contentModel/validation/endingAllowed.js.map +1 -1
  21. package/domain/contentModel/validation/pluralApiName.js +1 -1
  22. package/domain/contentModel/validation/pluralApiName.js.map +1 -1
  23. package/domain/contentModel/validation/singularApiName.js +1 -1
  24. package/domain/contentModel/validation/singularApiName.js.map +1 -1
  25. package/export/crud/exporting.js +2 -2
  26. package/export/crud/exporting.js.map +1 -1
  27. package/export/crud/imports/importGroups.js +2 -1
  28. package/export/crud/imports/importGroups.js.map +1 -1
  29. package/export/crud/imports/validateModels.js +1 -1
  30. package/export/crud/imports/validateModels.js.map +1 -1
  31. package/exports/api/cms/model.d.ts +4 -1
  32. package/exports/api/cms/model.js +2 -0
  33. package/extension.d.ts +3 -0
  34. package/extension.js +19 -0
  35. package/extension.js.map +1 -0
  36. package/features/contentEntry/ContentEntriesFeature.js +2 -0
  37. package/features/contentEntry/ContentEntriesFeature.js.map +1 -1
  38. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js +1 -2
  39. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js.map +1 -1
  40. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.d.ts +1 -3
  41. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js +4 -12
  42. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
  43. package/features/contentEntry/CreateEntryRevisionFrom/abstractions.d.ts +2 -0
  44. package/features/contentEntry/CreateEntryRevisionFrom/abstractions.js.map +1 -1
  45. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.js +1 -0
  46. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.js.map +1 -1
  47. package/features/contentEntry/GetSingletonEntry/GetSingletonEntryUseCase.js +1 -3
  48. package/features/contentEntry/GetSingletonEntry/GetSingletonEntryUseCase.js.map +1 -1
  49. package/features/contentEntry/PublishEntry/PublishEntryUseCase.d.ts +1 -3
  50. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js +4 -10
  51. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
  52. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js +3 -1
  53. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js.map +1 -1
  54. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js +3 -1
  55. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js.map +1 -1
  56. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js +3 -1
  57. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js.map +1 -1
  58. package/features/contentEntry/UpdateRevision/UpdateRevisionRepository.d.ts +14 -0
  59. package/features/contentEntry/UpdateRevision/UpdateRevisionRepository.js +34 -0
  60. package/features/contentEntry/UpdateRevision/UpdateRevisionRepository.js.map +1 -0
  61. package/features/contentEntry/UpdateRevision/abstractions.d.ts +10 -0
  62. package/features/contentEntry/UpdateRevision/abstractions.js +5 -0
  63. package/features/contentEntry/UpdateRevision/abstractions.js.map +1 -0
  64. package/features/contentEntry/UpdateRevision/feature.d.ts +4 -0
  65. package/features/contentEntry/UpdateRevision/feature.js +11 -0
  66. package/features/contentEntry/UpdateRevision/feature.js.map +1 -0
  67. package/features/contentEntry/UpdateRevision/index.d.ts +1 -0
  68. package/features/contentEntry/UpdateRevision/index.js +1 -0
  69. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.d.ts +2 -2
  70. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js +2 -2
  71. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js.map +1 -1
  72. package/features/contentEntry/ensureItemIds.d.ts +13 -0
  73. package/features/contentEntry/ensureItemIds.js +22 -0
  74. package/features/contentEntry/ensureItemIds.js.map +1 -0
  75. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.d.ts +3 -1
  76. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js +9 -3
  77. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js.map +1 -1
  78. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.d.ts +7 -5
  79. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js +48 -18
  80. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js.map +1 -1
  81. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/abstractions.d.ts +17 -1
  82. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/abstractions.js.map +1 -1
  83. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.d.ts +5 -3
  84. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.js +22 -16
  85. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.js.map +1 -1
  86. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/abstractions.d.ts +15 -1
  87. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/abstractions.js.map +1 -1
  88. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.d.ts +5 -3
  89. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.js +17 -13
  90. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.js.map +1 -1
  91. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/abstractions.d.ts +13 -1
  92. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/abstractions.js.map +1 -1
  93. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.d.ts +6 -6
  94. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.js +17 -18
  95. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.js.map +1 -1
  96. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/abstractions.d.ts +14 -2
  97. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/abstractions.js.map +1 -1
  98. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.d.ts +7 -3
  99. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js +73 -30
  100. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js.map +1 -1
  101. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/abstractions.d.ts +15 -1
  102. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/abstractions.js.map +1 -1
  103. package/features/contentEntry/entryDataFactories/expiresAt.js +2 -2
  104. package/features/contentEntry/entryDataFactories/expiresAt.js.map +1 -1
  105. package/features/contentEntry/entryDataFactories/hasEntryContentChanged.d.ts +24 -0
  106. package/features/contentEntry/entryDataFactories/hasEntryContentChanged.js +13 -0
  107. package/features/contentEntry/entryDataFactories/hasEntryContentChanged.js.map +1 -0
  108. package/features/contentModel/ComponentMapGenerator/ComponentMapGenerator.d.ts +14 -0
  109. package/features/contentModel/ComponentMapGenerator/ComponentMapGenerator.js +32 -0
  110. package/features/contentModel/ComponentMapGenerator/ComponentMapGenerator.js.map +1 -0
  111. package/features/contentModel/ComponentMapGenerator/abstractions.d.ts +8 -0
  112. package/features/contentModel/ComponentMapGenerator/abstractions.js +5 -0
  113. package/features/contentModel/ComponentMapGenerator/abstractions.js.map +1 -0
  114. package/features/contentModel/ComponentMapGenerator/feature.d.ts +4 -0
  115. package/features/contentModel/ComponentMapGenerator/feature.js +11 -0
  116. package/features/contentModel/ComponentMapGenerator/feature.js.map +1 -0
  117. package/features/contentModel/ComponentMapGenerator/index.d.ts +2 -0
  118. package/features/contentModel/ComponentMapGenerator/index.js +2 -0
  119. package/features/contentModel/ContentModelFeature.js +6 -0
  120. package/features/contentModel/ContentModelFeature.js.map +1 -1
  121. package/features/contentModel/CreateModel/CreateModelRepository.js +2 -1
  122. package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
  123. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +2 -1
  124. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
  125. package/features/contentModel/RefModelsGenerator/RefModelsGenerator.d.ts +19 -0
  126. package/features/contentModel/RefModelsGenerator/RefModelsGenerator.js +56 -0
  127. package/features/contentModel/RefModelsGenerator/RefModelsGenerator.js.map +1 -0
  128. package/features/contentModel/RefModelsGenerator/abstractions.d.ts +11 -0
  129. package/features/contentModel/RefModelsGenerator/abstractions.js +5 -0
  130. package/features/contentModel/RefModelsGenerator/abstractions.js.map +1 -0
  131. package/features/contentModel/RefModelsGenerator/feature.d.ts +4 -0
  132. package/features/contentModel/RefModelsGenerator/feature.js +11 -0
  133. package/features/contentModel/RefModelsGenerator/feature.js.map +1 -0
  134. package/features/contentModel/RefModelsGenerator/index.d.ts +2 -0
  135. package/features/contentModel/RefModelsGenerator/index.js +2 -0
  136. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.d.ts +16 -0
  137. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js +54 -0
  138. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js.map +1 -0
  139. package/features/contentModel/ValuesSelectionGenerator/abstractions.d.ts +8 -0
  140. package/features/contentModel/ValuesSelectionGenerator/abstractions.js +5 -0
  141. package/features/contentModel/ValuesSelectionGenerator/abstractions.js.map +1 -0
  142. package/features/contentModel/ValuesSelectionGenerator/feature.d.ts +4 -0
  143. package/features/contentModel/ValuesSelectionGenerator/feature.js +11 -0
  144. package/features/contentModel/ValuesSelectionGenerator/feature.js.map +1 -0
  145. package/features/contentModel/ValuesSelectionGenerator/index.d.ts +1 -0
  146. package/features/contentModel/ValuesSelectionGenerator/index.js +1 -0
  147. package/features/graphql/feature.js +2 -0
  148. package/features/graphql/feature.js.map +1 -1
  149. package/features/graphql/fields/base/AssetToGraphQL.d.ts +26 -0
  150. package/features/graphql/fields/base/AssetToGraphQL.js +153 -0
  151. package/features/graphql/fields/base/AssetToGraphQL.js.map +1 -0
  152. package/features/graphql/fields/base/DynamicZoneToGraphQL.js +12 -2
  153. package/features/graphql/fields/base/DynamicZoneToGraphQL.js.map +1 -1
  154. package/features/graphql/fields/base/ObjectToGraphQL.js +8 -5
  155. package/features/graphql/fields/base/ObjectToGraphQL.js.map +1 -1
  156. package/features/modelBuilder/abstractions.d.ts +9 -0
  157. package/features/modelBuilder/abstractions.js.map +1 -1
  158. package/features/modelBuilder/feature.js +2 -0
  159. package/features/modelBuilder/feature.js.map +1 -1
  160. package/features/modelBuilder/fields/AssetFieldType.d.ts +20 -0
  161. package/features/modelBuilder/fields/AssetFieldType.js +46 -0
  162. package/features/modelBuilder/fields/AssetFieldType.js.map +1 -0
  163. package/features/modelBuilder/fields/DataFieldBuilder.d.ts +62 -18
  164. package/features/modelBuilder/fields/DataFieldBuilder.js +8 -0
  165. package/features/modelBuilder/fields/DataFieldBuilder.js.map +1 -1
  166. package/features/modelBuilder/fields/DynamicZoneFieldType.d.ts +1 -0
  167. package/features/modelBuilder/fields/DynamicZoneFieldType.js +2 -6
  168. package/features/modelBuilder/fields/DynamicZoneFieldType.js.map +1 -1
  169. package/features/modelBuilder/fields/resolveAssetUrl.d.ts +35 -0
  170. package/features/modelBuilder/fields/resolveAssetUrl.js +26 -0
  171. package/features/modelBuilder/fields/resolveAssetUrl.js.map +1 -0
  172. package/features/modelBuilder/index.d.ts +1 -1
  173. package/features/modelBuilder/models/BaseModelBuilder.d.ts +3 -1
  174. package/features/modelBuilder/models/BaseModelBuilder.js +7 -0
  175. package/features/modelBuilder/models/BaseModelBuilder.js.map +1 -1
  176. package/features/modelBuilder/models/PrivateModelBuilder.js +2 -1
  177. package/features/modelBuilder/models/PrivateModelBuilder.js.map +1 -1
  178. package/features/modelBuilder/models/PublicModelBuilder.js +2 -1
  179. package/features/modelBuilder/models/PublicModelBuilder.js.map +1 -1
  180. package/features/sortMapper/SortMapper.js +2 -5
  181. package/features/sortMapper/SortMapper.js.map +1 -1
  182. package/features/storage/fields/CompressedTextStorageTransform.js +1 -1
  183. package/features/storage/fields/CompressedTextStorageTransform.js.map +1 -1
  184. package/features/storage/fields/DateStorageTransform.js +4 -3
  185. package/features/storage/fields/DateStorageTransform.js.map +1 -1
  186. package/features/storage/fields/DynamicZoneStorageTransform.js +2 -2
  187. package/features/storage/fields/DynamicZoneStorageTransform.js.map +1 -1
  188. package/features/storage/fields/JsonStorageTransform.js +1 -1
  189. package/features/storage/fields/JsonStorageTransform.js.map +1 -1
  190. package/features/storage/fields/LongTextStorageTransform.js +1 -1
  191. package/features/storage/fields/LongTextStorageTransform.js.map +1 -1
  192. package/features/storage/fields/ObjectStorageTransform.js +27 -7
  193. package/features/storage/fields/ObjectStorageTransform.js.map +1 -1
  194. package/features/storage/fields/RichTextStorageTransform.js +1 -1
  195. package/features/storage/fields/RichTextStorageTransform.js.map +1 -1
  196. package/features/validation/validators/DateGteValidator.js +1 -1
  197. package/features/validation/validators/DateGteValidator.js.map +1 -1
  198. package/features/validation/validators/DateLteValidator.js +1 -1
  199. package/features/validation/validators/DateLteValidator.js.map +1 -1
  200. package/features/validation/validators/PatternValidator.js +1 -1
  201. package/features/validation/validators/PatternValidator.js.map +1 -1
  202. package/features/whereMapper/WhereMapper.js +10 -7
  203. package/features/whereMapper/WhereMapper.js.map +1 -1
  204. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +8 -2
  205. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
  206. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +8 -2
  207. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
  208. package/fieldConverters/index.d.ts +1 -1
  209. package/graphql/getSchema/generateCacheKey.js +1 -1
  210. package/graphql/getSchema/generateCacheKey.js.map +1 -1
  211. package/graphql/scalars/RevisionId.js +1 -1
  212. package/graphql/scalars/RevisionId.js.map +1 -1
  213. package/graphql/schema/baseSchema.js +5 -25
  214. package/graphql/schema/baseSchema.js.map +1 -1
  215. package/graphql/schema/cms/getEntryResolver.js +3 -2
  216. package/graphql/schema/cms/getEntryResolver.js.map +1 -1
  217. package/graphql/schema/cms/getModelResolver.d.ts +35 -0
  218. package/graphql/schema/cms/getModelResolver.js +49 -0
  219. package/graphql/schema/cms/getModelResolver.js.map +1 -0
  220. package/graphql/schema/cms/helpers/buildFieldsSelection.js +9 -2
  221. package/graphql/schema/cms/helpers/buildFieldsSelection.js.map +1 -1
  222. package/graphql/schema/cms/helpers/expandFieldWildcards.d.ts +2 -0
  223. package/graphql/schema/cms/helpers/expandFieldWildcards.js +13 -0
  224. package/graphql/schema/cms/helpers/expandFieldWildcards.js.map +1 -0
  225. package/graphql/schema/cms/helpers/index.d.ts +1 -0
  226. package/graphql/schema/cms/helpers/index.js +1 -0
  227. package/graphql/schema/cms/helpers.d.ts +1 -0
  228. package/graphql/schema/cms/helpers.js +1 -0
  229. package/graphql/schema/cms/index.js +2 -1
  230. package/graphql/schema/cms/index.js.map +1 -1
  231. package/graphql/schema/cms/listEntriesResolver.js +3 -2
  232. package/graphql/schema/cms/listEntriesResolver.js.map +1 -1
  233. package/graphql/schema/cms/resolvers/getModel.d.ts +8 -0
  234. package/graphql/schema/cms/resolvers/getModel.js +18 -0
  235. package/graphql/schema/cms/resolvers/getModel.js.map +1 -0
  236. package/graphql/schema/cms/resolvers/index.d.ts +1 -0
  237. package/graphql/schema/cms/resolvers/index.js +1 -0
  238. package/graphql/schema/cms/typeDefs/query.js +1 -0
  239. package/graphql/schema/cms/typeDefs/query.js.map +1 -1
  240. package/graphql/schema/cms/typeDefs/responses.js +5 -0
  241. package/graphql/schema/cms/typeDefs/responses.js.map +1 -1
  242. package/graphql/schema/contentModels.js +40 -1
  243. package/graphql/schema/contentModels.js.map +1 -1
  244. package/graphql/schema/createFieldResolvers.js +1 -1
  245. package/graphql/schema/createFieldResolvers.js.map +1 -1
  246. package/index.d.ts +2 -5
  247. package/index.js +1 -21
  248. package/package.json +27 -30
  249. package/plugins/CmsModelPlugin.js +12 -10
  250. package/plugins/CmsModelPlugin.js.map +1 -1
  251. package/types/fields/dynamicZoneField.d.ts +1 -0
  252. package/types/model.d.ts +6 -0
  253. package/types/modelField.d.ts +13 -0
  254. package/types/types.d.ts +8 -4
  255. package/types/types.js.map +1 -1
  256. package/utils/caching/Cache.js +1 -1
  257. package/utils/caching/Cache.js.map +1 -1
  258. package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.d.ts +28 -0
  259. package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.js +324 -0
  260. package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.js.map +1 -0
  261. package/utils/contentModelToJsonSchema/index.d.ts +2 -0
  262. package/utils/contentModelToJsonSchema/index.js +1 -0
  263. package/utils/contentModelToJsonSchema/types.d.ts +24 -0
  264. package/utils/contentModelToJsonSchema/types.js +0 -0
  265. package/utils/createModelField.js +2 -1
  266. package/utils/createModelField.js.map +1 -1
  267. package/utils/date.js +1 -1
  268. package/utils/date.js.map +1 -1
  269. package/utils/entryStorage.js +1 -1
  270. package/utils/entryStorage.js.map +1 -1
  271. package/utils/index.d.ts +1 -0
  272. package/utils/index.js +1 -0
  273. package/utils/renderFields.js +1 -1
  274. package/utils/renderFields.js.map +1 -1
  275. package/index.js.map +0 -1
@@ -1,12 +1,14 @@
1
- import { type ICreatePublishEntryDataFactory, type ICreatePublishEntryDataResponse } from "./abstractions.js";
1
+ import { CreatePublishEntryDataFactory as FactoryAbstraction, type ICreatePublishEntryDataFactory } from "./abstractions.js";
2
2
  import { CmsContext } from "../../../../features/shared/abstractions.js";
3
3
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
4
4
  import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../../types/index.js";
5
+ import { GetLatestRevisionByEntryIdUseCase } from "../../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
5
6
  declare class CreatePublishEntryDataFactoryImpl implements ICreatePublishEntryDataFactory {
6
7
  private readonly cmsContext;
7
8
  private readonly identityContext;
8
- constructor(cmsContext: CmsContext.Interface, identityContext: IdentityContext.Interface);
9
- create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, originalEntry: CmsEntry<TValues>, latestEntry: CmsEntry<TValues>): Promise<ICreatePublishEntryDataResponse<TValues>>;
9
+ private readonly getLatestRevision;
10
+ constructor(cmsContext: CmsContext.Interface, identityContext: IdentityContext.Interface, getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface);
11
+ create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, originalEntry: CmsEntry<TValues>): Promise<FactoryAbstraction.Return<TValues>>;
10
12
  }
11
13
  export declare const CreatePublishEntryDataFactory: import("@webiny/di").Implementation<typeof CreatePublishEntryDataFactoryImpl>;
12
14
  export {};
@@ -1,23 +1,32 @@
1
- import { createImplementation } from "@webiny/feature/api";
1
+ import { Result, createImplementation } from "@webiny/feature/api";
2
2
  import { CreatePublishEntryDataFactory } from "./abstractions.js";
3
3
  import { CmsContext } from "../../../shared/abstractions.js";
4
4
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
5
5
  import { STATUS_PUBLISHED } from "../statuses.js";
6
- import { validateModelEntryDataOrThrow } from "../../../../crud/contentEntry/entryDataValidation.js";
6
+ import { validateModelEntryData } from "../../../../crud/contentEntry/entryDataValidation.js";
7
+ import { EntryValidationError } from "../../../../domain/contentEntry/errors.js";
7
8
  import { getIdentity } from "../../../../utils/identity.js";
8
9
  import { getDate } from "../../../../utils/date.js";
10
+ import { GetLatestRevisionByEntryIdUseCase } from "../../GetLatestRevisionByEntryId/index.js";
9
11
  class CreatePublishEntryDataFactoryImpl {
10
- constructor(cmsContext, identityContext){
12
+ constructor(cmsContext, identityContext, getLatestRevision){
11
13
  this.cmsContext = cmsContext;
12
14
  this.identityContext = identityContext;
15
+ this.getLatestRevision = getLatestRevision;
13
16
  }
14
- async create(model, originalEntry, latestEntry) {
15
- await validateModelEntryDataOrThrow({
17
+ async create(model, originalEntry) {
18
+ const latestResult = await this.getLatestRevision.execute(model, {
19
+ id: originalEntry.entryId
20
+ });
21
+ if (latestResult.isFail()) return Result.fail(latestResult.error);
22
+ const latestEntry = latestResult.value;
23
+ const invalidFields = await validateModelEntryData({
16
24
  context: this.cmsContext,
17
25
  model,
18
26
  values: originalEntry.values,
19
27
  entry: originalEntry
20
28
  });
29
+ if (invalidFields.length > 0) return Result.fail(new EntryValidationError("Validation failed.", invalidFields));
21
30
  const currentDateTime = new Date().toISOString();
22
31
  const currentIdentity = this.identityContext.getIdentity();
23
32
  const entry = {
@@ -25,32 +34,28 @@ class CreatePublishEntryDataFactoryImpl {
25
34
  status: STATUS_PUBLISHED,
26
35
  locked: true,
27
36
  createdOn: getDate(latestEntry.createdOn),
28
- modifiedOn: getDate(currentDateTime),
29
- savedOn: getDate(currentDateTime),
37
+ modifiedOn: getDate(latestEntry.modifiedOn),
38
+ savedOn: getDate(latestEntry.savedOn, originalEntry.savedOn),
30
39
  firstPublishedOn: getDate(latestEntry.firstPublishedOn, currentDateTime),
31
40
  lastPublishedOn: getDate(currentDateTime),
32
41
  createdBy: getIdentity(latestEntry.createdBy),
33
- modifiedBy: getIdentity(currentIdentity),
34
- savedBy: getIdentity(currentIdentity),
42
+ modifiedBy: getIdentity(latestEntry.modifiedBy),
43
+ savedBy: getIdentity(latestEntry.savedBy, originalEntry.savedBy),
35
44
  firstPublishedBy: getIdentity(latestEntry.firstPublishedBy, currentIdentity),
36
45
  lastPublishedBy: getIdentity(currentIdentity),
37
46
  revisionCreatedOn: getDate(originalEntry.revisionCreatedOn),
38
- revisionSavedOn: getDate(currentDateTime),
39
- revisionModifiedOn: getDate(currentDateTime),
40
47
  revisionFirstPublishedOn: getDate(originalEntry.revisionFirstPublishedOn, currentDateTime),
41
48
  revisionLastPublishedOn: getDate(currentDateTime),
42
49
  revisionCreatedBy: getIdentity(originalEntry.revisionCreatedBy),
43
- revisionSavedBy: getIdentity(currentIdentity),
44
- revisionModifiedBy: getIdentity(currentIdentity),
45
50
  revisionFirstPublishedBy: getIdentity(originalEntry.revisionFirstPublishedBy, currentIdentity),
46
51
  revisionLastPublishedBy: getIdentity(currentIdentity),
47
52
  live: {
48
53
  version: originalEntry.version
49
54
  }
50
55
  };
51
- return {
56
+ return Result.ok({
52
57
  entry
53
- };
58
+ });
54
59
  }
55
60
  }
56
61
  const CreatePublishEntryDataFactory_CreatePublishEntryDataFactory = createImplementation({
@@ -58,7 +63,8 @@ const CreatePublishEntryDataFactory_CreatePublishEntryDataFactory = createImplem
58
63
  implementation: CreatePublishEntryDataFactoryImpl,
59
64
  dependencies: [
60
65
  CmsContext,
61
- IdentityContext
66
+ IdentityContext,
67
+ GetLatestRevisionByEntryIdUseCase
62
68
  ]
63
69
  });
64
70
  export { CreatePublishEntryDataFactory_CreatePublishEntryDataFactory as CreatePublishEntryDataFactory };
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport {\n CreatePublishEntryDataFactory as FactoryAbstraction,\n type ICreatePublishEntryDataFactory,\n type ICreatePublishEntryDataResponse\n} from \"./abstractions.js\";\nimport { CmsContext } from \"~/features/shared/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { STATUS_PUBLISHED } from \"../statuses.js\";\nimport { validateModelEntryDataOrThrow } from \"~/crud/contentEntry/entryDataValidation.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { getDate } from \"~/utils/date.js\";\n\nclass CreatePublishEntryDataFactoryImpl implements ICreatePublishEntryDataFactory {\n public constructor(\n private readonly cmsContext: CmsContext.Interface,\n private readonly identityContext: IdentityContext.Interface\n ) {}\n\n public async create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n originalEntry: CmsEntry<TValues>,\n latestEntry: CmsEntry<TValues>\n ): Promise<ICreatePublishEntryDataResponse<TValues>> {\n await validateModelEntryDataOrThrow({\n context: this.cmsContext,\n model,\n values: originalEntry.values,\n entry: originalEntry\n });\n\n const currentDateTime = new Date().toISOString();\n const currentIdentity = this.identityContext.getIdentity();\n\n const entry: CmsEntry<TValues> = {\n ...originalEntry,\n status: STATUS_PUBLISHED,\n locked: true,\n createdOn: getDate(latestEntry.createdOn),\n modifiedOn: getDate(currentDateTime),\n savedOn: getDate(currentDateTime),\n firstPublishedOn: getDate(latestEntry.firstPublishedOn, currentDateTime),\n lastPublishedOn: getDate(currentDateTime),\n createdBy: getIdentity(latestEntry.createdBy),\n modifiedBy: getIdentity(currentIdentity),\n savedBy: getIdentity(currentIdentity),\n firstPublishedBy: getIdentity(latestEntry.firstPublishedBy, currentIdentity),\n lastPublishedBy: getIdentity(currentIdentity),\n revisionCreatedOn: getDate(originalEntry.revisionCreatedOn),\n revisionSavedOn: getDate(currentDateTime),\n revisionModifiedOn: getDate(currentDateTime),\n revisionFirstPublishedOn: getDate(\n originalEntry.revisionFirstPublishedOn,\n currentDateTime\n ),\n revisionLastPublishedOn: getDate(currentDateTime),\n revisionCreatedBy: getIdentity(originalEntry.revisionCreatedBy),\n revisionSavedBy: getIdentity(currentIdentity),\n revisionModifiedBy: getIdentity(currentIdentity),\n revisionFirstPublishedBy: getIdentity(\n originalEntry.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedBy: getIdentity(currentIdentity),\n live: {\n version: originalEntry.version\n }\n };\n\n return { entry };\n }\n}\n\nexport const CreatePublishEntryDataFactory = createImplementation({\n abstraction: FactoryAbstraction,\n implementation: CreatePublishEntryDataFactoryImpl,\n dependencies: [CmsContext, IdentityContext]\n});\n"],"names":["CreatePublishEntryDataFactoryImpl","cmsContext","identityContext","model","originalEntry","latestEntry","validateModelEntryDataOrThrow","currentDateTime","Date","currentIdentity","entry","STATUS_PUBLISHED","getDate","getIdentity","CreatePublishEntryDataFactory","createImplementation","FactoryAbstraction","CmsContext","IdentityContext"],"mappings":";;;;;;;;AAcA,MAAMA;IACF,YACqBC,UAAgC,EAChCC,eAA0C,CAC7D;aAFmBD,UAAU,GAAVA;aACAC,eAAe,GAAfA;IAClB;IAEH,MAAa,OACTC,KAAe,EACfC,aAAgC,EAChCC,WAA8B,EACmB;QACjD,MAAMC,8BAA8B;YAChC,SAAS,IAAI,CAAC,UAAU;YACxBH;YACA,QAAQC,cAAc,MAAM;YAC5B,OAAOA;QACX;QAEA,MAAMG,kBAAkB,IAAIC,OAAO,WAAW;QAC9C,MAAMC,kBAAkB,IAAI,CAAC,eAAe,CAAC,WAAW;QAExD,MAAMC,QAA2B;YAC7B,GAAGN,aAAa;YAChB,QAAQO;YACR,QAAQ;YACR,WAAWC,QAAQP,YAAY,SAAS;YACxC,YAAYO,QAAQL;YACpB,SAASK,QAAQL;YACjB,kBAAkBK,QAAQP,YAAY,gBAAgB,EAAEE;YACxD,iBAAiBK,QAAQL;YACzB,WAAWM,YAAYR,YAAY,SAAS;YAC5C,YAAYQ,YAAYJ;YACxB,SAASI,YAAYJ;YACrB,kBAAkBI,YAAYR,YAAY,gBAAgB,EAAEI;YAC5D,iBAAiBI,YAAYJ;YAC7B,mBAAmBG,QAAQR,cAAc,iBAAiB;YAC1D,iBAAiBQ,QAAQL;YACzB,oBAAoBK,QAAQL;YAC5B,0BAA0BK,QACtBR,cAAc,wBAAwB,EACtCG;YAEJ,yBAAyBK,QAAQL;YACjC,mBAAmBM,YAAYT,cAAc,iBAAiB;YAC9D,iBAAiBS,YAAYJ;YAC7B,oBAAoBI,YAAYJ;YAChC,0BAA0BI,YACtBT,cAAc,wBAAwB,EACtCK;YAEJ,yBAAyBI,YAAYJ;YACrC,MAAM;gBACF,SAASL,cAAc,OAAO;YAClC;QACJ;QAEA,OAAO;YAAEM;QAAM;IACnB;AACJ;AAEO,MAAMI,8DAAgCC,qBAAqB;IAC9D,aAAaC;IACb,gBAAgBhB;IAChB,cAAc;QAACiB;QAAYC;KAAgB;AAC/C"}
1
+ {"version":3,"file":"features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport {\n CreatePublishEntryDataFactory as FactoryAbstraction,\n type ICreatePublishEntryDataFactory\n} from \"./abstractions.js\";\nimport { CmsContext } from \"~/features/shared/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { STATUS_PUBLISHED } from \"../statuses.js\";\nimport { validateModelEntryData } from \"~/crud/contentEntry/entryDataValidation.js\";\nimport { EntryValidationError } from \"~/domain/contentEntry/errors.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\n\nclass CreatePublishEntryDataFactoryImpl implements ICreatePublishEntryDataFactory {\n public constructor(\n private readonly cmsContext: CmsContext.Interface,\n private readonly identityContext: IdentityContext.Interface,\n private readonly getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface\n ) {}\n\n public async create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n originalEntry: CmsEntry<TValues>\n ): Promise<FactoryAbstraction.Return<TValues>> {\n const latestResult = await this.getLatestRevision.execute<TValues>(model, {\n id: originalEntry.entryId\n });\n if (latestResult.isFail()) {\n return Result.fail(latestResult.error);\n }\n const latestEntry = latestResult.value;\n\n const invalidFields = await validateModelEntryData({\n context: this.cmsContext,\n model,\n values: originalEntry.values,\n entry: originalEntry\n });\n if (invalidFields.length > 0) {\n return Result.fail(new EntryValidationError(\"Validation failed.\", invalidFields));\n }\n\n const currentDateTime = new Date().toISOString();\n const currentIdentity = this.identityContext.getIdentity();\n\n /**\n * Publishing is not a content modification, so saved/modified meta fields are kept.\n * Entry-level values are taken from the latest revision, because storage copies them\n * onto the latest revision when a non-latest revision is published. Revision-level\n * values are the published revision's own, and come from `originalEntry`.\n */\n const entry: CmsEntry<TValues> = {\n ...originalEntry,\n status: STATUS_PUBLISHED,\n locked: true,\n createdOn: getDate(latestEntry.createdOn),\n modifiedOn: getDate(latestEntry.modifiedOn),\n savedOn: getDate(latestEntry.savedOn, originalEntry.savedOn),\n firstPublishedOn: getDate(latestEntry.firstPublishedOn, currentDateTime),\n lastPublishedOn: getDate(currentDateTime),\n createdBy: getIdentity(latestEntry.createdBy),\n modifiedBy: getIdentity(latestEntry.modifiedBy),\n savedBy: getIdentity(latestEntry.savedBy, originalEntry.savedBy),\n firstPublishedBy: getIdentity(latestEntry.firstPublishedBy, currentIdentity),\n lastPublishedBy: getIdentity(currentIdentity),\n revisionCreatedOn: getDate(originalEntry.revisionCreatedOn),\n revisionFirstPublishedOn: getDate(\n originalEntry.revisionFirstPublishedOn,\n currentDateTime\n ),\n revisionLastPublishedOn: getDate(currentDateTime),\n revisionCreatedBy: getIdentity(originalEntry.revisionCreatedBy),\n revisionFirstPublishedBy: getIdentity(\n originalEntry.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedBy: getIdentity(currentIdentity),\n live: {\n version: originalEntry.version\n }\n };\n\n return Result.ok({ entry });\n }\n}\n\nexport const CreatePublishEntryDataFactory = createImplementation({\n abstraction: FactoryAbstraction,\n implementation: CreatePublishEntryDataFactoryImpl,\n dependencies: [CmsContext, IdentityContext, GetLatestRevisionByEntryIdUseCase]\n});\n"],"names":["CreatePublishEntryDataFactoryImpl","cmsContext","identityContext","getLatestRevision","model","originalEntry","latestResult","Result","latestEntry","invalidFields","validateModelEntryData","EntryValidationError","currentDateTime","Date","currentIdentity","entry","STATUS_PUBLISHED","getDate","getIdentity","CreatePublishEntryDataFactory","createImplementation","FactoryAbstraction","CmsContext","IdentityContext","GetLatestRevisionByEntryIdUseCase"],"mappings":";;;;;;;;;;AAeA,MAAMA;IACF,YACqBC,UAAgC,EAChCC,eAA0C,EAC1CC,iBAA8D,CACjF;aAHmBF,UAAU,GAAVA;aACAC,eAAe,GAAfA;aACAC,iBAAiB,GAAjBA;IAClB;IAEH,MAAa,OACTC,KAAe,EACfC,aAAgC,EACW;QAC3C,MAAMC,eAAe,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAUF,OAAO;YACtE,IAAIC,cAAc,OAAO;QAC7B;QACA,IAAIC,aAAa,MAAM,IACnB,OAAOC,OAAO,IAAI,CAACD,aAAa,KAAK;QAEzC,MAAME,cAAcF,aAAa,KAAK;QAEtC,MAAMG,gBAAgB,MAAMC,uBAAuB;YAC/C,SAAS,IAAI,CAAC,UAAU;YACxBN;YACA,QAAQC,cAAc,MAAM;YAC5B,OAAOA;QACX;QACA,IAAII,cAAc,MAAM,GAAG,GACvB,OAAOF,OAAO,IAAI,CAAC,IAAII,qBAAqB,sBAAsBF;QAGtE,MAAMG,kBAAkB,IAAIC,OAAO,WAAW;QAC9C,MAAMC,kBAAkB,IAAI,CAAC,eAAe,CAAC,WAAW;QAQxD,MAAMC,QAA2B;YAC7B,GAAGV,aAAa;YAChB,QAAQW;YACR,QAAQ;YACR,WAAWC,QAAQT,YAAY,SAAS;YACxC,YAAYS,QAAQT,YAAY,UAAU;YAC1C,SAASS,QAAQT,YAAY,OAAO,EAAEH,cAAc,OAAO;YAC3D,kBAAkBY,QAAQT,YAAY,gBAAgB,EAAEI;YACxD,iBAAiBK,QAAQL;YACzB,WAAWM,YAAYV,YAAY,SAAS;YAC5C,YAAYU,YAAYV,YAAY,UAAU;YAC9C,SAASU,YAAYV,YAAY,OAAO,EAAEH,cAAc,OAAO;YAC/D,kBAAkBa,YAAYV,YAAY,gBAAgB,EAAEM;YAC5D,iBAAiBI,YAAYJ;YAC7B,mBAAmBG,QAAQZ,cAAc,iBAAiB;YAC1D,0BAA0BY,QACtBZ,cAAc,wBAAwB,EACtCO;YAEJ,yBAAyBK,QAAQL;YACjC,mBAAmBM,YAAYb,cAAc,iBAAiB;YAC9D,0BAA0Ba,YACtBb,cAAc,wBAAwB,EACtCS;YAEJ,yBAAyBI,YAAYJ;YACrC,MAAM;gBACF,SAAST,cAAc,OAAO;YAClC;QACJ;QAEA,OAAOE,OAAO,EAAE,CAAC;YAAEQ;QAAM;IAC7B;AACJ;AAEO,MAAMI,8DAAgCC,qBAAqB;IAC9D,aAAaC;IACb,gBAAgBrB;IAChB,cAAc;QAACsB;QAAYC;QAAiBC;KAAkC;AAClF"}
@@ -1,12 +1,26 @@
1
+ import { type Result } from "@webiny/feature/api";
2
+ import type { GetLatestRevisionByEntryIdUseCase } from "../../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
3
+ import type { EntryValidationError } from "../../../../domain/contentEntry/errors.js";
1
4
  import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../../types/index.js";
2
5
  export interface ICreatePublishEntryDataResponse<TValues extends CmsEntryValues = CmsEntryValues> {
3
6
  entry: CmsEntry<TValues>;
4
7
  }
8
+ /**
9
+ * Expected failures of building the data of an entry being published.
10
+ */
11
+ export interface ICreatePublishEntryDataFactoryErrors {
12
+ latest: GetLatestRevisionByEntryIdUseCase.Error;
13
+ validation: EntryValidationError;
14
+ }
15
+ type FactoryError = ICreatePublishEntryDataFactoryErrors[keyof ICreatePublishEntryDataFactoryErrors];
5
16
  export interface ICreatePublishEntryDataFactory {
6
- create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, originalEntry: CmsEntry<TValues>, latestEntry: CmsEntry<TValues>): Promise<ICreatePublishEntryDataResponse<TValues>>;
17
+ create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, originalEntry: CmsEntry<TValues>): Promise<Result<ICreatePublishEntryDataResponse<TValues>, FactoryError>>;
7
18
  }
8
19
  export declare const CreatePublishEntryDataFactory: import("@webiny/di").Abstraction<ICreatePublishEntryDataFactory>;
9
20
  export declare namespace CreatePublishEntryDataFactory {
10
21
  type Interface = ICreatePublishEntryDataFactory;
22
+ type Error = FactoryError;
23
+ type Return<TValues extends CmsEntryValues = CmsEntryValues> = Result<ICreatePublishEntryDataResponse<TValues>, FactoryError>;
11
24
  type Response<TValues extends CmsEntryValues = CmsEntryValues> = ICreatePublishEntryDataResponse<TValues>;
12
25
  }
26
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/abstractions.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\n\nexport interface ICreatePublishEntryDataResponse<TValues extends CmsEntryValues = CmsEntryValues> {\n entry: CmsEntry<TValues>;\n}\n\nexport interface ICreatePublishEntryDataFactory {\n create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n originalEntry: CmsEntry<TValues>,\n latestEntry: CmsEntry<TValues>\n ): Promise<ICreatePublishEntryDataResponse<TValues>>;\n}\n\nexport const CreatePublishEntryDataFactory = createAbstraction<ICreatePublishEntryDataFactory>(\n \"Cms/Entry/CreatePublishEntryDataFactory\"\n);\n\nexport namespace CreatePublishEntryDataFactory {\n export type Interface = ICreatePublishEntryDataFactory;\n export type Response<TValues extends CmsEntryValues = CmsEntryValues> =\n ICreatePublishEntryDataResponse<TValues>;\n}\n"],"names":["CreatePublishEntryDataFactory","createAbstraction"],"mappings":";AAeO,MAAMA,gCAAgCC,kBACzC"}
1
+ {"version":3,"file":"features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/abstractions.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { EntryValidationError } from \"~/domain/contentEntry/errors.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\n\nexport interface ICreatePublishEntryDataResponse<TValues extends CmsEntryValues = CmsEntryValues> {\n entry: CmsEntry<TValues>;\n}\n\n/**\n * Expected failures of building the data of an entry being published.\n */\nexport interface ICreatePublishEntryDataFactoryErrors {\n latest: GetLatestRevisionByEntryIdUseCase.Error;\n validation: EntryValidationError;\n}\n\ntype FactoryError =\n ICreatePublishEntryDataFactoryErrors[keyof ICreatePublishEntryDataFactoryErrors];\n\nexport interface ICreatePublishEntryDataFactory {\n create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n originalEntry: CmsEntry<TValues>\n ): Promise<Result<ICreatePublishEntryDataResponse<TValues>, FactoryError>>;\n}\n\nexport const CreatePublishEntryDataFactory = createAbstraction<ICreatePublishEntryDataFactory>(\n \"Cms/Entry/CreatePublishEntryDataFactory\"\n);\n\nexport namespace CreatePublishEntryDataFactory {\n export type Interface = ICreatePublishEntryDataFactory;\n export type Error = FactoryError;\n export type Return<TValues extends CmsEntryValues = CmsEntryValues> = Result<\n ICreatePublishEntryDataResponse<TValues>,\n FactoryError\n >;\n export type Response<TValues extends CmsEntryValues = CmsEntryValues> =\n ICreatePublishEntryDataResponse<TValues>;\n}\n"],"names":["CreatePublishEntryDataFactory","createAbstraction"],"mappings":";AA2BO,MAAMA,gCAAgCC,kBACzC"}
@@ -1,12 +1,14 @@
1
- import { type ICreateRepublishEntryDataFactory, type ICreateRepublishEntryDataResponse } from "./abstractions.js";
1
+ import { CreateRepublishEntryDataFactory as FactoryAbstraction, type ICreateRepublishEntryDataFactory } from "./abstractions.js";
2
2
  import { CmsContext } from "../../../../features/shared/abstractions.js";
3
3
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
4
4
  import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../../types/index.js";
5
+ import { GetLatestRevisionByEntryIdUseCase } from "../../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
5
6
  declare class CreateRepublishEntryDataFactoryImpl implements ICreateRepublishEntryDataFactory {
6
7
  private readonly cmsContext;
7
8
  private readonly identityContext;
8
- constructor(cmsContext: CmsContext.Interface, identityContext: IdentityContext.Interface);
9
- create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, originalEntry: CmsEntry<TValues>): Promise<ICreateRepublishEntryDataResponse<TValues>>;
9
+ private readonly getLatestRevision;
10
+ constructor(cmsContext: CmsContext.Interface, identityContext: IdentityContext.Interface, getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface);
11
+ create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, originalEntry: CmsEntry<TValues>): Promise<FactoryAbstraction.Return<TValues>>;
10
12
  }
11
13
  export declare const CreateRepublishEntryDataFactory: import("@webiny/di").Implementation<typeof CreateRepublishEntryDataFactoryImpl>;
12
14
  export {};
@@ -1,4 +1,4 @@
1
- import { createImplementation } from "@webiny/feature/api";
1
+ import { Result, createImplementation } from "@webiny/feature/api";
2
2
  import { CreateRepublishEntryDataFactory } from "./abstractions.js";
3
3
  import { CmsContext } from "../../../shared/abstractions.js";
4
4
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
@@ -6,12 +6,19 @@ import { referenceFieldsMapping } from "../../../../crud/contentEntry/referenceF
6
6
  import { STATUS_PUBLISHED } from "../statuses.js";
7
7
  import { getIdentity } from "../../../../utils/identity.js";
8
8
  import { getDate } from "../../../../utils/date.js";
9
+ import { GetLatestRevisionByEntryIdUseCase } from "../../GetLatestRevisionByEntryId/index.js";
9
10
  class CreateRepublishEntryDataFactoryImpl {
10
- constructor(cmsContext, identityContext){
11
+ constructor(cmsContext, identityContext, getLatestRevision){
11
12
  this.cmsContext = cmsContext;
12
13
  this.identityContext = identityContext;
14
+ this.getLatestRevision = getLatestRevision;
13
15
  }
14
16
  async create(model, originalEntry) {
17
+ const latestResult = await this.getLatestRevision.execute(model, {
18
+ id: originalEntry.entryId
19
+ });
20
+ if (latestResult.isFail()) return Result.fail(latestResult.error);
21
+ const latestEntry = latestResult.value;
15
22
  const values = await referenceFieldsMapping({
16
23
  context: this.cmsContext,
17
24
  model,
@@ -23,18 +30,14 @@ class CreateRepublishEntryDataFactoryImpl {
23
30
  const entry = {
24
31
  ...originalEntry,
25
32
  status: STATUS_PUBLISHED,
26
- savedOn: getDate(currentDateTime),
27
- modifiedOn: getDate(currentDateTime),
28
- savedBy: getIdentity(currentIdentity),
29
- modifiedBy: getIdentity(currentIdentity),
33
+ savedOn: getDate(latestEntry.savedOn, originalEntry.savedOn),
34
+ modifiedOn: getDate(latestEntry.modifiedOn),
35
+ savedBy: getIdentity(latestEntry.savedBy, originalEntry.savedBy),
36
+ modifiedBy: getIdentity(latestEntry.modifiedBy),
30
37
  firstPublishedOn: getDate(originalEntry.firstPublishedOn, currentDateTime),
31
38
  firstPublishedBy: getIdentity(originalEntry.firstPublishedBy, currentIdentity),
32
39
  lastPublishedOn: getDate(currentDateTime),
33
40
  lastPublishedBy: getIdentity(currentIdentity),
34
- revisionSavedOn: getDate(currentDateTime),
35
- revisionModifiedOn: getDate(currentDateTime),
36
- revisionSavedBy: getIdentity(currentIdentity),
37
- revisionModifiedBy: getIdentity(currentIdentity),
38
41
  revisionFirstPublishedOn: getDate(originalEntry.revisionFirstPublishedOn, currentDateTime),
39
42
  revisionFirstPublishedBy: getIdentity(originalEntry.revisionFirstPublishedBy, currentIdentity),
40
43
  revisionLastPublishedOn: getDate(currentDateTime),
@@ -44,9 +47,9 @@ class CreateRepublishEntryDataFactoryImpl {
44
47
  version: originalEntry.version
45
48
  }
46
49
  };
47
- return {
50
+ return Result.ok({
48
51
  entry
49
- };
52
+ });
50
53
  }
51
54
  }
52
55
  const CreateRepublishEntryDataFactory_CreateRepublishEntryDataFactory = createImplementation({
@@ -54,7 +57,8 @@ const CreateRepublishEntryDataFactory_CreateRepublishEntryDataFactory = createIm
54
57
  implementation: CreateRepublishEntryDataFactoryImpl,
55
58
  dependencies: [
56
59
  CmsContext,
57
- IdentityContext
60
+ IdentityContext,
61
+ GetLatestRevisionByEntryIdUseCase
58
62
  ]
59
63
  });
60
64
  export { CreateRepublishEntryDataFactory_CreateRepublishEntryDataFactory as CreateRepublishEntryDataFactory };
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport {\n CreateRepublishEntryDataFactory as FactoryAbstraction,\n type ICreateRepublishEntryDataFactory,\n type ICreateRepublishEntryDataResponse\n} from \"./abstractions.js\";\nimport { CmsContext } from \"~/features/shared/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping.js\";\nimport { STATUS_PUBLISHED } from \"../statuses.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { getDate } from \"~/utils/date.js\";\n\nclass CreateRepublishEntryDataFactoryImpl implements ICreateRepublishEntryDataFactory {\n public constructor(\n private readonly cmsContext: CmsContext.Interface,\n private readonly identityContext: IdentityContext.Interface\n ) {}\n\n public async create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n originalEntry: CmsEntry<TValues>\n ): Promise<ICreateRepublishEntryDataResponse<TValues>> {\n const values = await referenceFieldsMapping<TValues>({\n context: this.cmsContext,\n model,\n values: originalEntry.values,\n validateEntries: false\n });\n\n const currentDateTime = new Date().toISOString();\n const currentIdentity = this.identityContext.getIdentity();\n\n const entry: CmsEntry<TValues> = {\n ...originalEntry,\n status: STATUS_PUBLISHED,\n savedOn: getDate(currentDateTime),\n modifiedOn: getDate(currentDateTime),\n savedBy: getIdentity(currentIdentity)!,\n modifiedBy: getIdentity(currentIdentity),\n firstPublishedOn: getDate(originalEntry.firstPublishedOn, currentDateTime),\n firstPublishedBy: getIdentity(originalEntry.firstPublishedBy, currentIdentity),\n lastPublishedOn: getDate(currentDateTime),\n lastPublishedBy: getIdentity(currentIdentity),\n revisionSavedOn: getDate(currentDateTime),\n revisionModifiedOn: getDate(currentDateTime),\n revisionSavedBy: getIdentity(currentIdentity)!,\n revisionModifiedBy: getIdentity(currentIdentity),\n revisionFirstPublishedOn: getDate(\n originalEntry.revisionFirstPublishedOn,\n currentDateTime\n ),\n revisionFirstPublishedBy: getIdentity(\n originalEntry.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedOn: getDate(currentDateTime),\n revisionLastPublishedBy: getIdentity(currentIdentity),\n values,\n live: {\n version: originalEntry.version\n }\n };\n\n return { entry };\n }\n}\n\nexport const CreateRepublishEntryDataFactory = createImplementation({\n abstraction: FactoryAbstraction,\n implementation: CreateRepublishEntryDataFactoryImpl,\n dependencies: [CmsContext, IdentityContext]\n});\n"],"names":["CreateRepublishEntryDataFactoryImpl","cmsContext","identityContext","model","originalEntry","values","referenceFieldsMapping","currentDateTime","Date","currentIdentity","entry","STATUS_PUBLISHED","getDate","getIdentity","CreateRepublishEntryDataFactory","createImplementation","FactoryAbstraction","CmsContext","IdentityContext"],"mappings":";;;;;;;;AAcA,MAAMA;IACF,YACqBC,UAAgC,EAChCC,eAA0C,CAC7D;aAFmBD,UAAU,GAAVA;aACAC,eAAe,GAAfA;IAClB;IAEH,MAAa,OACTC,KAAe,EACfC,aAAgC,EACmB;QACnD,MAAMC,SAAS,MAAMC,uBAAgC;YACjD,SAAS,IAAI,CAAC,UAAU;YACxBH;YACA,QAAQC,cAAc,MAAM;YAC5B,iBAAiB;QACrB;QAEA,MAAMG,kBAAkB,IAAIC,OAAO,WAAW;QAC9C,MAAMC,kBAAkB,IAAI,CAAC,eAAe,CAAC,WAAW;QAExD,MAAMC,QAA2B;YAC7B,GAAGN,aAAa;YAChB,QAAQO;YACR,SAASC,QAAQL;YACjB,YAAYK,QAAQL;YACpB,SAASM,YAAYJ;YACrB,YAAYI,YAAYJ;YACxB,kBAAkBG,QAAQR,cAAc,gBAAgB,EAAEG;YAC1D,kBAAkBM,YAAYT,cAAc,gBAAgB,EAAEK;YAC9D,iBAAiBG,QAAQL;YACzB,iBAAiBM,YAAYJ;YAC7B,iBAAiBG,QAAQL;YACzB,oBAAoBK,QAAQL;YAC5B,iBAAiBM,YAAYJ;YAC7B,oBAAoBI,YAAYJ;YAChC,0BAA0BG,QACtBR,cAAc,wBAAwB,EACtCG;YAEJ,0BAA0BM,YACtBT,cAAc,wBAAwB,EACtCK;YAEJ,yBAAyBG,QAAQL;YACjC,yBAAyBM,YAAYJ;YACrCJ;YACA,MAAM;gBACF,SAASD,cAAc,OAAO;YAClC;QACJ;QAEA,OAAO;YAAEM;QAAM;IACnB;AACJ;AAEO,MAAMI,kEAAkCC,qBAAqB;IAChE,aAAaC;IACb,gBAAgBhB;IAChB,cAAc;QAACiB;QAAYC;KAAgB;AAC/C"}
1
+ {"version":3,"file":"features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport {\n CreateRepublishEntryDataFactory as FactoryAbstraction,\n type ICreateRepublishEntryDataFactory\n} from \"./abstractions.js\";\nimport { CmsContext } from \"~/features/shared/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { referenceFieldsMapping } from \"~/crud/contentEntry/referenceFieldsMapping.js\";\nimport { STATUS_PUBLISHED } from \"../statuses.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\n\nclass CreateRepublishEntryDataFactoryImpl implements ICreateRepublishEntryDataFactory {\n public constructor(\n private readonly cmsContext: CmsContext.Interface,\n private readonly identityContext: IdentityContext.Interface,\n private readonly getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface\n ) {}\n\n public async create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n originalEntry: CmsEntry<TValues>\n ): Promise<FactoryAbstraction.Return<TValues>> {\n const latestResult = await this.getLatestRevision.execute<TValues>(model, {\n id: originalEntry.entryId\n });\n if (latestResult.isFail()) {\n return Result.fail(latestResult.error);\n }\n const latestEntry = latestResult.value;\n\n const values = await referenceFieldsMapping<TValues>({\n context: this.cmsContext,\n model,\n values: originalEntry.values,\n validateEntries: false\n });\n\n const currentDateTime = new Date().toISOString();\n const currentIdentity = this.identityContext.getIdentity();\n\n /**\n * Republishing is not a content modification, so saved/modified meta fields are kept.\n * Entry-level values are taken from the latest revision, because storage copies them\n * onto the latest revision when a non-latest revision is republished. Revision-level\n * values are the republished revision's own, and come from `originalEntry`.\n */\n const entry: CmsEntry<TValues> = {\n ...originalEntry,\n status: STATUS_PUBLISHED,\n savedOn: getDate(latestEntry.savedOn, originalEntry.savedOn),\n modifiedOn: getDate(latestEntry.modifiedOn),\n savedBy: getIdentity(latestEntry.savedBy, originalEntry.savedBy),\n modifiedBy: getIdentity(latestEntry.modifiedBy),\n firstPublishedOn: getDate(originalEntry.firstPublishedOn, currentDateTime),\n firstPublishedBy: getIdentity(originalEntry.firstPublishedBy, currentIdentity),\n lastPublishedOn: getDate(currentDateTime),\n lastPublishedBy: getIdentity(currentIdentity),\n revisionFirstPublishedOn: getDate(\n originalEntry.revisionFirstPublishedOn,\n currentDateTime\n ),\n revisionFirstPublishedBy: getIdentity(\n originalEntry.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedOn: getDate(currentDateTime),\n revisionLastPublishedBy: getIdentity(currentIdentity),\n values,\n live: {\n version: originalEntry.version\n }\n };\n\n return Result.ok({ entry });\n }\n}\n\nexport const CreateRepublishEntryDataFactory = createImplementation({\n abstraction: FactoryAbstraction,\n implementation: CreateRepublishEntryDataFactoryImpl,\n dependencies: [CmsContext, IdentityContext, GetLatestRevisionByEntryIdUseCase]\n});\n"],"names":["CreateRepublishEntryDataFactoryImpl","cmsContext","identityContext","getLatestRevision","model","originalEntry","latestResult","Result","latestEntry","values","referenceFieldsMapping","currentDateTime","Date","currentIdentity","entry","STATUS_PUBLISHED","getDate","getIdentity","CreateRepublishEntryDataFactory","createImplementation","FactoryAbstraction","CmsContext","IdentityContext","GetLatestRevisionByEntryIdUseCase"],"mappings":";;;;;;;;;AAcA,MAAMA;IACF,YACqBC,UAAgC,EAChCC,eAA0C,EAC1CC,iBAA8D,CACjF;aAHmBF,UAAU,GAAVA;aACAC,eAAe,GAAfA;aACAC,iBAAiB,GAAjBA;IAClB;IAEH,MAAa,OACTC,KAAe,EACfC,aAAgC,EACW;QAC3C,MAAMC,eAAe,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAUF,OAAO;YACtE,IAAIC,cAAc,OAAO;QAC7B;QACA,IAAIC,aAAa,MAAM,IACnB,OAAOC,OAAO,IAAI,CAACD,aAAa,KAAK;QAEzC,MAAME,cAAcF,aAAa,KAAK;QAEtC,MAAMG,SAAS,MAAMC,uBAAgC;YACjD,SAAS,IAAI,CAAC,UAAU;YACxBN;YACA,QAAQC,cAAc,MAAM;YAC5B,iBAAiB;QACrB;QAEA,MAAMM,kBAAkB,IAAIC,OAAO,WAAW;QAC9C,MAAMC,kBAAkB,IAAI,CAAC,eAAe,CAAC,WAAW;QAQxD,MAAMC,QAA2B;YAC7B,GAAGT,aAAa;YAChB,QAAQU;YACR,SAASC,QAAQR,YAAY,OAAO,EAAEH,cAAc,OAAO;YAC3D,YAAYW,QAAQR,YAAY,UAAU;YAC1C,SAASS,YAAYT,YAAY,OAAO,EAAEH,cAAc,OAAO;YAC/D,YAAYY,YAAYT,YAAY,UAAU;YAC9C,kBAAkBQ,QAAQX,cAAc,gBAAgB,EAAEM;YAC1D,kBAAkBM,YAAYZ,cAAc,gBAAgB,EAAEQ;YAC9D,iBAAiBG,QAAQL;YACzB,iBAAiBM,YAAYJ;YAC7B,0BAA0BG,QACtBX,cAAc,wBAAwB,EACtCM;YAEJ,0BAA0BM,YACtBZ,cAAc,wBAAwB,EACtCQ;YAEJ,yBAAyBG,QAAQL;YACjC,yBAAyBM,YAAYJ;YACrCJ;YACA,MAAM;gBACF,SAASJ,cAAc,OAAO;YAClC;QACJ;QAEA,OAAOE,OAAO,EAAE,CAAC;YAAEO;QAAM;IAC7B;AACJ;AAEO,MAAMI,kEAAkCC,qBAAqB;IAChE,aAAaC;IACb,gBAAgBpB;IAChB,cAAc;QAACqB;QAAYC;QAAiBC;KAAkC;AAClF"}
@@ -1,12 +1,24 @@
1
+ import { type Result } from "@webiny/feature/api";
2
+ import type { GetLatestRevisionByEntryIdUseCase } from "../../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
1
3
  import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../../types/index.js";
2
4
  export interface ICreateRepublishEntryDataResponse<TValues extends CmsEntryValues = CmsEntryValues> {
3
5
  entry: CmsEntry<TValues>;
4
6
  }
7
+ /**
8
+ * Expected failures of building the data of an entry being republished.
9
+ */
10
+ export interface ICreateRepublishEntryDataFactoryErrors {
11
+ latest: GetLatestRevisionByEntryIdUseCase.Error;
12
+ }
13
+ type FactoryError = ICreateRepublishEntryDataFactoryErrors[keyof ICreateRepublishEntryDataFactoryErrors];
5
14
  export interface ICreateRepublishEntryDataFactory {
6
- create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, originalEntry: CmsEntry<TValues>): Promise<ICreateRepublishEntryDataResponse<TValues>>;
15
+ create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, originalEntry: CmsEntry<TValues>): Promise<Result<ICreateRepublishEntryDataResponse<TValues>, FactoryError>>;
7
16
  }
8
17
  export declare const CreateRepublishEntryDataFactory: import("@webiny/di").Abstraction<ICreateRepublishEntryDataFactory>;
9
18
  export declare namespace CreateRepublishEntryDataFactory {
10
19
  type Interface = ICreateRepublishEntryDataFactory;
20
+ type Error = FactoryError;
21
+ type Return<TValues extends CmsEntryValues = CmsEntryValues> = Result<ICreateRepublishEntryDataResponse<TValues>, FactoryError>;
11
22
  type Response<TValues extends CmsEntryValues = CmsEntryValues> = ICreateRepublishEntryDataResponse<TValues>;
12
23
  }
24
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/abstractions.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\n\nexport interface ICreateRepublishEntryDataResponse<\n TValues extends CmsEntryValues = CmsEntryValues\n> {\n entry: CmsEntry<TValues>;\n}\n\nexport interface ICreateRepublishEntryDataFactory {\n create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n originalEntry: CmsEntry<TValues>\n ): Promise<ICreateRepublishEntryDataResponse<TValues>>;\n}\n\nexport const CreateRepublishEntryDataFactory = createAbstraction<ICreateRepublishEntryDataFactory>(\n \"Cms/Entry/CreateRepublishEntryDataFactory\"\n);\n\nexport namespace CreateRepublishEntryDataFactory {\n export type Interface = ICreateRepublishEntryDataFactory;\n export type Response<TValues extends CmsEntryValues = CmsEntryValues> =\n ICreateRepublishEntryDataResponse<TValues>;\n}\n"],"names":["CreateRepublishEntryDataFactory","createAbstraction"],"mappings":";AAgBO,MAAMA,kCAAkCC,kBAC3C"}
1
+ {"version":3,"file":"features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/abstractions.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\n\nexport interface ICreateRepublishEntryDataResponse<\n TValues extends CmsEntryValues = CmsEntryValues\n> {\n entry: CmsEntry<TValues>;\n}\n\n/**\n * Expected failures of building the data of an entry being republished.\n */\nexport interface ICreateRepublishEntryDataFactoryErrors {\n latest: GetLatestRevisionByEntryIdUseCase.Error;\n}\n\ntype FactoryError =\n ICreateRepublishEntryDataFactoryErrors[keyof ICreateRepublishEntryDataFactoryErrors];\n\nexport interface ICreateRepublishEntryDataFactory {\n create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n originalEntry: CmsEntry<TValues>\n ): Promise<Result<ICreateRepublishEntryDataResponse<TValues>, FactoryError>>;\n}\n\nexport const CreateRepublishEntryDataFactory = createAbstraction<ICreateRepublishEntryDataFactory>(\n \"Cms/Entry/CreateRepublishEntryDataFactory\"\n);\n\nexport namespace CreateRepublishEntryDataFactory {\n export type Interface = ICreateRepublishEntryDataFactory;\n export type Error = FactoryError;\n export type Return<TValues extends CmsEntryValues = CmsEntryValues> = Result<\n ICreateRepublishEntryDataResponse<TValues>,\n FactoryError\n >;\n export type Response<TValues extends CmsEntryValues = CmsEntryValues> =\n ICreateRepublishEntryDataResponse<TValues>;\n}\n"],"names":["CreateRepublishEntryDataFactory","createAbstraction"],"mappings":";AA2BO,MAAMA,kCAAkCC,kBAC3C"}
@@ -1,10 +1,10 @@
1
- import { type ICreateUnpublishEntryDataFactory, type ICreateUnpublishEntryDataResponse } from "./abstractions.js";
2
- import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
3
- import type { CmsEntry, CmsEntryValues } from "../../../../types/index.js";
1
+ import { CreateUnpublishEntryDataFactory as FactoryAbstraction, type ICreateUnpublishEntryDataFactory } from "./abstractions.js";
2
+ import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../../types/index.js";
3
+ import { GetLatestRevisionByEntryIdUseCase } from "../../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
4
4
  declare class CreateUnpublishEntryDataFactoryImpl implements ICreateUnpublishEntryDataFactory {
5
- private readonly identityContext;
6
- constructor(identityContext: IdentityContext.Interface);
7
- create<TValues extends CmsEntryValues = CmsEntryValues>(originalEntry: CmsEntry<TValues>): Promise<ICreateUnpublishEntryDataResponse<TValues>>;
5
+ private readonly getLatestRevision;
6
+ constructor(getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface);
7
+ create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, originalEntry: CmsEntry<TValues>): Promise<FactoryAbstraction.Return<TValues>>;
8
8
  }
9
9
  export declare const CreateUnpublishEntryDataFactory: import("@webiny/di").Implementation<typeof CreateUnpublishEntryDataFactoryImpl>;
10
10
  export {};
@@ -1,39 +1,38 @@
1
- import { createImplementation } from "@webiny/feature/api";
1
+ import { Result, createImplementation } from "@webiny/feature/api";
2
2
  import { CreateUnpublishEntryDataFactory } from "./abstractions.js";
3
- import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
4
3
  import { STATUS_UNPUBLISHED } from "../statuses.js";
5
4
  import { getIdentity } from "../../../../utils/identity.js";
6
5
  import { getDate } from "../../../../utils/date.js";
6
+ import { GetLatestRevisionByEntryIdUseCase } from "../../GetLatestRevisionByEntryId/index.js";
7
7
  class CreateUnpublishEntryDataFactoryImpl {
8
- constructor(identityContext){
9
- this.identityContext = identityContext;
8
+ constructor(getLatestRevision){
9
+ this.getLatestRevision = getLatestRevision;
10
10
  }
11
- async create(originalEntry) {
12
- const currentDateTime = new Date().toISOString();
13
- const currentIdentity = this.identityContext.getIdentity();
11
+ async create(model, originalEntry) {
12
+ const latestResult = await this.getLatestRevision.execute(model, {
13
+ id: originalEntry.entryId
14
+ });
15
+ if (latestResult.isFail()) return Result.fail(latestResult.error);
16
+ const latestEntry = latestResult.value;
14
17
  const entry = {
15
18
  ...originalEntry,
16
19
  status: STATUS_UNPUBLISHED,
17
- savedOn: getDate(currentDateTime),
18
- modifiedOn: getDate(currentDateTime),
19
- savedBy: getIdentity(currentIdentity),
20
- modifiedBy: getIdentity(currentIdentity),
21
- revisionSavedOn: getDate(currentDateTime),
22
- revisionModifiedOn: getDate(currentDateTime),
23
- revisionSavedBy: getIdentity(currentIdentity),
24
- revisionModifiedBy: getIdentity(currentIdentity),
20
+ savedOn: getDate(latestEntry.savedOn, originalEntry.savedOn),
21
+ modifiedOn: getDate(latestEntry.modifiedOn),
22
+ savedBy: getIdentity(latestEntry.savedBy, originalEntry.savedBy),
23
+ modifiedBy: getIdentity(latestEntry.modifiedBy),
25
24
  live: null
26
25
  };
27
- return {
26
+ return Result.ok({
28
27
  entry
29
- };
28
+ });
30
29
  }
31
30
  }
32
31
  const CreateUnpublishEntryDataFactory_CreateUnpublishEntryDataFactory = createImplementation({
33
32
  abstraction: CreateUnpublishEntryDataFactory,
34
33
  implementation: CreateUnpublishEntryDataFactoryImpl,
35
34
  dependencies: [
36
- IdentityContext
35
+ GetLatestRevisionByEntryIdUseCase
37
36
  ]
38
37
  });
39
38
  export { CreateUnpublishEntryDataFactory_CreateUnpublishEntryDataFactory as CreateUnpublishEntryDataFactory };
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport {\n CreateUnpublishEntryDataFactory as FactoryAbstraction,\n type ICreateUnpublishEntryDataFactory,\n type ICreateUnpublishEntryDataResponse\n} from \"./abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type { CmsEntry, CmsEntryValues } from \"~/types/index.js\";\nimport { STATUS_UNPUBLISHED } from \"../statuses.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { getDate } from \"~/utils/date.js\";\n\nclass CreateUnpublishEntryDataFactoryImpl implements ICreateUnpublishEntryDataFactory {\n public constructor(private readonly identityContext: IdentityContext.Interface) {}\n\n public async create<TValues extends CmsEntryValues = CmsEntryValues>(\n originalEntry: CmsEntry<TValues>\n ): Promise<ICreateUnpublishEntryDataResponse<TValues>> {\n const currentDateTime = new Date().toISOString();\n const currentIdentity = this.identityContext.getIdentity();\n\n const entry: CmsEntry<TValues> = {\n ...originalEntry,\n status: STATUS_UNPUBLISHED,\n savedOn: getDate(currentDateTime),\n modifiedOn: getDate(currentDateTime),\n savedBy: getIdentity(currentIdentity),\n modifiedBy: getIdentity(currentIdentity),\n revisionSavedOn: getDate(currentDateTime),\n revisionModifiedOn: getDate(currentDateTime),\n revisionSavedBy: getIdentity(currentIdentity),\n revisionModifiedBy: getIdentity(currentIdentity),\n live: null\n };\n\n return { entry };\n }\n}\n\nexport const CreateUnpublishEntryDataFactory = createImplementation({\n abstraction: FactoryAbstraction,\n implementation: CreateUnpublishEntryDataFactoryImpl,\n dependencies: [IdentityContext]\n});\n"],"names":["CreateUnpublishEntryDataFactoryImpl","identityContext","originalEntry","currentDateTime","Date","currentIdentity","entry","STATUS_UNPUBLISHED","getDate","getIdentity","CreateUnpublishEntryDataFactory","createImplementation","FactoryAbstraction","IdentityContext"],"mappings":";;;;;;AAYA,MAAMA;IACF,YAAoCC,eAA0C,CAAE;aAA5CA,eAAe,GAAfA;IAA6C;IAEjF,MAAa,OACTC,aAAgC,EACmB;QACnD,MAAMC,kBAAkB,IAAIC,OAAO,WAAW;QAC9C,MAAMC,kBAAkB,IAAI,CAAC,eAAe,CAAC,WAAW;QAExD,MAAMC,QAA2B;YAC7B,GAAGJ,aAAa;YAChB,QAAQK;YACR,SAASC,QAAQL;YACjB,YAAYK,QAAQL;YACpB,SAASM,YAAYJ;YACrB,YAAYI,YAAYJ;YACxB,iBAAiBG,QAAQL;YACzB,oBAAoBK,QAAQL;YAC5B,iBAAiBM,YAAYJ;YAC7B,oBAAoBI,YAAYJ;YAChC,MAAM;QACV;QAEA,OAAO;YAAEC;QAAM;IACnB;AACJ;AAEO,MAAMI,kEAAkCC,qBAAqB;IAChE,aAAaC;IACb,gBAAgBZ;IAChB,cAAc;QAACa;KAAgB;AACnC"}
1
+ {"version":3,"file":"features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport {\n CreateUnpublishEntryDataFactory as FactoryAbstraction,\n type ICreateUnpublishEntryDataFactory\n} from \"./abstractions.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { STATUS_UNPUBLISHED } from \"../statuses.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\n\nclass CreateUnpublishEntryDataFactoryImpl implements ICreateUnpublishEntryDataFactory {\n public constructor(\n private readonly getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface\n ) {}\n\n public async create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n originalEntry: CmsEntry<TValues>\n ): Promise<FactoryAbstraction.Return<TValues>> {\n const latestResult = await this.getLatestRevision.execute<TValues>(model, {\n id: originalEntry.entryId\n });\n if (latestResult.isFail()) {\n return Result.fail(latestResult.error);\n }\n const latestEntry = latestResult.value;\n\n /**\n * Unpublishing is not a content modification, so saved/modified meta fields are kept.\n * Entry-level values are taken from the latest revision, because storage copies them\n * onto the latest revision when a non-latest revision is unpublished. Revision-level\n * values are the unpublished revision's own, and come from `originalEntry`.\n */\n const entry: CmsEntry<TValues> = {\n ...originalEntry,\n status: STATUS_UNPUBLISHED,\n savedOn: getDate(latestEntry.savedOn, originalEntry.savedOn),\n modifiedOn: getDate(latestEntry.modifiedOn),\n savedBy: getIdentity(latestEntry.savedBy, originalEntry.savedBy),\n modifiedBy: getIdentity(latestEntry.modifiedBy),\n live: null\n };\n\n return Result.ok({ entry });\n }\n}\n\nexport const CreateUnpublishEntryDataFactory = createImplementation({\n abstraction: FactoryAbstraction,\n implementation: CreateUnpublishEntryDataFactoryImpl,\n dependencies: [GetLatestRevisionByEntryIdUseCase]\n});\n"],"names":["CreateUnpublishEntryDataFactoryImpl","getLatestRevision","model","originalEntry","latestResult","Result","latestEntry","entry","STATUS_UNPUBLISHED","getDate","getIdentity","CreateUnpublishEntryDataFactory","createImplementation","FactoryAbstraction","GetLatestRevisionByEntryIdUseCase"],"mappings":";;;;;;AAWA,MAAMA;IACF,YACqBC,iBAA8D,CACjF;aADmBA,iBAAiB,GAAjBA;IAClB;IAEH,MAAa,OACTC,KAAe,EACfC,aAAgC,EACW;QAC3C,MAAMC,eAAe,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAUF,OAAO;YACtE,IAAIC,cAAc,OAAO;QAC7B;QACA,IAAIC,aAAa,MAAM,IACnB,OAAOC,OAAO,IAAI,CAACD,aAAa,KAAK;QAEzC,MAAME,cAAcF,aAAa,KAAK;QAQtC,MAAMG,QAA2B;YAC7B,GAAGJ,aAAa;YAChB,QAAQK;YACR,SAASC,QAAQH,YAAY,OAAO,EAAEH,cAAc,OAAO;YAC3D,YAAYM,QAAQH,YAAY,UAAU;YAC1C,SAASI,YAAYJ,YAAY,OAAO,EAAEH,cAAc,OAAO;YAC/D,YAAYO,YAAYJ,YAAY,UAAU;YAC9C,MAAM;QACV;QAEA,OAAOD,OAAO,EAAE,CAAC;YAAEE;QAAM;IAC7B;AACJ;AAEO,MAAMI,kEAAkCC,qBAAqB;IAChE,aAAaC;IACb,gBAAgBb;IAChB,cAAc;QAACc;KAAkC;AACrD"}
@@ -1,12 +1,24 @@
1
- import type { CmsEntry, CmsEntryValues } from "../../../../types/index.js";
1
+ import { type Result } from "@webiny/feature/api";
2
+ import type { GetLatestRevisionByEntryIdUseCase } from "../../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
3
+ import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../../types/index.js";
2
4
  export interface ICreateUnpublishEntryDataResponse<TValues extends CmsEntryValues = CmsEntryValues> {
3
5
  entry: CmsEntry<TValues>;
4
6
  }
7
+ /**
8
+ * Expected failures of building the data of an entry being unpublished.
9
+ */
10
+ export interface ICreateUnpublishEntryDataFactoryErrors {
11
+ latest: GetLatestRevisionByEntryIdUseCase.Error;
12
+ }
13
+ type FactoryError = ICreateUnpublishEntryDataFactoryErrors[keyof ICreateUnpublishEntryDataFactoryErrors];
5
14
  export interface ICreateUnpublishEntryDataFactory {
6
- create<TValues extends CmsEntryValues = CmsEntryValues>(originalEntry: CmsEntry<TValues>): Promise<ICreateUnpublishEntryDataResponse<TValues>>;
15
+ create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, originalEntry: CmsEntry<TValues>): Promise<Result<ICreateUnpublishEntryDataResponse<TValues>, FactoryError>>;
7
16
  }
8
17
  export declare const CreateUnpublishEntryDataFactory: import("@webiny/di").Abstraction<ICreateUnpublishEntryDataFactory>;
9
18
  export declare namespace CreateUnpublishEntryDataFactory {
10
19
  type Interface = ICreateUnpublishEntryDataFactory;
20
+ type Error = FactoryError;
21
+ type Return<TValues extends CmsEntryValues = CmsEntryValues> = Result<ICreateUnpublishEntryDataResponse<TValues>, FactoryError>;
11
22
  type Response<TValues extends CmsEntryValues = CmsEntryValues> = ICreateUnpublishEntryDataResponse<TValues>;
12
23
  }
24
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/abstractions.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CmsEntry, CmsEntryValues } from \"~/types/index.js\";\n\nexport interface ICreateUnpublishEntryDataResponse<\n TValues extends CmsEntryValues = CmsEntryValues\n> {\n entry: CmsEntry<TValues>;\n}\n\nexport interface ICreateUnpublishEntryDataFactory {\n create<TValues extends CmsEntryValues = CmsEntryValues>(\n originalEntry: CmsEntry<TValues>\n ): Promise<ICreateUnpublishEntryDataResponse<TValues>>;\n}\n\nexport const CreateUnpublishEntryDataFactory = createAbstraction<ICreateUnpublishEntryDataFactory>(\n \"Cms/Entry/CreateUnpublishEntryDataFactory\"\n);\n\nexport namespace CreateUnpublishEntryDataFactory {\n export type Interface = ICreateUnpublishEntryDataFactory;\n export type Response<TValues extends CmsEntryValues = CmsEntryValues> =\n ICreateUnpublishEntryDataResponse<TValues>;\n}\n"],"names":["CreateUnpublishEntryDataFactory","createAbstraction"],"mappings":";AAeO,MAAMA,kCAAkCC,kBAC3C"}
1
+ {"version":3,"file":"features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/abstractions.js","sources":["../../../../../src/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\n\nexport interface ICreateUnpublishEntryDataResponse<\n TValues extends CmsEntryValues = CmsEntryValues\n> {\n entry: CmsEntry<TValues>;\n}\n\n/**\n * Expected failures of building the data of an entry being unpublished.\n */\nexport interface ICreateUnpublishEntryDataFactoryErrors {\n latest: GetLatestRevisionByEntryIdUseCase.Error;\n}\n\ntype FactoryError =\n ICreateUnpublishEntryDataFactoryErrors[keyof ICreateUnpublishEntryDataFactoryErrors];\n\nexport interface ICreateUnpublishEntryDataFactory {\n create<TValues extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n originalEntry: CmsEntry<TValues>\n ): Promise<Result<ICreateUnpublishEntryDataResponse<TValues>, FactoryError>>;\n}\n\nexport const CreateUnpublishEntryDataFactory = createAbstraction<ICreateUnpublishEntryDataFactory>(\n \"Cms/Entry/CreateUnpublishEntryDataFactory\"\n);\n\nexport namespace CreateUnpublishEntryDataFactory {\n export type Interface = ICreateUnpublishEntryDataFactory;\n export type Error = FactoryError;\n export type Return<TValues extends CmsEntryValues = CmsEntryValues> = Result<\n ICreateUnpublishEntryDataResponse<TValues>,\n FactoryError\n >;\n export type Response<TValues extends CmsEntryValues = CmsEntryValues> =\n ICreateUnpublishEntryDataResponse<TValues>;\n}\n"],"names":["CreateUnpublishEntryDataFactory","createAbstraction"],"mappings":";AA2BO,MAAMA,kCAAkCC,kBAC3C"}
@@ -1,12 +1,16 @@
1
- import { type IUpdateEntryDataFactory, type IUpdateEntryDataResponse } from "./abstractions.js";
1
+ import { type IUpdateEntryDataFactory, UpdateEntryDataFactory as FactoryAbstraction } from "./abstractions.js";
2
2
  import { CmsContext } from "../../../../features/shared/abstractions.js";
3
3
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
4
4
  import type { CmsEntry, CmsEntryValues, CmsModel, UpdateCmsEntryInput, UpdateCmsEntryOptionsInput } from "../../../../types/index.js";
5
+ import { ModelToAstConverter } from "../../../../features/contentModel/ModelToAstConverter/abstractions.js";
6
+ import { GetLatestRevisionByEntryIdUseCase } from "../../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
5
7
  declare class UpdateEntryDataFactoryImpl implements IUpdateEntryDataFactory {
6
8
  private readonly cmsContext;
7
9
  private readonly identityContext;
8
- constructor(cmsContext: CmsContext.Interface, identityContext: IdentityContext.Interface);
9
- create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, rawInput: UpdateCmsEntryInput<TValues>, originalEntry: CmsEntry<TValues>, options?: UpdateCmsEntryOptionsInput): Promise<IUpdateEntryDataResponse<TValues>>;
10
+ private readonly modelToAstConverter;
11
+ private readonly getLatestRevision;
12
+ constructor(cmsContext: CmsContext.Interface, identityContext: IdentityContext.Interface, modelToAstConverter: ModelToAstConverter.Interface, getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface);
13
+ create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, rawInput: UpdateCmsEntryInput<TValues>, originalEntry: CmsEntry<TValues>, options?: UpdateCmsEntryOptionsInput): Promise<FactoryAbstraction.Return<TValues>>;
10
14
  }
11
15
  export declare const UpdateEntryDataFactory: import("@webiny/di").Implementation<typeof UpdateEntryDataFactoryImpl>;
12
16
  export {};