@strapi/core 0.0.0-experimental.defd8568ae03ef8d52f86e1f3541979f953c3941 → 0.0.0-experimental.df298029ec6478763dcca7d59fafe8d2ae4ed60a

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 (325) hide show
  1. package/LICENSE +18 -3
  2. package/dist/Strapi.d.ts +3 -1
  3. package/dist/Strapi.d.ts.map +1 -1
  4. package/dist/Strapi.js +59 -15
  5. package/dist/Strapi.js.map +1 -1
  6. package/dist/Strapi.mjs +38 -13
  7. package/dist/Strapi.mjs.map +1 -1
  8. package/dist/configuration/get-dirs.js +2 -2
  9. package/dist/configuration/get-dirs.js.map +1 -1
  10. package/dist/configuration/index.js +2 -2
  11. package/dist/configuration/index.js.map +1 -1
  12. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  13. package/dist/core-api/controller/collection-type.js +5 -3
  14. package/dist/core-api/controller/collection-type.js.map +1 -1
  15. package/dist/core-api/controller/collection-type.mjs +2 -0
  16. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  17. package/dist/core-api/controller/index.js +2 -2
  18. package/dist/core-api/controller/index.js.map +1 -1
  19. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  20. package/dist/core-api/controller/single-type.js +3 -2
  21. package/dist/core-api/controller/single-type.js.map +1 -1
  22. package/dist/core-api/controller/single-type.mjs +1 -0
  23. package/dist/core-api/controller/single-type.mjs.map +1 -1
  24. package/dist/core-api/controller/transform.js +8 -8
  25. package/dist/core-api/controller/transform.js.map +1 -1
  26. package/dist/core-api/service/collection-type.d.ts +3 -9
  27. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  28. package/dist/core-api/service/collection-type.js +5 -3
  29. package/dist/core-api/service/collection-type.js.map +1 -1
  30. package/dist/core-api/service/collection-type.mjs +6 -4
  31. package/dist/core-api/service/collection-type.mjs.map +1 -1
  32. package/dist/core-api/service/pagination.d.ts +4 -11
  33. package/dist/core-api/service/pagination.d.ts.map +1 -1
  34. package/dist/core-api/service/pagination.js +18 -44
  35. package/dist/core-api/service/pagination.js.map +1 -1
  36. package/dist/core-api/service/pagination.mjs +16 -42
  37. package/dist/core-api/service/pagination.mjs.map +1 -1
  38. package/dist/core-api/service/single-type.d.ts.map +1 -1
  39. package/dist/core-api/service/single-type.js +2 -1
  40. package/dist/core-api/service/single-type.js.map +1 -1
  41. package/dist/core-api/service/single-type.mjs +2 -1
  42. package/dist/core-api/service/single-type.mjs.map +1 -1
  43. package/dist/domain/content-type/index.js +4 -4
  44. package/dist/domain/content-type/index.js.map +1 -1
  45. package/dist/ee/index.d.ts.map +1 -1
  46. package/dist/ee/index.js +9 -4
  47. package/dist/ee/index.js.map +1 -1
  48. package/dist/ee/index.mjs +6 -1
  49. package/dist/ee/index.mjs.map +1 -1
  50. package/dist/factories.js +4 -4
  51. package/dist/factories.js.map +1 -1
  52. package/dist/factories.mjs.map +1 -1
  53. package/dist/index.d.ts +14 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/index.mjs.map +1 -1
  57. package/dist/loaders/apis.d.ts.map +1 -1
  58. package/dist/loaders/apis.js +12 -12
  59. package/dist/loaders/apis.js.map +1 -1
  60. package/dist/loaders/apis.mjs +10 -10
  61. package/dist/loaders/apis.mjs.map +1 -1
  62. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  63. package/dist/loaders/plugins/get-enabled-plugins.js +45 -17
  64. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  65. package/dist/loaders/plugins/get-enabled-plugins.mjs +15 -9
  66. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  67. package/dist/loaders/plugins/get-user-plugins-config.js +2 -2
  68. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  69. package/dist/loaders/plugins/index.d.ts.map +1 -1
  70. package/dist/loaders/plugins/index.js +34 -7
  71. package/dist/loaders/plugins/index.js.map +1 -1
  72. package/dist/loaders/plugins/index.mjs +9 -1
  73. package/dist/loaders/plugins/index.mjs.map +1 -1
  74. package/dist/middlewares/body.js +2 -2
  75. package/dist/middlewares/body.js.map +1 -1
  76. package/dist/middlewares/cors.d.ts.map +1 -1
  77. package/dist/middlewares/cors.js +9 -7
  78. package/dist/middlewares/cors.js.map +1 -1
  79. package/dist/middlewares/cors.mjs +9 -7
  80. package/dist/middlewares/cors.mjs.map +1 -1
  81. package/dist/middlewares/public.js +2 -2
  82. package/dist/middlewares/public.js.map +1 -1
  83. package/dist/middlewares/query.d.ts.map +1 -1
  84. package/dist/middlewares/query.js.map +1 -1
  85. package/dist/middlewares/query.mjs.map +1 -1
  86. package/dist/middlewares/responses.js +2 -2
  87. package/dist/middlewares/responses.js.map +1 -1
  88. package/dist/middlewares/security.d.ts.map +1 -1
  89. package/dist/middlewares/security.js +12 -5
  90. package/dist/middlewares/security.js.map +1 -1
  91. package/dist/middlewares/security.mjs +11 -4
  92. package/dist/middlewares/security.mjs.map +1 -1
  93. package/dist/middlewares/session.js +2 -2
  94. package/dist/middlewares/session.js.map +1 -1
  95. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +27 -6
  96. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
  97. package/dist/migrations/database/5.0.0-discard-drafts.js +67 -10
  98. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  99. package/dist/migrations/database/5.0.0-discard-drafts.mjs +69 -12
  100. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  101. package/dist/migrations/draft-publish.d.ts +1 -1
  102. package/dist/migrations/draft-publish.d.ts.map +1 -1
  103. package/dist/migrations/draft-publish.js +14 -31
  104. package/dist/migrations/draft-publish.js.map +1 -1
  105. package/dist/migrations/draft-publish.mjs +15 -32
  106. package/dist/migrations/draft-publish.mjs.map +1 -1
  107. package/dist/migrations/i18n.d.ts +5 -0
  108. package/dist/migrations/i18n.d.ts.map +1 -0
  109. package/dist/migrations/i18n.js +54 -0
  110. package/dist/migrations/i18n.js.map +1 -0
  111. package/dist/migrations/i18n.mjs +54 -0
  112. package/dist/migrations/i18n.mjs.map +1 -0
  113. package/dist/migrations/index.d.ts +5 -0
  114. package/dist/migrations/index.d.ts.map +1 -0
  115. package/dist/migrations/index.js +15 -0
  116. package/dist/migrations/index.js.map +1 -0
  117. package/dist/migrations/index.mjs +15 -0
  118. package/dist/migrations/index.mjs.map +1 -0
  119. package/dist/providers/admin.d.ts.map +1 -1
  120. package/dist/providers/admin.js.map +1 -1
  121. package/dist/providers/admin.mjs.map +1 -1
  122. package/dist/providers/registries.js +3 -3
  123. package/dist/providers/registries.js.map +1 -1
  124. package/dist/providers/registries.mjs +3 -3
  125. package/dist/providers/registries.mjs.map +1 -1
  126. package/dist/registries/apis.js +2 -2
  127. package/dist/registries/apis.js.map +1 -1
  128. package/dist/registries/components.js +2 -2
  129. package/dist/registries/components.js.map +1 -1
  130. package/dist/registries/content-types.js +3 -3
  131. package/dist/registries/content-types.js.map +1 -1
  132. package/dist/registries/controllers.js +3 -3
  133. package/dist/registries/controllers.js.map +1 -1
  134. package/dist/registries/custom-fields.js +4 -4
  135. package/dist/registries/custom-fields.js.map +1 -1
  136. package/dist/registries/hooks.js +2 -2
  137. package/dist/registries/hooks.js.map +1 -1
  138. package/dist/registries/middlewares.js +3 -3
  139. package/dist/registries/middlewares.js.map +1 -1
  140. package/dist/registries/modules.js +3 -3
  141. package/dist/registries/modules.js.map +1 -1
  142. package/dist/registries/plugins.js +2 -2
  143. package/dist/registries/plugins.js.map +1 -1
  144. package/dist/registries/policies.d.ts +1 -1
  145. package/dist/registries/policies.d.ts.map +1 -1
  146. package/dist/registries/policies.js +5 -5
  147. package/dist/registries/policies.js.map +1 -1
  148. package/dist/registries/policies.mjs +1 -1
  149. package/dist/registries/policies.mjs.map +1 -1
  150. package/dist/registries/services.js +3 -3
  151. package/dist/registries/services.js.map +1 -1
  152. package/dist/services/auth/index.js +3 -3
  153. package/dist/services/auth/index.js.map +1 -1
  154. package/dist/services/content-api/index.d.ts +10 -12
  155. package/dist/services/content-api/index.d.ts.map +1 -1
  156. package/dist/services/content-api/permissions/index.d.ts +10 -12
  157. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  158. package/dist/services/content-api/permissions/providers/action.d.ts +5 -6
  159. package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
  160. package/dist/services/content-api/permissions/providers/condition.d.ts +5 -6
  161. package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
  162. package/dist/services/core-store.js +3 -3
  163. package/dist/services/core-store.js.map +1 -1
  164. package/dist/services/cron.d.ts +3 -3
  165. package/dist/services/cron.d.ts.map +1 -1
  166. package/dist/services/cron.js +12 -7
  167. package/dist/services/cron.js.map +1 -1
  168. package/dist/services/cron.mjs +9 -4
  169. package/dist/services/cron.mjs.map +1 -1
  170. package/dist/services/document-service/attributes/index.js +2 -2
  171. package/dist/services/document-service/attributes/index.js.map +1 -1
  172. package/dist/services/document-service/attributes/transforms.js +3 -3
  173. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  174. package/dist/services/document-service/common.d.ts +1 -1
  175. package/dist/services/document-service/common.d.ts.map +1 -1
  176. package/dist/services/document-service/common.js.map +1 -1
  177. package/dist/services/document-service/common.mjs.map +1 -1
  178. package/dist/services/document-service/components.js +15 -15
  179. package/dist/services/document-service/components.js.map +1 -1
  180. package/dist/services/document-service/draft-and-publish.js +16 -16
  181. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  182. package/dist/services/document-service/entries.d.ts +3 -3
  183. package/dist/services/document-service/entries.d.ts.map +1 -1
  184. package/dist/services/document-service/entries.js +13 -13
  185. package/dist/services/document-service/entries.js.map +1 -1
  186. package/dist/services/document-service/entries.mjs +3 -3
  187. package/dist/services/document-service/entries.mjs.map +1 -1
  188. package/dist/services/document-service/events.d.ts +25 -0
  189. package/dist/services/document-service/events.d.ts.map +1 -0
  190. package/dist/services/document-service/events.js +47 -0
  191. package/dist/services/document-service/events.js.map +1 -0
  192. package/dist/services/document-service/events.mjs +47 -0
  193. package/dist/services/document-service/events.mjs.map +1 -0
  194. package/dist/services/document-service/index.d.ts +2 -1
  195. package/dist/services/document-service/index.d.ts.map +1 -1
  196. package/dist/services/document-service/index.js +3 -2
  197. package/dist/services/document-service/index.js.map +1 -1
  198. package/dist/services/document-service/index.mjs +3 -2
  199. package/dist/services/document-service/index.mjs.map +1 -1
  200. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  201. package/dist/services/document-service/internationalization.js +21 -12
  202. package/dist/services/document-service/internationalization.js.map +1 -1
  203. package/dist/services/document-service/internationalization.mjs +14 -5
  204. package/dist/services/document-service/internationalization.mjs.map +1 -1
  205. package/dist/services/document-service/params.js +2 -2
  206. package/dist/services/document-service/params.js.map +1 -1
  207. package/dist/services/document-service/repository.d.ts.map +1 -1
  208. package/dist/services/document-service/repository.js +131 -52
  209. package/dist/services/document-service/repository.js.map +1 -1
  210. package/dist/services/document-service/repository.mjs +127 -48
  211. package/dist/services/document-service/repository.mjs.map +1 -1
  212. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  213. package/dist/services/document-service/transform/id-map.js +13 -4
  214. package/dist/services/document-service/transform/id-map.js.map +1 -1
  215. package/dist/services/document-service/transform/id-map.mjs +14 -5
  216. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  217. package/dist/services/document-service/transform/id-transform.js +2 -2
  218. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  219. package/dist/services/document-service/transform/query.js +3 -3
  220. package/dist/services/document-service/transform/query.js.map +1 -1
  221. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  222. package/dist/services/document-service/transform/relations/extract/data-ids.js +5 -2
  223. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  224. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +3 -0
  225. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  226. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  227. package/dist/services/document-service/transform/relations/transform/data-ids.js +5 -2
  228. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  229. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +3 -0
  230. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  231. package/dist/services/document-service/transform/relations/utils/dp.js +2 -2
  232. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  233. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  234. package/dist/services/document-service/transform/relations/utils/map-relation.js +13 -9
  235. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  236. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +7 -3
  237. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  238. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  239. package/dist/services/document-service/utils/populate.js +7 -1
  240. package/dist/services/document-service/utils/populate.js.map +1 -1
  241. package/dist/services/document-service/utils/populate.mjs +7 -1
  242. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  243. package/dist/services/document-service/utils/unidirectional-relations.d.ts +36 -0
  244. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -0
  245. package/dist/services/document-service/utils/unidirectional-relations.js +69 -0
  246. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -0
  247. package/dist/services/document-service/utils/unidirectional-relations.mjs +69 -0
  248. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -0
  249. package/dist/services/entity-validator/blocks-validator.d.ts +1 -2
  250. package/dist/services/entity-validator/blocks-validator.d.ts.map +1 -1
  251. package/dist/services/entity-validator/blocks-validator.js +4 -3
  252. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  253. package/dist/services/entity-validator/blocks-validator.mjs +3 -3
  254. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  255. package/dist/services/entity-validator/index.d.ts +15 -1
  256. package/dist/services/entity-validator/index.d.ts.map +1 -1
  257. package/dist/services/entity-validator/index.js +109 -53
  258. package/dist/services/entity-validator/index.js.map +1 -1
  259. package/dist/services/entity-validator/index.mjs +95 -39
  260. package/dist/services/entity-validator/index.mjs.map +1 -1
  261. package/dist/services/entity-validator/validators.d.ts +36 -25
  262. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  263. package/dist/services/entity-validator/validators.js +148 -33
  264. package/dist/services/entity-validator/validators.js.map +1 -1
  265. package/dist/services/entity-validator/validators.mjs +140 -25
  266. package/dist/services/entity-validator/validators.mjs.map +1 -1
  267. package/dist/services/event-hub.d.ts +1 -0
  268. package/dist/services/event-hub.d.ts.map +1 -1
  269. package/dist/services/event-hub.js +9 -4
  270. package/dist/services/event-hub.js.map +1 -1
  271. package/dist/services/event-hub.mjs +9 -4
  272. package/dist/services/event-hub.mjs.map +1 -1
  273. package/dist/services/server/compose-endpoint.js +7 -7
  274. package/dist/services/server/compose-endpoint.js.map +1 -1
  275. package/dist/services/server/index.js +1 -1
  276. package/dist/services/server/index.js.map +1 -1
  277. package/dist/services/server/index.mjs +1 -1
  278. package/dist/services/server/index.mjs.map +1 -1
  279. package/dist/services/server/koa.d.ts.map +1 -1
  280. package/dist/services/server/koa.js +4 -4
  281. package/dist/services/server/koa.js.map +1 -1
  282. package/dist/services/server/koa.mjs +1 -1
  283. package/dist/services/server/koa.mjs.map +1 -1
  284. package/dist/services/server/middleware.js +3 -3
  285. package/dist/services/server/middleware.js.map +1 -1
  286. package/dist/services/server/routing.js +2 -2
  287. package/dist/services/server/routing.js.map +1 -1
  288. package/dist/services/utils/dynamic-zones.js +5 -5
  289. package/dist/services/utils/dynamic-zones.js.map +1 -1
  290. package/dist/services/webhook-runner.d.ts +2 -1
  291. package/dist/services/webhook-runner.d.ts.map +1 -1
  292. package/dist/services/webhook-runner.js.map +1 -1
  293. package/dist/services/webhook-runner.mjs.map +1 -1
  294. package/dist/services/webhook-store.d.ts +2 -8
  295. package/dist/services/webhook-store.d.ts.map +1 -1
  296. package/dist/services/webhook-store.js +9 -2
  297. package/dist/services/webhook-store.js.map +1 -1
  298. package/dist/services/webhook-store.mjs +9 -2
  299. package/dist/services/webhook-store.mjs.map +1 -1
  300. package/dist/utils/cron.js +3 -3
  301. package/dist/utils/cron.js.map +1 -1
  302. package/dist/utils/fetch.d.ts.map +1 -1
  303. package/dist/utils/fetch.js +4 -3
  304. package/dist/utils/fetch.js.map +1 -1
  305. package/dist/utils/fetch.mjs +4 -3
  306. package/dist/utils/fetch.mjs.map +1 -1
  307. package/dist/utils/filepath-to-prop-path.d.ts +1 -1
  308. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  309. package/dist/utils/filepath-to-prop-path.js +27 -6
  310. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  311. package/dist/utils/filepath-to-prop-path.mjs +25 -5
  312. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  313. package/dist/utils/is-initialized.js +3 -3
  314. package/dist/utils/is-initialized.js.map +1 -1
  315. package/dist/utils/startup-logger.js +4 -4
  316. package/dist/utils/startup-logger.js.map +1 -1
  317. package/dist/utils/startup-logger.mjs +3 -3
  318. package/dist/utils/startup-logger.mjs.map +1 -1
  319. package/dist/utils/transform-content-types-to-models.d.ts +355 -23
  320. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  321. package/dist/utils/transform-content-types-to-models.js +17 -4
  322. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  323. package/dist/utils/transform-content-types-to-models.mjs +16 -3
  324. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  325. package/package.json +27 -23
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const _ = require("lodash/fp");
3
+ const fp = require("lodash/fp");
4
4
  const strapiUtils = require("@strapi/utils");
