@strapi/core 0.0.0-experimental.6d27139261823fc4b18da9f3c10b271d5010dbf0 → 0.0.0-experimental.6dcc00cde430a8f928a482d5c989396386c42f54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (826) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +430 -403
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +429 -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.d.ts.map +1 -1
  38. package/dist/core-api/controller/index.js +64 -48
  39. package/dist/core-api/controller/index.js.map +1 -1
  40. package/dist/core-api/controller/index.mjs +63 -49
  41. package/dist/core-api/controller/index.mjs.map +1 -1
  42. package/dist/core-api/controller/single-type.js +41 -40
  43. package/dist/core-api/controller/single-type.js.map +1 -1
  44. package/dist/core-api/controller/single-type.mjs +40 -41
  45. package/dist/core-api/controller/single-type.mjs.map +1 -1
  46. package/dist/core-api/controller/transform.d.ts +3 -2
  47. package/dist/core-api/controller/transform.d.ts.map +1 -1
  48. package/dist/core-api/controller/transform.js +83 -64
  49. package/dist/core-api/controller/transform.js.map +1 -1
  50. package/dist/core-api/controller/transform.mjs +82 -65
  51. package/dist/core-api/controller/transform.mjs.map +1 -1
  52. package/dist/core-api/routes/index.d.ts +4 -22
  53. package/dist/core-api/routes/index.d.ts.map +1 -1
  54. package/dist/core-api/routes/index.js +205 -61
  55. package/dist/core-api/routes/index.js.map +1 -1
  56. package/dist/core-api/routes/index.mjs +185 -62
  57. package/dist/core-api/routes/index.mjs.map +1 -1
  58. package/dist/core-api/routes/validation/attributes.d.ts +244 -0
  59. package/dist/core-api/routes/validation/attributes.d.ts.map +1 -0
  60. package/dist/core-api/routes/validation/attributes.js +560 -0
  61. package/dist/core-api/routes/validation/attributes.js.map +1 -0
  62. package/dist/core-api/routes/validation/attributes.mjs +521 -0
  63. package/dist/core-api/routes/validation/attributes.mjs.map +1 -0
  64. package/dist/core-api/routes/validation/common.d.ts +105 -0
  65. package/dist/core-api/routes/validation/common.d.ts.map +1 -0
  66. package/dist/core-api/routes/validation/common.js +116 -0
  67. package/dist/core-api/routes/validation/common.js.map +1 -0
  68. package/dist/core-api/routes/validation/common.mjs +95 -0
  69. package/dist/core-api/routes/validation/common.mjs.map +1 -0
  70. package/dist/core-api/routes/validation/component.d.ts +34 -0
  71. package/dist/core-api/routes/validation/component.d.ts.map +1 -0
  72. package/dist/core-api/routes/validation/component.js +45 -0
  73. package/dist/core-api/routes/validation/component.js.map +1 -0
  74. package/dist/core-api/routes/validation/component.mjs +43 -0
  75. package/dist/core-api/routes/validation/component.mjs.map +1 -0
  76. package/dist/core-api/routes/validation/constants.d.ts +8 -0
  77. package/dist/core-api/routes/validation/constants.d.ts.map +1 -0
  78. package/dist/core-api/routes/validation/constants.js +18 -0
  79. package/dist/core-api/routes/validation/constants.js.map +1 -0
  80. package/dist/core-api/routes/validation/constants.mjs +16 -0
  81. package/dist/core-api/routes/validation/constants.mjs.map +1 -0
  82. package/dist/core-api/routes/validation/content-type.d.ts +128 -0
  83. package/dist/core-api/routes/validation/content-type.d.ts.map +1 -0
  84. package/dist/core-api/routes/validation/content-type.js +201 -0
  85. package/dist/core-api/routes/validation/content-type.js.map +1 -0
  86. package/dist/core-api/routes/validation/content-type.mjs +180 -0
  87. package/dist/core-api/routes/validation/content-type.mjs.map +1 -0
  88. package/dist/core-api/routes/validation/index.d.ts +5 -0
  89. package/dist/core-api/routes/validation/index.d.ts.map +1 -0
  90. package/dist/core-api/routes/validation/mappers.d.ts +105 -0
  91. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -0
  92. package/dist/core-api/routes/validation/mappers.js +238 -0
  93. package/dist/core-api/routes/validation/mappers.js.map +1 -0
  94. package/dist/core-api/routes/validation/mappers.mjs +214 -0
  95. package/dist/core-api/routes/validation/mappers.mjs.map +1 -0
  96. package/dist/core-api/routes/validation/utils.d.ts +47 -0
  97. package/dist/core-api/routes/validation/utils.d.ts.map +1 -0
  98. package/dist/core-api/routes/validation/utils.js +128 -0
  99. package/dist/core-api/routes/validation/utils.js.map +1 -0
  100. package/dist/core-api/routes/validation/utils.mjs +106 -0
  101. package/dist/core-api/routes/validation/utils.mjs.map +1 -0
  102. package/dist/core-api/service/collection-type.d.ts +2 -2
  103. package/dist/core-api/service/collection-type.js +73 -60
  104. package/dist/core-api/service/collection-type.js.map +1 -1
  105. package/dist/core-api/service/collection-type.mjs +72 -62
  106. package/dist/core-api/service/collection-type.mjs.map +1 -1
  107. package/dist/core-api/service/core-service.js +9 -8
  108. package/dist/core-api/service/core-service.js.map +1 -1
  109. package/dist/core-api/service/core-service.mjs +8 -9
  110. package/dist/core-api/service/core-service.mjs.map +1 -1
  111. package/dist/core-api/service/index.js +13 -13
  112. package/dist/core-api/service/index.js.map +1 -1
  113. package/dist/core-api/service/index.mjs +12 -14
  114. package/dist/core-api/service/index.mjs.map +1 -1
  115. package/dist/core-api/service/pagination.js +69 -43
  116. package/dist/core-api/service/pagination.js.map +1 -1
  117. package/dist/core-api/service/pagination.mjs +68 -47
  118. package/dist/core-api/service/pagination.mjs.map +1 -1
  119. package/dist/core-api/service/single-type.js +43 -39
  120. package/dist/core-api/service/single-type.js.map +1 -1
  121. package/dist/core-api/service/single-type.mjs +42 -41
  122. package/dist/core-api/service/single-type.mjs.map +1 -1
  123. package/dist/domain/content-type/index.d.ts.map +1 -1
  124. package/dist/domain/content-type/index.js +110 -99
  125. package/dist/domain/content-type/index.js.map +1 -1
  126. package/dist/domain/content-type/index.mjs +109 -99
  127. package/dist/domain/content-type/index.mjs.map +1 -1
  128. package/dist/domain/content-type/validator.js +84 -69
  129. package/dist/domain/content-type/validator.js.map +1 -1
  130. package/dist/domain/content-type/validator.mjs +83 -68
  131. package/dist/domain/content-type/validator.mjs.map +1 -1
  132. package/dist/domain/module/index.d.ts.map +1 -1
  133. package/dist/domain/module/index.js +112 -100
  134. package/dist/domain/module/index.js.map +1 -1
  135. package/dist/domain/module/index.mjs +111 -99
  136. package/dist/domain/module/index.mjs.map +1 -1
  137. package/dist/domain/module/validation.js +25 -20
  138. package/dist/domain/module/validation.js.map +1 -1
  139. package/dist/domain/module/validation.mjs +24 -21
  140. package/dist/domain/module/validation.mjs.map +1 -1
  141. package/dist/ee/index.d.ts +7 -0
  142. package/dist/ee/index.d.ts.map +1 -1
  143. package/dist/ee/index.js +197 -132
  144. package/dist/ee/index.js.map +1 -1
  145. package/dist/ee/index.mjs +196 -134
  146. package/dist/ee/index.mjs.map +1 -1
  147. package/dist/ee/license.d.ts +3 -1
  148. package/dist/ee/license.d.ts.map +1 -1
  149. package/dist/ee/license.js +105 -75
  150. package/dist/ee/license.js.map +1 -1
  151. package/dist/ee/license.mjs +103 -76
  152. package/dist/ee/license.mjs.map +1 -1
  153. package/dist/factories.d.ts +3 -1
  154. package/dist/factories.d.ts.map +1 -1
  155. package/dist/factories.js +80 -67
  156. package/dist/factories.js.map +1 -1
  157. package/dist/factories.mjs +77 -70
  158. package/dist/factories.mjs.map +1 -1
  159. package/dist/index.js +29 -26
  160. package/dist/index.js.map +1 -1
  161. package/dist/index.mjs +29 -29
  162. package/dist/index.mjs.map +1 -1
  163. package/dist/loaders/admin.d.ts.map +1 -1
  164. package/dist/loaders/admin.js +21 -20
  165. package/dist/loaders/admin.js.map +1 -1
  166. package/dist/loaders/admin.mjs +20 -20
  167. package/dist/loaders/admin.mjs.map +1 -1
  168. package/dist/loaders/apis.js +143 -120
  169. package/dist/loaders/apis.js.map +1 -1
  170. package/dist/loaders/apis.mjs +142 -119
  171. package/dist/loaders/apis.mjs.map +1 -1
  172. package/dist/loaders/components.js +33 -34
  173. package/dist/loaders/components.js.map +1 -1
  174. package/dist/loaders/components.mjs +32 -34
  175. package/dist/loaders/components.mjs.map +1 -1
  176. package/dist/loaders/index.js +22 -20
  177. package/dist/loaders/index.js.map +1 -1
  178. package/dist/loaders/index.mjs +21 -21
  179. package/dist/loaders/index.mjs.map +1 -1
  180. package/dist/loaders/middlewares.js +29 -25
  181. package/dist/loaders/middlewares.js.map +1 -1
  182. package/dist/loaders/middlewares.mjs +28 -25
  183. package/dist/loaders/middlewares.mjs.map +1 -1
  184. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  185. package/dist/loaders/plugins/get-enabled-plugins.js +125 -127
  186. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  187. package/dist/loaders/plugins/get-enabled-plugins.mjs +124 -104
  188. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  189. package/dist/loaders/plugins/get-user-plugins-config.js +25 -24
  190. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  191. package/dist/loaders/plugins/get-user-plugins-config.mjs +24 -23
  192. package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
  193. package/dist/loaders/plugins/index.d.ts.map +1 -1
  194. package/dist/loaders/plugins/index.js +141 -104
  195. package/dist/loaders/plugins/index.js.map +1 -1
  196. package/dist/loaders/plugins/index.mjs +121 -104
  197. package/dist/loaders/plugins/index.mjs.map +1 -1
  198. package/dist/loaders/policies.js +24 -20
  199. package/dist/loaders/policies.js.map +1 -1
  200. package/dist/loaders/policies.mjs +23 -20
  201. package/dist/loaders/policies.mjs.map +1 -1
  202. package/dist/loaders/sanitizers.js +10 -4
  203. package/dist/loaders/sanitizers.js.map +1 -1
  204. package/dist/loaders/sanitizers.mjs +9 -6
  205. package/dist/loaders/sanitizers.mjs.map +1 -1
  206. package/dist/loaders/src-index.js +35 -27
  207. package/dist/loaders/src-index.js.map +1 -1
  208. package/dist/loaders/src-index.mjs +34 -29
  209. package/dist/loaders/src-index.mjs.map +1 -1
  210. package/dist/loaders/validators.js +9 -4
  211. package/dist/loaders/validators.js.map +1 -1
  212. package/dist/loaders/validators.mjs +8 -6
  213. package/dist/loaders/validators.mjs.map +1 -1
  214. package/dist/middlewares/body.d.ts.map +1 -1
  215. package/dist/middlewares/body.js +58 -54
  216. package/dist/middlewares/body.js.map +1 -1
  217. package/dist/middlewares/body.mjs +57 -51
  218. package/dist/middlewares/body.mjs.map +1 -1
  219. package/dist/middlewares/compression.js +6 -6
  220. package/dist/middlewares/compression.js.map +1 -1
  221. package/dist/middlewares/compression.mjs +5 -5
  222. package/dist/middlewares/compression.mjs.map +1 -1
  223. package/dist/middlewares/cors.d.ts +9 -1
  224. package/dist/middlewares/cors.d.ts.map +1 -1
  225. package/dist/middlewares/cors.js +81 -48
  226. package/dist/middlewares/cors.js.map +1 -1
  227. package/dist/middlewares/cors.mjs +78 -46
  228. package/dist/middlewares/cors.mjs.map +1 -1
  229. package/dist/middlewares/errors.js +32 -30
  230. package/dist/middlewares/errors.js.map +1 -1
  231. package/dist/middlewares/errors.mjs +31 -31
  232. package/dist/middlewares/errors.mjs.map +1 -1
  233. package/dist/middlewares/favicon.js +27 -17
  234. package/dist/middlewares/favicon.js.map +1 -1
  235. package/dist/middlewares/favicon.mjs +26 -16
  236. package/dist/middlewares/favicon.mjs.map +1 -1
  237. package/dist/middlewares/index.js +32 -30
  238. package/dist/middlewares/index.js.map +1 -1
  239. package/dist/middlewares/index.mjs +31 -31
  240. package/dist/middlewares/index.mjs.map +1 -1
  241. package/dist/middlewares/ip.js +6 -6
  242. package/dist/middlewares/ip.js.map +1 -1
  243. package/dist/middlewares/ip.mjs +5 -5
  244. package/dist/middlewares/ip.mjs.map +1 -1
  245. package/dist/middlewares/logger.js +10 -9
  246. package/dist/middlewares/logger.js.map +1 -1
  247. package/dist/middlewares/logger.mjs +9 -10
  248. package/dist/middlewares/logger.mjs.map +1 -1
  249. package/dist/middlewares/powered-by.js +13 -9
  250. package/dist/middlewares/powered-by.js.map +1 -1
  251. package/dist/middlewares/powered-by.mjs +12 -10
  252. package/dist/middlewares/powered-by.mjs.map +1 -1
  253. package/dist/middlewares/public.js +33 -29
  254. package/dist/middlewares/public.js.map +1 -1
  255. package/dist/middlewares/public.mjs +32 -28
  256. package/dist/middlewares/public.mjs.map +1 -1
  257. package/dist/middlewares/query.js +35 -32
  258. package/dist/middlewares/query.js.map +1 -1
  259. package/dist/middlewares/query.mjs +34 -31
  260. package/dist/middlewares/query.mjs.map +1 -1
  261. package/dist/middlewares/response-time.js +10 -9
  262. package/dist/middlewares/response-time.js.map +1 -1
  263. package/dist/middlewares/response-time.mjs +9 -10
  264. package/dist/middlewares/response-time.mjs.map +1 -1
  265. package/dist/middlewares/responses.js +14 -12
  266. package/dist/middlewares/responses.js.map +1 -1
  267. package/dist/middlewares/responses.mjs +13 -13
  268. package/dist/middlewares/responses.mjs.map +1 -1
  269. package/dist/middlewares/security.d.ts.map +1 -1
  270. package/dist/middlewares/security.js +109 -71
  271. package/dist/middlewares/security.js.map +1 -1
  272. package/dist/middlewares/security.mjs +108 -70
  273. package/dist/middlewares/security.mjs.map +1 -1
  274. package/dist/middlewares/session.js +26 -25
  275. package/dist/middlewares/session.js.map +1 -1
  276. package/dist/middlewares/session.mjs +25 -24
  277. package/dist/middlewares/session.mjs.map +1 -1
  278. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +14 -11
  279. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
  280. package/dist/migrations/database/5.0.0-discard-drafts.js +153 -35
  281. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  282. package/dist/migrations/database/5.0.0-discard-drafts.mjs +152 -37
  283. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  284. package/dist/migrations/draft-publish.d.ts +2 -2
  285. package/dist/migrations/draft-publish.d.ts.map +1 -1
  286. package/dist/migrations/draft-publish.js +61 -34
  287. package/dist/migrations/draft-publish.js.map +1 -1
  288. package/dist/migrations/draft-publish.mjs +60 -36
  289. package/dist/migrations/draft-publish.mjs.map +1 -1
  290. package/dist/migrations/first-published-at.d.ts +4 -0
  291. package/dist/migrations/first-published-at.d.ts.map +1 -0
  292. package/dist/migrations/first-published-at.js +51 -0
  293. package/dist/migrations/first-published-at.js.map +1 -0
  294. package/dist/migrations/first-published-at.mjs +49 -0
  295. package/dist/migrations/first-published-at.mjs.map +1 -0
  296. package/dist/migrations/i18n.d.ts +5 -0
  297. package/dist/migrations/i18n.d.ts.map +1 -0
  298. package/dist/migrations/i18n.js +71 -0
  299. package/dist/migrations/i18n.js.map +1 -0
  300. package/dist/migrations/i18n.mjs +68 -0
  301. package/dist/migrations/i18n.mjs.map +1 -0
  302. package/dist/migrations/index.d.ts +5 -0
  303. package/dist/migrations/index.d.ts.map +1 -0
  304. package/dist/migrations/index.js +34 -0
  305. package/dist/migrations/index.js.map +1 -0
  306. package/dist/migrations/index.mjs +31 -0
  307. package/dist/migrations/index.mjs.map +1 -0
  308. package/dist/package.json.js +186 -0
  309. package/dist/package.json.js.map +1 -0
  310. package/dist/package.json.mjs +163 -0
  311. package/dist/package.json.mjs.map +1 -0
  312. package/dist/providers/admin.d.ts.map +1 -1
  313. package/dist/providers/admin.js +27 -17
  314. package/dist/providers/admin.js.map +1 -1
  315. package/dist/providers/admin.mjs +26 -19
  316. package/dist/providers/admin.mjs.map +1 -1
  317. package/dist/providers/coreStore.js +13 -8
  318. package/dist/providers/coreStore.js.map +1 -1
  319. package/dist/providers/coreStore.mjs +12 -10
  320. package/dist/providers/coreStore.mjs.map +1 -1
  321. package/dist/providers/cron.js +19 -16
  322. package/dist/providers/cron.js.map +1 -1
  323. package/dist/providers/cron.mjs +18 -18
  324. package/dist/providers/cron.mjs.map +1 -1
  325. package/dist/providers/index.js +18 -9
  326. package/dist/providers/index.js.map +1 -1
  327. package/dist/providers/index.mjs +17 -10
  328. package/dist/providers/index.mjs.map +1 -1
  329. package/dist/providers/provider.js +4 -3
  330. package/dist/providers/provider.js.map +1 -1
  331. package/dist/providers/provider.mjs +3 -4
  332. package/dist/providers/provider.mjs.map +1 -1
  333. package/dist/providers/registries.js +37 -32
  334. package/dist/providers/registries.js.map +1 -1
  335. package/dist/providers/registries.mjs +36 -34
  336. package/dist/providers/registries.mjs.map +1 -1
  337. package/dist/providers/telemetry.js +19 -16
  338. package/dist/providers/telemetry.js.map +1 -1
  339. package/dist/providers/telemetry.mjs +18 -18
  340. package/dist/providers/telemetry.mjs.map +1 -1
  341. package/dist/providers/webhooks.js +28 -26
  342. package/dist/providers/webhooks.js.map +1 -1
  343. package/dist/providers/webhooks.mjs +27 -28
  344. package/dist/providers/webhooks.mjs.map +1 -1
  345. package/dist/registries/apis.js +23 -20
  346. package/dist/registries/apis.js.map +1 -1
  347. package/dist/registries/apis.mjs +22 -22
  348. package/dist/registries/apis.mjs.map +1 -1
  349. package/dist/registries/components.js +35 -37
  350. package/dist/registries/components.js.map +1 -1
  351. package/dist/registries/components.mjs +34 -39
  352. package/dist/registries/components.mjs.map +1 -1
  353. package/dist/registries/content-types.js +54 -59
  354. package/dist/registries/content-types.js.map +1 -1
  355. package/dist/registries/content-types.mjs +53 -61
  356. package/dist/registries/content-types.mjs.map +1 -1
  357. package/dist/registries/controllers.js +70 -71
  358. package/dist/registries/controllers.js.map +1 -1
  359. package/dist/registries/controllers.mjs +69 -73
  360. package/dist/registries/controllers.mjs.map +1 -1
  361. package/dist/registries/custom-fields.js +75 -65
  362. package/dist/registries/custom-fields.js.map +1 -1
  363. package/dist/registries/custom-fields.mjs +74 -67
  364. package/dist/registries/custom-fields.mjs.map +1 -1
  365. package/dist/registries/hooks.js +46 -49
  366. package/dist/registries/hooks.js.map +1 -1
  367. package/dist/registries/hooks.mjs +45 -51
  368. package/dist/registries/hooks.mjs.map +1 -1
  369. package/dist/registries/middlewares.js +49 -51
  370. package/dist/registries/middlewares.js.map +1 -1
  371. package/dist/registries/middlewares.mjs +48 -53
  372. package/dist/registries/middlewares.mjs.map +1 -1
  373. package/dist/registries/models.js +14 -13
  374. package/dist/registries/models.js.map +1 -1
  375. package/dist/registries/models.mjs +13 -14
  376. package/dist/registries/models.mjs.map +1 -1
  377. package/dist/registries/modules.js +39 -36
  378. package/dist/registries/modules.js.map +1 -1
  379. package/dist/registries/modules.mjs +38 -38
  380. package/dist/registries/modules.mjs.map +1 -1
  381. package/dist/registries/namespace.js +21 -20
  382. package/dist/registries/namespace.js.map +1 -1
  383. package/dist/registries/namespace.mjs +20 -23
  384. package/dist/registries/namespace.mjs.map +1 -1
  385. package/dist/registries/plugins.js +23 -20
  386. package/dist/registries/plugins.js.map +1 -1
  387. package/dist/registries/plugins.mjs +22 -22
  388. package/dist/registries/plugins.mjs.map +1 -1
  389. package/dist/registries/policies.js +103 -96
  390. package/dist/registries/policies.js.map +1 -1
  391. package/dist/registries/policies.mjs +102 -98
  392. package/dist/registries/policies.mjs.map +1 -1
  393. package/dist/registries/sanitizers.js +23 -22
  394. package/dist/registries/sanitizers.js.map +1 -1
  395. package/dist/registries/sanitizers.mjs +22 -22
  396. package/dist/registries/sanitizers.mjs.map +1 -1
  397. package/dist/registries/services.js +71 -71
  398. package/dist/registries/services.js.map +1 -1
  399. package/dist/registries/services.mjs +70 -73
  400. package/dist/registries/services.mjs.map +1 -1
  401. package/dist/registries/validators.js +23 -22
  402. package/dist/registries/validators.js.map +1 -1
  403. package/dist/registries/validators.mjs +22 -22
  404. package/dist/registries/validators.mjs.map +1 -1
  405. package/dist/services/auth/index.js +74 -74
  406. package/dist/services/auth/index.js.map +1 -1
  407. package/dist/services/auth/index.mjs +73 -74
  408. package/dist/services/auth/index.mjs.map +1 -1
  409. package/dist/services/config.js +47 -43
  410. package/dist/services/config.js.map +1 -1
  411. package/dist/services/config.mjs +46 -44
  412. package/dist/services/config.mjs.map +1 -1
  413. package/dist/services/content-api/index.d.ts +7 -3
  414. package/dist/services/content-api/index.d.ts.map +1 -1
  415. package/dist/services/content-api/index.js +80 -79
  416. package/dist/services/content-api/index.js.map +1 -1
  417. package/dist/services/content-api/index.mjs +79 -79
  418. package/dist/services/content-api/index.mjs.map +1 -1
  419. package/dist/services/content-api/permissions/engine.js +8 -5
  420. package/dist/services/content-api/permissions/engine.js.map +1 -1
  421. package/dist/services/content-api/permissions/engine.mjs +7 -5
  422. package/dist/services/content-api/permissions/engine.mjs.map +1 -1
  423. package/dist/services/content-api/permissions/index.d.ts +6 -2
  424. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  425. package/dist/services/content-api/permissions/index.js +101 -81
  426. package/dist/services/content-api/permissions/index.js.map +1 -1
  427. package/dist/services/content-api/permissions/index.mjs +100 -81
  428. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  429. package/dist/services/content-api/permissions/providers/action.d.ts +3 -1
  430. package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
  431. package/dist/services/content-api/permissions/providers/action.js +17 -14
  432. package/dist/services/content-api/permissions/providers/action.js.map +1 -1
  433. package/dist/services/content-api/permissions/providers/action.mjs +16 -16
  434. package/dist/services/content-api/permissions/providers/action.mjs.map +1 -1
  435. package/dist/services/content-api/permissions/providers/condition.d.ts +3 -1
  436. package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
  437. package/dist/services/content-api/permissions/providers/condition.js +17 -14
  438. package/dist/services/content-api/permissions/providers/condition.js.map +1 -1
  439. package/dist/services/content-api/permissions/providers/condition.mjs +16 -16
  440. package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -1
  441. package/dist/services/content-source-maps.d.ts +12 -0
  442. package/dist/services/content-source-maps.d.ts.map +1 -0
  443. package/dist/services/content-source-maps.js +86 -0
  444. package/dist/services/content-source-maps.js.map +1 -0
  445. package/dist/services/content-source-maps.mjs +84 -0
  446. package/dist/services/content-source-maps.mjs.map +1 -0
  447. package/dist/services/core-store.d.ts +2 -2
  448. package/dist/services/core-store.d.ts.map +1 -1
  449. package/dist/services/core-store.js +115 -95
  450. package/dist/services/core-store.js.map +1 -1
  451. package/dist/services/core-store.mjs +114 -97
  452. package/dist/services/core-store.mjs.map +1 -1
  453. package/dist/services/cron.d.ts +3 -3
  454. package/dist/services/cron.d.ts.map +1 -1
  455. package/dist/services/cron.js +74 -60
  456. package/dist/services/cron.js.map +1 -1
  457. package/dist/services/cron.mjs +73 -62
  458. package/dist/services/cron.mjs.map +1 -1
  459. package/dist/services/custom-fields.js +9 -7
  460. package/dist/services/custom-fields.js.map +1 -1
  461. package/dist/services/custom-fields.mjs +8 -9
  462. package/dist/services/custom-fields.mjs.map +1 -1
  463. package/dist/services/document-service/attributes/index.js +23 -18
  464. package/dist/services/document-service/attributes/index.js.map +1 -1
  465. package/dist/services/document-service/attributes/index.mjs +22 -19
  466. package/dist/services/document-service/attributes/index.mjs.map +1 -1
  467. package/dist/services/document-service/attributes/transforms.js +16 -15
  468. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  469. package/dist/services/document-service/attributes/transforms.mjs +15 -15
  470. package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
  471. package/dist/services/document-service/common.d.ts +1 -1
  472. package/dist/services/document-service/common.d.ts.map +1 -1
  473. package/dist/services/document-service/common.js +5 -4
  474. package/dist/services/document-service/common.js.map +1 -1
  475. package/dist/services/document-service/common.mjs +4 -5
  476. package/dist/services/document-service/common.mjs.map +1 -1
  477. package/dist/services/document-service/components.d.ts +6 -1
  478. package/dist/services/document-service/components.d.ts.map +1 -1
  479. package/dist/services/document-service/components.js +351 -256
  480. package/dist/services/document-service/components.js.map +1 -1
  481. package/dist/services/document-service/components.mjs +349 -261
  482. package/dist/services/document-service/components.mjs.map +1 -1
  483. package/dist/services/document-service/draft-and-publish.d.ts +1 -1
  484. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  485. package/dist/services/document-service/draft-and-publish.js +88 -48
  486. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  487. package/dist/services/document-service/draft-and-publish.mjs +87 -54
  488. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  489. package/dist/services/document-service/entries.d.ts +2 -2
  490. package/dist/services/document-service/entries.d.ts.map +1 -1
  491. package/dist/services/document-service/entries.js +151 -92
  492. package/dist/services/document-service/entries.js.map +1 -1
  493. package/dist/services/document-service/entries.mjs +150 -93
  494. package/dist/services/document-service/entries.mjs.map +1 -1
  495. package/dist/services/document-service/events.d.ts +1 -1
  496. package/dist/services/document-service/events.d.ts.map +1 -1
  497. package/dist/services/document-service/events.js +52 -40
  498. package/dist/services/document-service/events.js.map +1 -1
  499. package/dist/services/document-service/events.mjs +51 -41
  500. package/dist/services/document-service/events.mjs.map +1 -1
  501. package/dist/services/document-service/first-published-at.d.ts +7 -0
  502. package/dist/services/document-service/first-published-at.d.ts.map +1 -0
  503. package/dist/services/document-service/first-published-at.js +31 -0
  504. package/dist/services/document-service/first-published-at.js.map +1 -0
  505. package/dist/services/document-service/first-published-at.mjs +28 -0
  506. package/dist/services/document-service/first-published-at.mjs.map +1 -0
  507. package/dist/services/document-service/index.d.ts +2 -1
  508. package/dist/services/document-service/index.d.ts.map +1 -1
  509. package/dist/services/document-service/index.js +53 -32
  510. package/dist/services/document-service/index.js.map +1 -1
  511. package/dist/services/document-service/index.mjs +52 -33
  512. package/dist/services/document-service/index.mjs.map +1 -1
  513. package/dist/services/document-service/internationalization.d.ts +6 -1
  514. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  515. package/dist/services/document-service/internationalization.js +94 -46
  516. package/dist/services/document-service/internationalization.js.map +1 -1
  517. package/dist/services/document-service/internationalization.mjs +92 -50
  518. package/dist/services/document-service/internationalization.mjs.map +1 -1
  519. package/dist/services/document-service/middlewares/errors.js +23 -19
  520. package/dist/services/document-service/middlewares/errors.js.map +1 -1
  521. package/dist/services/document-service/middlewares/errors.mjs +22 -20
  522. package/dist/services/document-service/middlewares/errors.mjs.map +1 -1
  523. package/dist/services/document-service/middlewares/middleware-manager.js +46 -44
  524. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -1
  525. package/dist/services/document-service/middlewares/middleware-manager.mjs +45 -45
  526. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -1
  527. package/dist/services/document-service/params.js +11 -5
  528. package/dist/services/document-service/params.js.map +1 -1
  529. package/dist/services/document-service/params.mjs +10 -6
  530. package/dist/services/document-service/params.mjs.map +1 -1
  531. package/dist/services/document-service/repository.d.ts.map +1 -1
  532. package/dist/services/document-service/repository.js +363 -269
  533. package/dist/services/document-service/repository.js.map +1 -1
  534. package/dist/services/document-service/repository.mjs +362 -270
  535. package/dist/services/document-service/repository.mjs.map +1 -1
  536. package/dist/services/document-service/transform/data.js +22 -12
  537. package/dist/services/document-service/transform/data.js.map +1 -1
  538. package/dist/services/document-service/transform/data.mjs +21 -13
  539. package/dist/services/document-service/transform/data.mjs.map +1 -1
  540. package/dist/services/document-service/transform/fields.js +26 -17
  541. package/dist/services/document-service/transform/fields.js.map +1 -1
  542. package/dist/services/document-service/transform/fields.mjs +25 -18
  543. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  544. package/dist/services/document-service/transform/id-map.d.ts +1 -1
  545. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  546. package/dist/services/document-service/transform/id-map.js +116 -69
  547. package/dist/services/document-service/transform/id-map.js.map +1 -1
  548. package/dist/services/document-service/transform/id-map.mjs +115 -70
  549. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  550. package/dist/services/document-service/transform/id-transform.d.ts +1 -1
  551. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  552. package/dist/services/document-service/transform/id-transform.js +37 -29
  553. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  554. package/dist/services/document-service/transform/id-transform.mjs +36 -30
  555. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  556. package/dist/services/document-service/transform/populate.js +23 -18
  557. package/dist/services/document-service/transform/populate.js.map +1 -1
  558. package/dist/services/document-service/transform/populate.mjs +22 -19
  559. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  560. package/dist/services/document-service/transform/query.js +11 -6
  561. package/dist/services/document-service/transform/query.js.map +1 -1
  562. package/dist/services/document-service/transform/query.mjs +10 -7
  563. package/dist/services/document-service/transform/query.mjs.map +1 -1
  564. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +1 -1
  565. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  566. package/dist/services/document-service/transform/relations/extract/data-ids.js +71 -48
  567. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  568. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +70 -49
  569. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  570. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  571. package/dist/services/document-service/transform/relations/transform/data-ids.js +97 -63
  572. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  573. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +96 -64
  574. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  575. package/dist/services/document-service/transform/relations/transform/default-locale.js +47 -29
  576. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
  577. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +46 -30
  578. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
  579. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  580. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  581. package/dist/services/document-service/transform/relations/utils/dp.js +52 -26
  582. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  583. package/dist/services/document-service/transform/relations/utils/dp.mjs +51 -27
  584. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  585. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +1 -1
  586. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  587. package/dist/services/document-service/transform/relations/utils/i18n.js +20 -18
  588. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  589. package/dist/services/document-service/transform/relations/utils/i18n.mjs +19 -21
  590. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  591. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  592. package/dist/services/document-service/transform/relations/utils/map-relation.js +116 -77
  593. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  594. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +115 -79
  595. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  596. package/dist/services/document-service/utils/bidirectional-relations.d.ts +95 -0
  597. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -0
  598. package/dist/services/document-service/utils/bidirectional-relations.js +148 -0
  599. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -0
  600. package/dist/services/document-service/utils/bidirectional-relations.mjs +145 -0
  601. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -0
  602. package/dist/services/document-service/utils/populate.d.ts +1 -1
  603. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  604. package/dist/services/document-service/utils/populate.js +67 -41
  605. package/dist/services/document-service/utils/populate.js.map +1 -1
  606. package/dist/services/document-service/utils/populate.mjs +66 -42
  607. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  608. package/dist/services/document-service/utils/unidirectional-relations.d.ts +53 -0
  609. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -0
  610. package/dist/services/document-service/utils/unidirectional-relations.js +145 -0
  611. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -0
  612. package/dist/services/document-service/utils/unidirectional-relations.mjs +142 -0
  613. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -0
  614. package/dist/services/entity-service/index.js +230 -161
  615. package/dist/services/entity-service/index.js.map +1 -1
  616. package/dist/services/entity-service/index.mjs +229 -160
  617. package/dist/services/entity-service/index.mjs.map +1 -1
  618. package/dist/services/entity-validator/blocks-validator.js +135 -103
  619. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  620. package/dist/services/entity-validator/blocks-validator.mjs +134 -104
  621. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  622. package/dist/services/entity-validator/index.d.ts +1 -1
  623. package/dist/services/entity-validator/index.d.ts.map +1 -1
  624. package/dist/services/entity-validator/index.js +370 -362
  625. package/dist/services/entity-validator/index.js.map +1 -1
  626. package/dist/services/entity-validator/index.mjs +366 -359
  627. package/dist/services/entity-validator/index.mjs.map +1 -1
  628. package/dist/services/entity-validator/validators.d.ts +1 -0
  629. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  630. package/dist/services/entity-validator/validators.js +270 -209
  631. package/dist/services/entity-validator/validators.js.map +1 -1
  632. package/dist/services/entity-validator/validators.mjs +269 -215
  633. package/dist/services/entity-validator/validators.mjs.map +1 -1
  634. package/dist/services/errors.js +65 -65
  635. package/dist/services/errors.js.map +1 -1
  636. package/dist/services/errors.mjs +64 -66
  637. package/dist/services/errors.mjs.map +1 -1
  638. package/dist/services/event-hub.js +82 -69
  639. package/dist/services/event-hub.js.map +1 -1
  640. package/dist/services/event-hub.mjs +81 -71
  641. package/dist/services/event-hub.mjs.map +1 -1
  642. package/dist/services/features.js +19 -14
  643. package/dist/services/features.js.map +1 -1
  644. package/dist/services/features.mjs +18 -15
  645. package/dist/services/features.mjs.map +1 -1
  646. package/dist/services/fs.js +41 -40
  647. package/dist/services/fs.js.map +1 -1
  648. package/dist/services/fs.mjs +40 -39
  649. package/dist/services/fs.mjs.map +1 -1
  650. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  651. package/dist/services/metrics/admin-user-hash.js +13 -11
  652. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  653. package/dist/services/metrics/admin-user-hash.mjs +12 -10
  654. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  655. package/dist/services/metrics/index.d.ts +1 -1
  656. package/dist/services/metrics/index.d.ts.map +1 -1
  657. package/dist/services/metrics/index.js +47 -40
  658. package/dist/services/metrics/index.js.map +1 -1
  659. package/dist/services/metrics/index.mjs +46 -42
  660. package/dist/services/metrics/index.mjs.map +1 -1
  661. package/dist/services/metrics/is-truthy.js +13 -6
  662. package/dist/services/metrics/is-truthy.js.map +1 -1
  663. package/dist/services/metrics/is-truthy.mjs +12 -6
  664. package/dist/services/metrics/is-truthy.mjs.map +1 -1
  665. package/dist/services/metrics/middleware.d.ts.map +1 -1
  666. package/dist/services/metrics/middleware.js +37 -22
  667. package/dist/services/metrics/middleware.js.map +1 -1
  668. package/dist/services/metrics/middleware.mjs +36 -24
  669. package/dist/services/metrics/middleware.mjs.map +1 -1
  670. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  671. package/dist/services/metrics/rate-limiter.js +24 -19
  672. package/dist/services/metrics/rate-limiter.js.map +1 -1
  673. package/dist/services/metrics/rate-limiter.mjs +23 -21
  674. package/dist/services/metrics/rate-limiter.mjs.map +1 -1
  675. package/dist/services/metrics/sender.d.ts.map +1 -1
  676. package/dist/services/metrics/sender.js +78 -69
  677. package/dist/services/metrics/sender.js.map +1 -1
  678. package/dist/services/metrics/sender.mjs +77 -64
  679. package/dist/services/metrics/sender.mjs.map +1 -1
  680. package/dist/services/query-params.js +13 -10
  681. package/dist/services/query-params.js.map +1 -1
  682. package/dist/services/query-params.mjs +12 -12
  683. package/dist/services/query-params.mjs.map +1 -1
  684. package/dist/services/reloader.js +35 -32
  685. package/dist/services/reloader.js.map +1 -1
  686. package/dist/services/reloader.mjs +34 -33
  687. package/dist/services/reloader.mjs.map +1 -1
  688. package/dist/services/request-context.js +11 -8
  689. package/dist/services/request-context.js.map +1 -1
  690. package/dist/services/request-context.mjs +10 -10
  691. package/dist/services/request-context.mjs.map +1 -1
  692. package/dist/services/server/admin-api.js +11 -10
  693. package/dist/services/server/admin-api.js.map +1 -1
  694. package/dist/services/server/admin-api.mjs +10 -11
  695. package/dist/services/server/admin-api.mjs.map +1 -1
  696. package/dist/services/server/api.js +33 -27
  697. package/dist/services/server/api.js.map +1 -1
  698. package/dist/services/server/api.mjs +32 -26
  699. package/dist/services/server/api.mjs.map +1 -1
  700. package/dist/services/server/compose-endpoint.js +116 -105
  701. package/dist/services/server/compose-endpoint.js.map +1 -1
  702. package/dist/services/server/compose-endpoint.mjs +115 -105
  703. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  704. package/dist/services/server/content-api.js +11 -9
  705. package/dist/services/server/content-api.js.map +1 -1
  706. package/dist/services/server/content-api.mjs +10 -10
  707. package/dist/services/server/content-api.mjs.map +1 -1
  708. package/dist/services/server/http-server.js +48 -44
  709. package/dist/services/server/http-server.js.map +1 -1
  710. package/dist/services/server/http-server.mjs +47 -43
  711. package/dist/services/server/http-server.mjs.map +1 -1
  712. package/dist/services/server/index.js +85 -82
  713. package/dist/services/server/index.js.map +1 -1
  714. package/dist/services/server/index.mjs +84 -81
  715. package/dist/services/server/index.mjs.map +1 -1
  716. package/dist/services/server/koa.js +49 -47
  717. package/dist/services/server/koa.js.map +1 -1
  718. package/dist/services/server/koa.mjs +48 -44
  719. package/dist/services/server/koa.mjs.map +1 -1
  720. package/dist/services/server/middleware.js +86 -82
  721. package/dist/services/server/middleware.js.map +1 -1
  722. package/dist/services/server/middleware.mjs +85 -82
  723. package/dist/services/server/middleware.mjs.map +1 -1
  724. package/dist/services/server/policy.js +24 -17
  725. package/dist/services/server/policy.js.map +1 -1
  726. package/dist/services/server/policy.mjs +23 -18
  727. package/dist/services/server/policy.mjs.map +1 -1
  728. package/dist/services/server/register-middlewares.js +68 -61
  729. package/dist/services/server/register-middlewares.js.map +1 -1
  730. package/dist/services/server/register-middlewares.mjs +67 -63
  731. package/dist/services/server/register-middlewares.mjs.map +1 -1
  732. package/dist/services/server/register-routes.js +109 -66
  733. package/dist/services/server/register-routes.js.map +1 -1
  734. package/dist/services/server/register-routes.mjs +108 -66
  735. package/dist/services/server/register-routes.mjs.map +1 -1
  736. package/dist/services/server/routing.d.ts +10 -0
  737. package/dist/services/server/routing.d.ts.map +1 -1
  738. package/dist/services/server/routing.js +100 -81
  739. package/dist/services/server/routing.js.map +1 -1
  740. package/dist/services/server/routing.mjs +99 -81
  741. package/dist/services/server/routing.mjs.map +1 -1
  742. package/dist/services/utils/conditional-fields.d.ts +3 -0
  743. package/dist/services/utils/conditional-fields.d.ts.map +1 -0
  744. package/dist/services/utils/conditional-fields.js +22 -0
  745. package/dist/services/utils/conditional-fields.js.map +1 -0
  746. package/dist/services/utils/conditional-fields.mjs +20 -0
  747. package/dist/services/utils/conditional-fields.mjs.map +1 -0
  748. package/dist/services/utils/dynamic-zones.js +13 -14
  749. package/dist/services/utils/dynamic-zones.js.map +1 -1
  750. package/dist/services/utils/dynamic-zones.mjs +12 -16
  751. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  752. package/dist/services/webhook-runner.js +124 -122
  753. package/dist/services/webhook-runner.js.map +1 -1
  754. package/dist/services/webhook-runner.mjs +123 -121
  755. package/dist/services/webhook-runner.mjs.map +1 -1
  756. package/dist/services/webhook-store.js +132 -99
  757. package/dist/services/webhook-store.js.map +1 -1
  758. package/dist/services/webhook-store.mjs +131 -101
  759. package/dist/services/webhook-store.mjs.map +1 -1
  760. package/dist/services/worker-queue.js +44 -49
  761. package/dist/services/worker-queue.js.map +1 -1
  762. package/dist/services/worker-queue.mjs +43 -49
  763. package/dist/services/worker-queue.mjs.map +1 -1
  764. package/dist/utils/convert-custom-field-type.js +17 -20
  765. package/dist/utils/convert-custom-field-type.js.map +1 -1
  766. package/dist/utils/convert-custom-field-type.mjs +16 -21
  767. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  768. package/dist/utils/cron.js +64 -30
  769. package/dist/utils/cron.js.map +1 -1
  770. package/dist/utils/cron.mjs +63 -31
  771. package/dist/utils/cron.mjs.map +1 -1
  772. package/dist/utils/fetch.d.ts +5 -1
  773. package/dist/utils/fetch.d.ts.map +1 -1
  774. package/dist/utils/fetch.js +28 -18
  775. package/dist/utils/fetch.js.map +1 -1
  776. package/dist/utils/fetch.mjs +27 -19
  777. package/dist/utils/fetch.mjs.map +1 -1
  778. package/dist/utils/filepath-to-prop-path.js +20 -28
  779. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  780. package/dist/utils/filepath-to-prop-path.mjs +19 -26
  781. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  782. package/dist/utils/is-initialized.js +21 -12
  783. package/dist/utils/is-initialized.js.map +1 -1
  784. package/dist/utils/is-initialized.mjs +20 -13
  785. package/dist/utils/is-initialized.mjs.map +1 -1
  786. package/dist/utils/lifecycles.js +6 -5
  787. package/dist/utils/lifecycles.js.map +1 -1
  788. package/dist/utils/lifecycles.mjs +5 -6
  789. package/dist/utils/lifecycles.mjs.map +1 -1
  790. package/dist/utils/load-config-file.js +40 -38
  791. package/dist/utils/load-config-file.js.map +1 -1
  792. package/dist/utils/load-config-file.mjs +39 -36
  793. package/dist/utils/load-config-file.mjs.map +1 -1
  794. package/dist/utils/load-files.js +40 -35
  795. package/dist/utils/load-files.js.map +1 -1
  796. package/dist/utils/load-files.mjs +39 -32
  797. package/dist/utils/load-files.mjs.map +1 -1
  798. package/dist/utils/open-browser.js +8 -8
  799. package/dist/utils/open-browser.js.map +1 -1
  800. package/dist/utils/open-browser.mjs +7 -7
  801. package/dist/utils/open-browser.mjs.map +1 -1
  802. package/dist/utils/resolve-working-dirs.js +23 -10
  803. package/dist/utils/resolve-working-dirs.js.map +1 -1
  804. package/dist/utils/resolve-working-dirs.mjs +22 -9
  805. package/dist/utils/resolve-working-dirs.mjs.map +1 -1
  806. package/dist/utils/signals.js +20 -14
  807. package/dist/utils/signals.js.map +1 -1
  808. package/dist/utils/signals.mjs +19 -15
  809. package/dist/utils/signals.mjs.map +1 -1
  810. package/dist/utils/startup-logger.d.ts.map +1 -1
  811. package/dist/utils/startup-logger.js +107 -78
  812. package/dist/utils/startup-logger.js.map +1 -1
  813. package/dist/utils/startup-logger.mjs +106 -75
  814. package/dist/utils/startup-logger.mjs.map +1 -1
  815. package/dist/utils/transform-content-types-to-models.d.ts +550 -21
  816. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  817. package/dist/utils/transform-content-types-to-models.js +350 -261
  818. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  819. package/dist/utils/transform-content-types-to-models.mjs +349 -269
  820. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  821. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  822. package/dist/utils/update-notifier/index.js +68 -73
  823. package/dist/utils/update-notifier/index.js.map +1 -1
  824. package/dist/utils/update-notifier/index.mjs +67 -67
  825. package/dist/utils/update-notifier/index.mjs.map +1 -1
  826. package/package.json +35 -31
