@strapi/core 0.0.0-experimental.74c69aeafc770d59d5b3d5d37cd249934ef395ba → 0.0.0-experimental.779667bd163026468f566293decf331a0246fff9

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.

Potentially problematic release.


This version of @strapi/core might be problematic. Click here for more details.

Files changed (202) hide show
  1. package/dist/Strapi.d.ts +3 -1
  2. package/dist/Strapi.d.ts.map +1 -1
  3. package/dist/Strapi.js +57 -13
  4. package/dist/Strapi.js.map +1 -1
  5. package/dist/Strapi.mjs +38 -13
  6. package/dist/Strapi.mjs.map +1 -1
  7. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  8. package/dist/core-api/controller/collection-type.js +3 -0
  9. package/dist/core-api/controller/collection-type.js.map +1 -1
  10. package/dist/core-api/controller/collection-type.mjs +3 -0
  11. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  12. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  13. package/dist/core-api/controller/single-type.js +1 -0
  14. package/dist/core-api/controller/single-type.js.map +1 -1
  15. package/dist/core-api/controller/single-type.mjs +1 -0
  16. package/dist/core-api/controller/single-type.mjs.map +1 -1
  17. package/dist/core-api/routes/index.d.ts.map +1 -1
  18. package/dist/core-api/service/collection-type.d.ts +1 -7
  19. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  20. package/dist/core-api/service/collection-type.js +5 -3
  21. package/dist/core-api/service/collection-type.js.map +1 -1
  22. package/dist/core-api/service/collection-type.mjs +6 -4
  23. package/dist/core-api/service/collection-type.mjs.map +1 -1
  24. package/dist/core-api/service/pagination.d.ts +4 -11
  25. package/dist/core-api/service/pagination.d.ts.map +1 -1
  26. package/dist/core-api/service/pagination.js +14 -40
  27. package/dist/core-api/service/pagination.js.map +1 -1
  28. package/dist/core-api/service/pagination.mjs +16 -42
  29. package/dist/core-api/service/pagination.mjs.map +1 -1
  30. package/dist/core-api/service/single-type.d.ts.map +1 -1
  31. package/dist/core-api/service/single-type.js +2 -1
  32. package/dist/core-api/service/single-type.js.map +1 -1
  33. package/dist/core-api/service/single-type.mjs +2 -1
  34. package/dist/core-api/service/single-type.mjs.map +1 -1
  35. package/dist/ee/license.d.ts.map +1 -1
  36. package/dist/ee/license.js +2 -1
  37. package/dist/ee/license.js.map +1 -1
  38. package/dist/ee/license.mjs +2 -1
  39. package/dist/ee/license.mjs.map +1 -1
  40. package/dist/factories.d.ts +2 -2
  41. package/dist/factories.d.ts.map +1 -1
  42. package/dist/loaders/apis.d.ts.map +1 -1
  43. package/dist/loaders/apis.js +10 -10
  44. package/dist/loaders/apis.js.map +1 -1
  45. package/dist/loaders/apis.mjs +10 -10
  46. package/dist/loaders/apis.mjs.map +1 -1
  47. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  48. package/dist/loaders/plugins/get-enabled-plugins.js +5 -5
  49. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  50. package/dist/loaders/plugins/get-enabled-plugins.mjs +5 -5
  51. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  52. package/dist/middlewares/cors.d.ts.map +1 -1
  53. package/dist/middlewares/cors.js +6 -8
  54. package/dist/middlewares/cors.js.map +1 -1
  55. package/dist/middlewares/cors.mjs +6 -8
  56. package/dist/middlewares/cors.mjs.map +1 -1
  57. package/dist/middlewares/security.d.ts.map +1 -1
  58. package/dist/middlewares/security.js +10 -3
  59. package/dist/middlewares/security.js.map +1 -1
  60. package/dist/middlewares/security.mjs +11 -4
  61. package/dist/middlewares/security.mjs.map +1 -1
  62. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +30 -0
  63. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -0
  64. package/dist/migrations/database/5.0.0-discard-drafts.js +50 -0
  65. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -0
  66. package/dist/migrations/database/5.0.0-discard-drafts.mjs +50 -0
  67. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -0
  68. package/dist/migrations/draft-publish.d.ts.map +1 -1
  69. package/dist/migrations/draft-publish.js +14 -31
  70. package/dist/migrations/draft-publish.js.map +1 -1
  71. package/dist/migrations/draft-publish.mjs +15 -32
  72. package/dist/migrations/draft-publish.mjs.map +1 -1
  73. package/dist/providers/registries.d.ts.map +1 -1
  74. package/dist/providers/registries.js +2 -0
  75. package/dist/providers/registries.js.map +1 -1
  76. package/dist/providers/registries.mjs +2 -0
  77. package/dist/providers/registries.mjs.map +1 -1
  78. package/dist/services/core-store.d.ts.map +1 -1
  79. package/dist/services/document-service/attributes/index.d.ts +4 -4
  80. package/dist/services/document-service/attributes/index.d.ts.map +1 -1
  81. package/dist/services/document-service/attributes/index.js +5 -5
  82. package/dist/services/document-service/attributes/index.js.map +1 -1
  83. package/dist/services/document-service/attributes/index.mjs +5 -5
  84. package/dist/services/document-service/attributes/index.mjs.map +1 -1
  85. package/dist/services/document-service/common.d.ts.map +1 -1
  86. package/dist/services/document-service/components.d.ts +8 -80
  87. package/dist/services/document-service/components.d.ts.map +1 -1
  88. package/dist/services/document-service/components.js +18 -19
  89. package/dist/services/document-service/components.js.map +1 -1
  90. package/dist/services/document-service/components.mjs +19 -20
  91. package/dist/services/document-service/components.mjs.map +1 -1
  92. package/dist/services/document-service/entries.d.ts +3 -1
  93. package/dist/services/document-service/entries.d.ts.map +1 -1
  94. package/dist/services/document-service/entries.js +49 -15
  95. package/dist/services/document-service/entries.js.map +1 -1
  96. package/dist/services/document-service/entries.mjs +44 -10
  97. package/dist/services/document-service/entries.mjs.map +1 -1
  98. package/dist/services/document-service/events.d.ts +25 -0
  99. package/dist/services/document-service/events.d.ts.map +1 -0
  100. package/dist/services/document-service/events.js +47 -0
  101. package/dist/services/document-service/events.js.map +1 -0
  102. package/dist/services/document-service/events.mjs +47 -0
  103. package/dist/services/document-service/events.mjs.map +1 -0
  104. package/dist/services/document-service/index.d.ts.map +1 -1
  105. package/dist/services/document-service/index.js +9 -2
  106. package/dist/services/document-service/index.js.map +1 -1
  107. package/dist/services/document-service/index.mjs +9 -2
  108. package/dist/services/document-service/index.mjs.map +1 -1
  109. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  110. package/dist/services/document-service/internationalization.js +14 -5
  111. package/dist/services/document-service/internationalization.js.map +1 -1
  112. package/dist/services/document-service/internationalization.mjs +14 -5
  113. package/dist/services/document-service/internationalization.mjs.map +1 -1
  114. package/dist/services/document-service/middlewares/middleware-manager.d.ts +5 -2
  115. package/dist/services/document-service/middlewares/middleware-manager.d.ts.map +1 -1
  116. package/dist/services/document-service/middlewares/middleware-manager.js +6 -3
  117. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -1
  118. package/dist/services/document-service/middlewares/middleware-manager.mjs +6 -3
  119. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -1
  120. package/dist/services/document-service/params.d.ts +1 -5
  121. package/dist/services/document-service/params.d.ts.map +1 -1
  122. package/dist/services/document-service/repository.d.ts.map +1 -1
  123. package/dist/services/document-service/repository.js +82 -80
  124. package/dist/services/document-service/repository.js.map +1 -1
  125. package/dist/services/document-service/repository.mjs +77 -75
  126. package/dist/services/document-service/repository.mjs.map +1 -1
  127. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  128. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  129. package/dist/services/document-service/transform/relations/extract/data-ids.js +3 -0
  130. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  131. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +3 -0
  132. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  133. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  134. package/dist/services/document-service/transform/relations/transform/data-ids.js +3 -0
  135. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  136. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +3 -0
  137. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  138. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  139. package/dist/services/document-service/transform/relations/utils/map-relation.js +7 -3
  140. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  141. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +7 -3
  142. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  143. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  144. package/dist/services/document-service/utils/populate.js +4 -0
  145. package/dist/services/document-service/utils/populate.js.map +1 -1
  146. package/dist/services/document-service/utils/populate.mjs +4 -0
  147. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  148. package/dist/services/entity-service/index.d.ts.map +1 -1
  149. package/dist/services/entity-validator/index.d.ts +14 -1
  150. package/dist/services/entity-validator/index.d.ts.map +1 -1
  151. package/dist/services/entity-validator/index.js +87 -30
  152. package/dist/services/entity-validator/index.js.map +1 -1
  153. package/dist/services/entity-validator/index.mjs +87 -30
  154. package/dist/services/entity-validator/index.mjs.map +1 -1
  155. package/dist/services/entity-validator/validators.d.ts +10 -8
  156. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  157. package/dist/services/entity-validator/validators.js +60 -19
  158. package/dist/services/entity-validator/validators.js.map +1 -1
  159. package/dist/services/entity-validator/validators.mjs +53 -11
  160. package/dist/services/entity-validator/validators.mjs.map +1 -1
  161. package/dist/services/event-hub.d.ts +1 -0
  162. package/dist/services/event-hub.d.ts.map +1 -1
  163. package/dist/services/event-hub.js +9 -4
  164. package/dist/services/event-hub.js.map +1 -1
  165. package/dist/services/event-hub.mjs +9 -4
  166. package/dist/services/event-hub.mjs.map +1 -1
  167. package/dist/services/metrics/middleware.d.ts.map +1 -1
  168. package/dist/services/server/compose-endpoint.d.ts.map +1 -1
  169. package/dist/services/server/index.js +1 -1
  170. package/dist/services/server/index.js.map +1 -1
  171. package/dist/services/server/index.mjs +1 -1
  172. package/dist/services/server/index.mjs.map +1 -1
  173. package/dist/services/server/koa.d.ts.map +1 -1
  174. package/dist/services/server/koa.js +1 -1
  175. package/dist/services/server/koa.js.map +1 -1
  176. package/dist/services/server/koa.mjs +1 -1
  177. package/dist/services/server/koa.mjs.map +1 -1
  178. package/dist/services/webhook-runner.d.ts +2 -1
  179. package/dist/services/webhook-runner.d.ts.map +1 -1
  180. package/dist/services/webhook-runner.js.map +1 -1
  181. package/dist/services/webhook-runner.mjs.map +1 -1
  182. package/dist/services/webhook-store.d.ts +2 -8
  183. package/dist/services/webhook-store.d.ts.map +1 -1
  184. package/dist/services/webhook-store.js +9 -2
  185. package/dist/services/webhook-store.js.map +1 -1
  186. package/dist/services/webhook-store.mjs +9 -2
  187. package/dist/services/webhook-store.mjs.map +1 -1
  188. package/dist/utils/fetch.d.ts.map +1 -1
  189. package/dist/utils/fetch.js +4 -3
  190. package/dist/utils/fetch.js.map +1 -1
  191. package/dist/utils/fetch.mjs +4 -3
  192. package/dist/utils/fetch.mjs.map +1 -1
  193. package/dist/utils/load-files.d.ts.map +1 -1
  194. package/dist/utils/startup-logger.d.ts.map +1 -1
  195. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  196. package/dist/utils/transform-content-types-to-models.js +13 -1
  197. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  198. package/dist/utils/transform-content-types-to-models.mjs +13 -1
  199. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  200. package/package.json +24 -20
  201. package/dist/services/document-service/document-engine.d.ts +0 -2
  202. package/dist/services/document-service/document-engine.d.ts.map +0 -1
