@strapi/core 0.0.0-next.b0db56479de441dfe8feb37a43c7f6f6fecf75c1 → 0.0.0-next.b445ac2d35ee8f4b2d2f16f390c6d16b24de29f9

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 (704) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +427 -403
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +426 -402
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/compile.js +23 -14
  7. package/dist/compile.js.map +1 -1
  8. package/dist/compile.mjs +22 -14
  9. package/dist/compile.mjs.map +1 -1
  10. package/dist/configuration/config-loader.js +110 -97
  11. package/dist/configuration/config-loader.js.map +1 -1
  12. package/dist/configuration/config-loader.mjs +109 -96
  13. package/dist/configuration/config-loader.mjs.map +1 -1
  14. package/dist/configuration/get-dirs.js +31 -29
  15. package/dist/configuration/get-dirs.js.map +1 -1
  16. package/dist/configuration/get-dirs.mjs +30 -30
  17. package/dist/configuration/get-dirs.mjs.map +1 -1
  18. package/dist/configuration/index.d.ts +1 -0
  19. package/dist/configuration/index.d.ts.map +1 -1
  20. package/dist/configuration/index.js +85 -73
  21. package/dist/configuration/index.js.map +1 -1
  22. package/dist/configuration/index.mjs +84 -69
  23. package/dist/configuration/index.mjs.map +1 -1
  24. package/dist/configuration/urls.d.ts.map +1 -1
  25. package/dist/configuration/urls.js +74 -61
  26. package/dist/configuration/urls.js.map +1 -1
  27. package/dist/configuration/urls.mjs +73 -62
  28. package/dist/configuration/urls.mjs.map +1 -1
  29. package/dist/container.js +27 -23
  30. package/dist/container.js.map +1 -1
  31. package/dist/container.mjs +26 -24
  32. package/dist/container.mjs.map +1 -1
  33. package/dist/core-api/controller/collection-type.js +77 -76
  34. package/dist/core-api/controller/collection-type.js.map +1 -1
  35. package/dist/core-api/controller/collection-type.mjs +76 -77
  36. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  37. package/dist/core-api/controller/index.js +63 -48
  38. package/dist/core-api/controller/index.js.map +1 -1
  39. package/dist/core-api/controller/index.mjs +62 -49
  40. package/dist/core-api/controller/index.mjs.map +1 -1
  41. package/dist/core-api/controller/single-type.js +41 -40
  42. package/dist/core-api/controller/single-type.js.map +1 -1
  43. package/dist/core-api/controller/single-type.mjs +40 -41
  44. package/dist/core-api/controller/single-type.mjs.map +1 -1
  45. package/dist/core-api/controller/transform.js +72 -63
  46. package/dist/core-api/controller/transform.js.map +1 -1
  47. package/dist/core-api/controller/transform.mjs +71 -64
  48. package/dist/core-api/controller/transform.mjs.map +1 -1
  49. package/dist/core-api/routes/index.js +64 -62
  50. package/dist/core-api/routes/index.js.map +1 -1
  51. package/dist/core-api/routes/index.mjs +62 -62
  52. package/dist/core-api/routes/index.mjs.map +1 -1
  53. package/dist/core-api/service/collection-type.js +73 -60
  54. package/dist/core-api/service/collection-type.js.map +1 -1
  55. package/dist/core-api/service/collection-type.mjs +72 -62
  56. package/dist/core-api/service/collection-type.mjs.map +1 -1
  57. package/dist/core-api/service/core-service.js +9 -8
  58. package/dist/core-api/service/core-service.js.map +1 -1
  59. package/dist/core-api/service/core-service.mjs +8 -9
  60. package/dist/core-api/service/core-service.mjs.map +1 -1
  61. package/dist/core-api/service/index.js +13 -13
  62. package/dist/core-api/service/index.js.map +1 -1
  63. package/dist/core-api/service/index.mjs +12 -14
  64. package/dist/core-api/service/index.mjs.map +1 -1
  65. package/dist/core-api/service/pagination.js +69 -43
  66. package/dist/core-api/service/pagination.js.map +1 -1
  67. package/dist/core-api/service/pagination.mjs +68 -47
  68. package/dist/core-api/service/pagination.mjs.map +1 -1
  69. package/dist/core-api/service/single-type.js +43 -39
  70. package/dist/core-api/service/single-type.js.map +1 -1
  71. package/dist/core-api/service/single-type.mjs +42 -41
  72. package/dist/core-api/service/single-type.mjs.map +1 -1
  73. package/dist/domain/content-type/index.js +95 -100
  74. package/dist/domain/content-type/index.js.map +1 -1
  75. package/dist/domain/content-type/index.mjs +94 -100
  76. package/dist/domain/content-type/index.mjs.map +1 -1
  77. package/dist/domain/content-type/validator.js +84 -69
  78. package/dist/domain/content-type/validator.js.map +1 -1
  79. package/dist/domain/content-type/validator.mjs +83 -68
  80. package/dist/domain/content-type/validator.mjs.map +1 -1
  81. package/dist/domain/module/index.js +109 -100
  82. package/dist/domain/module/index.js.map +1 -1
  83. package/dist/domain/module/index.mjs +108 -99
  84. package/dist/domain/module/index.mjs.map +1 -1
  85. package/dist/domain/module/validation.js +25 -20
  86. package/dist/domain/module/validation.js.map +1 -1
  87. package/dist/domain/module/validation.mjs +24 -21
  88. package/dist/domain/module/validation.mjs.map +1 -1
  89. package/dist/ee/index.d.ts +1 -0
  90. package/dist/ee/index.d.ts.map +1 -1
  91. package/dist/ee/index.js +171 -137
  92. package/dist/ee/index.js.map +1 -1
  93. package/dist/ee/index.mjs +170 -139
  94. package/dist/ee/index.mjs.map +1 -1
  95. package/dist/ee/license.d.ts.map +1 -1
  96. package/dist/ee/license.js +100 -75
  97. package/dist/ee/license.js.map +1 -1
  98. package/dist/ee/license.mjs +99 -76
  99. package/dist/ee/license.mjs.map +1 -1
  100. package/dist/factories.js +72 -67
  101. package/dist/factories.js.map +1 -1
  102. package/dist/factories.mjs +71 -71
  103. package/dist/factories.mjs.map +1 -1
  104. package/dist/index.js +29 -26
  105. package/dist/index.js.map +1 -1
  106. package/dist/index.mjs +29 -29
  107. package/dist/index.mjs.map +1 -1
  108. package/dist/loaders/admin.d.ts.map +1 -1
  109. package/dist/loaders/admin.js +21 -20
  110. package/dist/loaders/admin.js.map +1 -1
  111. package/dist/loaders/admin.mjs +20 -20
  112. package/dist/loaders/admin.mjs.map +1 -1
  113. package/dist/loaders/apis.js +143 -120
  114. package/dist/loaders/apis.js.map +1 -1
  115. package/dist/loaders/apis.mjs +142 -119
  116. package/dist/loaders/apis.mjs.map +1 -1
  117. package/dist/loaders/components.js +33 -34
  118. package/dist/loaders/components.js.map +1 -1
  119. package/dist/loaders/components.mjs +32 -34
  120. package/dist/loaders/components.mjs.map +1 -1
  121. package/dist/loaders/index.js +22 -20
  122. package/dist/loaders/index.js.map +1 -1
  123. package/dist/loaders/index.mjs +21 -21
  124. package/dist/loaders/index.mjs.map +1 -1
  125. package/dist/loaders/middlewares.js +29 -25
  126. package/dist/loaders/middlewares.js.map +1 -1
  127. package/dist/loaders/middlewares.mjs +28 -25
  128. package/dist/loaders/middlewares.mjs.map +1 -1
  129. package/dist/loaders/plugins/get-enabled-plugins.js +126 -131
  130. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  131. package/dist/loaders/plugins/get-enabled-plugins.mjs +125 -108
  132. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  133. package/dist/loaders/plugins/get-user-plugins-config.js +25 -24
  134. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  135. package/dist/loaders/plugins/get-user-plugins-config.mjs +24 -23
  136. package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
  137. package/dist/loaders/plugins/index.js +132 -122
  138. package/dist/loaders/plugins/index.js.map +1 -1
  139. package/dist/loaders/plugins/index.mjs +121 -112
  140. package/dist/loaders/plugins/index.mjs.map +1 -1
  141. package/dist/loaders/policies.js +24 -20
  142. package/dist/loaders/policies.js.map +1 -1
  143. package/dist/loaders/policies.mjs +23 -20
  144. package/dist/loaders/policies.mjs.map +1 -1
  145. package/dist/loaders/sanitizers.js +10 -4
  146. package/dist/loaders/sanitizers.js.map +1 -1
  147. package/dist/loaders/sanitizers.mjs +9 -6
  148. package/dist/loaders/sanitizers.mjs.map +1 -1
  149. package/dist/loaders/src-index.js +35 -27
  150. package/dist/loaders/src-index.js.map +1 -1
  151. package/dist/loaders/src-index.mjs +34 -29
  152. package/dist/loaders/src-index.mjs.map +1 -1
  153. package/dist/loaders/validators.js +9 -4
  154. package/dist/loaders/validators.js.map +1 -1
  155. package/dist/loaders/validators.mjs +8 -6
  156. package/dist/loaders/validators.mjs.map +1 -1
  157. package/dist/middlewares/body.d.ts.map +1 -1
  158. package/dist/middlewares/body.js +58 -54
  159. package/dist/middlewares/body.js.map +1 -1
  160. package/dist/middlewares/body.mjs +57 -51
  161. package/dist/middlewares/body.mjs.map +1 -1
  162. package/dist/middlewares/compression.js +6 -6
  163. package/dist/middlewares/compression.js.map +1 -1
  164. package/dist/middlewares/compression.mjs +5 -5
  165. package/dist/middlewares/compression.mjs.map +1 -1
  166. package/dist/middlewares/cors.js +59 -48
  167. package/dist/middlewares/cors.js.map +1 -1
  168. package/dist/middlewares/cors.mjs +58 -47
  169. package/dist/middlewares/cors.mjs.map +1 -1
  170. package/dist/middlewares/errors.js +32 -30
  171. package/dist/middlewares/errors.js.map +1 -1
  172. package/dist/middlewares/errors.mjs +31 -31
  173. package/dist/middlewares/errors.mjs.map +1 -1
  174. package/dist/middlewares/favicon.js +27 -17
  175. package/dist/middlewares/favicon.js.map +1 -1
  176. package/dist/middlewares/favicon.mjs +26 -16
  177. package/dist/middlewares/favicon.mjs.map +1 -1
  178. package/dist/middlewares/index.js +32 -30
  179. package/dist/middlewares/index.js.map +1 -1
  180. package/dist/middlewares/index.mjs +31 -31
  181. package/dist/middlewares/index.mjs.map +1 -1
  182. package/dist/middlewares/ip.js +6 -6
  183. package/dist/middlewares/ip.js.map +1 -1
  184. package/dist/middlewares/ip.mjs +5 -5
  185. package/dist/middlewares/ip.mjs.map +1 -1
  186. package/dist/middlewares/logger.js +10 -9
  187. package/dist/middlewares/logger.js.map +1 -1
  188. package/dist/middlewares/logger.mjs +9 -10
  189. package/dist/middlewares/logger.mjs.map +1 -1
  190. package/dist/middlewares/powered-by.js +13 -9
  191. package/dist/middlewares/powered-by.js.map +1 -1
  192. package/dist/middlewares/powered-by.mjs +12 -10
  193. package/dist/middlewares/powered-by.mjs.map +1 -1
  194. package/dist/middlewares/public.js +33 -29
  195. package/dist/middlewares/public.js.map +1 -1
  196. package/dist/middlewares/public.mjs +32 -28
  197. package/dist/middlewares/public.mjs.map +1 -1
  198. package/dist/middlewares/query.js +35 -32
  199. package/dist/middlewares/query.js.map +1 -1
  200. package/dist/middlewares/query.mjs +34 -31
  201. package/dist/middlewares/query.mjs.map +1 -1
  202. package/dist/middlewares/response-time.js +10 -9
  203. package/dist/middlewares/response-time.js.map +1 -1
  204. package/dist/middlewares/response-time.mjs +9 -10
  205. package/dist/middlewares/response-time.mjs.map +1 -1
  206. package/dist/middlewares/responses.js +14 -12
  207. package/dist/middlewares/responses.js.map +1 -1
  208. package/dist/middlewares/responses.mjs +13 -13
  209. package/dist/middlewares/responses.mjs.map +1 -1
  210. package/dist/middlewares/security.js +109 -71
  211. package/dist/middlewares/security.js.map +1 -1
  212. package/dist/middlewares/security.mjs +108 -70
  213. package/dist/middlewares/security.mjs.map +1 -1
  214. package/dist/middlewares/session.js +26 -25
  215. package/dist/middlewares/session.js.map +1 -1
  216. package/dist/middlewares/session.mjs +25 -24
  217. package/dist/middlewares/session.mjs.map +1 -1
  218. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +2 -2
  219. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
  220. package/dist/migrations/database/5.0.0-discard-drafts.js +152 -90
  221. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  222. package/dist/migrations/database/5.0.0-discard-drafts.mjs +151 -92
  223. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  224. package/dist/migrations/draft-publish.d.ts +1 -1
  225. package/dist/migrations/draft-publish.d.ts.map +1 -1
  226. package/dist/migrations/draft-publish.js +61 -34
  227. package/dist/migrations/draft-publish.js.map +1 -1
  228. package/dist/migrations/draft-publish.mjs +60 -36
  229. package/dist/migrations/draft-publish.mjs.map +1 -1
  230. package/dist/migrations/i18n.js +62 -45
  231. package/dist/migrations/i18n.js.map +1 -1
  232. package/dist/migrations/i18n.mjs +61 -47
  233. package/dist/migrations/i18n.mjs.map +1 -1
  234. package/dist/migrations/index.js +24 -10
  235. package/dist/migrations/index.js.map +1 -1
  236. package/dist/migrations/index.mjs +23 -12
  237. package/dist/migrations/index.mjs.map +1 -1
  238. package/dist/package.json.js +182 -0
  239. package/dist/package.json.js.map +1 -0
  240. package/dist/package.json.mjs +159 -0
  241. package/dist/package.json.mjs.map +1 -0
  242. package/dist/providers/admin.js +27 -17
  243. package/dist/providers/admin.js.map +1 -1
  244. package/dist/providers/admin.mjs +26 -19
  245. package/dist/providers/admin.mjs.map +1 -1
  246. package/dist/providers/coreStore.js +13 -8
  247. package/dist/providers/coreStore.js.map +1 -1
  248. package/dist/providers/coreStore.mjs +12 -10
  249. package/dist/providers/coreStore.mjs.map +1 -1
  250. package/dist/providers/cron.js +19 -16
  251. package/dist/providers/cron.js.map +1 -1
  252. package/dist/providers/cron.mjs +18 -18
  253. package/dist/providers/cron.mjs.map +1 -1
  254. package/dist/providers/index.js +18 -9
  255. package/dist/providers/index.js.map +1 -1
  256. package/dist/providers/index.mjs +17 -10
  257. package/dist/providers/index.mjs.map +1 -1
  258. package/dist/providers/provider.js +4 -3
  259. package/dist/providers/provider.js.map +1 -1
  260. package/dist/providers/provider.mjs +3 -4
  261. package/dist/providers/provider.mjs.map +1 -1
  262. package/dist/providers/registries.js +37 -32
  263. package/dist/providers/registries.js.map +1 -1
  264. package/dist/providers/registries.mjs +36 -34
  265. package/dist/providers/registries.mjs.map +1 -1
  266. package/dist/providers/telemetry.js +19 -16
  267. package/dist/providers/telemetry.js.map +1 -1
  268. package/dist/providers/telemetry.mjs +18 -18
  269. package/dist/providers/telemetry.mjs.map +1 -1
  270. package/dist/providers/webhooks.js +28 -26
  271. package/dist/providers/webhooks.js.map +1 -1
  272. package/dist/providers/webhooks.mjs +27 -28
  273. package/dist/providers/webhooks.mjs.map +1 -1
  274. package/dist/registries/apis.js +23 -20
  275. package/dist/registries/apis.js.map +1 -1
  276. package/dist/registries/apis.mjs +22 -22
  277. package/dist/registries/apis.mjs.map +1 -1
  278. package/dist/registries/components.js +35 -37
  279. package/dist/registries/components.js.map +1 -1
  280. package/dist/registries/components.mjs +34 -39
  281. package/dist/registries/components.mjs.map +1 -1
  282. package/dist/registries/content-types.js +54 -59
  283. package/dist/registries/content-types.js.map +1 -1
  284. package/dist/registries/content-types.mjs +53 -61
  285. package/dist/registries/content-types.mjs.map +1 -1
  286. package/dist/registries/controllers.js +70 -71
  287. package/dist/registries/controllers.js.map +1 -1
  288. package/dist/registries/controllers.mjs +69 -73
  289. package/dist/registries/controllers.mjs.map +1 -1
  290. package/dist/registries/custom-fields.js +75 -65
  291. package/dist/registries/custom-fields.js.map +1 -1
  292. package/dist/registries/custom-fields.mjs +74 -67
  293. package/dist/registries/custom-fields.mjs.map +1 -1
  294. package/dist/registries/hooks.js +46 -49
  295. package/dist/registries/hooks.js.map +1 -1
  296. package/dist/registries/hooks.mjs +45 -51
  297. package/dist/registries/hooks.mjs.map +1 -1
  298. package/dist/registries/middlewares.js +49 -51
  299. package/dist/registries/middlewares.js.map +1 -1
  300. package/dist/registries/middlewares.mjs +48 -53
  301. package/dist/registries/middlewares.mjs.map +1 -1
  302. package/dist/registries/models.js +14 -13
  303. package/dist/registries/models.js.map +1 -1
  304. package/dist/registries/models.mjs +13 -14
  305. package/dist/registries/models.mjs.map +1 -1
  306. package/dist/registries/modules.js +39 -36
  307. package/dist/registries/modules.js.map +1 -1
  308. package/dist/registries/modules.mjs +38 -38
  309. package/dist/registries/modules.mjs.map +1 -1
  310. package/dist/registries/namespace.js +21 -20
  311. package/dist/registries/namespace.js.map +1 -1
  312. package/dist/registries/namespace.mjs +20 -23
  313. package/dist/registries/namespace.mjs.map +1 -1
  314. package/dist/registries/plugins.js +23 -20
  315. package/dist/registries/plugins.js.map +1 -1
  316. package/dist/registries/plugins.mjs +22 -22
  317. package/dist/registries/plugins.mjs.map +1 -1
  318. package/dist/registries/policies.js +103 -96
  319. package/dist/registries/policies.js.map +1 -1
  320. package/dist/registries/policies.mjs +102 -98
  321. package/dist/registries/policies.mjs.map +1 -1
  322. package/dist/registries/sanitizers.js +23 -22
  323. package/dist/registries/sanitizers.js.map +1 -1
  324. package/dist/registries/sanitizers.mjs +22 -22
  325. package/dist/registries/sanitizers.mjs.map +1 -1
  326. package/dist/registries/services.js +71 -71
  327. package/dist/registries/services.js.map +1 -1
  328. package/dist/registries/services.mjs +70 -73
  329. package/dist/registries/services.mjs.map +1 -1
  330. package/dist/registries/validators.js +23 -22
  331. package/dist/registries/validators.js.map +1 -1
  332. package/dist/registries/validators.mjs +22 -22
  333. package/dist/registries/validators.mjs.map +1 -1
  334. package/dist/services/auth/index.js +74 -74
  335. package/dist/services/auth/index.js.map +1 -1
  336. package/dist/services/auth/index.mjs +73 -74
  337. package/dist/services/auth/index.mjs.map +1 -1
  338. package/dist/services/config.js +47 -43
  339. package/dist/services/config.js.map +1 -1
  340. package/dist/services/config.mjs +46 -44
  341. package/dist/services/config.mjs.map +1 -1
  342. package/dist/services/content-api/index.js +80 -79
  343. package/dist/services/content-api/index.js.map +1 -1
  344. package/dist/services/content-api/index.mjs +79 -79
  345. package/dist/services/content-api/index.mjs.map +1 -1
  346. package/dist/services/content-api/permissions/engine.js +8 -5
  347. package/dist/services/content-api/permissions/engine.js.map +1 -1
  348. package/dist/services/content-api/permissions/engine.mjs +7 -5
  349. package/dist/services/content-api/permissions/engine.mjs.map +1 -1
  350. package/dist/services/content-api/permissions/index.js +101 -81
  351. package/dist/services/content-api/permissions/index.js.map +1 -1
  352. package/dist/services/content-api/permissions/index.mjs +100 -81
  353. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  354. package/dist/services/content-api/permissions/providers/action.js +17 -14
  355. package/dist/services/content-api/permissions/providers/action.js.map +1 -1
  356. package/dist/services/content-api/permissions/providers/action.mjs +16 -16
  357. package/dist/services/content-api/permissions/providers/action.mjs.map +1 -1
  358. package/dist/services/content-api/permissions/providers/condition.js +17 -14
  359. package/dist/services/content-api/permissions/providers/condition.js.map +1 -1
  360. package/dist/services/content-api/permissions/providers/condition.mjs +16 -16
  361. package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -1
  362. package/dist/services/core-store.js +115 -95
  363. package/dist/services/core-store.js.map +1 -1
  364. package/dist/services/core-store.mjs +114 -97
  365. package/dist/services/core-store.mjs.map +1 -1
  366. package/dist/services/cron.js +74 -65
  367. package/dist/services/cron.js.map +1 -1
  368. package/dist/services/cron.mjs +73 -67
  369. package/dist/services/cron.mjs.map +1 -1
  370. package/dist/services/custom-fields.js +9 -7
  371. package/dist/services/custom-fields.js.map +1 -1
  372. package/dist/services/custom-fields.mjs +8 -9
  373. package/dist/services/custom-fields.mjs.map +1 -1
  374. package/dist/services/document-service/attributes/index.js +23 -18
  375. package/dist/services/document-service/attributes/index.js.map +1 -1
  376. package/dist/services/document-service/attributes/index.mjs +22 -19
  377. package/dist/services/document-service/attributes/index.mjs.map +1 -1
  378. package/dist/services/document-service/attributes/transforms.js +16 -15
  379. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  380. package/dist/services/document-service/attributes/transforms.mjs +15 -15
  381. package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
  382. package/dist/services/document-service/common.js +5 -4
  383. package/dist/services/document-service/common.js.map +1 -1
  384. package/dist/services/document-service/common.mjs +4 -5
  385. package/dist/services/document-service/common.mjs.map +1 -1
  386. package/dist/services/document-service/components.d.ts.map +1 -1
  387. package/dist/services/document-service/components.js +255 -257
  388. package/dist/services/document-service/components.js.map +1 -1
  389. package/dist/services/document-service/components.mjs +254 -262
  390. package/dist/services/document-service/components.mjs.map +1 -1
  391. package/dist/services/document-service/draft-and-publish.d.ts +1 -1
  392. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  393. package/dist/services/document-service/draft-and-publish.js +88 -48
  394. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  395. package/dist/services/document-service/draft-and-publish.mjs +87 -54
  396. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  397. package/dist/services/document-service/entries.js +109 -91
  398. package/dist/services/document-service/entries.js.map +1 -1
  399. package/dist/services/document-service/entries.mjs +108 -92
  400. package/dist/services/document-service/entries.mjs.map +1 -1
  401. package/dist/services/document-service/events.d.ts +1 -1
  402. package/dist/services/document-service/events.d.ts.map +1 -1
  403. package/dist/services/document-service/events.js +52 -40
  404. package/dist/services/document-service/events.js.map +1 -1
  405. package/dist/services/document-service/events.mjs +51 -41
  406. package/dist/services/document-service/events.mjs.map +1 -1
  407. package/dist/services/document-service/index.js +53 -33
  408. package/dist/services/document-service/index.js.map +1 -1
  409. package/dist/services/document-service/index.mjs +52 -34
  410. package/dist/services/document-service/index.mjs.map +1 -1
  411. package/dist/services/document-service/internationalization.js +62 -46
  412. package/dist/services/document-service/internationalization.js.map +1 -1
  413. package/dist/services/document-service/internationalization.mjs +61 -50
  414. package/dist/services/document-service/internationalization.mjs.map +1 -1
  415. package/dist/services/document-service/middlewares/errors.js +23 -19
  416. package/dist/services/document-service/middlewares/errors.js.map +1 -1
  417. package/dist/services/document-service/middlewares/errors.mjs +22 -20
  418. package/dist/services/document-service/middlewares/errors.mjs.map +1 -1
  419. package/dist/services/document-service/middlewares/middleware-manager.js +46 -44
  420. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -1
  421. package/dist/services/document-service/middlewares/middleware-manager.mjs +45 -45
  422. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -1
  423. package/dist/services/document-service/params.js +11 -5
  424. package/dist/services/document-service/params.js.map +1 -1
  425. package/dist/services/document-service/params.mjs +10 -6
  426. package/dist/services/document-service/params.mjs.map +1 -1
  427. package/dist/services/document-service/repository.d.ts.map +1 -1
  428. package/dist/services/document-service/repository.js +354 -319
  429. package/dist/services/document-service/repository.js.map +1 -1
  430. package/dist/services/document-service/repository.mjs +353 -320
  431. package/dist/services/document-service/repository.mjs.map +1 -1
  432. package/dist/services/document-service/transform/data.js +22 -12
  433. package/dist/services/document-service/transform/data.js.map +1 -1
  434. package/dist/services/document-service/transform/data.mjs +21 -13
  435. package/dist/services/document-service/transform/data.mjs.map +1 -1
  436. package/dist/services/document-service/transform/fields.js +26 -17
  437. package/dist/services/document-service/transform/fields.js.map +1 -1
  438. package/dist/services/document-service/transform/fields.mjs +25 -18
  439. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  440. package/dist/services/document-service/transform/id-map.d.ts +1 -1
  441. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  442. package/dist/services/document-service/transform/id-map.js +115 -77
  443. package/dist/services/document-service/transform/id-map.js.map +1 -1
  444. package/dist/services/document-service/transform/id-map.mjs +114 -78
  445. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  446. package/dist/services/document-service/transform/id-transform.d.ts +1 -1
  447. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  448. package/dist/services/document-service/transform/id-transform.js +37 -29
  449. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  450. package/dist/services/document-service/transform/id-transform.mjs +36 -30
  451. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  452. package/dist/services/document-service/transform/populate.js +23 -18
  453. package/dist/services/document-service/transform/populate.js.map +1 -1
  454. package/dist/services/document-service/transform/populate.mjs +22 -19
  455. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  456. package/dist/services/document-service/transform/query.js +11 -6
  457. package/dist/services/document-service/transform/query.js.map +1 -1
  458. package/dist/services/document-service/transform/query.mjs +10 -7
  459. package/dist/services/document-service/transform/query.mjs.map +1 -1
  460. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +1 -1
  461. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  462. package/dist/services/document-service/transform/relations/extract/data-ids.js +70 -54
  463. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  464. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +69 -55
  465. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  466. package/dist/services/document-service/transform/relations/transform/data-ids.js +96 -72
  467. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  468. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +95 -73
  469. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  470. package/dist/services/document-service/transform/relations/transform/default-locale.js +47 -29
  471. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
  472. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +46 -30
  473. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
  474. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  475. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  476. package/dist/services/document-service/transform/relations/utils/dp.js +52 -26
  477. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  478. package/dist/services/document-service/transform/relations/utils/dp.mjs +51 -27
  479. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  480. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +1 -1
  481. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  482. package/dist/services/document-service/transform/relations/utils/i18n.js +20 -18
  483. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  484. package/dist/services/document-service/transform/relations/utils/i18n.mjs +19 -21
  485. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  486. package/dist/services/document-service/transform/relations/utils/map-relation.js +116 -73
  487. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  488. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +115 -75
  489. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  490. package/dist/services/document-service/utils/bidirectional-relations.d.ts +95 -0
  491. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -0
  492. package/dist/services/document-service/utils/bidirectional-relations.js +148 -0
  493. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -0
  494. package/dist/services/document-service/utils/bidirectional-relations.mjs +145 -0
  495. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -0
  496. package/dist/services/document-service/utils/populate.d.ts +1 -1
  497. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  498. package/dist/services/document-service/utils/populate.js +66 -42
  499. package/dist/services/document-service/utils/populate.js.map +1 -1
  500. package/dist/services/document-service/utils/populate.mjs +65 -43
  501. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  502. package/dist/services/document-service/utils/unidirectional-relations.d.ts +1 -1
  503. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  504. package/dist/services/document-service/utils/unidirectional-relations.js +109 -62
  505. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  506. package/dist/services/document-service/utils/unidirectional-relations.mjs +108 -64
  507. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  508. package/dist/services/entity-service/index.js +230 -161
  509. package/dist/services/entity-service/index.js.map +1 -1
  510. package/dist/services/entity-service/index.mjs +229 -160
  511. package/dist/services/entity-service/index.mjs.map +1 -1
  512. package/dist/services/entity-validator/blocks-validator.js +135 -103
  513. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  514. package/dist/services/entity-validator/blocks-validator.mjs +134 -104
  515. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  516. package/dist/services/entity-validator/index.d.ts +1 -1
  517. package/dist/services/entity-validator/index.d.ts.map +1 -1
  518. package/dist/services/entity-validator/index.js +362 -367
  519. package/dist/services/entity-validator/index.js.map +1 -1
  520. package/dist/services/entity-validator/index.mjs +358 -364
  521. package/dist/services/entity-validator/index.mjs.map +1 -1
  522. package/dist/services/entity-validator/validators.js +268 -210
  523. package/dist/services/entity-validator/validators.js.map +1 -1
  524. package/dist/services/entity-validator/validators.mjs +267 -216
  525. package/dist/services/entity-validator/validators.mjs.map +1 -1
  526. package/dist/services/errors.js +65 -65
  527. package/dist/services/errors.js.map +1 -1
  528. package/dist/services/errors.mjs +64 -66
  529. package/dist/services/errors.mjs.map +1 -1
  530. package/dist/services/event-hub.js +82 -69
  531. package/dist/services/event-hub.js.map +1 -1
  532. package/dist/services/event-hub.mjs +81 -71
  533. package/dist/services/event-hub.mjs.map +1 -1
  534. package/dist/services/features.js +19 -14
  535. package/dist/services/features.js.map +1 -1
  536. package/dist/services/features.mjs +18 -15
  537. package/dist/services/features.mjs.map +1 -1
  538. package/dist/services/fs.js +41 -40
  539. package/dist/services/fs.js.map +1 -1
  540. package/dist/services/fs.mjs +40 -39
  541. package/dist/services/fs.mjs.map +1 -1
  542. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  543. package/dist/services/metrics/admin-user-hash.js +13 -11
  544. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  545. package/dist/services/metrics/admin-user-hash.mjs +12 -10
  546. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  547. package/dist/services/metrics/index.js +46 -40
  548. package/dist/services/metrics/index.js.map +1 -1
  549. package/dist/services/metrics/index.mjs +45 -42
  550. package/dist/services/metrics/index.mjs.map +1 -1
  551. package/dist/services/metrics/is-truthy.js +13 -6
  552. package/dist/services/metrics/is-truthy.js.map +1 -1
  553. package/dist/services/metrics/is-truthy.mjs +12 -6
  554. package/dist/services/metrics/is-truthy.mjs.map +1 -1
  555. package/dist/services/metrics/middleware.d.ts.map +1 -1
  556. package/dist/services/metrics/middleware.js +37 -22
  557. package/dist/services/metrics/middleware.js.map +1 -1
  558. package/dist/services/metrics/middleware.mjs +36 -24
  559. package/dist/services/metrics/middleware.mjs.map +1 -1
  560. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  561. package/dist/services/metrics/rate-limiter.js +24 -19
  562. package/dist/services/metrics/rate-limiter.js.map +1 -1
  563. package/dist/services/metrics/rate-limiter.mjs +23 -21
  564. package/dist/services/metrics/rate-limiter.mjs.map +1 -1
  565. package/dist/services/metrics/sender.d.ts.map +1 -1
  566. package/dist/services/metrics/sender.js +78 -69
  567. package/dist/services/metrics/sender.js.map +1 -1
  568. package/dist/services/metrics/sender.mjs +77 -64
  569. package/dist/services/metrics/sender.mjs.map +1 -1
  570. package/dist/services/query-params.js +13 -10
  571. package/dist/services/query-params.js.map +1 -1
  572. package/dist/services/query-params.mjs +12 -12
  573. package/dist/services/query-params.mjs.map +1 -1
  574. package/dist/services/reloader.js +35 -32
  575. package/dist/services/reloader.js.map +1 -1
  576. package/dist/services/reloader.mjs +34 -33
  577. package/dist/services/reloader.mjs.map +1 -1
  578. package/dist/services/request-context.js +11 -8
  579. package/dist/services/request-context.js.map +1 -1
  580. package/dist/services/request-context.mjs +10 -10
  581. package/dist/services/request-context.mjs.map +1 -1
  582. package/dist/services/server/admin-api.js +11 -10
  583. package/dist/services/server/admin-api.js.map +1 -1
  584. package/dist/services/server/admin-api.mjs +10 -11
  585. package/dist/services/server/admin-api.mjs.map +1 -1
  586. package/dist/services/server/api.js +33 -27
  587. package/dist/services/server/api.js.map +1 -1
  588. package/dist/services/server/api.mjs +32 -26
  589. package/dist/services/server/api.mjs.map +1 -1
  590. package/dist/services/server/compose-endpoint.js +116 -105
  591. package/dist/services/server/compose-endpoint.js.map +1 -1
  592. package/dist/services/server/compose-endpoint.mjs +115 -105
  593. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  594. package/dist/services/server/content-api.js +11 -9
  595. package/dist/services/server/content-api.js.map +1 -1
  596. package/dist/services/server/content-api.mjs +10 -10
  597. package/dist/services/server/content-api.mjs.map +1 -1
  598. package/dist/services/server/http-server.js +48 -44
  599. package/dist/services/server/http-server.js.map +1 -1
  600. package/dist/services/server/http-server.mjs +47 -43
  601. package/dist/services/server/http-server.mjs.map +1 -1
  602. package/dist/services/server/index.js +85 -82
  603. package/dist/services/server/index.js.map +1 -1
  604. package/dist/services/server/index.mjs +84 -81
  605. package/dist/services/server/index.mjs.map +1 -1
  606. package/dist/services/server/koa.js +49 -47
  607. package/dist/services/server/koa.js.map +1 -1
  608. package/dist/services/server/koa.mjs +48 -44
  609. package/dist/services/server/koa.mjs.map +1 -1
  610. package/dist/services/server/middleware.js +86 -82
  611. package/dist/services/server/middleware.js.map +1 -1
  612. package/dist/services/server/middleware.mjs +85 -82
  613. package/dist/services/server/middleware.mjs.map +1 -1
  614. package/dist/services/server/policy.js +24 -17
  615. package/dist/services/server/policy.js.map +1 -1
  616. package/dist/services/server/policy.mjs +23 -18
  617. package/dist/services/server/policy.mjs.map +1 -1
  618. package/dist/services/server/register-middlewares.js +68 -61
  619. package/dist/services/server/register-middlewares.js.map +1 -1
  620. package/dist/services/server/register-middlewares.mjs +67 -63
  621. package/dist/services/server/register-middlewares.mjs.map +1 -1
  622. package/dist/services/server/register-routes.js +90 -67
  623. package/dist/services/server/register-routes.js.map +1 -1
  624. package/dist/services/server/register-routes.mjs +89 -67
  625. package/dist/services/server/register-routes.mjs.map +1 -1
  626. package/dist/services/server/routing.js +94 -81
  627. package/dist/services/server/routing.js.map +1 -1
  628. package/dist/services/server/routing.mjs +93 -81
  629. package/dist/services/server/routing.mjs.map +1 -1
  630. package/dist/services/utils/dynamic-zones.js +13 -14
  631. package/dist/services/utils/dynamic-zones.js.map +1 -1
  632. package/dist/services/utils/dynamic-zones.mjs +12 -16
  633. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  634. package/dist/services/webhook-runner.js +124 -122
  635. package/dist/services/webhook-runner.js.map +1 -1
  636. package/dist/services/webhook-runner.mjs +123 -121
  637. package/dist/services/webhook-runner.mjs.map +1 -1
  638. package/dist/services/webhook-store.js +132 -99
  639. package/dist/services/webhook-store.js.map +1 -1
  640. package/dist/services/webhook-store.mjs +131 -101
  641. package/dist/services/webhook-store.mjs.map +1 -1
  642. package/dist/services/worker-queue.js +44 -49
  643. package/dist/services/worker-queue.js.map +1 -1
  644. package/dist/services/worker-queue.mjs +43 -49
  645. package/dist/services/worker-queue.mjs.map +1 -1
  646. package/dist/utils/convert-custom-field-type.js +17 -20
  647. package/dist/utils/convert-custom-field-type.js.map +1 -1
  648. package/dist/utils/convert-custom-field-type.mjs +16 -21
  649. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  650. package/dist/utils/cron.js +64 -30
  651. package/dist/utils/cron.js.map +1 -1
  652. package/dist/utils/cron.mjs +63 -31
  653. package/dist/utils/cron.mjs.map +1 -1
  654. package/dist/utils/fetch.js +24 -18
  655. package/dist/utils/fetch.js.map +1 -1
  656. package/dist/utils/fetch.mjs +23 -19
  657. package/dist/utils/fetch.mjs.map +1 -1
  658. package/dist/utils/filepath-to-prop-path.js +20 -28
  659. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  660. package/dist/utils/filepath-to-prop-path.mjs +19 -26
  661. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  662. package/dist/utils/is-initialized.js +21 -12
  663. package/dist/utils/is-initialized.js.map +1 -1
  664. package/dist/utils/is-initialized.mjs +20 -13
  665. package/dist/utils/is-initialized.mjs.map +1 -1
  666. package/dist/utils/lifecycles.js +6 -5
  667. package/dist/utils/lifecycles.js.map +1 -1
  668. package/dist/utils/lifecycles.mjs +5 -6
  669. package/dist/utils/lifecycles.mjs.map +1 -1
  670. package/dist/utils/load-config-file.js +40 -38
  671. package/dist/utils/load-config-file.js.map +1 -1
  672. package/dist/utils/load-config-file.mjs +39 -36
  673. package/dist/utils/load-config-file.mjs.map +1 -1
  674. package/dist/utils/load-files.js +40 -35
  675. package/dist/utils/load-files.js.map +1 -1
  676. package/dist/utils/load-files.mjs +39 -32
  677. package/dist/utils/load-files.mjs.map +1 -1
  678. package/dist/utils/open-browser.js +8 -8
  679. package/dist/utils/open-browser.js.map +1 -1
  680. package/dist/utils/open-browser.mjs +7 -7
  681. package/dist/utils/open-browser.mjs.map +1 -1
  682. package/dist/utils/resolve-working-dirs.js +23 -10
  683. package/dist/utils/resolve-working-dirs.js.map +1 -1
  684. package/dist/utils/resolve-working-dirs.mjs +22 -9
  685. package/dist/utils/resolve-working-dirs.mjs.map +1 -1
  686. package/dist/utils/signals.js +20 -14
  687. package/dist/utils/signals.js.map +1 -1
  688. package/dist/utils/signals.mjs +19 -15
  689. package/dist/utils/signals.mjs.map +1 -1
  690. package/dist/utils/startup-logger.d.ts.map +1 -1
  691. package/dist/utils/startup-logger.js +107 -78
  692. package/dist/utils/startup-logger.js.map +1 -1
  693. package/dist/utils/startup-logger.mjs +106 -75
  694. package/dist/utils/startup-logger.mjs.map +1 -1
  695. package/dist/utils/transform-content-types-to-models.js +350 -261
  696. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  697. package/dist/utils/transform-content-types-to-models.mjs +349 -269
  698. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  699. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  700. package/dist/utils/update-notifier/index.js +68 -73
  701. package/dist/utils/update-notifier/index.js.map +1 -1
  702. package/dist/utils/update-notifier/index.mjs +67 -67
  703. package/dist/utils/update-notifier/index.mjs.map +1 -1
  704. package/package.json +25 -26