@@ -1 +1 @@
1
- {"version":3,"file":"populate.js","sources":["../../../../src/services/document-service/utils/populate.ts"],"sourcesContent":["import { UID } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\ninterface Options {\n /**\n * Fields to select when populating relations\n */\n relationalFields?: string[];\n}\n\n// We want to build a populate object based on the schema\nexport const getDeepPopulate = (uid: UID.Schema, opts: Options = {}) => {\n const model = strapi.getModel(uid);\n const attributes = Object.entries(model.attributes);\n\n return attributes.reduce((acc: any, [attributeName, attribute]) => {\n switch (attribute.type) {\n case 'relation': {\n // TODO: Support polymorphic relations\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n if (isMorphRelation) {\n break;\n }\n\n // TODO: Should this just be a plain list?\n // Ignore createdBy, updatedBy, ...\n const isVisible = contentTypes.isVisibleAttribute(model, attributeName);\n if (isVisible) {\n acc[attributeName] = { select: opts.relationalFields };\n }\n break;\n }\n\n case 'media': {\n acc[attributeName] = { select: ['id'] };\n break;\n }\n\n case 'component': {\n const populate = getDeepPopulate(attribute.component, opts);\n acc[attributeName] = { populate };\n break;\n }\n\n case 'dynamiczone': {\n // Use fragments to populate the dynamic zone components\n const populatedComponents = (attribute.components || []).reduce(\n (acc: any, componentUID: UID.Component) => {\n acc[componentUID] = { populate: getDeepPopulate(componentUID, opts) };\n return acc;\n },\n {}\n );\n\n acc[attributeName] = { on: populatedComponents };\n break;\n }\n default:\n break;\n }\n\n return acc;\n }, {});\n};\n"],"names":["contentTypes","acc"],"mappings":";;;AAWO,MAAM,kBAAkB,CAAC,KAAiB,OAAgB,OAAO;AAChE,QAAA,QAAQ,OAAO,SAAS,GAAG;AACjC,QAAM,aAAa,OAAO,QAAQ,MAAM,UAAU;AAElD,SAAO,WAAW,OAAO,CAAC,KAAU,CAAC,eAAe,SAAS,MAAM;AACjE,YAAQ,UAAU,MAAM;AAAA,MACtB,KAAK,YAAY;AAEf,cAAM,kBAAkB,UAAU,SAAS,YAAY,EAAE,WAAW,OAAO;AAC3E,YAAI,iBAAiB;AACnB;AAAA,QACF;AAIA,cAAM,YAAYA,YAAA,aAAa,mBAAmB,OAAO,aAAa;AACtE,YAAI,WAAW;AACb,cAAI,aAAa,IAAI,EAAE,QAAQ,KAAK,iBAAiB;AAAA,QACvD;AACA;AAAA,MACF;AAAA,MAEA,KAAK,SAAS;AACZ,YAAI,aAAa,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;AACtC;AAAA,MACF;AAAA,MAEA,KAAK,aAAa;AAChB,cAAM,WAAW,gBAAgB,UAAU,WAAW,IAAI;AACtD,YAAA,aAAa,IAAI,EAAE;AACvB;AAAA,MACF;AAAA,MAEA,KAAK,eAAe;AAElB,cAAM,uBAAuB,UAAU,cAAc,CAAI,GAAA;AAAA,UACvD,CAACC,MAAU,iBAAgC;AACzCA,iBAAI,YAAY,IAAI,EAAE,UAAU,gBAAgB,cAAc,IAAI;AAC3DA,mBAAAA;AAAAA,UACT;AAAA,UACA,CAAC;AAAA,QAAA;AAGH,YAAI,aAAa,IAAI,EAAE,IAAI,oBAAoB;AAC/C;AAAA,MACF;AAAA,IAGF;AAEO,WAAA;AAAA,EACT,GAAG,CAAE,CAAA;AACP;;"}
1
+ {"version":3,"file":"populate.js","sources":["../../../../src/services/document-service/utils/populate.ts"],"sourcesContent":["import type { UID } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\ninterface Options {\n /**\n * Fields to select when populating relations\n */\n relationalFields?: string[];\n}\n\nconst { CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } = contentTypes.constants;\n\n// We want to build a populate object based on the schema\nexport const getDeepPopulate = (uid: UID.Schema, opts: Options = {}) => {\n const model = strapi.getModel(uid);\n const attributes = Object.entries(model.attributes);\n\n return attributes.reduce((acc: any, [attributeName, attribute]) => {\n switch (attribute.type) {\n case 'relation': {\n // TODO: Support polymorphic relations\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n if (isMorphRelation) {\n break;\n }\n\n // Ignore not visible fields other than createdBy and updatedBy\n const isVisible = contentTypes.isVisibleAttribute(model, attributeName);\n const isCreatorField = [CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE].includes(attributeName);\n\n if (isVisible || isCreatorField) {\n acc[attributeName] = { select: opts.relationalFields };\n }\n\n break;\n }\n\n case 'media': {\n // We populate all media fields for completeness of webhook responses\n // see https://github.com/strapi/strapi/issues/21546\n acc[attributeName] = { select: ['*'] };\n break;\n }\n\n case 'component': {\n const populate = getDeepPopulate(attribute.component, opts);\n acc[attributeName] = { populate };\n break;\n }\n\n case 'dynamiczone': {\n // Use fragments to populate the dynamic zone components\n const populatedComponents = (attribute.components || []).reduce(\n (acc: any, componentUID: UID.Component) => {\n acc[componentUID] = { populate: getDeepPopulate(componentUID, opts) };\n return acc;\n },\n {}\n );\n\n acc[attributeName] = { on: populatedComponents };\n break;\n }\n default:\n break;\n }\n\n return acc;\n }, {});\n};\n"],"names":["CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","contentTypes","constants","getDeepPopulate","uid","opts","model","strapi","getModel","attributes","Object","entries","reduce","acc","attributeName","attribute","type","isMorphRelation","relation","toLowerCase","startsWith","isVisible","isVisibleAttribute","isCreatorField","includes","select","relationalFields","populate","component","populatedComponents","components","componentUID","on"],"mappings":";;;;AAUA,MAAM,EAAEA,oBAAoB,EAAEC,oBAAoB,EAAE,GAAGC,yBAAaC,SAAS;AAE7E;MACaC,eAAkB,GAAA,CAACC,GAAiBC,EAAAA,IAAAA,GAAgB,EAAE,GAAA;IACjE,MAAMC,KAAAA,GAAQC,MAAOC,CAAAA,QAAQ,CAACJ,GAAAA,CAAAA;AAC9B,IAAA,MAAMK,UAAaC,GAAAA,MAAAA,CAAOC,OAAO,CAACL,MAAMG,UAAU,CAAA;AAElD,IAAA,OAAOA,WAAWG,MAAM,CAAC,CAACC,GAAU,EAAA,CAACC,eAAeC,SAAU,CAAA,GAAA;AAC5D,QAAA,OAAQA,UAAUC,IAAI;YACpB,KAAK,UAAA;AAAY,gBAAA;;AAEf,oBAAA,MAAMC,kBAAkBF,SAAUG,CAAAA,QAAQ,CAACC,WAAW,EAAA,CAAGC,UAAU,CAAC,OAAA,CAAA;AACpE,oBAAA,IAAIH,eAAiB,EAAA;AACnB,wBAAA;AACF;;AAGA,oBAAA,MAAMI,SAAYpB,GAAAA,wBAAAA,CAAaqB,kBAAkB,CAAChB,KAAOQ,EAAAA,aAAAA,CAAAA;AACzD,oBAAA,MAAMS,cAAiB,GAAA;AAACxB,wBAAAA,oBAAAA;AAAsBC,wBAAAA;AAAqB,qBAAA,CAACwB,QAAQ,CAACV,aAAAA,CAAAA;AAE7E,oBAAA,IAAIO,aAAaE,cAAgB,EAAA;wBAC/BV,GAAG,CAACC,cAAc,GAAG;AAAEW,4BAAAA,MAAAA,EAAQpB,KAAKqB;AAAiB,yBAAA;AACvD;AAEA,oBAAA;AACF;YAEA,KAAK,OAAA;AAAS,gBAAA;;;oBAGZb,GAAG,CAACC,cAAc,GAAG;wBAAEW,MAAQ,EAAA;AAAC,4BAAA;AAAI;AAAC,qBAAA;AACrC,oBAAA;AACF;YAEA,KAAK,WAAA;AAAa,gBAAA;AAChB,oBAAA,MAAME,QAAWxB,GAAAA,eAAAA,CAAgBY,SAAUa,CAAAA,SAAS,EAAEvB,IAAAA,CAAAA;oBACtDQ,GAAG,CAACC,cAAc,GAAG;AAAEa,wBAAAA;AAAS,qBAAA;AAChC,oBAAA;AACF;YAEA,KAAK,aAAA;AAAe,gBAAA;;AAElB,oBAAA,MAAME,mBAAsB,GAACd,CAAAA,SAAAA,CAAUe,UAAU,IAAI,EAAC,EAAGlB,MAAM,CAC7D,CAACC,GAAUkB,EAAAA,YAAAA,GAAAA;wBACTlB,GAAG,CAACkB,aAAa,GAAG;AAAEJ,4BAAAA,QAAAA,EAAUxB,gBAAgB4B,YAAc1B,EAAAA,IAAAA;AAAM,yBAAA;wBACpE,OAAOQ,GAAAA;AACT,qBAAA,EACA,EAAC,CAAA;oBAGHA,GAAG,CAACC,cAAc,GAAG;wBAAEkB,EAAIH,EAAAA;AAAoB,qBAAA;AAC/C,oBAAA;AACF;AAGF;QAEA,OAAOhB,GAAAA;AACT,KAAA,EAAG,EAAC,CAAA;AACN;;;;"}
@@ -1,45 +1,69 @@
1
- import { contentTypes } from "@strapi/utils";
2
- const getDeepPopulate = (uid, opts = {}) => {
3
- const model = strapi.getModel(uid);
4
- const attributes = Object.entries(model.attributes);
5
- return attributes.reduce((acc, [attributeName, attribute]) => {
6
- switch (attribute.type) {
7
- case "relation": {
8
- const isMorphRelation = attribute.relation.toLowerCase().startsWith("morph");
9
- if (isMorphRelation) {
10
- break;
1
+ import { contentTypes } from '@strapi/utils';
2
+
3
+ const { CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } = contentTypes.constants;
4
+ // We want to build a populate object based on the schema
5
+ const getDeepPopulate = (uid, opts = {})=>{
6
+ const model = strapi.getModel(uid);
7
+ const attributes = Object.entries(model.attributes);
8
+ return attributes.reduce((acc, [attributeName, attribute])=>{
9
+ switch(attribute.type){
10
+ case 'relation':
11
+ {
12
+ // TODO: Support polymorphic relations
13
+ const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');
14
+ if (isMorphRelation) {
15
+ break;
16
+ }
17
+ // Ignore not visible fields other than createdBy and updatedBy
18
+ const isVisible = contentTypes.isVisibleAttribute(model, attributeName);
19
+ const isCreatorField = [
20
+ CREATED_BY_ATTRIBUTE,
21
+ UPDATED_BY_ATTRIBUTE
22
+ ].includes(attributeName);
23
+ if (isVisible || isCreatorField) {
24
+ acc[attributeName] = {
25
+ select: opts.relationalFields
26
+ };
27
+ }
28
+ break;
29
+ }
30
+ case 'media':
31
+ {
32
+ // We populate all media fields for completeness of webhook responses
33
+ // see https://github.com/strapi/strapi/issues/21546
34
+ acc[attributeName] = {
35
+ select: [
36
+ '*'
37
+ ]
38
+ };
39
+ break;
40
+ }
41
+ case 'component':
42
+ {
43
+ const populate = getDeepPopulate(attribute.component, opts);
44
+ acc[attributeName] = {
45
+ populate
46
+ };
47
+ break;
48
+ }
49
+ case 'dynamiczone':
50
+ {
51
+ // Use fragments to populate the dynamic zone components
52
+ const populatedComponents = (attribute.components || []).reduce((acc, componentUID)=>{
53
+ acc[componentUID] = {
54
+ populate: getDeepPopulate(componentUID, opts)
55
+ };
56
+ return acc;
57
+ }, {});
58
+ acc[attributeName] = {
59
+ on: populatedComponents
60
+ };
61
+ break;
62
+ }
11
63
  }
12
- const isVisible = contentTypes.isVisibleAttribute(model, attributeName);
13
- if (isVisible) {
14
- acc[attributeName] = { select: opts.relationalFields };
15
- }
16
- break;
17
- }
18
- case "media": {
19
- acc[attributeName] = { select: ["id"] };
20
- break;
21
- }
22
- case "component": {
23
- const populate = getDeepPopulate(attribute.component, opts);
24
- acc[attributeName] = { populate };
25
- break;
26
- }
27
- case "dynamiczone": {
28
- const populatedComponents = (attribute.components || []).reduce(
29
- (acc2, componentUID) => {
30
- acc2[componentUID] = { populate: getDeepPopulate(componentUID, opts) };
31
- return acc2;
32
- },
33
- {}
34
- );
35
- acc[attributeName] = { on: populatedComponents };
36
- break;
37
- }
38
- }
39
- return acc;
40
- }, {});
41
- };
42
- export {
43
- getDeepPopulate
64
+ return acc;
65
+ }, {});
44
66
  };
67
+
68
+ export { getDeepPopulate };
45
69
  //# sourceMappingURL=populate.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"populate.mjs","sources":["../../../../src/services/document-service/utils/populate.ts"],"sourcesContent":["import { UID } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\ninterface Options {\n /**\n * Fields to select when populating relations\n */\n relationalFields?: string[];\n}\n\n// We want to build a populate object based on the schema\nexport const getDeepPopulate = (uid: UID.Schema, opts: Options = {}) => {\n const model = strapi.getModel(uid);\n const attributes = Object.entries(model.attributes);\n\n return attributes.reduce((acc: any, [attributeName, attribute]) => {\n switch (attribute.type) {\n case 'relation': {\n // TODO: Support polymorphic relations\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n if (isMorphRelation) {\n break;\n }\n\n // TODO: Should this just be a plain list?\n // Ignore createdBy, updatedBy, ...\n const isVisible = contentTypes.isVisibleAttribute(model, attributeName);\n if (isVisible) {\n acc[attributeName] = { select: opts.relationalFields };\n }\n break;\n }\n\n case 'media': {\n acc[attributeName] = { select: ['id'] };\n break;\n }\n\n case 'component': {\n const populate = getDeepPopulate(attribute.component, opts);\n acc[attributeName] = { populate };\n break;\n }\n\n case 'dynamiczone': {\n // Use fragments to populate the dynamic zone components\n const populatedComponents = (attribute.components || []).reduce(\n (acc: any, componentUID: UID.Component) => {\n acc[componentUID] = { populate: getDeepPopulate(componentUID, opts) };\n return acc;\n },\n {}\n );\n\n acc[attributeName] = { on: populatedComponents };\n break;\n }\n default:\n break;\n }\n\n return acc;\n }, {});\n};\n"],"names":["acc"],"mappings":";AAWO,MAAM,kBAAkB,CAAC,KAAiB,OAAgB,OAAO;AAChE,QAAA,QAAQ,OAAO,SAAS,GAAG;AACjC,QAAM,aAAa,OAAO,QAAQ,MAAM,UAAU;AAElD,SAAO,WAAW,OAAO,CAAC,KAAU,CAAC,eAAe,SAAS,MAAM;AACjE,YAAQ,UAAU,MAAM;AAAA,MACtB,KAAK,YAAY;AAEf,cAAM,kBAAkB,UAAU,SAAS,YAAY,EAAE,WAAW,OAAO;AAC3E,YAAI,iBAAiB;AACnB;AAAA,QACF;AAIA,cAAM,YAAY,aAAa,mBAAmB,OAAO,aAAa;AACtE,YAAI,WAAW;AACb,cAAI,aAAa,IAAI,EAAE,QAAQ,KAAK,iBAAiB;AAAA,QACvD;AACA;AAAA,MACF;AAAA,MAEA,KAAK,SAAS;AACZ,YAAI,aAAa,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;AACtC;AAAA,MACF;AAAA,MAEA,KAAK,aAAa;AAChB,cAAM,WAAW,gBAAgB,UAAU,WAAW,IAAI;AACtD,YAAA,aAAa,IAAI,EAAE;AACvB;AAAA,MACF;AAAA,MAEA,KAAK,eAAe;AAElB,cAAM,uBAAuB,UAAU,cAAc,CAAI,GAAA;AAAA,UACvD,CAACA,MAAU,iBAAgC;AACzCA,iBAAI,YAAY,IAAI,EAAE,UAAU,gBAAgB,cAAc,IAAI;AAC3DA,mBAAAA;AAAAA,UACT;AAAA,UACA,CAAC;AAAA,QAAA;AAGH,YAAI,aAAa,IAAI,EAAE,IAAI,oBAAoB;AAC/C;AAAA,MACF;AAAA,IAGF;AAEO,WAAA;AAAA,EACT,GAAG,CAAE,CAAA;AACP;"}
1
+ {"version":3,"file":"populate.mjs","sources":["../../../../src/services/document-service/utils/populate.ts"],"sourcesContent":["import type { UID } from '@strapi/types';\nimport { contentTypes } from '@strapi/utils';\n\ninterface Options {\n /**\n * Fields to select when populating relations\n */\n relationalFields?: string[];\n}\n\nconst { CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } = contentTypes.constants;\n\n// We want to build a populate object based on the schema\nexport const getDeepPopulate = (uid: UID.Schema, opts: Options = {}) => {\n const model = strapi.getModel(uid);\n const attributes = Object.entries(model.attributes);\n\n return attributes.reduce((acc: any, [attributeName, attribute]) => {\n switch (attribute.type) {\n case 'relation': {\n // TODO: Support polymorphic relations\n const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');\n if (isMorphRelation) {\n break;\n }\n\n // Ignore not visible fields other than createdBy and updatedBy\n const isVisible = contentTypes.isVisibleAttribute(model, attributeName);\n const isCreatorField = [CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE].includes(attributeName);\n\n if (isVisible || isCreatorField) {\n acc[attributeName] = { select: opts.relationalFields };\n }\n\n break;\n }\n\n case 'media': {\n // We populate all media fields for completeness of webhook responses\n // see https://github.com/strapi/strapi/issues/21546\n acc[attributeName] = { select: ['*'] };\n break;\n }\n\n case 'component': {\n const populate = getDeepPopulate(attribute.component, opts);\n acc[attributeName] = { populate };\n break;\n }\n\n case 'dynamiczone': {\n // Use fragments to populate the dynamic zone components\n const populatedComponents = (attribute.components || []).reduce(\n (acc: any, componentUID: UID.Component) => {\n acc[componentUID] = { populate: getDeepPopulate(componentUID, opts) };\n return acc;\n },\n {}\n );\n\n acc[attributeName] = { on: populatedComponents };\n break;\n }\n default:\n break;\n }\n\n return acc;\n }, {});\n};\n"],"names":["CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","contentTypes","constants","getDeepPopulate","uid","opts","model","strapi","getModel","attributes","Object","entries","reduce","acc","attributeName","attribute","type","isMorphRelation","relation","toLowerCase","startsWith","isVisible","isVisibleAttribute","isCreatorField","includes","select","relationalFields","populate","component","populatedComponents","components","componentUID","on"],"mappings":";;AAUA,MAAM,EAAEA,oBAAoB,EAAEC,oBAAoB,EAAE,GAAGC,aAAaC,SAAS;AAE7E;MACaC,eAAkB,GAAA,CAACC,GAAiBC,EAAAA,IAAAA,GAAgB,EAAE,GAAA;IACjE,MAAMC,KAAAA,GAAQC,MAAOC,CAAAA,QAAQ,CAACJ,GAAAA,CAAAA;AAC9B,IAAA,MAAMK,UAAaC,GAAAA,MAAAA,CAAOC,OAAO,CAACL,MAAMG,UAAU,CAAA;AAElD,IAAA,OAAOA,WAAWG,MAAM,CAAC,CAACC,GAAU,EAAA,CAACC,eAAeC,SAAU,CAAA,GAAA;AAC5D,QAAA,OAAQA,UAAUC,IAAI;YACpB,KAAK,UAAA;AAAY,gBAAA;;AAEf,oBAAA,MAAMC,kBAAkBF,SAAUG,CAAAA,QAAQ,CAACC,WAAW,EAAA,CAAGC,UAAU,CAAC,OAAA,CAAA;AACpE,oBAAA,IAAIH,eAAiB,EAAA;AACnB,wBAAA;AACF;;AAGA,oBAAA,MAAMI,SAAYpB,GAAAA,YAAAA,CAAaqB,kBAAkB,CAAChB,KAAOQ,EAAAA,aAAAA,CAAAA;AACzD,oBAAA,MAAMS,cAAiB,GAAA;AAACxB,wBAAAA,oBAAAA;AAAsBC,wBAAAA;AAAqB,qBAAA,CAACwB,QAAQ,CAACV,aAAAA,CAAAA;AAE7E,oBAAA,IAAIO,aAAaE,cAAgB,EAAA;wBAC/BV,GAAG,CAACC,cAAc,GAAG;AAAEW,4BAAAA,MAAAA,EAAQpB,KAAKqB;AAAiB,yBAAA;AACvD;AAEA,oBAAA;AACF;YAEA,KAAK,OAAA;AAAS,gBAAA;;;oBAGZb,GAAG,CAACC,cAAc,GAAG;wBAAEW,MAAQ,EAAA;AAAC,4BAAA;AAAI;AAAC,qBAAA;AACrC,oBAAA;AACF;YAEA,KAAK,WAAA;AAAa,gBAAA;AAChB,oBAAA,MAAME,QAAWxB,GAAAA,eAAAA,CAAgBY,SAAUa,CAAAA,SAAS,EAAEvB,IAAAA,CAAAA;oBACtDQ,GAAG,CAACC,cAAc,GAAG;AAAEa,wBAAAA;AAAS,qBAAA;AAChC,oBAAA;AACF;YAEA,KAAK,aAAA;AAAe,gBAAA;;AAElB,oBAAA,MAAME,mBAAsB,GAACd,CAAAA,SAAAA,CAAUe,UAAU,IAAI,EAAC,EAAGlB,MAAM,CAC7D,CAACC,GAAUkB,EAAAA,YAAAA,GAAAA;wBACTlB,GAAG,CAACkB,aAAa,GAAG;AAAEJ,4BAAAA,QAAAA,EAAUxB,gBAAgB4B,YAAc1B,EAAAA,IAAAA;AAAM,yBAAA;wBACpE,OAAOQ,GAAAA;AACT,qBAAA,EACA,EAAC,CAAA;oBAGHA,GAAG,CAACC,cAAc,GAAG;wBAAEkB,EAAIH,EAAAA;AAAoB,qBAAA;AAC/C,oBAAA;AACF;AAGF;QAEA,OAAOhB,GAAAA;AACT,KAAA,EAAG,EAAC,CAAA;AACN;;;;"}
@@ -0,0 +1,53 @@
1
+ import type { UID, Schema } from '@strapi/types';
2
+ import type { JoinTable } from '@strapi/database';
3
+ interface LoadContext {
4
+ oldVersions: {
5
+ id: string;
6
+ locale: string;
7
+ }[];
8
+ newVersions: {
9
+ id: string;
10
+ locale: string;
11
+ }[];
12
+ }
13
+ interface RelationUpdate {
14
+ joinTable: JoinTable;
15
+ relations: Record<string, any>[];
16
+ }
17
+ interface RelationFilterOptions {
18
+ /**
19
+ * Function to determine if a relation should be propagated to new document versions
20
+ * This replaces the hardcoded component-specific logic
21
+ */
22
+ shouldPropagateRelation?: (relation: Record<string, any>, model: Schema.Component | Schema.ContentType, trx: any) => Promise<boolean>;
23
+ }
24
+ /**
25
+ * Loads lingering relations that need to be updated when overriding a published or draft entry.
26
+ * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.
27
+ * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.
28
+ */
29
+ declare const load: (uid: UID.ContentType, { oldVersions, newVersions }: LoadContext, options?: RelationFilterOptions) => Promise<RelationUpdate[]>;
30
+ /**
31
+ * Updates uni directional relations to target the right entries when overriding published or draft entries.
32
+ *
33
+ * This function:
34
+ * 1. Creates new relations pointing to the new entry versions
35
+ * 2. Precisely deletes only the old relations being replaced to prevent orphaned links
36
+ *
37
+ * @param oldEntries The old entries that are being overridden
38
+ * @param newEntries The new entries that are overriding the old ones
39
+ * @param oldRelations The relations that were previously loaded with `load` @see load
40
+ */
41
+ declare const sync: (oldEntries: {
42
+ id: string;
43
+ locale: string;
44
+ }[], newEntries: {
45
+ id: string;
46
+ locale: string;
47
+ }[], oldRelations: {
48
+ joinTable: any;
49
+ relations: any[];
50
+ }[]) => Promise<void>;
51
+ export { load, sync };
52
+ export type { RelationFilterOptions };
53
+ //# sourceMappingURL=unidirectional-relations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unidirectional-relations.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,UAAU,WAAW;IACnB,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9C,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C;AAED,UAAU,cAAc;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAClC;AAED,UAAU,qBAAqB;IAC7B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,CACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,KAAK,EAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,EAC5C,GAAG,EAAE,GAAG,KACL,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED;;;;GAIG;AACH,QAAA,MAAM,IAAI,QACH,IAAI,WAAW,gCACU,WAAW,YAChC,qBAAqB,KAC7B,QAAQ,cAAc,EAAE,CA2G1B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,IAAI,eACI;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,cAChC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,gBAC9B;IAAE,SAAS,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,EAAE,CAAA;CAAE,EAAE,kBAkDrD,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,145 @@
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 }, options = {})=>{
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
+ // This is the step were we query the join table based on the id of the document
57
+ const newVersionsRelations = await strapi.db.getConnection().select('*').from(joinTable.name).whereIn(targetColumnName, ids).transacting(trx);
58
+ let filteredRelations = newVersionsRelations;
59
+ // Apply custom filtering if provided
60
+ if (options.shouldPropagateRelation) {
61
+ const relationsToPropagate = [];
62
+ for (const relation of newVersionsRelations){
63
+ if (await options.shouldPropagateRelation(relation, model, trx)) {
64
+ relationsToPropagate.push(relation);
65
+ }
66
+ }
67
+ filteredRelations = relationsToPropagate;
68
+ }
69
+ if (filteredRelations.length > 0) {
70
+ // when publishing a draft that doesn't have a published version yet,
71
+ // copy the links to the draft over to the published version
72
+ // when discarding a published version, if no drafts exists
73
+ const discardToAdd = filteredRelations.filter((relation)=>{
74
+ const matchingOldVersion = oldVersionsRelations.find((oldRelation)=>{
75
+ return oldRelation[sourceColumnName] === relation[sourceColumnName];
76
+ });
77
+ return !matchingOldVersion;
78
+ }).map(fp.omit(strapi.db.metadata.identifiers.ID_COLUMN));
79
+ updates.push({
80
+ joinTable,
81
+ relations: discardToAdd
82
+ });
83
+ }
84
+ }
85
+ }
86
+ }
87
+ });
88
+ return updates;
89
+ };
90
+ /**
91
+ * Updates uni directional relations to target the right entries when overriding published or draft entries.
92
+ *
93
+ * This function:
94
+ * 1. Creates new relations pointing to the new entry versions
95
+ * 2. Precisely deletes only the old relations being replaced to prevent orphaned links
96
+ *
97
+ * @param oldEntries The old entries that are being overridden
98
+ * @param newEntries The new entries that are overriding the old ones
99
+ * @param oldRelations The relations that were previously loaded with `load` @see load
100
+ */ const sync = async (oldEntries, newEntries, oldRelations)=>{
101
+ /**
102
+ * Create a map of old entry ids to new entry ids
103
+ *
104
+ * Will be used to update the relation target ids
105
+ */ const newEntryByLocale = fp.keyBy('locale', newEntries);
106
+ const oldEntriesMap = oldEntries.reduce((acc, entry)=>{
107
+ const newEntry = newEntryByLocale[entry.locale];
108
+ if (!newEntry) return acc;
109
+ acc[entry.id] = newEntry.id;
110
+ return acc;
111
+ }, {});
112
+ await strapi.db.transaction(async ({ trx })=>{
113
+ // Iterate old relations that are deleted and insert the new ones
114
+ for (const { joinTable, relations } of oldRelations){
115
+ // Update old ids with the new ones
116
+ const column = joinTable.inverseJoinColumn.name;
117
+ const newRelations = relations.map((relation)=>{
118
+ const newId = oldEntriesMap[relation[column]];
119
+ return {
120
+ ...relation,
121
+ [column]: newId
122
+ };
123
+ });
124
+ // Delete the old relations BEFORE inserting new ones
125
+ // This prevents orphaned draft relations while being precise about what we delete
126
+ if (relations.length > 0) {
127
+ // Delete the old relations by matching their exact foreign key values
128
+ for (const relation of relations){
129
+ const sourceColumn = joinTable.joinColumn.name;
130
+ const targetColumn = joinTable.inverseJoinColumn.name;
131
+ await trx(joinTable.name).where({
132
+ [sourceColumn]: relation[sourceColumn],
133
+ [targetColumn]: relation[targetColumn]
134
+ }).del();
135
+ }
136
+ }
137
+ // Insert those relations into the join table
138
+ await trx.batchInsert(joinTable.name, newRelations, 1000);
139
+ }
140
+ });
141
+ };
142
+
143
+ exports.load = load;
144
+ exports.sync = sync;
145
+ //# sourceMappingURL=unidirectional-relations.js.map
@@ -0,0 +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 type { UID, Schema } from '@strapi/types';\n\nimport type { JoinTable } from '@strapi/database';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\ninterface RelationUpdate {\n joinTable: JoinTable;\n relations: Record<string, any>[];\n}\n\ninterface RelationFilterOptions {\n /**\n * Function to determine if a relation should be propagated to new document versions\n * This replaces the hardcoded component-specific logic\n */\n shouldPropagateRelation?: (\n relation: Record<string, any>,\n model: Schema.Component | Schema.ContentType,\n trx: any\n ) => Promise<boolean>;\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 (\n uid: UID.ContentType,\n { oldVersions, newVersions }: LoadContext,\n options: RelationFilterOptions = {}\n): Promise<RelationUpdate[]> => {\n const updates: RelationUpdate[] = [];\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 if (!model.options?.draftAndPublish) {\n const ids = newVersions.map((entry) => entry.id);\n\n // This is the step were we query the join table based on the id of the document\n const newVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n let filteredRelations = newVersionsRelations;\n\n // Apply custom filtering if provided\n if (options.shouldPropagateRelation) {\n const relationsToPropagate = [];\n for (const relation of newVersionsRelations) {\n if (await options.shouldPropagateRelation(relation, model, trx)) {\n relationsToPropagate.push(relation);\n }\n }\n filteredRelations = relationsToPropagate;\n }\n\n if (filteredRelations.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 = filteredRelations\n .filter((relation) => {\n const matchingOldVersion = oldVersionsRelations.find((oldRelation) => {\n return oldRelation[sourceColumnName] === relation[sourceColumnName];\n });\n\n return !matchingOldVersion;\n })\n .map(omit(strapi.db.metadata.identifiers.ID_COLUMN));\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 * This function:\n * 1. Creates new relations pointing to the new entry versions\n * 2. Precisely deletes only the old relations being replaced to prevent orphaned links\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 // Delete the old relations BEFORE inserting new ones\n // This prevents orphaned draft relations while being precise about what we delete\n if (relations.length > 0) {\n // Delete the old relations by matching their exact foreign key values\n for (const relation of relations) {\n const sourceColumn = joinTable.joinColumn.name;\n const targetColumn = joinTable.inverseJoinColumn.name;\n\n await trx(joinTable.name)\n .where({\n [sourceColumn]: relation[sourceColumn],\n [targetColumn]: relation[targetColumn],\n })\n .del();\n }\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 };\nexport type { RelationFilterOptions };\n"],"names":["load","uid","oldVersions","newVersions","options","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","draftAndPublish","newVersionsRelations","filteredRelations","shouldPropagateRelation","relationsToPropagate","relation","discardToAdd","filter","matchingOldVersion","find","oldRelation","omit","identifiers","ID_COLUMN","sync","oldEntries","newEntries","oldRelations","newEntryByLocale","keyBy","oldEntriesMap","reduce","acc","newEntry","locale","column","newRelations","newId","sourceColumn","targetColumn","where","del","batchInsert"],"mappings":"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"}
@@ -0,0 +1,142 @@
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 }, options = {})=>{
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
+ // This is the step were we query the join table based on the id of the document
55
+ const newVersionsRelations = await strapi.db.getConnection().select('*').from(joinTable.name).whereIn(targetColumnName, ids).transacting(trx);
56
+ let filteredRelations = newVersionsRelations;
57
+ // Apply custom filtering if provided
58
+ if (options.shouldPropagateRelation) {
59
+ const relationsToPropagate = [];
60
+ for (const relation of newVersionsRelations){
61
+ if (await options.shouldPropagateRelation(relation, model, trx)) {
62
+ relationsToPropagate.push(relation);
63
+ }
64
+ }
65
+ filteredRelations = relationsToPropagate;
66
+ }
67
+ if (filteredRelations.length > 0) {
68
+ // when publishing a draft that doesn't have a published version yet,
69
+ // copy the links to the draft over to the published version
70
+ // when discarding a published version, if no drafts exists
71
+ const discardToAdd = filteredRelations.filter((relation)=>{
72
+ const matchingOldVersion = oldVersionsRelations.find((oldRelation)=>{
73
+ return oldRelation[sourceColumnName] === relation[sourceColumnName];
74
+ });
75
+ return !matchingOldVersion;
76
+ }).map(omit(strapi.db.metadata.identifiers.ID_COLUMN));
77
+ updates.push({
78
+ joinTable,
79
+ relations: discardToAdd
80
+ });
81
+ }
82
+ }
83
+ }
84
+ }
85
+ });
86
+ return updates;
87
+ };
88
+ /**
89
+ * Updates uni directional relations to target the right entries when overriding published or draft entries.
90
+ *
91
+ * This function:
92
+ * 1. Creates new relations pointing to the new entry versions
93
+ * 2. Precisely deletes only the old relations being replaced to prevent orphaned links
94
+ *
95
+ * @param oldEntries The old entries that are being overridden
96
+ * @param newEntries The new entries that are overriding the old ones
97
+ * @param oldRelations The relations that were previously loaded with `load` @see load
98
+ */ const sync = async (oldEntries, newEntries, oldRelations)=>{
99
+ /**
100
+ * Create a map of old entry ids to new entry ids
101
+ *
102
+ * Will be used to update the relation target ids
103
+ */ const newEntryByLocale = keyBy('locale', newEntries);
104
+ const oldEntriesMap = oldEntries.reduce((acc, entry)=>{
105
+ const newEntry = newEntryByLocale[entry.locale];
106
+ if (!newEntry) return acc;
107
+ acc[entry.id] = newEntry.id;
108
+ return acc;
109
+ }, {});
110
+ await strapi.db.transaction(async ({ trx })=>{
111
+ // Iterate old relations that are deleted and insert the new ones
112
+ for (const { joinTable, relations } of oldRelations){
113
+ // Update old ids with the new ones
114
+ const column = joinTable.inverseJoinColumn.name;
115
+ const newRelations = relations.map((relation)=>{
116
+ const newId = oldEntriesMap[relation[column]];
117
+ return {
118
+ ...relation,
119
+ [column]: newId
120
+ };
121
+ });
122
+ // Delete the old relations BEFORE inserting new ones
123
+ // This prevents orphaned draft relations while being precise about what we delete
124
+ if (relations.length > 0) {
125
+ // Delete the old relations by matching their exact foreign key values
126
+ for (const relation of relations){
127
+ const sourceColumn = joinTable.joinColumn.name;
128
+ const targetColumn = joinTable.inverseJoinColumn.name;
129
+ await trx(joinTable.name).where({
130
+ [sourceColumn]: relation[sourceColumn],
131
+ [targetColumn]: relation[targetColumn]
132
+ }).del();
133
+ }
134
+ }
135
+ // Insert those relations into the join table
136
+ await trx.batchInsert(joinTable.name, newRelations, 1000);
137
+ }
138
+ });
139
+ };
140
+
141
+ export { load, sync };
142
+ //# sourceMappingURL=unidirectional-relations.mjs.map
@@ -0,0 +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 type { UID, Schema } from '@strapi/types';\n\nimport type { JoinTable } from '@strapi/database';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\ninterface RelationUpdate {\n joinTable: JoinTable;\n relations: Record<string, any>[];\n}\n\ninterface RelationFilterOptions {\n /**\n * Function to determine if a relation should be propagated to new document versions\n * This replaces the hardcoded component-specific logic\n */\n shouldPropagateRelation?: (\n relation: Record<string, any>,\n model: Schema.Component | Schema.ContentType,\n trx: any\n ) => Promise<boolean>;\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 (\n uid: UID.ContentType,\n { oldVersions, newVersions }: LoadContext,\n options: RelationFilterOptions = {}\n): Promise<RelationUpdate[]> => {\n const updates: RelationUpdate[] = [];\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 if (!model.options?.draftAndPublish) {\n const ids = newVersions.map((entry) => entry.id);\n\n // This is the step were we query the join table based on the id of the document\n const newVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n let filteredRelations = newVersionsRelations;\n\n // Apply custom filtering if provided\n if (options.shouldPropagateRelation) {\n const relationsToPropagate = [];\n for (const relation of newVersionsRelations) {\n if (await options.shouldPropagateRelation(relation, model, trx)) {\n relationsToPropagate.push(relation);\n }\n }\n filteredRelations = relationsToPropagate;\n }\n\n if (filteredRelations.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 = filteredRelations\n .filter((relation) => {\n const matchingOldVersion = oldVersionsRelations.find((oldRelation) => {\n return oldRelation[sourceColumnName] === relation[sourceColumnName];\n });\n\n return !matchingOldVersion;\n })\n .map(omit(strapi.db.metadata.identifiers.ID_COLUMN));\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 * This function:\n * 1. Creates new relations pointing to the new entry versions\n * 2. Precisely deletes only the old relations being replaced to prevent orphaned links\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 // Delete the old relations BEFORE inserting new ones\n // This prevents orphaned draft relations while being precise about what we delete\n if (relations.length > 0) {\n // Delete the old relations by matching their exact foreign key values\n for (const relation of relations) {\n const sourceColumn = joinTable.joinColumn.name;\n const targetColumn = joinTable.inverseJoinColumn.name;\n\n await trx(joinTable.name)\n .where({\n [sourceColumn]: relation[sourceColumn],\n [targetColumn]: relation[targetColumn],\n })\n .del();\n }\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 };\nexport type { RelationFilterOptions };\n"],"names":["load","uid","oldVersions","newVersions","options","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","draftAndPublish","newVersionsRelations","filteredRelations","shouldPropagateRelation","relationsToPropagate","relation","discardToAdd","filter","matchingOldVersion","find","oldRelation","omit","identifiers","ID_COLUMN","sync","oldEntries","newEntries","oldRelations","newEntryByLocale","keyBy","oldEntriesMap","reduce","acc","newEntry","locale","column","newRelations","newId","sourceColumn","targetColumn","where","del","batchInsert"],"mappings":"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"}