@@ -1,8 +1,4 @@
1
1
  import type { UID, Modules } from '@strapi/types';
2
- declare const pickSelectionParams: <TUID extends UID.ContentType>(data: unknown) => {
3
- fields?: Modules.Documents.Params.Fields.Any<TUID> | undefined;
4
- } & {
5
- populate?: Modules.Documents.Params.Populate.Any<TUID> | undefined;
6
- } & Modules.Documents.Params.PublicationStatus.Param;
2
+ declare const pickSelectionParams: <TUID extends UID.ContentType>(data: unknown) => Modules.Documents.Params.Pick<TUID, 'fields' | 'populate' | 'status'>;
7
3
  export { pickSelectionParams };
8
4
  //# sourceMappingURL=params.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/params.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAElD,QAAA,MAAM,mBAAmB,uCACjB,OAAO;;;;oDAGd,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/params.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAElD,QAAA,MAAM,mBAAmB,uCACjB,OAAO,KACZ,QAAQ,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAEtE,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/repository.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAa3E,eAAO,MAAM,2BAA2B,EAAE,uBAuUzC,CAAC"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/repository.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAa3E,eAAO,MAAM,2BAA2B,EAAE,uBAyUzC,CAAC"}
@@ -10,19 +10,21 @@ const entries = require("./entries.js");
10
10
  const params = require("./params.js");
11
11
  const transformContentTypesToModels = require("../../utils/transform-content-types-to-models.js");