5
5
  const common = require("./common.js");
6
6
  const draftAndPublish = require("./draft-and-publish.js");
@@ -12,16 +12,41 @@ const transformContentTypesToModels = require("../../utils/transform-content-typ
12
12
  const populate = require("./utils/populate.js");
13
13
  const query = require("./transform/query.js");
14
14
  const idTransform = require("./transform/id-transform.js");
15
- const createContentTypeRepository = (uid) => {
15
+ const events = require("./events.js");
16
+ const unidirectionalRelations = require("./utils/unidirectional-relations.js");
17
+ const index = require("../entity-validator/index.js");
18
+ const { validators } = strapiUtils.validate;
19
+ const getModel = (schema) => strapi.getModel(schema);
20
+ const createContentTypeRepository = (uid, validator = index) => {
16
21
  const contentType = strapi.contentType(uid);
17
22
  const hasDraftAndPublish = strapiUtils.contentTypes.hasDraftAndPublish(contentType);
18
- const entries$1 = entries.createEntriesService(uid);
23
+ const sortValidations = ["nonAttributesOperators", "dynamicZones", "morphRelations"];
24
+ const fieldValidations = ["scalarAttributes"];
25
+ const filtersValidations = ["nonAttributesOperators", "dynamicZones", "morphRelations"];
26
+ const populateValidations = {
27
+ sort: sortValidations,
28
+ field: fieldValidations,
29
+ filters: filtersValidations,
30
+ populate: ["nonAttributesOperators"]
31
+ };
32
+ const validateParams = async (params2) => {
33
+ const ctx = { schema: contentType, getModel };
34
+ await validators.validateFilters(ctx, params2.filters, filtersValidations);
35
+ await validators.validateSort(ctx, params2.sort, sortValidations);
36
+ await validators.validateFields(ctx, params2.fields, fieldValidations);
37
+ await validators.validatePopulate(ctx, params2.populate, populateValidations);
38
+ return params2;
39
+ };
40
+ const entries$1 = entries.createEntriesService(uid, validator);
41
+ const eventManager = events.createEventManager(strapi, uid);
42
+ const emitEvent = fp.curry(eventManager.emitEvent);
19
43
  async function findMany(params2 = {}) {
20
44
  const query$1 = await strapiUtils.async.pipe(
45
+ validateParams,
21
46
  draftAndPublish.defaultToDraft,
22
47
  draftAndPublish.statusToLookup(contentType),
23
48
  internationalization.defaultLocale(contentType),
24
- internationalization.localeToLookup(contentType),
49
+ internationalization.multiLocaleToLookup(contentType),
25
50
  idTransform.transformParamsDocumentId(uid),
26
51
  query.transformParamsToQuery(uid)
27
52
  )(params2 || {});
@@ -29,6 +54,7 @@ const createContentTypeRepository = (uid) => {
29
54
  }
30
55
  async function findFirst(params2 = {}) {
31
56
  const query$1 = await strapiUtils.async.pipe(
57
+ validateParams,
32
58
  draftAndPublish.defaultToDraft,
33
59
  draftAndPublish.statusToLookup(contentType),
34
60
  internationalization.defaultLocale(contentType),
@@ -41,35 +67,42 @@ const createContentTypeRepository = (uid) => {
41
67
  async function findOne(opts = {}) {
42
68
  const { documentId, ...params2 } = opts;
43
69
  const query$1 = await strapiUtils.async.pipe(
70
+ validateParams,
44
71
  draftAndPublish.defaultToDraft,
45
72
  draftAndPublish.statusToLookup(contentType),
46
73
  internationalization.defaultLocale(contentType),
47
74
  internationalization.localeToLookup(contentType),
48
75
  idTransform.transformParamsDocumentId(uid),
49
76
  query.transformParamsToQuery(uid),
50
- (query2) => _.assoc("where", { ...query2.where, documentId }, query2)
77
+ (query2) => fp.assoc("where", { ...query2.where, documentId }, query2)
51
78
  )(params2);
52
79
  return strapi.db.query(uid).findOne(query$1);
53
80
  }
54
81
  async function deleteDocument(opts = {}) {
55
82
  const { documentId, ...params2 } = opts;
56
83
  const query$1 = await strapiUtils.async.pipe(
57
- _.omit("status"),
84
+ validateParams,
85
+ fp.omit("status"),
58
86
  internationalization.defaultLocale(contentType),
59
87
  internationalization.multiLocaleToLookup(contentType),
60
88
  query.transformParamsToQuery(uid),
61
- (query2) => _.assoc("where", { ...query2.where, documentId }, query2)
89
+ (query2) => fp.assoc("where", { ...query2.where, documentId }, query2)
62
90
  )(params2);
63
91
  if (params2.status === "draft") {
64
92
  throw new Error("Cannot delete a draft document");
65
93
  }
66
94
  const entriesToDelete = await strapi.db.query(uid).findMany(query$1);
67
- await strapiUtils.async.map(entriesToDelete, (entryToDelete) => entries$1.delete(entryToDelete.id));
68
- return { deletedEntries: entriesToDelete };
95
+ const deletedEntries = await strapiUtils.async.map(
96
+ entriesToDelete,
97
+ (entryToDelete) => entries$1.delete(entryToDelete.id)
98
+ );
99
+ entriesToDelete.forEach(emitEvent("entry.delete"));
100
+ return { documentId, entries: deletedEntries };
69
101
  }
70
102
  async function create(opts = {}) {
71
103
  const { documentId, ...params2 } = opts;
72
104
  const queryParams = await strapiUtils.async.pipe(
105
+ validateParams,
73
106
  draftAndPublish.filterDataPublishedAt,
74
107
  draftAndPublish.setStatusToDraft(contentType),
75
108
  draftAndPublish.statusToData(contentType),
@@ -77,22 +110,24 @@ const createContentTypeRepository = (uid) => {
77
110
  internationalization.localeToData(contentType)
78
111
  )(params2);
79
112
  const doc = await entries$1.create(queryParams);
113
+ emitEvent("entry.create", doc);
80
114
  if (hasDraftAndPublish && params2.status === "published") {
81
115
  return publish({
82
116
  ...params2,
83
117
  documentId: doc.documentId
84
- }).then((doc2) => doc2.versions[0]);
118
+ }).then((doc2) => doc2.entries[0]);
85
119
  }
86
120
  return doc;
87
121
  }
88
122
  async function clone(opts = {}) {
89
123
  const { documentId, ...params2 } = opts;
90
124
  const queryParams = await strapiUtils.async.pipe(
125
+ validateParams,
91
126
  draftAndPublish.filterDataPublishedAt,
92
127
  internationalization.defaultLocale(contentType),
93
128
  internationalization.multiLocaleToLookup(contentType)
94
129
  )(params2);
95
- const entriesToClone = await strapi.db?.query(uid).findMany({
130
+ const entriesToClone = await strapi.db.query(uid).findMany({
96
131
  where: {
97
132
  ...queryParams?.lookup,
98
133
  documentId,
@@ -105,19 +140,22 @@ const createContentTypeRepository = (uid) => {
105
140
  const clonedEntries = await strapiUtils.async.map(
106
141
  entriesToClone,
107
142
  strapiUtils.async.pipe(
108
- _.omit("id"),
143
+ validateParams,
144
+ fp.omit("id"),
109
145
  // assign new documentId
110
- _.assoc("documentId", transformContentTypesToModels.createDocumentId()),
146
+ fp.assoc("documentId", transformContentTypesToModels.createDocumentId()),
111
147
  // Merge new data into it
112
- (data) => _.merge(data, queryParams.data),
148
+ (data) => fp.merge(data, queryParams.data),
113
149
  (data) => entries$1.create({ ...queryParams, data, status: "draft" })
114
150
  )
115
151
  );
116
- return { documentId: clonedEntries.at(0)?.documentId, versions: clonedEntries };
152
+ clonedEntries.forEach(emitEvent("entry.create"));
153
+ return { documentId: clonedEntries.at(0)?.documentId, entries: clonedEntries };
117
154
  }
118
155
  async function update(opts = {}) {
119
156
  const { documentId, ...params$1 } = opts;
120
157
  const queryParams = await strapiUtils.async.pipe(
158
+ validateParams,
121
159
  draftAndPublish.filterDataPublishedAt,
122
160
  draftAndPublish.setStatusToDraft(contentType),
123
161
  draftAndPublish.statusToLookup(contentType),
@@ -133,6 +171,7 @@ const createContentTypeRepository = (uid) => {
133
171
  let updatedDraft = null;
134
172
  if (entryToUpdate) {
135
173
  updatedDraft = await entries$1.update(entryToUpdate, queryParams);
174
+ emitEvent("entry.update", updatedDraft);
136
175
  }
137
176
  if (!updatedDraft) {
138
177
  const documentExists = await strapi.db.query(contentType.uid).findOne({ where: { documentId } });
@@ -141,18 +180,20 @@ const createContentTypeRepository = (uid) => {
141
180
  ...queryParams,
142
181
  data: { ...queryParams.data, documentId }
143
182
  });
183
+ emitEvent("entry.create", updatedDraft);
144
184
  }
145
185
  }
146
186
  if (hasDraftAndPublish && updatedDraft && params$1.status === "published") {
147
187
  return publish({
148
188
  ...params$1,
149
189
  documentId
150
- }).then((doc) => doc.versions[0]);
190
+ }).then((doc) => doc.entries[0]);
151
191
  }
152
192
  return updatedDraft;
153
193
  }
154
194
  async function count(params2 = {}) {
155
195
  const query$1 = await strapiUtils.async.pipe(
196
+ validateParams,
156
197
  draftAndPublish.defaultStatus(contentType),
157
198
  draftAndPublish.statusToLookup(contentType),
158
199
  internationalization.defaultLocale(contentType),
@@ -164,65 +205,103 @@ const createContentTypeRepository = (uid) => {
164
205
  async function publish(opts = {}) {
165
206
  const { documentId, ...params2 } = opts;
166
207
  const queryParams = await strapiUtils.async.pipe(
208
+ validateParams,
167
209
  internationalization.defaultLocale(contentType),
168
210
  internationalization.multiLocaleToLookup(contentType)
169
211
  )(params2);
170
- await deleteDocument({
171
- ...queryParams,
172
- documentId,
173
- lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } }
174
- });
175
- const draftsToPublish = await strapi.db?.query(uid).findMany({
176
- where: {
177
- ...queryParams?.lookup,
178
- documentId,
179
- publishedAt: null
180
- },
181
- populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
212
+ const [draftsToPublish, oldPublishedVersions] = await Promise.all([
213
+ strapi.db.query(uid).findMany({
214
+ where: {
215
+ ...queryParams?.lookup,
216
+ documentId,
217
+ publishedAt: null
218
+ // Ignore lookup
219
+ },
220
+ // Populate relations, media, compos and dz
221
+ populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
222
+ }),
223
+ strapi.db.query(uid).findMany({
224
+ where: {
225
+ ...queryParams?.lookup,
226
+ documentId,
227
+ publishedAt: { $ne: null }
228
+ },
229
+ select: ["id", "locale"]
230
+ })
231
+ ]);
232
+ const relationsToSync = await unidirectionalRelations.load(uid, {
233
+ newVersions: draftsToPublish,
234
+ oldVersions: oldPublishedVersions
182
235
  });
183
- const versions = await strapiUtils.async.map(
236
+ await strapiUtils.async.map(oldPublishedVersions, (entry) => entries$1.delete(entry.id));
237
+ const publishedEntries = await strapiUtils.async.map(
184
238
  draftsToPublish,
185
239
  (draft) => entries$1.publish(draft, queryParams)
186
240
  );
187
- return { versions };
241
+ await unidirectionalRelations.sync(
242
+ [...oldPublishedVersions, ...draftsToPublish],
243
+ publishedEntries,
244
+ relationsToSync
245
+ );
246
+ publishedEntries.forEach(emitEvent("entry.publish"));
247
+ return { documentId, entries: publishedEntries };
188
248
  }
189
249
  async function unpublish(opts = {}) {
190
250
  const { documentId, ...params2 } = opts;
191
- const queryParams = await strapiUtils.async.pipe(
251
+ const query$1 = await strapiUtils.async.pipe(
252
+ validateParams,
192
253
  internationalization.defaultLocale(contentType),
193
- internationalization.multiLocaleToLookup(contentType)
254
+ internationalization.multiLocaleToLookup(contentType),
255
+ query.transformParamsToQuery(uid),
256
+ (query2) => fp.assoc("where", { ...query2.where, documentId, publishedAt: { $ne: null } }, query2)
194
257
  )(params2);
195
- const { deletedEntries } = await deleteDocument({
196
- ...params2,
197
- documentId,
198
- lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } }
199
- });
200
- return { versions: deletedEntries };
258
+ const versionsToDelete = await strapi.db.query(uid).findMany(query$1);
259
+ await strapiUtils.async.map(versionsToDelete, (entry) => entries$1.delete(entry.id));
260
+ versionsToDelete.forEach(emitEvent("entry.unpublish"));
261
+ return { documentId, entries: versionsToDelete };
201
262
  }
202
263
  async function discardDraft(opts = {}) {
203
264
  const { documentId, ...params2 } = opts;
204
265
  const queryParams = await strapiUtils.async.pipe(
266
+ validateParams,
205
267
  internationalization.defaultLocale(contentType),
206
268
  internationalization.multiLocaleToLookup(contentType)
207
269
  )(params2);
208
- await deleteDocument({
209
- ...queryParams,
210
- documentId,
211
- lookup: { ...queryParams?.lookup, publishedAt: null }
212
- });
213
- const entriesToDraft = await strapi.db?.query(uid).findMany({
214
- where: {
215
- ...queryParams?.lookup,
216
- documentId,
217
- publishedAt: { $ne: null }
218
- },
219
- populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
270
+ const [versionsToDraft, oldDrafts] = await Promise.all([
271
+ strapi.db.query(uid).findMany({
272
+ where: {
273
+ ...queryParams?.lookup,
274
+ documentId,
275
+ publishedAt: { $ne: null }
276
+ },
277
+ // Populate relations, media, compos and dz
278
+ populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
279
+ }),
280
+ strapi.db.query(uid).findMany({
281
+ where: {
282
+ ...queryParams?.lookup,
283
+ documentId,
284
+ publishedAt: null
285
+ },
286
+ select: ["id", "locale"]
287
+ })
288
+ ]);
289
+ const relationsToSync = await unidirectionalRelations.load(uid, {
290
+ newVersions: versionsToDraft,
291
+ oldVersions: oldDrafts
220
292
  });
293
+ await strapiUtils.async.map(oldDrafts, (entry) => entries$1.delete(entry.id));
221
294
  const draftEntries = await strapiUtils.async.map(
222
- entriesToDraft,
295
+ versionsToDraft,
223
296
  (entry) => entries$1.discardDraft(entry, queryParams)
224
297
  );
225
- return { versions: draftEntries };
298
+ await unidirectionalRelations.sync(
299
+ [...oldDrafts, ...versionsToDraft],
300
+ draftEntries,
301
+ relationsToSync
302
+ );
303
+ draftEntries.forEach(emitEvent("entry.draft-discard"));
304
+ return { documentId, entries: draftEntries };
226
305
  }
227
306
  async function updateComponents(entry, data) {
228
307
  return components.updateComponents(uid, entry, data);
@@ -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 { 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 draftsToPublish = 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 versions = await async.map(draftsToPublish, (draft: unknown) =>\n entries.publish(draft, queryParams)\n );\n\n return { versions };\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(entriesToDraft, (entry: any) =>\n entries.discardDraft(entry, queryParams)\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","merge","pickSelectionParams","DP.defaultStatus","components.updateComponents","components.omitComponentData","wrapInTransaction"],"mappings":";;;;;;;;;;;;;;AAgBa,MAAA,8BAAuD,CAAC,QAAQ;AACrE,QAAA,cAAc,OAAO,YAAY,GAAG;AACpC,QAAA,qBAAqBA,YAAAA,aAAkB,mBAAmB,WAAW;AAErE,QAAAC,YAAUC,6BAAqB,GAAG;AAEzB,iBAAA,SAASC,UAAS,IAAW;AACpC,UAAAC,UAAQ,MAAMC,YAAAA,MAAM;AAAA,MACxBC,gBAAG;AAAA,MACHC,gBAAAA,eAAkB,WAAW;AAAA,MAC7BC,qBAAAA,cAAmB,WAAW;AAAA,MAC9BC,qBAAAA,eAAoB,WAAW;AAAA,MAC/BC,YAAAA,0BAA0B,GAAG;AAAA,MAC7BC,MAAAA,uBAAuB,GAAG;AAAA,IAAA,EAC1BR,WAAU,CAAA,CAAE;AAEd,WAAO,OAAO,GAAG,MAAM,GAAG,EAAE,SAASC,OAAK;AAAA,EAC5C;AAEe,iBAAA,UAAUD,UAAS,IAAW;AACrC,UAAAC,UAAQ,MAAMC,YAAAA,MAAM;AAAA,MACxBC,gBAAG;AAAA,MACHC,gBAAAA,eAAkB,WAAW;AAAA,MAC7BC,qBAAAA,cAAmB,WAAW;AAAA,MAC9BC,qBAAAA,eAAoB,WAAW;AAAA,MAC/BC,YAAAA,0BAA0B,GAAG;AAAA,MAC7BC,MAAAA,uBAAuB,GAAG;AAAA,MAC1BR,OAAM;AAER,WAAO,OAAO,GAAG,MAAM,GAAG,EAAE,QAAQC,OAAK;AAAA,EAC3C;AAGe,iBAAA,QAAQ,OAAO,IAAW;AACvC,UAAM,EAAE,YAAY,GAAGD,QAAA,IAAW;AAE5B,UAAAC,UAAQ,MAAMC,YAAAA,MAAM;AAAA,MACxBC,gBAAG;AAAA,MACHC,gBAAAA,eAAkB,WAAW;AAAA,MAC7BC,qBAAAA,cAAmB,WAAW;AAAA,MAC9BC,qBAAAA,eAAoB,WAAW;AAAA,MAC/BC,YAAAA,0BAA0B,GAAG;AAAA,MAC7BC,MAAAA,uBAAuB,GAAG;AAAA,MAC1B,CAACP,WAAUQ,EAAA,MAAM,SAAS,EAAE,GAAGR,OAAM,OAAO,WAAW,GAAGA,MAAK;AAAA,MAC/DD,OAAM;AAER,WAAO,OAAO,GAAG,MAAM,GAAG,EAAE,QAAQC,OAAK;AAAA,EAC3C;AAEe,iBAAA,eAAe,OAAO,IAAW;AAC9C,UAAM,EAAE,YAAY,GAAGD,QAAA,IAAW;AAE5B,UAAAC,UAAQ,MAAMC,YAAAA,MAAM;AAAA,MACxBQ,EAAAA,KAAK,QAAQ;AAAA,MACbL,qBAAAA,cAAmB,WAAW;AAAA,MAC9BM,qBAAAA,oBAAyB,WAAW;AAAA,MACpCH,MAAAA,uBAAuB,GAAG;AAAA,MAC1B,CAACP,WAAUQ,EAAA,MAAM,SAAS,EAAE,GAAGR,OAAM,OAAO,WAAW,GAAGA,MAAK;AAAA,MAC/DD,OAAM;AAEJ,QAAAA,QAAO,WAAW,SAAS;AACvB,YAAA,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAEM,UAAA,kBAAkB,MAAM,OAAO,GAAG,MAAM,GAAG,EAAE,SAASC,OAAK;AAG3D,UAAAC,YAAA,MAAM,IAAI,iBAAiB,CAAC,kBAAuBJ,UAAQ,OAAO,cAAc,EAAE,CAAC;AAElF,WAAA,EAAE,gBAAgB;EAC3B;AAEe,iBAAA,OAAO,OAAO,IAAW;AACtC,UAAM,EAAE,YAAY,GAAGE,QAAA,IAAW;AAE5B,UAAA,cAAc,MAAME,YAAAA,MAAM;AAAA,MAC9BU,gBAAG;AAAA,MACHC,gBAAAA,iBAAoB,WAAW;AAAA,MAC/BC,gBAAAA,aAAgB,WAAW;AAAA,MAC3BT,qBAAAA,cAAmB,WAAW;AAAA,MAC9BU,qBAAAA,aAAkB,WAAW;AAAA,MAC7Bf,OAAM;AAER,UAAM,MAAM,MAAMF,UAAQ,OAAO,WAAW;AAExC,QAAA,sBAAsBE,QAAO,WAAW,aAAa;AACvD,aAAO,QAAQ;AAAA,QACb,GAAGA;AAAA,QACH,YAAY,IAAI;AAAA,MAAA,CACjB,EAAE,KAAK,CAACgB,SAAQA,KAAI,SAAS,CAAC,CAAC;AAAA,IAClC;AAEO,WAAA;AAAA,EACT;AAEe,iBAAA,MAAM,OAAO,IAAW;AACrC,UAAM,EAAE,YAAY,GAAGhB,QAAA,IAAW;AAE5B,UAAA,cAAc,MAAME,YAAAA,MAAM;AAAA,MAC9BU,gBAAG;AAAA,MACHP,qBAAAA,cAAmB,WAAW;AAAA,MAC9BM,qBAAAA,oBAAyB,WAAW;AAAA,MACpCX,OAAM;AAGR,UAAM,iBAAiB,MAAM,OAAO,IAAI,MAAM,GAAG,EAAE,SAAS;AAAA,MAC1D,OAAO;AAAA,QACL,GAAG,aAAa;AAAA,QAChB;AAAA;AAAA;AAAA,QAGA,aAAa,EAAE,OAAO,mBAAmB;AAAA,MAC3C;AAAA,MACA,UAAUiB,yBAAgB,KAAK,EAAE,kBAAkB,CAAC,IAAI,GAAG;AAAA,IAAA,CAC5D;AAEK,UAAA,gBAAgB,MAAMf,YAAAA,MAAM;AAAA,MAChC;AAAA,MACAA,YAAAA,MAAM;AAAA,QACJQ,EAAAA,KAAK,IAAI;AAAA;AAAA,QAETD,QAAM,cAAcS,8BAAAA,kBAAkB;AAAA;AAAA,QAEtC,CAAC,SAASC,EAAM,MAAA,MAAM,YAAY,IAAI;AAAA,QACtC,CAAC,SAASrB,UAAQ,OAAO,EAAE,GAAG,aAAa,MAAM,QAAQ,SAAS;AAAA,MACpE;AAAA,IAAA;AAGK,WAAA,EAAE,YAAY,cAAc,GAAG,CAAC,GAAG,YAAY,UAAU;EAClE;AAEe,iBAAA,OAAO,OAAO,IAAW;AACtC,UAAM,EAAE,YAAY,GAAGE,SAAA,IAAW;AAE5B,UAAA,cAAc,MAAME,YAAAA,MAAM;AAAA,MAC9BU,gBAAG;AAAA,MACHC,gBAAAA,iBAAoB,WAAW;AAAA,MAC/BT,gBAAAA,eAAkB,WAAW;AAAA,MAC7BU,gBAAAA,aAAgB,WAAW;AAAA;AAAA,MAE3BT,qBAAAA,cAAmB,WAAW;AAAA,MAC9BC,qBAAAA,eAAoB,WAAW;AAAA,MAC/BS,qBAAAA,aAAkB,WAAW;AAAA,MAC7Bf,QAAM;AAEF,UAAA,EAAE,MAAM,GAAG,WAAW,IAAI,MAAMO,YAAAA,0BAA0B,KAAK,eAAe,CAAA,CAAE;AACtF,UAAMN,UAAQO,MAAAA,uBAAuB,KAAKY,2BAAoB,cAAc,CAAE,CAAA,CAAQ;AAIhF,UAAA,gBAAgB,MAAM,OAAO,GAChC,MAAM,GAAG,EACT,QAAQ,EAAE,GAAGnB,SAAO,OAAO,EAAE,GAAG,aAAa,QAAQ,GAAGA,SAAO,OAAO,WAAW,EAAA,CAAG;AAEvF,QAAI,eAAe;AACnB,QAAI,eAAe;AACjB,qBAAe,MAAMH,UAAQ,OAAO,eAAe,WAAW;AAAA,IAChE;AAEA,QAAI,CAAC,cAAc;AACjB,YAAM,iBAAiB,MAAM,OAAO,GACjC,MAAM,YAAY,GAAG,EACrB,QAAQ,EAAE,OAAO,EAAE,WAAA,EAAc,CAAA;AAEpC,UAAI,gBAAgB;AACH,uBAAA,MAAMA,UAAQ,OAAO;AAAA,UAClC,GAAG;AAAA,UACH,MAAM,EAAE,GAAG,YAAY,MAAM,WAAW;AAAA,QAAA,CACzC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,sBAAsB,gBAAgBE,SAAO,WAAW,aAAa;AACvE,aAAO,QAAQ;AAAA,QACb,GAAGA;AAAAA,QACH;AAAA,MAAA,CACD,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;AAAA,IAClC;AAEO,WAAA;AAAA,EACT;AAEe,iBAAA,MAAMA,UAAS,IAAW;AACjC,UAAAC,UAAQ,MAAMC,YAAAA,MAAM;AAAA,MACxBmB,gBAAAA,cAAiB,WAAW;AAAA,MAC5BjB,gBAAAA,eAAkB,WAAW;AAAA,MAC7BC,qBAAAA,cAAmB,WAAW;AAAA,MAC9BC,qBAAAA,eAAoB,WAAW;AAAA,MAC/BE,MAAAA,uBAAuB,GAAG;AAAA,MAC1BR,OAAM;AAER,WAAO,OAAO,GAAG,MAAM,GAAG,EAAE,MAAMC,OAAK;AAAA,EACzC;AAEe,iBAAA,QAAQ,OAAO,IAAW;AACvC,UAAM,EAAE,YAAY,GAAGD,QAAA,IAAW;AAE5B,UAAA,cAAc,MAAME,YAAAA,MAAM;AAAA,MAC9BG,qBAAAA,cAAmB,WAAW;AAAA,MAC9BM,qBAAAA,oBAAyB,WAAW;AAAA,MACpCX,OAAM;AAER,UAAM,eAAe;AAAA,MACnB,GAAG;AAAA,MACH;AAAA,MACA,QAAQ,EAAE,GAAG,aAAa,QAAQ,aAAa,EAAE,KAAK,OAAO;AAAA,IAAA,CAC9D;AAGD,UAAM,kBAAkB,MAAM,OAAO,IAAI,MAAM,GAAG,EAAE,SAAS;AAAA,MAC3D,OAAO;AAAA,QACL,GAAG,aAAa;AAAA,QAChB;AAAA,QACA,aAAa;AAAA,MACf;AAAA,MACA,UAAUiB,yBAAgB,KAAK,EAAE,kBAAkB,CAAC,cAAc,QAAQ,GAAG;AAAA,IAAA,CAC9E;AAGK,UAAA,WAAW,MAAMf,YAAAA,MAAM;AAAA,MAAI;AAAA,MAAiB,CAAC,UACjDJ,UAAQ,QAAQ,OAAO,WAAW;AAAA,IAAA;AAGpC,WAAO,EAAE,SAAS;AAAA,EACpB;AAEe,iBAAA,UAAU,OAAO,IAAW;AACzC,UAAM,EAAE,YAAY,GAAGE,QAAA,IAAW;AAE5B,UAAA,cAAc,MAAME,YAAAA,MAAM;AAAA,MAC9BG,qBAAAA,cAAmB,WAAW;AAAA,MAC9BM,qBAAAA,oBAAyB,WAAW;AAAA,MACpCX,OAAM;AAER,UAAM,EAAE,mBAAmB,MAAM,eAAe;AAAA,MAC9C,GAAGA;AAAA,MACH;AAAA,MACA,QAAQ,EAAE,GAAG,aAAa,QAAQ,aAAa,EAAE,KAAK,OAAO;AAAA,IAAA,CAC9D;AAEM,WAAA,EAAE,UAAU;EACrB;AAEe,iBAAA,aAAa,OAAO,IAAW;AAC5C,UAAM,EAAE,YAAY,GAAGA,QAAA,IAAW;AAE5B,UAAA,cAAc,MAAME,YAAAA,MAAM;AAAA,MAC9BG,qBAAAA,cAAmB,WAAW;AAAA,MAC9BM,qBAAAA,oBAAyB,WAAW;AAAA,MACpCX,OAAM;AAGR,UAAM,eAAe;AAAA,MACnB,GAAG;AAAA,MACH;AAAA,MACA,QAAQ,EAAE,GAAG,aAAa,QAAQ,aAAa,KAAK;AAAA,IAAA,CACrD;AAGD,UAAM,iBAAiB,MAAM,OAAO,IAAI,MAAM,GAAG,EAAE,SAAS;AAAA,MAC1D,OAAO;AAAA,QACL,GAAG,aAAa;AAAA,QAChB;AAAA,QACA,aAAa,EAAE,KAAK,KAAK;AAAA,MAC3B;AAAA,MACA,UAAUiB,yBAAgB,KAAK,EAAE,kBAAkB,CAAC,cAAc,QAAQ,GAAG;AAAA,IAAA,CAC9E;AAGK,UAAA,eAAe,MAAMf,YAAAA,MAAM;AAAA,MAAI;AAAA,MAAgB,CAAC,UACpDJ,UAAQ,aAAa,OAAO,WAAW;AAAA,IAAA;AAGlC,WAAA,EAAE,UAAU;EACrB;AAEe,iBAAA,iBAAiB,OAAY,MAAW;AACrD,WAAOwB,4BAA4B,KAAK,OAAO,IAAI;AAAA,EACrD;AAEA,WAAS,kBAAkB,MAAW;AAC7B,WAAAC,WAA6B,kBAAA,aAAa,IAAI;AAAA,EACvD;AAEO,SAAA;AAAA,IACL,UAAUC,yBAAkB,QAAQ;AAAA,IACpC,WAAWA,yBAAkB,SAAS;AAAA,IACtC,SAASA,yBAAkB,OAAO;AAAA,IAClC,QAAQA,yBAAkB,cAAc;AAAA,IACxC,QAAQA,yBAAkB,MAAM;AAAA,IAChC,OAAOA,yBAAkB,KAAK;AAAA,IAC9B,QAAQA,yBAAkB,MAAM;AAAA,IAChC,OAAOA,yBAAkB,KAAK;AAAA,IAC9B,SAAS,qBAAqBA,OAAAA,kBAAkB,OAAO,IAAK;AAAA,IAC5D,WAAW,qBAAqBA,OAAAA,kBAAkB,SAAS,IAAK;AAAA,IAChE,cAAc,qBAAqBA,OAAAA,kBAAkB,YAAY,IAAK;AAAA,IAEtE;AAAA,IACA;AAAA,EAAA;AAEJ;;"}
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, validate } from '@strapi/utils';\n\nimport { UID } from '@strapi/types';\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';\nimport * as unidirectionalRelations from './utils/unidirectional-relations';\nimport entityValidator from '../entity-validator';\n\nconst { validators } = validate;\n\n// we have to typecast to reconcile the differences between validator and database getModel\nconst getModel = ((schema: UID.Schema) => strapi.getModel(schema)) as (schema: string) => any;\n\nexport const createContentTypeRepository: RepositoryFactoryMethod = (\n uid,\n validator = entityValidator\n) => {\n const contentType = strapi.contentType(uid);\n const hasDraftAndPublish = contentTypesUtils.hasDraftAndPublish(contentType);\n\n // Define the validations that should be performed\n const sortValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n const fieldValidations = ['scalarAttributes'];\n const filtersValidations = ['nonAttributesOperators', 'dynamicZones', 'morphRelations'];\n const populateValidations = {\n sort: sortValidations,\n field: fieldValidations,\n filters: filtersValidations,\n populate: ['nonAttributesOperators'],\n };\n\n const validateParams = async (params: any) => {\n const ctx = { schema: contentType, getModel };\n await validators.validateFilters(ctx, params.filters, filtersValidations);\n await validators.validateSort(ctx, params.sort, sortValidations);\n await validators.validateFields(ctx, params.fields, fieldValidations);\n await validators.validatePopulate(ctx, params.populate, populateValidations);\n\n // TODO: add validate status, locale, pagination\n\n return params;\n };\n\n const entries = createEntriesService(uid, validator);\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 validateParams,\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 validateParams,\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 validateParams,\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 validateParams,\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 validateParams,\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 validateParams,\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 validateParams,\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 validateParams,\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 validateParams,\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 validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [draftsToPublish, oldPublishedVersions] = 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', 'locale'],\n }),\n ]);\n\n // Load any unidirectional relation targetting the old published entries\n const relationsToSync = await unidirectionalRelations.load(uid, {\n newVersions: draftsToPublish,\n oldVersions: oldPublishedVersions,\n });\n\n // Delete old published versions\n await async.map(oldPublishedVersions, (entry: any) => entries.delete(entry.id));\n\n // Transform draft entry data and create published versions\n const publishedEntries = await async.map(draftsToPublish, (draft: any) =>\n entries.publish(draft, queryParams)\n );\n\n // Sync unidirectional relations with the new published entries\n await unidirectionalRelations.sync(\n [...oldPublishedVersions, ...draftsToPublish],\n publishedEntries,\n relationsToSync\n );\n\n publishedEntries.forEach(emitEvent('entry.publish'));\n\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 validateParams,\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 validateParams,\n i18n.defaultLocale(contentType),\n i18n.multiLocaleToLookup(contentType)\n )(params);\n\n const [versionsToDraft, oldDrafts] = 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', 'locale'],\n }),\n ]);\n\n // Load any unidirectional relation targeting the old drafts\n const relationsToSync = await unidirectionalRelations.load(uid, {\n newVersions: versionsToDraft,\n oldVersions: oldDrafts,\n });\n\n // Delete old drafts\n await async.map(oldDrafts, (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 // Sync unidirectional relations with the new draft entries\n await unidirectionalRelations.sync(\n [...oldDrafts, ...versionsToDraft],\n draftEntries,\n relationsToSync\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":["validate","entityValidator","contentTypesUtils","params","entries","createEntriesService","createEventManager","curry","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","unidirectionalRelations.load","unidirectionalRelations.sync","components.updateComponents","components.omitComponentData","wrapInTransaction"],"mappings":"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"}