@@ -1,69 +1,116 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const fp = require("lodash/fp");
4
- const load = async (uid, { oldVersions, newVersions }) => {
5
- const updates = [];
6
- await strapi.db.transaction(async ({ trx }) => {
7
- const contentTypes = Object.values(strapi.contentTypes);
8
- const components = Object.values(strapi.components);
9
- for (const model of [...contentTypes, ...components]) {
10
- const dbModel = strapi.db.metadata.get(model.uid);
11
- for (const attribute of Object.values(dbModel.attributes)) {
12
- if (attribute.type !== "relation" || attribute.target !== uid || attribute.inversedBy || attribute.mappedBy) {
13
- continue;
1
+ 'use strict';
2
+
3
+ var fp = require('lodash/fp');
4
+
5
+ /**
6
+ * Loads lingering relations that need to be updated when overriding a published or draft entry.
7
+ * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.
8
+ * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.
9
+ */ const load = async (uid, { oldVersions, newVersions })=>{
10
+ const updates = [];
11
+ // Iterate all components and content types to find relations that need to be updated
12
+ await strapi.db.transaction(async ({ trx })=>{
13
+ const contentTypes = Object.values(strapi.contentTypes);
14
+ const components = Object.values(strapi.components);
15
+ for (const model of [
16
+ ...contentTypes,
17
+ ...components
18
+ ]){
19
+ const dbModel = strapi.db.metadata.get(model.uid);
20
+ for (const attribute of Object.values(dbModel.attributes)){
21
+ /**
22
+ * Only consider unidirectional relations
23
+ */ if (attribute.type !== 'relation' || attribute.target !== uid || attribute.inversedBy || attribute.mappedBy) {
24
+ continue;
25
+ }
26
+ // TODO: joinColumn relations
27
+ const joinTable = attribute.joinTable;
28
+ if (!joinTable) {
29
+ continue;
30
+ }
31
+ const { name: sourceColumnName } = joinTable.joinColumn;
32
+ const { name: targetColumnName } = joinTable.inverseJoinColumn;
33
+ /**
34
+ * Load all relations that need to be updated
35
+ */ // NOTE: when the model has draft and publish, we can assume relation are only draft to draft & published to published
36
+ const ids = oldVersions.map((entry)=>entry.id);
37
+ const oldVersionsRelations = await strapi.db.getConnection().select('*').from(joinTable.name).whereIn(targetColumnName, ids).transacting(trx);
38
+ if (oldVersionsRelations.length > 0) {
39
+ updates.push({
40
+ joinTable,
41
+ relations: oldVersionsRelations
42
+ });
43
+ }
44
+ /**
45
+ * if publishing
46
+ * if published version exists
47
+ * updated published versions links
48
+ * else
49
+ * create link to newly published version
50
+ *
51
+ * if discarding
52
+ * if published version link exists & not draft version link
53
+ * create link to new draft version
54
+ */ if (!model.options?.draftAndPublish) {
55
+ const ids = newVersions.map((entry)=>entry.id);
56
+ const newVersionsRelations = await strapi.db.getConnection().select('*').from(joinTable.name).whereIn(targetColumnName, ids).transacting(trx);
57
+ if (newVersionsRelations.length > 0) {
58
+ // when publishing a draft that doesn't have a published version yet,
59
+ // copy the links to the draft over to the published version
60
+ // when discarding a published version, if no drafts exists
61
+ const discardToAdd = newVersionsRelations.filter((relation)=>{
62
+ const matchingOldVerion = oldVersionsRelations.find((oldRelation)=>{
63
+ return oldRelation[sourceColumnName] === relation[sourceColumnName];
64
+ });
65
+ return !matchingOldVerion;
66
+ }).map(fp.omit('id'));
67
+ updates.push({
68
+ joinTable,
69
+ relations: discardToAdd
70
+ });
71
+ }
72
+ }
73
+ }
14
74
  }
15
- const joinTable = attribute.joinTable;
16
- if (!joinTable) {
17
- continue;
18
- }
19
- const { name: sourceColumnName } = joinTable.joinColumn;
20
- const { name: targetColumnName } = joinTable.inverseJoinColumn;
21
- const ids = oldVersions.map((entry) => entry.id);
22
- const oldVersionsRelations = await strapi.db.getConnection().select("*").from(joinTable.name).whereIn(targetColumnName, ids).transacting(trx);
23
- if (oldVersionsRelations.length > 0) {
24
- updates.push({ joinTable, relations: oldVersionsRelations });
25
- }
26
- if (!model.options?.draftAndPublish) {
27
- const ids2 = newVersions.map((entry) => entry.id);
28
- const newVersionsRelations = await strapi.db.getConnection().select("*").from(joinTable.name).whereIn(targetColumnName, ids2).transacting(trx);
29
- if (newVersionsRelations.length > 0) {
30
- const discardToAdd = newVersionsRelations.filter((relation) => {
31
- const matchingOldVerion = oldVersionsRelations.find((oldRelation) => {
32
- return oldRelation[sourceColumnName] === relation[sourceColumnName];
33
- });
34
- return !matchingOldVerion;
35
- }).map(fp.omit("id"));
36
- updates.push({ joinTable, relations: discardToAdd });
37
- }
38
- }
39
- }
40
- }
41
- });
42
- return updates;
75
+ });
76
+ return updates;
43
77
  };
44
- const sync = async (oldEntries, newEntries, oldRelations) => {
45
- const newEntryByLocale = fp.keyBy("locale", newEntries);
46
- const oldEntriesMap = oldEntries.reduce(
47
- (acc, entry) => {
48
- const newEntry = newEntryByLocale[entry.locale];
49
- if (!newEntry)
78
+ /**
79
+ * Updates uni directional relations to target the right entries when overriding published or draft entries.
80
+ *
81
+ * @param oldEntries The old entries that are being overridden
82
+ * @param newEntries The new entries that are overriding the old ones
83
+ * @param oldRelations The relations that were previously loaded with `load` @see load
84
+ */ const sync = async (oldEntries, newEntries, oldRelations)=>{
85
+ /**
86
+ * Create a map of old entry ids to new entry ids
87
+ *
88
+ * Will be used to update the relation target ids
89
+ */ const newEntryByLocale = fp.keyBy('locale', newEntries);
90
+ const oldEntriesMap = oldEntries.reduce((acc, entry)=>{
91
+ const newEntry = newEntryByLocale[entry.locale];
92
+ if (!newEntry) return acc;
93
+ acc[entry.id] = newEntry.id;
50
94
  return acc;
51
- acc[entry.id] = newEntry.id;
52
- return acc;
53
- },
54
- {}
55
- );
56
- await strapi.db.transaction(async ({ trx }) => {
57
- for (const { joinTable, relations } of oldRelations) {
58
- const column = joinTable.inverseJoinColumn.name;
59
- const newRelations = relations.map((relation) => {
60
- const newId = oldEntriesMap[relation[column]];
61
- return { ...relation, [column]: newId };
62
- });
63
- await trx.batchInsert(joinTable.name, newRelations, 1e3);
64
- }
65
- });
95
+ }, {});
96
+ await strapi.db.transaction(async ({ trx })=>{
97
+ // Iterate old relations that are deleted and insert the new ones
98
+ for (const { joinTable, relations } of oldRelations){
99
+ // Update old ids with the new ones
100
+ const column = joinTable.inverseJoinColumn.name;
101
+ const newRelations = relations.map((relation)=>{
102
+ const newId = oldEntriesMap[relation[column]];
103
+ return {
104
+ ...relation,
105
+ [column]: newId
106
+ };
107
+ });
108
+ // Insert those relations into the join table
109
+ await trx.batchInsert(joinTable.name, newRelations, 1000);
110
+ }
111
+ });
66
112
  };
113
+
67
114
  exports.load = load;
68
115
  exports.sync = sync;
69
116
  //# sourceMappingURL=unidirectional-relations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unidirectional-relations.js","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport { keyBy, omit } from 'lodash/fp';\n\nimport { UID, Schema } from '@strapi/types';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\n/**\n * Loads lingering relations that need to be updated when overriding a published or draft entry.\n * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.\n * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.\n */\nconst load = async (uid: UID.ContentType, { oldVersions, newVersions }: LoadContext) => {\n const updates = [] as any;\n\n // Iterate all components and content types to find relations that need to be updated\n await strapi.db.transaction(async ({ trx }) => {\n const contentTypes = Object.values(strapi.contentTypes) as Schema.ContentType[];\n const components = Object.values(strapi.components) as Schema.Component[];\n\n for (const model of [...contentTypes, ...components]) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as any) {\n /**\n * Only consider unidirectional relations\n */\n if (\n attribute.type !== 'relation' ||\n attribute.target !== uid ||\n attribute.inversedBy ||\n attribute.mappedBy\n ) {\n continue;\n }\n\n // TODO: joinColumn relations\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: sourceColumnName } = joinTable.joinColumn;\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n /**\n * Load all relations that need to be updated\n */\n // NOTE: when the model has draft and publish, we can assume relation are only draft to draft & published to published\n const ids = oldVersions.map((entry) => entry.id);\n\n const oldVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (oldVersionsRelations.length > 0) {\n updates.push({ joinTable, relations: oldVersionsRelations });\n }\n\n /**\n * if publishing\n * if published version exists\n * updated published versions links\n * else\n * create link to newly published version\n *\n * if discarding\n * if published version link exists & not draft version link\n * create link to new draft version\n */\n\n if (!model.options?.draftAndPublish) {\n const ids = newVersions.map((entry) => entry.id);\n\n const newVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (newVersionsRelations.length > 0) {\n // when publishing a draft that doesn't have a published version yet,\n // copy the links to the draft over to the published version\n // when discarding a published version, if no drafts exists\n const discardToAdd = newVersionsRelations\n .filter((relation) => {\n const matchingOldVerion = oldVersionsRelations.find((oldRelation) => {\n return oldRelation[sourceColumnName] === relation[sourceColumnName];\n });\n\n return !matchingOldVerion;\n })\n .map(omit('id'));\n\n updates.push({ joinTable, relations: discardToAdd });\n }\n }\n }\n }\n });\n\n return updates;\n};\n\n/**\n * Updates uni directional relations to target the right entries when overriding published or draft entries.\n *\n * @param oldEntries The old entries that are being overridden\n * @param newEntries The new entries that are overriding the old ones\n * @param oldRelations The relations that were previously loaded with `load` @see load\n */\nconst sync = async (\n oldEntries: { id: string; locale: string }[],\n newEntries: { id: string; locale: string }[],\n oldRelations: { joinTable: any; relations: any[] }[]\n) => {\n /**\n * Create a map of old entry ids to new entry ids\n *\n * Will be used to update the relation target ids\n */\n const newEntryByLocale = keyBy('locale', newEntries);\n const oldEntriesMap = oldEntries.reduce(\n (acc, entry) => {\n const newEntry = newEntryByLocale[entry.locale];\n if (!newEntry) return acc;\n acc[entry.id] = newEntry.id;\n return acc;\n },\n {} as Record<string, string>\n );\n\n await strapi.db.transaction(async ({ trx }) => {\n // Iterate old relations that are deleted and insert the new ones\n for (const { joinTable, relations } of oldRelations) {\n // Update old ids with the new ones\n const column = joinTable.inverseJoinColumn.name;\n\n const newRelations = relations.map((relation) => {\n const newId = oldEntriesMap[relation[column]];\n return { ...relation, [column]: newId };\n });\n\n // Insert those relations into the join table\n await trx.batchInsert(joinTable.name, newRelations, 1000);\n }\n });\n};\n\nexport { load, sync };\n"],"names":["ids","omit","keyBy"],"mappings":";;;AAeA,MAAM,OAAO,OAAO,KAAsB,EAAE,aAAa,kBAA+B;AACtF,QAAM,UAAU,CAAA;AAGhB,QAAM,OAAO,GAAG,YAAY,OAAO,EAAE,UAAU;AAC7C,UAAM,eAAe,OAAO,OAAO,OAAO,YAAY;AACtD,UAAM,aAAa,OAAO,OAAO,OAAO,UAAU;AAElD,eAAW,SAAS,CAAC,GAAG,cAAc,GAAG,UAAU,GAAG;AACpD,YAAM,UAAU,OAAO,GAAG,SAAS,IAAI,MAAM,GAAG;AAEhD,iBAAW,aAAa,OAAO,OAAO,QAAQ,UAAU,GAAU;AAK9D,YAAA,UAAU,SAAS,cACnB,UAAU,WAAW,OACrB,UAAU,cACV,UAAU,UACV;AACA;AAAA,QACF;AAGA,cAAM,YAAY,UAAU;AAC5B,YAAI,CAAC,WAAW;AACd;AAAA,QACF;AAEA,cAAM,EAAE,MAAM,qBAAqB,UAAU;AAC7C,cAAM,EAAE,MAAM,qBAAqB,UAAU;AAM7C,cAAM,MAAM,YAAY,IAAI,CAAC,UAAU,MAAM,EAAE;AAE/C,cAAM,uBAAuB,MAAM,OAAO,GACvC,gBACA,OAAO,GAAG,EACV,KAAK,UAAU,IAAI,EACnB,QAAQ,kBAAkB,GAAG,EAC7B,YAAY,GAAG;AAEd,YAAA,qBAAqB,SAAS,GAAG;AACnC,kBAAQ,KAAK,EAAE,WAAW,WAAW,qBAAsB,CAAA;AAAA,QAC7D;AAcI,YAAA,CAAC,MAAM,SAAS,iBAAiB;AACnC,gBAAMA,OAAM,YAAY,IAAI,CAAC,UAAU,MAAM,EAAE;AAE/C,gBAAM,uBAAuB,MAAM,OAAO,GACvC,gBACA,OAAO,GAAG,EACV,KAAK,UAAU,IAAI,EACnB,QAAQ,kBAAkBA,IAAG,EAC7B,YAAY,GAAG;AAEd,cAAA,qBAAqB,SAAS,GAAG;AAInC,kBAAM,eAAe,qBAClB,OAAO,CAAC,aAAa;AACpB,oBAAM,oBAAoB,qBAAqB,KAAK,CAAC,gBAAgB;AACnE,uBAAO,YAAY,gBAAgB,MAAM,SAAS,gBAAgB;AAAA,cAAA,CACnE;AAED,qBAAO,CAAC;AAAA,YACT,CAAA,EACA,IAAIC,QAAK,IAAI,CAAC;AAEjB,oBAAQ,KAAK,EAAE,WAAW,WAAW,aAAc,CAAA;AAAA,UACrD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EAAA,CACD;AAEM,SAAA;AACT;AASA,MAAM,OAAO,OACX,YACA,YACA,iBACG;AAMG,QAAA,mBAAmBC,GAAAA,MAAM,UAAU,UAAU;AACnD,QAAM,gBAAgB,WAAW;AAAA,IAC/B,CAAC,KAAK,UAAU;AACR,YAAA,WAAW,iBAAiB,MAAM,MAAM;AAC9C,UAAI,CAAC;AAAiB,eAAA;AAClB,UAAA,MAAM,EAAE,IAAI,SAAS;AAClB,aAAA;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EAAA;AAGH,QAAM,OAAO,GAAG,YAAY,OAAO,EAAE,UAAU;AAE7C,eAAW,EAAE,WAAW,UAAU,KAAK,cAAc;AAE7C,YAAA,SAAS,UAAU,kBAAkB;AAE3C,YAAM,eAAe,UAAU,IAAI,CAAC,aAAa;AAC/C,cAAM,QAAQ,cAAc,SAAS,MAAM,CAAC;AAC5C,eAAO,EAAE,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM;AAAA,MAAA,CACvC;AAGD,YAAM,IAAI,YAAY,UAAU,MAAM,cAAc,GAAI;AAAA,IAC1D;AAAA,EAAA,CACD;AACH;;;"}
1
+ {"version":3,"file":"unidirectional-relations.js","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport { keyBy, omit } from 'lodash/fp';\n\nimport type { UID, Schema } from '@strapi/types';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\n/**\n * Loads lingering relations that need to be updated when overriding a published or draft entry.\n * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.\n * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.\n */\nconst load = async (uid: UID.ContentType, { oldVersions, newVersions }: LoadContext) => {\n const updates = [] as any;\n\n // Iterate all components and content types to find relations that need to be updated\n await strapi.db.transaction(async ({ trx }) => {\n const contentTypes = Object.values(strapi.contentTypes) as Schema.ContentType[];\n const components = Object.values(strapi.components) as Schema.Component[];\n\n for (const model of [...contentTypes, ...components]) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as any) {\n /**\n * Only consider unidirectional relations\n */\n if (\n attribute.type !== 'relation' ||\n attribute.target !== uid ||\n attribute.inversedBy ||\n attribute.mappedBy\n ) {\n continue;\n }\n\n // TODO: joinColumn relations\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: sourceColumnName } = joinTable.joinColumn;\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n /**\n * Load all relations that need to be updated\n */\n // NOTE: when the model has draft and publish, we can assume relation are only draft to draft & published to published\n const ids = oldVersions.map((entry) => entry.id);\n\n const oldVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (oldVersionsRelations.length > 0) {\n updates.push({ joinTable, relations: oldVersionsRelations });\n }\n\n /**\n * if publishing\n * if published version exists\n * updated published versions links\n * else\n * create link to newly published version\n *\n * if discarding\n * if published version link exists & not draft version link\n * create link to new draft version\n */\n\n if (!model.options?.draftAndPublish) {\n const ids = newVersions.map((entry) => entry.id);\n\n const newVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (newVersionsRelations.length > 0) {\n // when publishing a draft that doesn't have a published version yet,\n // copy the links to the draft over to the published version\n // when discarding a published version, if no drafts exists\n const discardToAdd = newVersionsRelations\n .filter((relation) => {\n const matchingOldVerion = oldVersionsRelations.find((oldRelation) => {\n return oldRelation[sourceColumnName] === relation[sourceColumnName];\n });\n\n return !matchingOldVerion;\n })\n .map(omit('id'));\n\n updates.push({ joinTable, relations: discardToAdd });\n }\n }\n }\n }\n });\n\n return updates;\n};\n\n/**\n * Updates uni directional relations to target the right entries when overriding published or draft entries.\n *\n * @param oldEntries The old entries that are being overridden\n * @param newEntries The new entries that are overriding the old ones\n * @param oldRelations The relations that were previously loaded with `load` @see load\n */\nconst sync = async (\n oldEntries: { id: string; locale: string }[],\n newEntries: { id: string; locale: string }[],\n oldRelations: { joinTable: any; relations: any[] }[]\n) => {\n /**\n * Create a map of old entry ids to new entry ids\n *\n * Will be used to update the relation target ids\n */\n const newEntryByLocale = keyBy('locale', newEntries);\n const oldEntriesMap = oldEntries.reduce(\n (acc, entry) => {\n const newEntry = newEntryByLocale[entry.locale];\n if (!newEntry) return acc;\n acc[entry.id] = newEntry.id;\n return acc;\n },\n {} as Record<string, string>\n );\n\n await strapi.db.transaction(async ({ trx }) => {\n // Iterate old relations that are deleted and insert the new ones\n for (const { joinTable, relations } of oldRelations) {\n // Update old ids with the new ones\n const column = joinTable.inverseJoinColumn.name;\n\n const newRelations = relations.map((relation) => {\n const newId = oldEntriesMap[relation[column]];\n return { ...relation, [column]: newId };\n });\n\n // Insert those relations into the join table\n await trx.batchInsert(joinTable.name, newRelations, 1000);\n }\n });\n};\n\nexport { load, sync };\n"],"names":["load","uid","oldVersions","newVersions","updates","strapi","db","transaction","trx","contentTypes","Object","values","components","model","dbModel","metadata","get","attribute","attributes","type","target","inversedBy","mappedBy","joinTable","name","sourceColumnName","joinColumn","targetColumnName","inverseJoinColumn","ids","map","entry","id","oldVersionsRelations","getConnection","select","from","whereIn","transacting","length","push","relations","options","draftAndPublish","newVersionsRelations","discardToAdd","filter","relation","matchingOldVerion","find","oldRelation","omit","sync","oldEntries","newEntries","oldRelations","newEntryByLocale","keyBy","oldEntriesMap","reduce","acc","newEntry","locale","column","newRelations","newId","batchInsert"],"mappings":"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"}
@@ -1,69 +1,113 @@
1
- import { omit, keyBy } from "lodash/fp";
2
- const load = async (uid, { oldVersions, newVersions }) => {
3
- const updates = [];
4
- await strapi.db.transaction(async ({ trx }) => {
5
- const contentTypes = Object.values(strapi.contentTypes);
6
- const components = Object.values(strapi.components);
7
- for (const model of [...contentTypes, ...components]) {
8
- const dbModel = strapi.db.metadata.get(model.uid);
9
- for (const attribute of Object.values(dbModel.attributes)) {
10
- if (attribute.type !== "relation" || attribute.target !== uid || attribute.inversedBy || attribute.mappedBy) {
11
- continue;
1
+ import { omit, keyBy } from 'lodash/fp';
2
+
3
+ /**
4
+ * Loads lingering relations that need to be updated when overriding a published or draft entry.
5
+ * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.
6
+ * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.
7
+ */ const load = async (uid, { oldVersions, newVersions })=>{
8
+ const updates = [];
9
+ // Iterate all components and content types to find relations that need to be updated
10
+ await strapi.db.transaction(async ({ trx })=>{
11
+ const contentTypes = Object.values(strapi.contentTypes);
12
+ const components = Object.values(strapi.components);
13
+ for (const model of [
14
+ ...contentTypes,
15
+ ...components
16
+ ]){
17
+ const dbModel = strapi.db.metadata.get(model.uid);
18
+ for (const attribute of Object.values(dbModel.attributes)){
19
+ /**
20
+ * Only consider unidirectional relations
21
+ */ if (attribute.type !== 'relation' || attribute.target !== uid || attribute.inversedBy || attribute.mappedBy) {
22
+ continue;
23
+ }
24
+ // TODO: joinColumn relations
25
+ const joinTable = attribute.joinTable;
26
+ if (!joinTable) {
27
+ continue;
28
+ }
29
+ const { name: sourceColumnName } = joinTable.joinColumn;
30
+ const { name: targetColumnName } = joinTable.inverseJoinColumn;
31
+ /**
32
+ * Load all relations that need to be updated
33
+ */ // NOTE: when the model has draft and publish, we can assume relation are only draft to draft & published to published
34
+ const ids = oldVersions.map((entry)=>entry.id);
35
+ const oldVersionsRelations = await strapi.db.getConnection().select('*').from(joinTable.name).whereIn(targetColumnName, ids).transacting(trx);
36
+ if (oldVersionsRelations.length > 0) {
37
+ updates.push({
38
+ joinTable,
39
+ relations: oldVersionsRelations
40
+ });
41
+ }
42
+ /**
43
+ * if publishing
44
+ * if published version exists
45
+ * updated published versions links
46
+ * else
47
+ * create link to newly published version
48
+ *
49
+ * if discarding
50
+ * if published version link exists & not draft version link
51
+ * create link to new draft version
52
+ */ if (!model.options?.draftAndPublish) {
53
+ const ids = newVersions.map((entry)=>entry.id);
54
+ const newVersionsRelations = await strapi.db.getConnection().select('*').from(joinTable.name).whereIn(targetColumnName, ids).transacting(trx);
55
+ if (newVersionsRelations.length > 0) {
56
+ // when publishing a draft that doesn't have a published version yet,
57
+ // copy the links to the draft over to the published version
58
+ // when discarding a published version, if no drafts exists
59
+ const discardToAdd = newVersionsRelations.filter((relation)=>{
60
+ const matchingOldVerion = oldVersionsRelations.find((oldRelation)=>{
61
+ return oldRelation[sourceColumnName] === relation[sourceColumnName];
62
+ });
63
+ return !matchingOldVerion;
64
+ }).map(omit('id'));
65
+ updates.push({
66
+ joinTable,
67
+ relations: discardToAdd
68
+ });
69
+ }
70
+ }
71
+ }
12
72
  }
13
- const joinTable = attribute.joinTable;
14
- if (!joinTable) {
15
- continue;
16
- }
17
- const { name: sourceColumnName } = joinTable.joinColumn;
18
- const { name: targetColumnName } = joinTable.inverseJoinColumn;
19
- const ids = oldVersions.map((entry) => entry.id);
20
- const oldVersionsRelations = await strapi.db.getConnection().select("*").from(joinTable.name).whereIn(targetColumnName, ids).transacting(trx);
21
- if (oldVersionsRelations.length > 0) {
22
- updates.push({ joinTable, relations: oldVersionsRelations });
23
- }
24
- if (!model.options?.draftAndPublish) {
25
- const ids2 = newVersions.map((entry) => entry.id);
26
- const newVersionsRelations = await strapi.db.getConnection().select("*").from(joinTable.name).whereIn(targetColumnName, ids2).transacting(trx);
27
- if (newVersionsRelations.length > 0) {
28
- const discardToAdd = newVersionsRelations.filter((relation) => {
29
- const matchingOldVerion = oldVersionsRelations.find((oldRelation) => {
30
- return oldRelation[sourceColumnName] === relation[sourceColumnName];
31
- });
32
- return !matchingOldVerion;
33
- }).map(omit("id"));
34
- updates.push({ joinTable, relations: discardToAdd });
35
- }
36
- }
37
- }
38
- }
39
- });
40
- return updates;
73
+ });
74
+ return updates;
41
75
  };
42
- const sync = async (oldEntries, newEntries, oldRelations) => {
43
- const newEntryByLocale = keyBy("locale", newEntries);
44
- const oldEntriesMap = oldEntries.reduce(
45
- (acc, entry) => {
46
- const newEntry = newEntryByLocale[entry.locale];
47
- if (!newEntry)
76
+ /**
77
+ * Updates uni directional relations to target the right entries when overriding published or draft entries.
78
+ *
79
+ * @param oldEntries The old entries that are being overridden
80
+ * @param newEntries The new entries that are overriding the old ones
81
+ * @param oldRelations The relations that were previously loaded with `load` @see load
82
+ */ const sync = async (oldEntries, newEntries, oldRelations)=>{
83
+ /**
84
+ * Create a map of old entry ids to new entry ids
85
+ *
86
+ * Will be used to update the relation target ids
87
+ */ const newEntryByLocale = keyBy('locale', newEntries);
88
+ const oldEntriesMap = oldEntries.reduce((acc, entry)=>{
89
+ const newEntry = newEntryByLocale[entry.locale];
90
+ if (!newEntry) return acc;
91
+ acc[entry.id] = newEntry.id;
48
92
  return acc;
49
- acc[entry.id] = newEntry.id;
50
- return acc;
51
- },
52
- {}
53
- );
54
- await strapi.db.transaction(async ({ trx }) => {
55
- for (const { joinTable, relations } of oldRelations) {
56
- const column = joinTable.inverseJoinColumn.name;
57
- const newRelations = relations.map((relation) => {
58
- const newId = oldEntriesMap[relation[column]];
59
- return { ...relation, [column]: newId };
60
- });
61
- await trx.batchInsert(joinTable.name, newRelations, 1e3);
62
- }
63
- });
64
- };
65
- export {
66
- load,
67
- sync
93
+ }, {});
94
+ await strapi.db.transaction(async ({ trx })=>{
95
+ // Iterate old relations that are deleted and insert the new ones
96
+ for (const { joinTable, relations } of oldRelations){
97
+ // Update old ids with the new ones
98
+ const column = joinTable.inverseJoinColumn.name;
99
+ const newRelations = relations.map((relation)=>{
100
+ const newId = oldEntriesMap[relation[column]];
101
+ return {
102
+ ...relation,
103
+ [column]: newId
104
+ };
105
+ });
106
+ // Insert those relations into the join table
107
+ await trx.batchInsert(joinTable.name, newRelations, 1000);
108
+ }
109
+ });
68
110
  };
111
+
112
+ export { load, sync };
69
113
  //# sourceMappingURL=unidirectional-relations.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"unidirectional-relations.mjs","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport { keyBy, omit } from 'lodash/fp';\n\nimport { UID, Schema } from '@strapi/types';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\n/**\n * Loads lingering relations that need to be updated when overriding a published or draft entry.\n * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.\n * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.\n */\nconst load = async (uid: UID.ContentType, { oldVersions, newVersions }: LoadContext) => {\n const updates = [] as any;\n\n // Iterate all components and content types to find relations that need to be updated\n await strapi.db.transaction(async ({ trx }) => {\n const contentTypes = Object.values(strapi.contentTypes) as Schema.ContentType[];\n const components = Object.values(strapi.components) as Schema.Component[];\n\n for (const model of [...contentTypes, ...components]) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as any) {\n /**\n * Only consider unidirectional relations\n */\n if (\n attribute.type !== 'relation' ||\n attribute.target !== uid ||\n attribute.inversedBy ||\n attribute.mappedBy\n ) {\n continue;\n }\n\n // TODO: joinColumn relations\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: sourceColumnName } = joinTable.joinColumn;\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n /**\n * Load all relations that need to be updated\n */\n // NOTE: when the model has draft and publish, we can assume relation are only draft to draft & published to published\n const ids = oldVersions.map((entry) => entry.id);\n\n const oldVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (oldVersionsRelations.length > 0) {\n updates.push({ joinTable, relations: oldVersionsRelations });\n }\n\n /**\n * if publishing\n * if published version exists\n * updated published versions links\n * else\n * create link to newly published version\n *\n * if discarding\n * if published version link exists & not draft version link\n * create link to new draft version\n */\n\n if (!model.options?.draftAndPublish) {\n const ids = newVersions.map((entry) => entry.id);\n\n const newVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (newVersionsRelations.length > 0) {\n // when publishing a draft that doesn't have a published version yet,\n // copy the links to the draft over to the published version\n // when discarding a published version, if no drafts exists\n const discardToAdd = newVersionsRelations\n .filter((relation) => {\n const matchingOldVerion = oldVersionsRelations.find((oldRelation) => {\n return oldRelation[sourceColumnName] === relation[sourceColumnName];\n });\n\n return !matchingOldVerion;\n })\n .map(omit('id'));\n\n updates.push({ joinTable, relations: discardToAdd });\n }\n }\n }\n }\n });\n\n return updates;\n};\n\n/**\n * Updates uni directional relations to target the right entries when overriding published or draft entries.\n *\n * @param oldEntries The old entries that are being overridden\n * @param newEntries The new entries that are overriding the old ones\n * @param oldRelations The relations that were previously loaded with `load` @see load\n */\nconst sync = async (\n oldEntries: { id: string; locale: string }[],\n newEntries: { id: string; locale: string }[],\n oldRelations: { joinTable: any; relations: any[] }[]\n) => {\n /**\n * Create a map of old entry ids to new entry ids\n *\n * Will be used to update the relation target ids\n */\n const newEntryByLocale = keyBy('locale', newEntries);\n const oldEntriesMap = oldEntries.reduce(\n (acc, entry) => {\n const newEntry = newEntryByLocale[entry.locale];\n if (!newEntry) return acc;\n acc[entry.id] = newEntry.id;\n return acc;\n },\n {} as Record<string, string>\n );\n\n await strapi.db.transaction(async ({ trx }) => {\n // Iterate old relations that are deleted and insert the new ones\n for (const { joinTable, relations } of oldRelations) {\n // Update old ids with the new ones\n const column = joinTable.inverseJoinColumn.name;\n\n const newRelations = relations.map((relation) => {\n const newId = oldEntriesMap[relation[column]];\n return { ...relation, [column]: newId };\n });\n\n // Insert those relations into the join table\n await trx.batchInsert(joinTable.name, newRelations, 1000);\n }\n });\n};\n\nexport { load, sync };\n"],"names":["ids"],"mappings":";AAeA,MAAM,OAAO,OAAO,KAAsB,EAAE,aAAa,kBAA+B;AACtF,QAAM,UAAU,CAAA;AAGhB,QAAM,OAAO,GAAG,YAAY,OAAO,EAAE,UAAU;AAC7C,UAAM,eAAe,OAAO,OAAO,OAAO,YAAY;AACtD,UAAM,aAAa,OAAO,OAAO,OAAO,UAAU;AAElD,eAAW,SAAS,CAAC,GAAG,cAAc,GAAG,UAAU,GAAG;AACpD,YAAM,UAAU,OAAO,GAAG,SAAS,IAAI,MAAM,GAAG;AAEhD,iBAAW,aAAa,OAAO,OAAO,QAAQ,UAAU,GAAU;AAK9D,YAAA,UAAU,SAAS,cACnB,UAAU,WAAW,OACrB,UAAU,cACV,UAAU,UACV;AACA;AAAA,QACF;AAGA,cAAM,YAAY,UAAU;AAC5B,YAAI,CAAC,WAAW;AACd;AAAA,QACF;AAEA,cAAM,EAAE,MAAM,qBAAqB,UAAU;AAC7C,cAAM,EAAE,MAAM,qBAAqB,UAAU;AAM7C,cAAM,MAAM,YAAY,IAAI,CAAC,UAAU,MAAM,EAAE;AAE/C,cAAM,uBAAuB,MAAM,OAAO,GACvC,gBACA,OAAO,GAAG,EACV,KAAK,UAAU,IAAI,EACnB,QAAQ,kBAAkB,GAAG,EAC7B,YAAY,GAAG;AAEd,YAAA,qBAAqB,SAAS,GAAG;AACnC,kBAAQ,KAAK,EAAE,WAAW,WAAW,qBAAsB,CAAA;AAAA,QAC7D;AAcI,YAAA,CAAC,MAAM,SAAS,iBAAiB;AACnC,gBAAMA,OAAM,YAAY,IAAI,CAAC,UAAU,MAAM,EAAE;AAE/C,gBAAM,uBAAuB,MAAM,OAAO,GACvC,gBACA,OAAO,GAAG,EACV,KAAK,UAAU,IAAI,EACnB,QAAQ,kBAAkBA,IAAG,EAC7B,YAAY,GAAG;AAEd,cAAA,qBAAqB,SAAS,GAAG;AAInC,kBAAM,eAAe,qBAClB,OAAO,CAAC,aAAa;AACpB,oBAAM,oBAAoB,qBAAqB,KAAK,CAAC,gBAAgB;AACnE,uBAAO,YAAY,gBAAgB,MAAM,SAAS,gBAAgB;AAAA,cAAA,CACnE;AAED,qBAAO,CAAC;AAAA,YACT,CAAA,EACA,IAAI,KAAK,IAAI,CAAC;AAEjB,oBAAQ,KAAK,EAAE,WAAW,WAAW,aAAc,CAAA;AAAA,UACrD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EAAA,CACD;AAEM,SAAA;AACT;AASA,MAAM,OAAO,OACX,YACA,YACA,iBACG;AAMG,QAAA,mBAAmB,MAAM,UAAU,UAAU;AACnD,QAAM,gBAAgB,WAAW;AAAA,IAC/B,CAAC,KAAK,UAAU;AACR,YAAA,WAAW,iBAAiB,MAAM,MAAM;AAC9C,UAAI,CAAC;AAAiB,eAAA;AAClB,UAAA,MAAM,EAAE,IAAI,SAAS;AAClB,aAAA;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EAAA;AAGH,QAAM,OAAO,GAAG,YAAY,OAAO,EAAE,UAAU;AAE7C,eAAW,EAAE,WAAW,UAAU,KAAK,cAAc;AAE7C,YAAA,SAAS,UAAU,kBAAkB;AAE3C,YAAM,eAAe,UAAU,IAAI,CAAC,aAAa;AAC/C,cAAM,QAAQ,cAAc,SAAS,MAAM,CAAC;AAC5C,eAAO,EAAE,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM;AAAA,MAAA,CACvC;AAGD,YAAM,IAAI,YAAY,UAAU,MAAM,cAAc,GAAI;AAAA,IAC1D;AAAA,EAAA,CACD;AACH;"}
1
+ {"version":3,"file":"unidirectional-relations.mjs","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport { keyBy, omit } from 'lodash/fp';\n\nimport type { UID, Schema } from '@strapi/types';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\n/**\n * Loads lingering relations that need to be updated when overriding a published or draft entry.\n * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.\n * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.\n */\nconst load = async (uid: UID.ContentType, { oldVersions, newVersions }: LoadContext) => {\n const updates = [] as any;\n\n // Iterate all components and content types to find relations that need to be updated\n await strapi.db.transaction(async ({ trx }) => {\n const contentTypes = Object.values(strapi.contentTypes) as Schema.ContentType[];\n const components = Object.values(strapi.components) as Schema.Component[];\n\n for (const model of [...contentTypes, ...components]) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as any) {\n /**\n * Only consider unidirectional relations\n */\n if (\n attribute.type !== 'relation' ||\n attribute.target !== uid ||\n attribute.inversedBy ||\n attribute.mappedBy\n ) {\n continue;\n }\n\n // TODO: joinColumn relations\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: sourceColumnName } = joinTable.joinColumn;\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n /**\n * Load all relations that need to be updated\n */\n // NOTE: when the model has draft and publish, we can assume relation are only draft to draft & published to published\n const ids = oldVersions.map((entry) => entry.id);\n\n const oldVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (oldVersionsRelations.length > 0) {\n updates.push({ joinTable, relations: oldVersionsRelations });\n }\n\n /**\n * if publishing\n * if published version exists\n * updated published versions links\n * else\n * create link to newly published version\n *\n * if discarding\n * if published version link exists & not draft version link\n * create link to new draft version\n */\n\n if (!model.options?.draftAndPublish) {\n const ids = newVersions.map((entry) => entry.id);\n\n const newVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (newVersionsRelations.length > 0) {\n // when publishing a draft that doesn't have a published version yet,\n // copy the links to the draft over to the published version\n // when discarding a published version, if no drafts exists\n const discardToAdd = newVersionsRelations\n .filter((relation) => {\n const matchingOldVerion = oldVersionsRelations.find((oldRelation) => {\n return oldRelation[sourceColumnName] === relation[sourceColumnName];\n });\n\n return !matchingOldVerion;\n })\n .map(omit('id'));\n\n updates.push({ joinTable, relations: discardToAdd });\n }\n }\n }\n }\n });\n\n return updates;\n};\n\n/**\n * Updates uni directional relations to target the right entries when overriding published or draft entries.\n *\n * @param oldEntries The old entries that are being overridden\n * @param newEntries The new entries that are overriding the old ones\n * @param oldRelations The relations that were previously loaded with `load` @see load\n */\nconst sync = async (\n oldEntries: { id: string; locale: string }[],\n newEntries: { id: string; locale: string }[],\n oldRelations: { joinTable: any; relations: any[] }[]\n) => {\n /**\n * Create a map of old entry ids to new entry ids\n *\n * Will be used to update the relation target ids\n */\n const newEntryByLocale = keyBy('locale', newEntries);\n const oldEntriesMap = oldEntries.reduce(\n (acc, entry) => {\n const newEntry = newEntryByLocale[entry.locale];\n if (!newEntry) return acc;\n acc[entry.id] = newEntry.id;\n return acc;\n },\n {} as Record<string, string>\n );\n\n await strapi.db.transaction(async ({ trx }) => {\n // Iterate old relations that are deleted and insert the new ones\n for (const { joinTable, relations } of oldRelations) {\n // Update old ids with the new ones\n const column = joinTable.inverseJoinColumn.name;\n\n const newRelations = relations.map((relation) => {\n const newId = oldEntriesMap[relation[column]];\n return { ...relation, [column]: newId };\n });\n\n // Insert those relations into the join table\n await trx.batchInsert(joinTable.name, newRelations, 1000);\n }\n });\n};\n\nexport { load, sync };\n"],"names":["load","uid","oldVersions","newVersions","updates","strapi","db","transaction","trx","contentTypes","Object","values","components","model","dbModel","metadata","get","attribute","attributes","type","target","inversedBy","mappedBy","joinTable","name","sourceColumnName","joinColumn","targetColumnName","inverseJoinColumn","ids","map","entry","id","oldVersionsRelations","getConnection","select","from","whereIn","transacting","length","push","relations","options","draftAndPublish","newVersionsRelations","discardToAdd","filter","relation","matchingOldVerion","find","oldRelation","omit","sync","oldEntries","newEntries","oldRelations","newEntryByLocale","keyBy","oldEntriesMap","reduce","acc","newEntry","locale","column","newRelations","newId","batchInsert"],"mappings":";;AAUA;;;;IAKA,MAAMA,OAAO,OAAOC,GAAAA,EAAsB,EAAEC,WAAW,EAAEC,WAAW,EAAe,GAAA;AACjF,IAAA,MAAMC,UAAU,EAAE;;IAGlB,MAAMC,MAAAA,CAAOC,EAAE,CAACC,WAAW,CAAC,OAAO,EAAEC,GAAG,EAAE,GAAA;AACxC,QAAA,MAAMC,YAAeC,GAAAA,MAAAA,CAAOC,MAAM,CAACN,OAAOI,YAAY,CAAA;AACtD,QAAA,MAAMG,UAAaF,GAAAA,MAAAA,CAAOC,MAAM,CAACN,OAAOO,UAAU,CAAA;AAElD,QAAA,KAAK,MAAMC,KAAS,IAAA;AAAIJ,YAAAA,GAAAA,YAAAA;AAAiBG,YAAAA,GAAAA;SAAW,CAAE;YACpD,MAAME,OAAAA,GAAUT,OAAOC,EAAE,CAACS,QAAQ,CAACC,GAAG,CAACH,KAAAA,CAAMZ,GAAG,CAAA;AAEhD,YAAA,KAAK,MAAMgB,SAAaP,IAAAA,MAAAA,CAAOC,MAAM,CAACG,OAAAA,CAAQI,UAAU,CAAU,CAAA;AAChE;;AAEC,YACD,IACED,SAAAA,CAAUE,IAAI,KAAK,cACnBF,SAAUG,CAAAA,MAAM,KAAKnB,GAAAA,IACrBgB,SAAUI,CAAAA,UAAU,IACpBJ,SAAAA,CAAUK,QAAQ,EAClB;AACA,oBAAA;AACF;;gBAGA,MAAMC,SAAAA,GAAYN,UAAUM,SAAS;AACrC,gBAAA,IAAI,CAACA,SAAW,EAAA;AACd,oBAAA;AACF;AAEA,gBAAA,MAAM,EAAEC,IAAMC,EAAAA,gBAAgB,EAAE,GAAGF,UAAUG,UAAU;AACvD,gBAAA,MAAM,EAAEF,IAAMG,EAAAA,gBAAgB,EAAE,GAAGJ,UAAUK,iBAAiB;AAE9D;;AAEC;AAED,gBAAA,MAAMC,MAAM3B,WAAY4B,CAAAA,GAAG,CAAC,CAACC,KAAAA,GAAUA,MAAMC,EAAE,CAAA;gBAE/C,MAAMC,oBAAAA,GAAuB,MAAM5B,MAAOC,CAAAA,EAAE,CACzC4B,aAAa,EAAA,CACbC,MAAM,CAAC,GAAA,CAAA,CACPC,IAAI,CAACb,SAAAA,CAAUC,IAAI,CACnBa,CAAAA,OAAO,CAACV,gBAAkBE,EAAAA,GAAAA,CAAAA,CAC1BS,WAAW,CAAC9B,GAAAA,CAAAA;gBAEf,IAAIyB,oBAAAA,CAAqBM,MAAM,GAAG,CAAG,EAAA;AACnCnC,oBAAAA,OAAAA,CAAQoC,IAAI,CAAC;AAAEjB,wBAAAA,SAAAA;wBAAWkB,SAAWR,EAAAA;AAAqB,qBAAA,CAAA;AAC5D;AAEA;;;;;;;;;;AAUC,YAED,IAAI,CAACpB,KAAM6B,CAAAA,OAAO,EAAEC,eAAiB,EAAA;AACnC,oBAAA,MAAMd,MAAM1B,WAAY2B,CAAAA,GAAG,CAAC,CAACC,KAAAA,GAAUA,MAAMC,EAAE,CAAA;oBAE/C,MAAMY,oBAAAA,GAAuB,MAAMvC,MAAOC,CAAAA,EAAE,CACzC4B,aAAa,EAAA,CACbC,MAAM,CAAC,GAAA,CAAA,CACPC,IAAI,CAACb,SAAAA,CAAUC,IAAI,CACnBa,CAAAA,OAAO,CAACV,gBAAkBE,EAAAA,GAAAA,CAAAA,CAC1BS,WAAW,CAAC9B,GAAAA,CAAAA;oBAEf,IAAIoC,oBAAAA,CAAqBL,MAAM,GAAG,CAAG,EAAA;;;;AAInC,wBAAA,MAAMM,YAAeD,GAAAA,oBAAAA,CAClBE,MAAM,CAAC,CAACC,QAAAA,GAAAA;AACP,4BAAA,MAAMC,iBAAoBf,GAAAA,oBAAAA,CAAqBgB,IAAI,CAAC,CAACC,WAAAA,GAAAA;AACnD,gCAAA,OAAOA,WAAW,CAACzB,gBAAAA,CAAiB,KAAKsB,QAAQ,CAACtB,gBAAiB,CAAA;AACrE,6BAAA,CAAA;AAEA,4BAAA,OAAO,CAACuB,iBAAAA;yBAETlB,CAAAA,CAAAA,GAAG,CAACqB,IAAK,CAAA,IAAA,CAAA,CAAA;AAEZ/C,wBAAAA,OAAAA,CAAQoC,IAAI,CAAC;AAAEjB,4BAAAA,SAAAA;4BAAWkB,SAAWI,EAAAA;AAAa,yBAAA,CAAA;AACpD;AACF;AACF;AACF;AACF,KAAA,CAAA;IAEA,OAAOzC,OAAAA;AACT;AAEA;;;;;;AAMC,IACKgD,MAAAA,IAAAA,GAAO,OACXC,UAAAA,EACAC,UACAC,EAAAA,YAAAA,GAAAA;AAEA;;;;MAKA,MAAMC,gBAAmBC,GAAAA,KAAAA,CAAM,QAAUH,EAAAA,UAAAA,CAAAA;AACzC,IAAA,MAAMI,aAAgBL,GAAAA,UAAAA,CAAWM,MAAM,CACrC,CAACC,GAAK7B,EAAAA,KAAAA,GAAAA;AACJ,QAAA,MAAM8B,QAAWL,GAAAA,gBAAgB,CAACzB,KAAAA,CAAM+B,MAAM,CAAC;QAC/C,IAAI,CAACD,UAAU,OAAOD,GAAAA;AACtBA,QAAAA,GAAG,CAAC7B,KAAMC,CAAAA,EAAE,CAAC,GAAG6B,SAAS7B,EAAE;QAC3B,OAAO4B,GAAAA;AACT,KAAA,EACA,EAAC,CAAA;IAGH,MAAMvD,MAAAA,CAAOC,EAAE,CAACC,WAAW,CAAC,OAAO,EAAEC,GAAG,EAAE,GAAA;;AAExC,QAAA,KAAK,MAAM,EAAEe,SAAS,EAAEkB,SAAS,EAAE,IAAIc,YAAc,CAAA;;AAEnD,YAAA,MAAMQ,MAASxC,GAAAA,SAAAA,CAAUK,iBAAiB,CAACJ,IAAI;AAE/C,YAAA,MAAMwC,YAAevB,GAAAA,SAAAA,CAAUX,GAAG,CAAC,CAACiB,QAAAA,GAAAA;AAClC,gBAAA,MAAMkB,QAAQP,aAAa,CAACX,QAAQ,CAACgB,OAAO,CAAC;gBAC7C,OAAO;AAAE,oBAAA,GAAGhB,QAAQ;AAAE,oBAAA,CAACgB,SAASE;AAAM,iBAAA;AACxC,aAAA,CAAA;;AAGA,YAAA,MAAMzD,IAAI0D,WAAW,CAAC3C,SAAUC,CAAAA,IAAI,EAAEwC,YAAc,EAAA,IAAA,CAAA;AACtD;AACF,KAAA,CAAA;AACF;;;;"}