12
12
  const populate = require("./utils/populate.js");
13
- const data = require("./transform/data.js");
14
13
  const query = require("./transform/query.js");
15
14
  const idTransform = require("./transform/id-transform.js");
15
+ const events = require("./events.js");
16
16
  const createContentTypeRepository = (uid) => {
17
17
  const contentType = strapi.contentType(uid);
18
18
  const hasDraftAndPublish = strapiUtils.contentTypes.hasDraftAndPublish(contentType);
19
19
  const entries$1 = entries.createEntriesService(uid);
20
+ const eventManager = events.createEventManager(strapi, uid);
21
+ const emitEvent = _.curry(eventManager.emitEvent);
20
22
  async function findMany(params2 = {}) {
21
23
  const query$1 = await strapiUtils.async.pipe(
22
24
  draftAndPublish.defaultToDraft,
23
25
  draftAndPublish.statusToLookup(contentType),
24
26
  internationalization.defaultLocale(contentType),
25
- internationalization.localeToLookup(contentType),
27
+ internationalization.multiLocaleToLookup(contentType),
26
28
  idTransform.transformParamsDocumentId(uid),
27
29
  query.transformParamsToQuery(uid)
28
30
  )(params2 || {});
@@ -65,8 +67,12 @@ const createContentTypeRepository = (uid) => {
65
67
  throw new Error("Cannot delete a draft document");
66
68
  }
67
69
  const entriesToDelete = await strapi.db.query(uid).findMany(query$1);
68
- await strapiUtils.async.map(entriesToDelete, (entryToDelete) => entries$1.delete(entryToDelete.id));
69
- return { deletedEntries: entriesToDelete };
70
+ const deletedEntries = await strapiUtils.async.map(
71
+ entriesToDelete,
72
+ (entryToDelete) => entries$1.delete(entryToDelete.id)
73
+ );
74
+ entriesToDelete.forEach(emitEvent("entry.delete"));
75
+ return { documentId, entries: deletedEntries };
70
76
  }
71
77
  async function create(opts = {}) {
72
78
  const { documentId, ...params2 } = opts;
@@ -78,11 +84,12 @@ const createContentTypeRepository = (uid) => {
78
84
  internationalization.localeToData(contentType)
79
85
  )(params2);
80
86
  const doc = await entries$1.create(queryParams);
87
+ emitEvent("entry.create", doc);
81
88
  if (hasDraftAndPublish && params2.status === "published") {
82
89
  return publish({
83
90
  ...params2,
84
91
  documentId: doc.documentId
85
- }).then((doc2) => doc2.versions[0]);
92
+ }).then((doc2) => doc2.entries[0]);
86
93
  }
87
94
  return doc;
88
95
  }
@@ -93,7 +100,7 @@ const createContentTypeRepository = (uid) => {
93
100
  internationalization.defaultLocale(contentType),
94
101
  internationalization.multiLocaleToLookup(contentType)
95
102
  )(params2);
96
- const entriesToClone = await strapi.db?.query(uid).findMany({
103
+ const entriesToClone = await strapi.db.query(uid).findMany({
97
104
  where: {
98
105
  ...queryParams?.lookup,
99
106
  documentId,
@@ -110,11 +117,12 @@ const createContentTypeRepository = (uid) => {
110
117
  // assign new documentId
111
118
  _.assoc("documentId", transformContentTypesToModels.createDocumentId()),
112
119
  // Merge new data into it
113
- (data2) => _.merge(data2, queryParams.data),
114
- (data2) => entries$1.create({ ...queryParams, data: data2, status: "draft" })
120
+ (data) => _.merge(data, queryParams.data),
121
+ (data) => entries$1.create({ ...queryParams, data, status: "draft" })
115
122
  )
116
123
  );
117
- return { documentId: clonedEntries.at(0)?.documentId, versions: clonedEntries };
124
+ clonedEntries.forEach(emitEvent("entry.create"));
125
+ return { documentId: clonedEntries.at(0)?.documentId, entries: clonedEntries };
118
126
  }
119
127
  async function update(opts = {}) {
120
128
  const { documentId, ...params$1 } = opts;
@@ -128,12 +136,13 @@ const createContentTypeRepository = (uid) => {
128
136
  internationalization.localeToLookup(contentType),
129
137
  internationalization.localeToData(contentType)
130
138
  )(params$1);
131
- const { data: data2, ...restParams } = await idTransform.transformParamsDocumentId(uid, queryParams || {});
139
+ const { data, ...restParams } = await idTransform.transformParamsDocumentId(uid, queryParams || {});
132
140
  const query$1 = query.transformParamsToQuery(uid, params.pickSelectionParams(restParams || {}));
133
141
  const entryToUpdate = await strapi.db.query(uid).findOne({ ...query$1, where: { ...queryParams?.lookup, ...query$1?.where, documentId } });
134
142
  let updatedDraft = null;
135
143
  if (entryToUpdate) {
136
144
  updatedDraft = await entries$1.update(entryToUpdate, queryParams);
145
+ emitEvent("entry.update", updatedDraft);
137
146
  }
138
147
  if (!updatedDraft) {
139
148
  const documentExists = await strapi.db.query(contentType.uid).findOne({ where: { documentId } });
@@ -142,13 +151,14 @@ const createContentTypeRepository = (uid) => {
142
151
  ...queryParams,
143
152
  data: { ...queryParams.data, documentId }
144
153
  });
154
+ emitEvent("entry.create", updatedDraft);
145
155
  }
146
156
  }
147
157
  if (hasDraftAndPublish && updatedDraft && params$1.status === "published") {
148
158
  return publish({
149
159
  ...params$1,
150
160
  documentId
151
- }).then((doc) => doc.versions[0]);
161
+ }).then((doc) => doc.entries[0]);
152
162
  }
153
163
  return updatedDraft;
154
164
  }
@@ -168,51 +178,46 @@ const createContentTypeRepository = (uid) => {
168
178
  internationalization.defaultLocale(contentType),
169
179
  internationalization.multiLocaleToLookup(contentType)
170
180
  )(params2);
171
- await deleteDocument({
172
- ...queryParams,
173
- documentId,
174
- lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } }
175
- });
176
- const entriesToPublish = await strapi.db?.query(uid).findMany({
177
- where: {
178
- ...queryParams?.lookup,
179
- documentId,
180
- publishedAt: null
181
- },
182
- populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
183
- });
184
- const publishedEntries = await strapiUtils.async.map(
185
- entriesToPublish,
186
- strapiUtils.async.pipe(
187
- // Updated at value is used to know if draft has been modified
188
- // If both versions share the same value, it means the draft has not been modified
189
- (draft) => _.assoc("updatedAt", draft.updatedAt, draft),
190
- _.assoc("publishedAt", /* @__PURE__ */ new Date()),
191
- _.assoc("documentId", documentId),
192
- _.omit("id"),
193
- // Transform relations to target published versions
194
- (entry) => {
195
- const opts2 = { uid, locale: entry.locale, status: "published", allowMissingId: true };
196
- return data.transformData(entry, opts2);
181
+ const [draftsToPublish, publishedToDelete] = await Promise.all([
182
+ strapi.db.query(uid).findMany({
183
+ where: {
184
+ ...queryParams?.lookup,
185
+ documentId,
186
+ publishedAt: null
187
+ // Ignore lookup
197
188
  },
198
- // Create the published entry
199
- (data2) => entries$1.create({ ...queryParams, data: data2, locale: data2.locale, status: "published" })
200
- )
189
+ // Populate relations, media, compos and dz
190
+ populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
191
+ }),
192
+ strapi.db.query(uid).findMany({
193
+ where: {
194
+ ...queryParams?.lookup,
195
+ documentId,
196
+ publishedAt: { $ne: null }
197
+ },
198
+ select: ["id"]
199
+ })
200
+ ]);
201
+ await strapiUtils.async.map(publishedToDelete, (entry) => entries$1.delete(entry.id));
202
+ const publishedEntries = await strapiUtils.async.map(
203
+ draftsToPublish,
204
+ (draft) => entries$1.publish(draft, queryParams)
201
205
  );
202
- return { versions: publishedEntries };
206
+ publishedEntries.forEach(emitEvent("entry.publish"));
207
+ return { documentId, entries: publishedEntries };
203
208
  }
204
209
  async function unpublish(opts = {}) {
205
210
  const { documentId, ...params2 } = opts;
206
- const queryParams = await strapiUtils.async.pipe(
211
+ const query$1 = await strapiUtils.async.pipe(
207
212
  internationalization.defaultLocale(contentType),
208
- internationalization.multiLocaleToLookup(contentType)
213
+ internationalization.multiLocaleToLookup(contentType),
214
+ query.transformParamsToQuery(uid),
215
+ (query2) => _.assoc("where", { ...query2.where, documentId, publishedAt: { $ne: null } }, query2)
209
216
  )(params2);
210
- const { deletedEntries } = await deleteDocument({
211
- ...params2,
212
- documentId,
213
- lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } }
214
- });
215
- return { versions: deletedEntries };
217
+ const versionsToDelete = await strapi.db.query(uid).findMany(query$1);
218
+ await strapiUtils.async.map(versionsToDelete, (entry) => entries$1.delete(entry.id));
219
+ versionsToDelete.forEach(emitEvent("entry.unpublish"));
220
+ return { documentId, entries: versionsToDelete };
216
221
  }
217
222
  async function discardDraft(opts = {}) {
218
223
  const { documentId, ...params2 } = opts;
@@ -220,41 +225,38 @@ const createContentTypeRepository = (uid) => {
220
225
  internationalization.defaultLocale(contentType),
221
226
  internationalization.multiLocaleToLookup(contentType)
222
227
  )(params2);
223
- await deleteDocument({
224
- ...queryParams,
225
- documentId,
226
- lookup: { ...queryParams?.lookup, publishedAt: null }
227
- });
228
- const entriesToDraft = await strapi.db?.query(uid).findMany({
229
- where: {
230
- ...queryParams?.lookup,
231
- documentId,
232
- publishedAt: { $ne: null }
233
- },
234
- populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
235
- });
236
- const draftEntries = await strapiUtils.async.map(
237
- entriesToDraft,
238
- strapiUtils.async.pipe(
239
- _.assoc("publishedAt", null),
240
- _.assoc("documentId", documentId),
241
- _.omit("id"),
242
- // Transform relations to target draft versions
243
- (entry) => {
244
- const opts2 = { uid, locale: entry.locale, status: "draft", allowMissingId: true };
245
- return data.transformData(entry, opts2);
228
+ const [versionsToDraft, versionsToDelete] = await Promise.all([
229
+ strapi.db.query(uid).findMany({
230
+ where: {
231
+ ...queryParams?.lookup,
232
+ documentId,
233
+ publishedAt: { $ne: null }
246
234
  },
247
- // Create the draft entry
248
- (data2) => entries$1.create({ ...queryParams, locale: data2.locale, data: data2, status: "draft" })
249
- )
235
+ // Populate relations, media, compos and dz
236
+ populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
237
+ }),
238
+ strapi.db.query(uid).findMany({
239
+ where: {
240
+ ...queryParams?.lookup,
241
+ documentId,
242
+ publishedAt: null
243
+ },
244
+ select: ["id"]
245
+ })
246
+ ]);
247
+ await strapiUtils.async.map(versionsToDelete, (entry) => entries$1.delete(entry.id));
248
+ const draftEntries = await strapiUtils.async.map(
249
+ versionsToDraft,
250
+ (entry) => entries$1.discardDraft(entry, queryParams)
250
251
  );
251
- return { versions: draftEntries };
252
+ draftEntries.forEach(emitEvent("entry.draft-discard"));
253
+ return { documentId, entries: draftEntries };
252
254
  }
253
- async function updateComponents(entry, data2) {
254
- return components.updateComponents(uid, entry, data2);
255
+ async function updateComponents(entry, data) {
256
+ return components.updateComponents(uid, entry, data);
255
257
  }
256
- function omitComponentData(data2) {
257
- return components.omitComponentData(contentType, data2);
258
+ function omitComponentData(data) {
259
+ return components.omitComponentData(contentType, data);
258
260
  }
259
261
  return {
260
262
  findMany: common.wrapInTransaction(findMany),
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sources":["../../../src/services/document-service/repository.ts"],"sourcesContent":["import { omit, assoc, merge } from 'lodash/fp';\n\nimport { async, contentTypes as contentTypesUtils } from '@strapi/utils';\n\nimport { wrapInTransaction, type RepositoryFactoryMethod } from './common';\nimport * as DP from './draft-and-publish';\nimport * as i18n from './internationalization';\nimport * as components from './components';\n\nimport { createEntriesService } from './entries';\nimport { pickSelectionParams } from './params';\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { getDeepPopulate } from './utils/populate';\nimport { transformData } from './transform/data';\nimport { transformParamsToQuery } from './transform/query';\nimport { transformParamsDocumentId } from './transform/id-transform';\n\nexport const createContentTypeRepository: RepositoryFactoryMethod = (uid) => {\n const contentType = strapi.contentType(uid);\n const hasDraftAndPublish = contentTypesUtils.hasDraftAndPublish(contentType);\n\n const entries = createEntriesService(uid);\n\n async function findMany(params = {} as any) {\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params || {});\n\n return strapi.db.query(uid).findMany(query);\n }\n\n async function findFirst(params = {} as any) {\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n // TODO: do we really want to add filters on the findOne now that we have findFirst ?\n async function findOne(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n async function deleteDocument(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n omit('status'),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n if (params.status === 'draft') {\n throw new Error('Cannot delete a draft document');\n }\n\n const entriesToDelete = await strapi.db.query(uid).findMany(query);\n\n // Delete all matched entries and its components\n await async.map(entriesToDelete, (entryToDelete: any) => entries.delete(entryToDelete.id));\n\n return { deletedEntries: entriesToDelete };\n }\n\n async function create(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToData(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const doc = await entries.create(queryParams);\n\n if (hasDraftAndPublish && params.status === 'published') {\n return publish({\n ...params,\n documentId: doc.documentId,\n }).then((doc) => doc.versions[0]);\n }\n\n return doc;\n }\n\n async function clone(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n // Get deep populate\n const entriesToClone = await strapi.db?.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n // DP Enabled: Clone drafts\n // DP Disabled: Clone only the existing version (published)\n publishedAt: { $null: hasDraftAndPublish },\n },\n populate: getDeepPopulate(uid, { relationalFields: ['id'] }),\n });\n\n const clonedEntries = await async.map(\n entriesToClone,\n async.pipe(\n omit('id'),\n // assign new documentId\n assoc('documentId', createDocumentId()),\n // Merge new data into it\n (data) => merge(data, queryParams.data),\n (data) => entries.create({ ...queryParams, data, status: 'draft' })\n )\n );\n\n return { documentId: clonedEntries.at(0)?.documentId, versions: clonedEntries };\n }\n\n async function update(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToLookup(contentType),\n DP.statusToData(contentType),\n // Default locale will be set if not provided\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const { data, ...restParams } = await transformParamsDocumentId(uid, queryParams || {});\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams || {}) as any);\n\n // Validation\n // Find if document exists\n const entryToUpdate = await strapi.db\n .query(uid)\n .findOne({ ...query, where: { ...queryParams?.lookup, ...query?.where, documentId } });\n\n let updatedDraft = null;\n if (entryToUpdate) {\n updatedDraft = await entries.update(entryToUpdate, queryParams);\n }\n\n if (!updatedDraft) {\n const documentExists = await strapi.db\n .query(contentType.uid)\n .findOne({ where: { documentId } });\n\n if (documentExists) {\n updatedDraft = await entries.create({\n ...queryParams,\n data: { ...queryParams.data, documentId },\n });\n }\n }\n\n if (hasDraftAndPublish && updatedDraft && params.status === 'published') {\n return publish({\n ...params,\n documentId,\n }).then((doc) => doc.versions[0]);\n }\n\n return updatedDraft;\n }\n\n async function count(params = {} as any) {\n const query = await async.pipe(\n DP.defaultStatus(contentType),\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).count(query);\n }\n\n async function publish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n await deleteDocument({\n ...queryParams,\n documentId,\n lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } },\n });\n\n // Get deep populate\n const entriesToPublish = await strapi.db?.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null,\n },\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n });\n\n // Transform draft entry data and create published versions\n const publishedEntries = await async.map(\n entriesToPublish,\n async.pipe(\n // Updated at value is used to know if draft has been modified\n // If both versions share the same value, it means the draft has not been modified\n (draft) => assoc('updatedAt', draft.updatedAt, draft),\n assoc('publishedAt', new Date()),\n assoc('documentId', documentId),\n omit('id'),\n // Transform relations to target published versions\n (entry) => {\n const opts = { uid, locale: entry.locale, status: 'published', allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the published entry\n (data) => entries.create({ ...queryParams, data, locale: data.locale, status: 'published' })\n )\n );\n\n return { versions: publishedEntries };\n }\n\n async function unpublish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const { deletedEntries } = await deleteDocument({\n ...params,\n documentId,\n lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } },\n });\n\n return { versions: deletedEntries };\n }\n\n async function discardDraft(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n // Delete all drafts that match query\n await deleteDocument({\n ...queryParams,\n documentId,\n lookup: { ...queryParams?.lookup, publishedAt: null },\n });\n\n // Get deep populate of published versions\n const entriesToDraft = await strapi.db?.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n });\n\n // Transform published entry data and create draft versions\n const draftEntries = await async.map(\n entriesToDraft,\n async.pipe(\n assoc('publishedAt', null),\n assoc('documentId', documentId),\n omit('id'),\n // Transform relations to target draft versions\n (entry) => {\n const opts = { uid, locale: entry.locale, status: 'draft', allowMissingId: true };\n return transformData(entry, opts);\n },\n // Create the draft entry\n (data) => entries.create({ ...queryParams, locale: data.locale, data, status: 'draft' })\n )\n );\n\n return { versions: draftEntries };\n }\n\n async function updateComponents(entry: any, data: any) {\n return components.updateComponents(uid, entry, data);\n }\n\n function omitComponentData(data: any) {\n return components.omitComponentData(contentType, data);\n }\n\n return {\n findMany: wrapInTransaction(findMany),\n findFirst: wrapInTransaction(findFirst),\n findOne: wrapInTransaction(findOne),\n delete: wrapInTransaction(deleteDocument),\n create: wrapInTransaction(create),\n clone: wrapInTransaction(clone),\n update: wrapInTransaction(update),\n count: wrapInTransaction(count),\n publish: hasDraftAndPublish ? wrapInTransaction(publish) : (undefined as any),\n unpublish: hasDraftAndPublish ? wrapInTransaction(unpublish) : (undefined as any),\n discardDraft: hasDraftAndPublish ? wrapInTransaction(discardDraft) : (undefined as any),\n\n updateComponents,\n omitComponentData,\n };\n};\n"],"names":["contentTypesUtils","entries","createEntriesService","params","query","async","DP.defaultToDraft","DP.statusToLookup","i18n.defaultLocale","i18n.localeToLookup","transformParamsDocumentId","transformParamsToQuery","assoc","omit","i18n.multiLocaleToLookup","DP.filterDataPublishedAt","DP.setStatusToDraft","DP.statusToData","i18n.localeToData","doc","getDeepPopulate","createDocumentId","data","merge","pickSelectionParams","DP.defaultStatus","opts","transformData","components.updateComponents","components.omitComponentData","wrapInTransaction"],"mappings":"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"}
1
+ {"version":3,"file":"repository.js","sources":["../../../src/services/document-service/repository.ts"],"sourcesContent":["import { omit, assoc, merge, curry } from 'lodash/fp';\n\nimport { async, contentTypes as contentTypesUtils } from '@strapi/utils';\n\nimport { wrapInTransaction, type RepositoryFactoryMethod } from './common';\nimport * as DP from './draft-and-publish';\nimport * as i18n from './internationalization';\nimport * as components from './components';\n\nimport { createEntriesService } from './entries';\nimport { pickSelectionParams } from './params';\nimport { createDocumentId } from '../../utils/transform-content-types-to-models';\nimport { getDeepPopulate } from './utils/populate';\nimport { transformParamsToQuery } from './transform/query';\nimport { transformParamsDocumentId } from './transform/id-transform';\nimport { createEventManager } from './events';\n\nexport const createContentTypeRepository: RepositoryFactoryMethod = (uid) => {\n const contentType = strapi.contentType(uid);\n const hasDraftAndPublish = contentTypesUtils.hasDraftAndPublish(contentType);\n\n const entries = createEntriesService(uid);\n\n const eventManager = createEventManager(strapi, uid);\n const emitEvent = curry(eventManager.emitEvent);\n\n async function findMany(params = {} as any) {\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params || {});\n\n return strapi.db.query(uid).findMany(query);\n }\n\n async function findFirst(params = {} as any) {\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n // TODO: do we really want to add filters on the findOne now that we have findFirst ?\n async function findOne(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n DP.defaultToDraft,\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsDocumentId(uid),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n return strapi.db.query(uid).findOne(query);\n }\n\n async function deleteDocument(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n omit('status'),\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId }, query)\n )(params);\n\n if (params.status === 'draft') {\n throw new Error('Cannot delete a draft document');\n }\n\n const entriesToDelete = await strapi.db.query(uid).findMany(query);\n\n // Delete all matched entries and its components\n const deletedEntries = await async.map(entriesToDelete, (entryToDelete: any) =>\n entries.delete(entryToDelete.id)\n );\n\n entriesToDelete.forEach(emitEvent('entry.delete'));\n\n return { documentId, entries: deletedEntries };\n }\n\n async function create(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToData(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const doc = await entries.create(queryParams);\n\n emitEvent('entry.create', doc);\n\n if (hasDraftAndPublish && params.status === 'published') {\n return publish({\n ...params,\n documentId: doc.documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return doc;\n }\n\n async function clone(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n // Get deep populate\n const entriesToClone = await strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n // DP Enabled: Clone drafts\n // DP Disabled: Clone only the existing version (published)\n publishedAt: { $null: hasDraftAndPublish },\n },\n populate: getDeepPopulate(uid, { relationalFields: ['id'] }),\n });\n\n const clonedEntries = await async.map(\n entriesToClone,\n async.pipe(\n omit('id'),\n // assign new documentId\n assoc('documentId', createDocumentId()),\n // Merge new data into it\n (data) => merge(data, queryParams.data),\n (data) => entries.create({ ...queryParams, data, status: 'draft' })\n )\n );\n\n clonedEntries.forEach(emitEvent('entry.create'));\n\n return { documentId: clonedEntries.at(0)?.documentId, entries: clonedEntries };\n }\n\n async function update(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n DP.filterDataPublishedAt,\n DP.setStatusToDraft(contentType),\n DP.statusToLookup(contentType),\n DP.statusToData(contentType),\n // Default locale will be set if not provided\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n i18n.localeToData(contentType)\n )(params);\n\n const { data, ...restParams } = await transformParamsDocumentId(uid, queryParams || {});\n const query = transformParamsToQuery(uid, pickSelectionParams(restParams || {}) as any);\n\n // Validation\n // Find if document exists\n const entryToUpdate = await strapi.db\n .query(uid)\n .findOne({ ...query, where: { ...queryParams?.lookup, ...query?.where, documentId } });\n\n let updatedDraft = null;\n if (entryToUpdate) {\n updatedDraft = await entries.update(entryToUpdate, queryParams);\n emitEvent('entry.update', updatedDraft);\n }\n\n if (!updatedDraft) {\n const documentExists = await strapi.db\n .query(contentType.uid)\n .findOne({ where: { documentId } });\n\n if (documentExists) {\n updatedDraft = await entries.create({\n ...queryParams,\n data: { ...queryParams.data, documentId },\n });\n emitEvent('entry.create', updatedDraft);\n }\n }\n\n if (hasDraftAndPublish && updatedDraft && params.status === 'published') {\n return publish({\n ...params,\n documentId,\n }).then((doc) => doc.entries[0]);\n }\n\n return updatedDraft;\n }\n\n async function count(params = {} as any) {\n const query = await async.pipe(\n DP.defaultStatus(contentType),\n DP.statusToLookup(contentType),\n i18n.defaultLocale(contentType),\n i18n.localeToLookup(contentType),\n transformParamsToQuery(uid)\n )(params);\n\n return strapi.db.query(uid).count(query);\n }\n\n async function publish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [draftsToPublish, publishedToDelete] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null, // Ignore lookup\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n select: ['id'],\n }),\n ]);\n\n // Delete all published versions\n await async.map(publishedToDelete, (entry: any) => entries.delete(entry.id));\n\n // Transform draft entry data and create published versions\n const publishedEntries = await async.map(draftsToPublish, (draft: unknown) =>\n entries.publish(draft, queryParams)\n );\n\n publishedEntries.forEach(emitEvent('entry.publish'));\n return { documentId, entries: publishedEntries };\n }\n\n async function unpublish(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const query = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType),\n transformParamsToQuery(uid),\n (query) => assoc('where', { ...query.where, documentId, publishedAt: { $ne: null } }, query)\n )(params);\n\n // Delete all published versions\n const versionsToDelete = await strapi.db.query(uid).findMany(query);\n await async.map(versionsToDelete, (entry: any) => entries.delete(entry.id));\n\n versionsToDelete.forEach(emitEvent('entry.unpublish'));\n return { documentId, entries: versionsToDelete };\n }\n\n async function discardDraft(opts = {} as any) {\n const { documentId, ...params } = opts;\n\n const queryParams = await async.pipe(\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [versionsToDraft, versionsToDelete] = await Promise.all([\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: { $ne: null },\n },\n // Populate relations, media, compos and dz\n populate: getDeepPopulate(uid, { relationalFields: ['documentId', 'locale'] }),\n }),\n strapi.db.query(uid).findMany({\n where: {\n ...queryParams?.lookup,\n documentId,\n publishedAt: null,\n },\n select: ['id'],\n }),\n ]);\n\n // Delete all drafts\n await async.map(versionsToDelete, (entry: any) => entries.delete(entry.id));\n\n // Transform published entry data and create draft versions\n const draftEntries = await async.map(versionsToDraft, (entry: any) =>\n entries.discardDraft(entry, queryParams)\n );\n\n draftEntries.forEach(emitEvent('entry.draft-discard'));\n return { documentId, entries: draftEntries };\n }\n\n async function updateComponents(entry: any, data: any) {\n return components.updateComponents(uid, entry, data);\n }\n\n function omitComponentData(data: any) {\n return components.omitComponentData(contentType, data);\n }\n\n return {\n findMany: wrapInTransaction(findMany),\n findFirst: wrapInTransaction(findFirst),\n findOne: wrapInTransaction(findOne),\n delete: wrapInTransaction(deleteDocument),\n create: wrapInTransaction(create),\n clone: wrapInTransaction(clone),\n update: wrapInTransaction(update),\n count: wrapInTransaction(count),\n publish: hasDraftAndPublish ? wrapInTransaction(publish) : (undefined as any),\n unpublish: hasDraftAndPublish ? wrapInTransaction(unpublish) : (undefined as any),\n discardDraft: hasDraftAndPublish ? wrapInTransaction(discardDraft) : (undefined as any),\n\n updateComponents,\n omitComponentData,\n };\n};\n"],"names":["contentTypesUtils","entries","createEntriesService","createEventManager","curry","params","query","async","DP.defaultToDraft","DP.statusToLookup","i18n.defaultLocale","i18n.multiLocaleToLookup","transformParamsDocumentId","transformParamsToQuery","i18n.localeToLookup","assoc","omit","DP.filterDataPublishedAt","DP.setStatusToDraft","DP.statusToData","i18n.localeToData","doc","getDeepPopulate","createDocumentId","merge","pickSelectionParams","DP.defaultStatus","components.updateComponents","components.omitComponentData","wrapInTransaction"],"mappings":"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"}
@@ -1,26 +1,28 @@
1
- import { assoc, omit, merge } from "lodash/fp";
1
+ import { curry, assoc, omit, merge } from "lodash/fp";
2
2
  import { contentTypes, async } from "@strapi/utils";
3
3
  import { wrapInTransaction } from "./common.mjs";
4
4
  import { defaultToDraft as defaultToDraftCurry, statusToLookup as statusToLookupCurry, filterDataPublishedAt as filterDataPublishedAtCurry, setStatusToDraft as setStatusToDraftCurry, statusToData as statusToDataCurry, defaultStatus as defaultStatusCurry } from "./draft-and-publish.mjs";
5
- import { defaultLocale as defaultLocaleCurry, localeToLookup as localeToLookupCurry, multiLocaleToLookup as multiLocaleToLookupCurry, localeToData as localeToDataCurry } from "./internationalization.mjs";
5
+ import { defaultLocale as defaultLocaleCurry, multiLocaleToLookup as multiLocaleToLookupCurry, localeToLookup as localeToLookupCurry, localeToData as localeToDataCurry } from "./internationalization.mjs";
6
6
  import { updateComponents, omitComponentData } from "./components.mjs";
7
7
  import { createEntriesService } from "./entries.mjs";
8
8
  import { pickSelectionParams } from "./params.mjs";
9
9
  import { createDocumentId } from "../../utils/transform-content-types-to-models.mjs";
10
10
  import { getDeepPopulate } from "./utils/populate.mjs";
11
- import { transformData } from "./transform/data.mjs";
12
11
  import { transformParamsToQuery } from "./transform/query.mjs";
13
12
  import { transformParamsDocumentId as curriedTransformParamsDocumentId } from "./transform/id-transform.mjs";
13
+ import { createEventManager } from "./events.mjs";
14
14
  const createContentTypeRepository = (uid) => {
15
15
  const contentType = strapi.contentType(uid);
16
16
  const hasDraftAndPublish = contentTypes.hasDraftAndPublish(contentType);
17
17
  const entries = createEntriesService(uid);
18
+ const eventManager = createEventManager(strapi, uid);
19
+ const emitEvent = curry(eventManager.emitEvent);
18
20
  async function findMany(params = {}) {
19
21
  const query = await async.pipe(
20
22
  defaultToDraftCurry,
21
23
  statusToLookupCurry(contentType),
22
24
  defaultLocaleCurry(contentType),
23
- localeToLookupCurry(contentType),
25
+ multiLocaleToLookupCurry(contentType),
24
26
  curriedTransformParamsDocumentId(uid),
25
27
  transformParamsToQuery(uid)
26
28
  )(params || {});
@@ -63,8 +65,12 @@ const createContentTypeRepository = (uid) => {
63
65
  throw new Error("Cannot delete a draft document");
64
66
  }
65
67
  const entriesToDelete = await strapi.db.query(uid).findMany(query);
66
- await async.map(entriesToDelete, (entryToDelete) => entries.delete(entryToDelete.id));
67
- return { deletedEntries: entriesToDelete };
68
+ const deletedEntries = await async.map(
69
+ entriesToDelete,
70
+ (entryToDelete) => entries.delete(entryToDelete.id)
71
+ );
72
+ entriesToDelete.forEach(emitEvent("entry.delete"));
73
+ return { documentId, entries: deletedEntries };
68
74
  }
69
75
  async function create(opts = {}) {
70
76
  const { documentId, ...params } = opts;
@@ -76,11 +82,12 @@ const createContentTypeRepository = (uid) => {
76
82
  localeToDataCurry(contentType)
77
83
  )(params);
78
84
  const doc = await entries.create(queryParams);
85
+ emitEvent("entry.create", doc);
79
86
  if (hasDraftAndPublish && params.status === "published") {
80
87
  return publish({
81
88
  ...params,
82
89
  documentId: doc.documentId
83
- }).then((doc2) => doc2.versions[0]);
90
+ }).then((doc2) => doc2.entries[0]);
84
91
  }
85
92
  return doc;
86
93
  }
@@ -91,7 +98,7 @@ const createContentTypeRepository = (uid) => {
91
98
  defaultLocaleCurry(contentType),
92
99
  multiLocaleToLookupCurry(contentType)
93
100
  )(params);
94
- const entriesToClone = await strapi.db?.query(uid).findMany({
101
+ const entriesToClone = await strapi.db.query(uid).findMany({
95
102
  where: {
96
103
  ...queryParams?.lookup,
97
104
  documentId,
@@ -112,7 +119,8 @@ const createContentTypeRepository = (uid) => {
112
119
  (data) => entries.create({ ...queryParams, data, status: "draft" })
113
120
  )
114
121
  );
115
- return { documentId: clonedEntries.at(0)?.documentId, versions: clonedEntries };
122
+ clonedEntries.forEach(emitEvent("entry.create"));
123
+ return { documentId: clonedEntries.at(0)?.documentId, entries: clonedEntries };
116
124
  }
117
125
  async function update(opts = {}) {
118
126
  const { documentId, ...params } = opts;
@@ -132,6 +140,7 @@ const createContentTypeRepository = (uid) => {
132
140
  let updatedDraft = null;
133
141
  if (entryToUpdate) {
134
142
  updatedDraft = await entries.update(entryToUpdate, queryParams);
143
+ emitEvent("entry.update", updatedDraft);
135
144
  }
136
145
  if (!updatedDraft) {
137
146
  const documentExists = await strapi.db.query(contentType.uid).findOne({ where: { documentId } });
@@ -140,13 +149,14 @@ const createContentTypeRepository = (uid) => {
140
149
  ...queryParams,
141
150
  data: { ...queryParams.data, documentId }
142
151
  });
152
+ emitEvent("entry.create", updatedDraft);
143
153
  }
144
154
  }
145
155
  if (hasDraftAndPublish && updatedDraft && params.status === "published") {
146
156
  return publish({
147
157
  ...params,
148
158
  documentId
149
- }).then((doc) => doc.versions[0]);
159
+ }).then((doc) => doc.entries[0]);
150
160
  }
151
161
  return updatedDraft;
152
162
  }
@@ -166,51 +176,46 @@ const createContentTypeRepository = (uid) => {
166
176
  defaultLocaleCurry(contentType),
167
177
  multiLocaleToLookupCurry(contentType)
168
178
  )(params);
169
- await deleteDocument({
170
- ...queryParams,
171
- documentId,
172
- lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } }
173
- });
174
- const entriesToPublish = await strapi.db?.query(uid).findMany({
175
- where: {
176
- ...queryParams?.lookup,
177
- documentId,
178
- publishedAt: null
179
- },
180
- populate: getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
181
- });
182
- const publishedEntries = await async.map(
183
- entriesToPublish,
184
- async.pipe(
185
- // Updated at value is used to know if draft has been modified
186
- // If both versions share the same value, it means the draft has not been modified
187
- (draft) => assoc("updatedAt", draft.updatedAt, draft),
188
- assoc("publishedAt", /* @__PURE__ */ new Date()),
189
- assoc("documentId", documentId),
190
- omit("id"),
191
- // Transform relations to target published versions
192
- (entry) => {
193
- const opts2 = { uid, locale: entry.locale, status: "published", allowMissingId: true };
194
- return transformData(entry, opts2);
179
+ const [draftsToPublish, publishedToDelete] = await Promise.all([
180
+ strapi.db.query(uid).findMany({
181
+ where: {
182
+ ...queryParams?.lookup,
183
+ documentId,
184
+ publishedAt: null
185
+ // Ignore lookup
195
186
  },
196
- // Create the published entry
197
- (data) => entries.create({ ...queryParams, data, locale: data.locale, status: "published" })
198
- )
187
+ // Populate relations, media, compos and dz
188
+ populate: getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
189
+ }),
190
+ strapi.db.query(uid).findMany({
191
+ where: {
192
+ ...queryParams?.lookup,
193
+ documentId,
194
+ publishedAt: { $ne: null }
195
+ },
196
+ select: ["id"]
197
+ })
198
+ ]);
199
+ await async.map(publishedToDelete, (entry) => entries.delete(entry.id));
200
+ const publishedEntries = await async.map(
201
+ draftsToPublish,
202
+ (draft) => entries.publish(draft, queryParams)
199
203
  );
200
- return { versions: publishedEntries };
204
+ publishedEntries.forEach(emitEvent("entry.publish"));
205
+ return { documentId, entries: publishedEntries };
201
206
  }
202
207
  async function unpublish(opts = {}) {
203
208
  const { documentId, ...params } = opts;
204
- const queryParams = await async.pipe(
209
+ const query = await async.pipe(
205
210
  defaultLocaleCurry(contentType),
206
- multiLocaleToLookupCurry(contentType)
211
+ multiLocaleToLookupCurry(contentType),
212
+ transformParamsToQuery(uid),
213
+ (query2) => assoc("where", { ...query2.where, documentId, publishedAt: { $ne: null } }, query2)
207
214
  )(params);
208
- const { deletedEntries } = await deleteDocument({
209
- ...params,
210
- documentId,
211
- lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } }
212
- });
213
- return { versions: deletedEntries };
215
+ const versionsToDelete = await strapi.db.query(uid).findMany(query);
216
+ await async.map(versionsToDelete, (entry) => entries.delete(entry.id));
217
+ versionsToDelete.forEach(emitEvent("entry.unpublish"));
218
+ return { documentId, entries: versionsToDelete };
214
219
  }
215
220
  async function discardDraft(opts = {}) {
216
221
  const { documentId, ...params } = opts;
@@ -218,35 +223,32 @@ const createContentTypeRepository = (uid) => {
218
223
  defaultLocaleCurry(contentType),
219
224
  multiLocaleToLookupCurry(contentType)
220
225
  )(params);
221
- await deleteDocument({
222
- ...queryParams,
223
- documentId,
224
- lookup: { ...queryParams?.lookup, publishedAt: null }
225
- });
226
- const entriesToDraft = await strapi.db?.query(uid).findMany({
227
- where: {
228
- ...queryParams?.lookup,
229
- documentId,
230
- publishedAt: { $ne: null }
231
- },
232
- populate: getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
233
- });
234
- const draftEntries = await async.map(
235
- entriesToDraft,
236
- async.pipe(
237
- assoc("publishedAt", null),
238
- assoc("documentId", documentId),
239
- omit("id"),
240
- // Transform relations to target draft versions
241
- (entry) => {
242
- const opts2 = { uid, locale: entry.locale, status: "draft", allowMissingId: true };
243
- return transformData(entry, opts2);
226
+ const [versionsToDraft, versionsToDelete] = await Promise.all([
227
+ strapi.db.query(uid).findMany({
228
+ where: {
229
+ ...queryParams?.lookup,
230
+ documentId,
231
+ publishedAt: { $ne: null }
244
232
  },
245
- // Create the draft entry
246
- (data) => entries.create({ ...queryParams, locale: data.locale, data, status: "draft" })
247
- )
233
+ // Populate relations, media, compos and dz
234
+ populate: getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
235
+ }),
236
+ strapi.db.query(uid).findMany({
237
+ where: {
238
+ ...queryParams?.lookup,
239
+ documentId,
240
+ publishedAt: null
241
+ },
242
+ select: ["id"]
243
+ })
244
+ ]);
245
+ await async.map(versionsToDelete, (entry) => entries.delete(entry.id));
246
+ const draftEntries = await async.map(
247
+ versionsToDraft,
248
+ (entry) => entries.discardDraft(entry, queryParams)
248
249
  );
249
- return { versions: draftEntries };
250
+ draftEntries.forEach(emitEvent("entry.draft-discard"));
251
+ return { documentId, entries: draftEntries };
250
252
  }
251
253
  async function updateComponents$1(entry, data) {
252
254
  return updateComponents(uid, entry, data);