@strapi/core 0.0.0-experimental.d23c1d5b0e45dd06ef09977f526c85468be05403 → 0.0.0-experimental.d23f1485e5669cca1cee1bf5f8168b6b8109b78f

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 (880) hide show
  1. package/LICENSE +18 -3
  2. package/dist/Strapi.d.ts +4 -1
  3. package/dist/Strapi.d.ts.map +1 -1
  4. package/dist/Strapi.js +456 -369
  5. package/dist/Strapi.js.map +1 -1
  6. package/dist/Strapi.mjs +445 -377
  7. package/dist/Strapi.mjs.map +1 -1
  8. package/dist/compile.js +23 -14
  9. package/dist/compile.js.map +1 -1
  10. package/dist/compile.mjs +22 -14
  11. package/dist/compile.mjs.map +1 -1
  12. package/dist/configuration/config-loader.js +110 -97
  13. package/dist/configuration/config-loader.js.map +1 -1
  14. package/dist/configuration/config-loader.mjs +109 -96
  15. package/dist/configuration/config-loader.mjs.map +1 -1
  16. package/dist/configuration/get-dirs.js +31 -29
  17. package/dist/configuration/get-dirs.js.map +1 -1
  18. package/dist/configuration/get-dirs.mjs +30 -30
  19. package/dist/configuration/get-dirs.mjs.map +1 -1
  20. package/dist/configuration/index.d.ts +1 -0
  21. package/dist/configuration/index.d.ts.map +1 -1
  22. package/dist/configuration/index.js +85 -73
  23. package/dist/configuration/index.js.map +1 -1
  24. package/dist/configuration/index.mjs +84 -69
  25. package/dist/configuration/index.mjs.map +1 -1
  26. package/dist/configuration/urls.d.ts.map +1 -1
  27. package/dist/configuration/urls.js +74 -61
  28. package/dist/configuration/urls.js.map +1 -1
  29. package/dist/configuration/urls.mjs +73 -62
  30. package/dist/configuration/urls.mjs.map +1 -1
  31. package/dist/constants.d.ts +3 -0
  32. package/dist/constants.d.ts.map +1 -0
  33. package/dist/constants.js +6 -0
  34. package/dist/constants.js.map +1 -0
  35. package/dist/constants.mjs +4 -0
  36. package/dist/constants.mjs.map +1 -0
  37. package/dist/container.js +27 -23
  38. package/dist/container.js.map +1 -1
  39. package/dist/container.mjs +26 -24
  40. package/dist/container.mjs.map +1 -1
  41. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  42. package/dist/core-api/controller/collection-type.js +77 -74
  43. package/dist/core-api/controller/collection-type.js.map +1 -1
  44. package/dist/core-api/controller/collection-type.mjs +76 -75
  45. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  46. package/dist/core-api/controller/index.d.ts.map +1 -1
  47. package/dist/core-api/controller/index.js +64 -48
  48. package/dist/core-api/controller/index.js.map +1 -1
  49. package/dist/core-api/controller/index.mjs +63 -49
  50. package/dist/core-api/controller/index.mjs.map +1 -1
  51. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  52. package/dist/core-api/controller/single-type.js +41 -39
  53. package/dist/core-api/controller/single-type.js.map +1 -1
  54. package/dist/core-api/controller/single-type.mjs +40 -40
  55. package/dist/core-api/controller/single-type.mjs.map +1 -1
  56. package/dist/core-api/controller/transform.d.ts +3 -2
  57. package/dist/core-api/controller/transform.d.ts.map +1 -1
  58. package/dist/core-api/controller/transform.js +83 -64
  59. package/dist/core-api/controller/transform.js.map +1 -1
  60. package/dist/core-api/controller/transform.mjs +82 -65
  61. package/dist/core-api/controller/transform.mjs.map +1 -1
  62. package/dist/core-api/routes/index.d.ts +4 -22
  63. package/dist/core-api/routes/index.d.ts.map +1 -1
  64. package/dist/core-api/routes/index.js +205 -61
  65. package/dist/core-api/routes/index.js.map +1 -1
  66. package/dist/core-api/routes/index.mjs +185 -62
  67. package/dist/core-api/routes/index.mjs.map +1 -1
  68. package/dist/core-api/routes/validation/attributes.d.ts +244 -0
  69. package/dist/core-api/routes/validation/attributes.d.ts.map +1 -0
  70. package/dist/core-api/routes/validation/attributes.js +560 -0
  71. package/dist/core-api/routes/validation/attributes.js.map +1 -0
  72. package/dist/core-api/routes/validation/attributes.mjs +521 -0
  73. package/dist/core-api/routes/validation/attributes.mjs.map +1 -0
  74. package/dist/core-api/routes/validation/common.d.ts +105 -0
  75. package/dist/core-api/routes/validation/common.d.ts.map +1 -0
  76. package/dist/core-api/routes/validation/common.js +116 -0
  77. package/dist/core-api/routes/validation/common.js.map +1 -0
  78. package/dist/core-api/routes/validation/common.mjs +95 -0
  79. package/dist/core-api/routes/validation/common.mjs.map +1 -0
  80. package/dist/core-api/routes/validation/component.d.ts +34 -0
  81. package/dist/core-api/routes/validation/component.d.ts.map +1 -0
  82. package/dist/core-api/routes/validation/component.js +45 -0
  83. package/dist/core-api/routes/validation/component.js.map +1 -0
  84. package/dist/core-api/routes/validation/component.mjs +43 -0
  85. package/dist/core-api/routes/validation/component.mjs.map +1 -0
  86. package/dist/core-api/routes/validation/constants.d.ts +8 -0
  87. package/dist/core-api/routes/validation/constants.d.ts.map +1 -0
  88. package/dist/core-api/routes/validation/constants.js +18 -0
  89. package/dist/core-api/routes/validation/constants.js.map +1 -0
  90. package/dist/core-api/routes/validation/constants.mjs +16 -0
  91. package/dist/core-api/routes/validation/constants.mjs.map +1 -0
  92. package/dist/core-api/routes/validation/content-type.d.ts +128 -0
  93. package/dist/core-api/routes/validation/content-type.d.ts.map +1 -0
  94. package/dist/core-api/routes/validation/content-type.js +201 -0
  95. package/dist/core-api/routes/validation/content-type.js.map +1 -0
  96. package/dist/core-api/routes/validation/content-type.mjs +180 -0
  97. package/dist/core-api/routes/validation/content-type.mjs.map +1 -0
  98. package/dist/core-api/routes/validation/index.d.ts +5 -0
  99. package/dist/core-api/routes/validation/index.d.ts.map +1 -0
  100. package/dist/core-api/routes/validation/mappers.d.ts +105 -0
  101. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -0
  102. package/dist/core-api/routes/validation/mappers.js +273 -0
  103. package/dist/core-api/routes/validation/mappers.js.map +1 -0
  104. package/dist/core-api/routes/validation/mappers.mjs +249 -0
  105. package/dist/core-api/routes/validation/mappers.mjs.map +1 -0
  106. package/dist/core-api/routes/validation/utils.d.ts +47 -0
  107. package/dist/core-api/routes/validation/utils.d.ts.map +1 -0
  108. package/dist/core-api/routes/validation/utils.js +128 -0
  109. package/dist/core-api/routes/validation/utils.js.map +1 -0
  110. package/dist/core-api/routes/validation/utils.mjs +106 -0
  111. package/dist/core-api/routes/validation/utils.mjs.map +1 -0
  112. package/dist/core-api/service/collection-type.d.ts +3 -9
  113. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  114. package/dist/core-api/service/collection-type.js +73 -58
  115. package/dist/core-api/service/collection-type.js.map +1 -1
  116. package/dist/core-api/service/collection-type.mjs +72 -60
  117. package/dist/core-api/service/collection-type.mjs.map +1 -1
  118. package/dist/core-api/service/core-service.js +9 -8
  119. package/dist/core-api/service/core-service.js.map +1 -1
  120. package/dist/core-api/service/core-service.mjs +8 -9
  121. package/dist/core-api/service/core-service.mjs.map +1 -1
  122. package/dist/core-api/service/index.js +13 -13
  123. package/dist/core-api/service/index.js.map +1 -1
  124. package/dist/core-api/service/index.mjs +12 -14
  125. package/dist/core-api/service/index.mjs.map +1 -1
  126. package/dist/core-api/service/pagination.d.ts +4 -11
  127. package/dist/core-api/service/pagination.d.ts.map +1 -1
  128. package/dist/core-api/service/pagination.js +68 -68
  129. package/dist/core-api/service/pagination.js.map +1 -1
  130. package/dist/core-api/service/pagination.mjs +66 -71
  131. package/dist/core-api/service/pagination.mjs.map +1 -1
  132. package/dist/core-api/service/single-type.d.ts.map +1 -1
  133. package/dist/core-api/service/single-type.js +43 -38
  134. package/dist/core-api/service/single-type.js.map +1 -1
  135. package/dist/core-api/service/single-type.mjs +42 -40
  136. package/dist/core-api/service/single-type.mjs.map +1 -1
  137. package/dist/domain/content-type/index.d.ts.map +1 -1
  138. package/dist/domain/content-type/index.js +110 -99
  139. package/dist/domain/content-type/index.js.map +1 -1
  140. package/dist/domain/content-type/index.mjs +109 -99
  141. package/dist/domain/content-type/index.mjs.map +1 -1
  142. package/dist/domain/content-type/validator.js +84 -69
  143. package/dist/domain/content-type/validator.js.map +1 -1
  144. package/dist/domain/content-type/validator.mjs +83 -68
  145. package/dist/domain/content-type/validator.mjs.map +1 -1
  146. package/dist/domain/module/index.d.ts.map +1 -1
  147. package/dist/domain/module/index.js +112 -100
  148. package/dist/domain/module/index.js.map +1 -1
  149. package/dist/domain/module/index.mjs +111 -99
  150. package/dist/domain/module/index.mjs.map +1 -1
  151. package/dist/domain/module/validation.js +25 -20
  152. package/dist/domain/module/validation.js.map +1 -1
  153. package/dist/domain/module/validation.mjs +24 -21
  154. package/dist/domain/module/validation.mjs.map +1 -1
  155. package/dist/ee/index.d.ts +7 -0
  156. package/dist/ee/index.d.ts.map +1 -1
  157. package/dist/ee/index.js +197 -132
  158. package/dist/ee/index.js.map +1 -1
  159. package/dist/ee/index.mjs +196 -134
  160. package/dist/ee/index.mjs.map +1 -1
  161. package/dist/ee/license.d.ts +3 -1
  162. package/dist/ee/license.d.ts.map +1 -1
  163. package/dist/ee/license.js +105 -75
  164. package/dist/ee/license.js.map +1 -1
  165. package/dist/ee/license.mjs +103 -76
  166. package/dist/ee/license.mjs.map +1 -1
  167. package/dist/factories.d.ts +3 -1
  168. package/dist/factories.d.ts.map +1 -1
  169. package/dist/factories.js +80 -67
  170. package/dist/factories.js.map +1 -1
  171. package/dist/factories.mjs +77 -70
  172. package/dist/factories.mjs.map +1 -1
  173. package/dist/index.d.ts +14 -0
  174. package/dist/index.d.ts.map +1 -1
  175. package/dist/index.js +29 -26
  176. package/dist/index.js.map +1 -1
  177. package/dist/index.mjs +29 -29
  178. package/dist/index.mjs.map +1 -1
  179. package/dist/loaders/admin.d.ts.map +1 -1
  180. package/dist/loaders/admin.js +21 -20
  181. package/dist/loaders/admin.js.map +1 -1
  182. package/dist/loaders/admin.mjs +20 -20
  183. package/dist/loaders/admin.mjs.map +1 -1
  184. package/dist/loaders/apis.d.ts.map +1 -1
  185. package/dist/loaders/apis.js +143 -120
  186. package/dist/loaders/apis.js.map +1 -1
  187. package/dist/loaders/apis.mjs +142 -119
  188. package/dist/loaders/apis.mjs.map +1 -1
  189. package/dist/loaders/components.js +33 -34
  190. package/dist/loaders/components.js.map +1 -1
  191. package/dist/loaders/components.mjs +32 -34
  192. package/dist/loaders/components.mjs.map +1 -1
  193. package/dist/loaders/index.js +22 -20
  194. package/dist/loaders/index.js.map +1 -1
  195. package/dist/loaders/index.mjs +21 -21
  196. package/dist/loaders/index.mjs.map +1 -1
  197. package/dist/loaders/middlewares.js +29 -25
  198. package/dist/loaders/middlewares.js.map +1 -1
  199. package/dist/loaders/middlewares.mjs +28 -25
  200. package/dist/loaders/middlewares.mjs.map +1 -1
  201. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  202. package/dist/loaders/plugins/get-enabled-plugins.js +125 -102
  203. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  204. package/dist/loaders/plugins/get-enabled-plugins.mjs +124 -101
  205. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  206. package/dist/loaders/plugins/get-user-plugins-config.js +25 -24
  207. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  208. package/dist/loaders/plugins/get-user-plugins-config.mjs +24 -23
  209. package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
  210. package/dist/loaders/plugins/index.d.ts.map +1 -1
  211. package/dist/loaders/plugins/index.js +141 -104
  212. package/dist/loaders/plugins/index.js.map +1 -1
  213. package/dist/loaders/plugins/index.mjs +121 -104
  214. package/dist/loaders/plugins/index.mjs.map +1 -1
  215. package/dist/loaders/policies.js +24 -20
  216. package/dist/loaders/policies.js.map +1 -1
  217. package/dist/loaders/policies.mjs +23 -20
  218. package/dist/loaders/policies.mjs.map +1 -1
  219. package/dist/loaders/sanitizers.js +10 -4
  220. package/dist/loaders/sanitizers.js.map +1 -1
  221. package/dist/loaders/sanitizers.mjs +9 -6
  222. package/dist/loaders/sanitizers.mjs.map +1 -1
  223. package/dist/loaders/src-index.js +35 -27
  224. package/dist/loaders/src-index.js.map +1 -1
  225. package/dist/loaders/src-index.mjs +34 -29
  226. package/dist/loaders/src-index.mjs.map +1 -1
  227. package/dist/loaders/validators.js +9 -4
  228. package/dist/loaders/validators.js.map +1 -1
  229. package/dist/loaders/validators.mjs +8 -6
  230. package/dist/loaders/validators.mjs.map +1 -1
  231. package/dist/middlewares/body.d.ts.map +1 -1
  232. package/dist/middlewares/body.js +58 -54
  233. package/dist/middlewares/body.js.map +1 -1
  234. package/dist/middlewares/body.mjs +57 -51
  235. package/dist/middlewares/body.mjs.map +1 -1
  236. package/dist/middlewares/compression.js +6 -6
  237. package/dist/middlewares/compression.js.map +1 -1
  238. package/dist/middlewares/compression.mjs +5 -5
  239. package/dist/middlewares/compression.mjs.map +1 -1
  240. package/dist/middlewares/cors.d.ts +9 -1
  241. package/dist/middlewares/cors.d.ts.map +1 -1
  242. package/dist/middlewares/cors.js +81 -46
  243. package/dist/middlewares/cors.js.map +1 -1
  244. package/dist/middlewares/cors.mjs +78 -44
  245. package/dist/middlewares/cors.mjs.map +1 -1
  246. package/dist/middlewares/errors.js +32 -30
  247. package/dist/middlewares/errors.js.map +1 -1
  248. package/dist/middlewares/errors.mjs +31 -31
  249. package/dist/middlewares/errors.mjs.map +1 -1
  250. package/dist/middlewares/favicon.js +27 -17
  251. package/dist/middlewares/favicon.js.map +1 -1
  252. package/dist/middlewares/favicon.mjs +26 -16
  253. package/dist/middlewares/favicon.mjs.map +1 -1
  254. package/dist/middlewares/index.js +32 -30
  255. package/dist/middlewares/index.js.map +1 -1
  256. package/dist/middlewares/index.mjs +31 -31
  257. package/dist/middlewares/index.mjs.map +1 -1
  258. package/dist/middlewares/ip.js +6 -6
  259. package/dist/middlewares/ip.js.map +1 -1
  260. package/dist/middlewares/ip.mjs +5 -5
  261. package/dist/middlewares/ip.mjs.map +1 -1
  262. package/dist/middlewares/logger.js +10 -9
  263. package/dist/middlewares/logger.js.map +1 -1
  264. package/dist/middlewares/logger.mjs +9 -10
  265. package/dist/middlewares/logger.mjs.map +1 -1
  266. package/dist/middlewares/powered-by.js +13 -9
  267. package/dist/middlewares/powered-by.js.map +1 -1
  268. package/dist/middlewares/powered-by.mjs +12 -10
  269. package/dist/middlewares/powered-by.mjs.map +1 -1
  270. package/dist/middlewares/public.js +33 -29
  271. package/dist/middlewares/public.js.map +1 -1
  272. package/dist/middlewares/public.mjs +32 -28
  273. package/dist/middlewares/public.mjs.map +1 -1
  274. package/dist/middlewares/query.d.ts.map +1 -1
  275. package/dist/middlewares/query.js +35 -32
  276. package/dist/middlewares/query.js.map +1 -1
  277. package/dist/middlewares/query.mjs +34 -31
  278. package/dist/middlewares/query.mjs.map +1 -1
  279. package/dist/middlewares/response-time.js +10 -9
  280. package/dist/middlewares/response-time.js.map +1 -1
  281. package/dist/middlewares/response-time.mjs +9 -10
  282. package/dist/middlewares/response-time.mjs.map +1 -1
  283. package/dist/middlewares/responses.js +14 -12
  284. package/dist/middlewares/responses.js.map +1 -1
  285. package/dist/middlewares/responses.mjs +13 -13
  286. package/dist/middlewares/responses.mjs.map +1 -1
  287. package/dist/middlewares/security.d.ts.map +1 -1
  288. package/dist/middlewares/security.js +110 -65
  289. package/dist/middlewares/security.js.map +1 -1
  290. package/dist/middlewares/security.mjs +108 -63
  291. package/dist/middlewares/security.mjs.map +1 -1
  292. package/dist/middlewares/session.js +26 -25
  293. package/dist/middlewares/session.js.map +1 -1
  294. package/dist/middlewares/session.mjs +25 -24
  295. package/dist/middlewares/session.mjs.map +1 -1
  296. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +33 -0
  297. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -0
  298. package/dist/migrations/database/5.0.0-discard-drafts.js +168 -0
  299. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -0
  300. package/dist/migrations/database/5.0.0-discard-drafts.mjs +165 -0
  301. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -0
  302. package/dist/migrations/draft-publish.d.ts +2 -2
  303. package/dist/migrations/draft-publish.d.ts.map +1 -1
  304. package/dist/migrations/draft-publish.js +59 -49
  305. package/dist/migrations/draft-publish.js.map +1 -1
  306. package/dist/migrations/draft-publish.mjs +58 -51
  307. package/dist/migrations/draft-publish.mjs.map +1 -1
  308. package/dist/migrations/first-published-at.d.ts +4 -0
  309. package/dist/migrations/first-published-at.d.ts.map +1 -0
  310. package/dist/migrations/first-published-at.js +51 -0
  311. package/dist/migrations/first-published-at.js.map +1 -0
  312. package/dist/migrations/first-published-at.mjs +49 -0
  313. package/dist/migrations/first-published-at.mjs.map +1 -0
  314. package/dist/migrations/i18n.d.ts +5 -0
  315. package/dist/migrations/i18n.d.ts.map +1 -0
  316. package/dist/migrations/i18n.js +71 -0
  317. package/dist/migrations/i18n.js.map +1 -0
  318. package/dist/migrations/i18n.mjs +68 -0
  319. package/dist/migrations/i18n.mjs.map +1 -0
  320. package/dist/migrations/index.d.ts +5 -0
  321. package/dist/migrations/index.d.ts.map +1 -0
  322. package/dist/migrations/index.js +34 -0
  323. package/dist/migrations/index.js.map +1 -0
  324. package/dist/migrations/index.mjs +31 -0
  325. package/dist/migrations/index.mjs.map +1 -0
  326. package/dist/package.json.js +187 -0
  327. package/dist/package.json.js.map +1 -0
  328. package/dist/package.json.mjs +164 -0
  329. package/dist/package.json.mjs.map +1 -0
  330. package/dist/providers/admin.d.ts.map +1 -1
  331. package/dist/providers/admin.js +27 -17
  332. package/dist/providers/admin.js.map +1 -1
  333. package/dist/providers/admin.mjs +26 -19
  334. package/dist/providers/admin.mjs.map +1 -1
  335. package/dist/providers/coreStore.js +13 -8
  336. package/dist/providers/coreStore.js.map +1 -1
  337. package/dist/providers/coreStore.mjs +12 -10
  338. package/dist/providers/coreStore.mjs.map +1 -1
  339. package/dist/providers/cron.js +19 -16
  340. package/dist/providers/cron.js.map +1 -1
  341. package/dist/providers/cron.mjs +18 -18
  342. package/dist/providers/cron.mjs.map +1 -1
  343. package/dist/providers/index.d.ts.map +1 -1
  344. package/dist/providers/index.js +20 -9
  345. package/dist/providers/index.js.map +1 -1
  346. package/dist/providers/index.mjs +19 -10
  347. package/dist/providers/index.mjs.map +1 -1
  348. package/dist/providers/provider.js +4 -3
  349. package/dist/providers/provider.js.map +1 -1
  350. package/dist/providers/provider.mjs +3 -4
  351. package/dist/providers/provider.mjs.map +1 -1
  352. package/dist/providers/registries.d.ts.map +1 -1
  353. package/dist/providers/registries.js +37 -30
  354. package/dist/providers/registries.js.map +1 -1
  355. package/dist/providers/registries.mjs +36 -32
  356. package/dist/providers/registries.mjs.map +1 -1
  357. package/dist/providers/sessionManager.d.ts +3 -0
  358. package/dist/providers/sessionManager.d.ts.map +1 -0
  359. package/dist/providers/sessionManager.js +21 -0
  360. package/dist/providers/sessionManager.js.map +1 -0
  361. package/dist/providers/sessionManager.mjs +19 -0
  362. package/dist/providers/sessionManager.mjs.map +1 -0
  363. package/dist/providers/telemetry.js +19 -16
  364. package/dist/providers/telemetry.js.map +1 -1
  365. package/dist/providers/telemetry.mjs +18 -18
  366. package/dist/providers/telemetry.mjs.map +1 -1
  367. package/dist/providers/webhooks.js +28 -26
  368. package/dist/providers/webhooks.js.map +1 -1
  369. package/dist/providers/webhooks.mjs +27 -28
  370. package/dist/providers/webhooks.mjs.map +1 -1
  371. package/dist/registries/apis.js +23 -20
  372. package/dist/registries/apis.js.map +1 -1
  373. package/dist/registries/apis.mjs +22 -22
  374. package/dist/registries/apis.mjs.map +1 -1
  375. package/dist/registries/components.js +35 -37
  376. package/dist/registries/components.js.map +1 -1
  377. package/dist/registries/components.mjs +34 -39
  378. package/dist/registries/components.mjs.map +1 -1
  379. package/dist/registries/content-types.js +54 -59
  380. package/dist/registries/content-types.js.map +1 -1
  381. package/dist/registries/content-types.mjs +53 -61
  382. package/dist/registries/content-types.mjs.map +1 -1
  383. package/dist/registries/controllers.js +70 -71
  384. package/dist/registries/controllers.js.map +1 -1
  385. package/dist/registries/controllers.mjs +69 -73
  386. package/dist/registries/controllers.mjs.map +1 -1
  387. package/dist/registries/custom-fields.js +75 -65
  388. package/dist/registries/custom-fields.js.map +1 -1
  389. package/dist/registries/custom-fields.mjs +74 -67
  390. package/dist/registries/custom-fields.mjs.map +1 -1
  391. package/dist/registries/hooks.js +46 -49
  392. package/dist/registries/hooks.js.map +1 -1
  393. package/dist/registries/hooks.mjs +45 -51
  394. package/dist/registries/hooks.mjs.map +1 -1
  395. package/dist/registries/middlewares.js +49 -51
  396. package/dist/registries/middlewares.js.map +1 -1
  397. package/dist/registries/middlewares.mjs +48 -53
  398. package/dist/registries/middlewares.mjs.map +1 -1
  399. package/dist/registries/models.js +14 -13
  400. package/dist/registries/models.js.map +1 -1
  401. package/dist/registries/models.mjs +13 -14
  402. package/dist/registries/models.mjs.map +1 -1
  403. package/dist/registries/modules.js +39 -36
  404. package/dist/registries/modules.js.map +1 -1
  405. package/dist/registries/modules.mjs +38 -38
  406. package/dist/registries/modules.mjs.map +1 -1
  407. package/dist/registries/namespace.js +21 -20
  408. package/dist/registries/namespace.js.map +1 -1
  409. package/dist/registries/namespace.mjs +20 -23
  410. package/dist/registries/namespace.mjs.map +1 -1
  411. package/dist/registries/plugins.js +23 -20
  412. package/dist/registries/plugins.js.map +1 -1
  413. package/dist/registries/plugins.mjs +22 -22
  414. package/dist/registries/plugins.mjs.map +1 -1
  415. package/dist/registries/policies.d.ts +1 -1
  416. package/dist/registries/policies.d.ts.map +1 -1
  417. package/dist/registries/policies.js +103 -96
  418. package/dist/registries/policies.js.map +1 -1
  419. package/dist/registries/policies.mjs +102 -98
  420. package/dist/registries/policies.mjs.map +1 -1
  421. package/dist/registries/sanitizers.js +23 -22
  422. package/dist/registries/sanitizers.js.map +1 -1
  423. package/dist/registries/sanitizers.mjs +22 -22
  424. package/dist/registries/sanitizers.mjs.map +1 -1
  425. package/dist/registries/services.js +71 -71
  426. package/dist/registries/services.js.map +1 -1
  427. package/dist/registries/services.mjs +70 -73
  428. package/dist/registries/services.mjs.map +1 -1
  429. package/dist/registries/validators.js +23 -22
  430. package/dist/registries/validators.js.map +1 -1
  431. package/dist/registries/validators.mjs +22 -22
  432. package/dist/registries/validators.mjs.map +1 -1
  433. package/dist/services/auth/index.js +74 -74
  434. package/dist/services/auth/index.js.map +1 -1
  435. package/dist/services/auth/index.mjs +73 -74
  436. package/dist/services/auth/index.mjs.map +1 -1
  437. package/dist/services/config.js +47 -43
  438. package/dist/services/config.js.map +1 -1
  439. package/dist/services/config.mjs +46 -44
  440. package/dist/services/config.mjs.map +1 -1
  441. package/dist/services/content-api/index.d.ts +11 -13
  442. package/dist/services/content-api/index.d.ts.map +1 -1
  443. package/dist/services/content-api/index.js +80 -79
  444. package/dist/services/content-api/index.js.map +1 -1
  445. package/dist/services/content-api/index.mjs +79 -79
  446. package/dist/services/content-api/index.mjs.map +1 -1
  447. package/dist/services/content-api/permissions/engine.js +8 -5
  448. package/dist/services/content-api/permissions/engine.js.map +1 -1
  449. package/dist/services/content-api/permissions/engine.mjs +7 -5
  450. package/dist/services/content-api/permissions/engine.mjs.map +1 -1
  451. package/dist/services/content-api/permissions/index.d.ts +10 -12
  452. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  453. package/dist/services/content-api/permissions/index.js +101 -81
  454. package/dist/services/content-api/permissions/index.js.map +1 -1
  455. package/dist/services/content-api/permissions/index.mjs +100 -81
  456. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  457. package/dist/services/content-api/permissions/providers/action.d.ts +5 -6
  458. package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
  459. package/dist/services/content-api/permissions/providers/action.js +17 -14
  460. package/dist/services/content-api/permissions/providers/action.js.map +1 -1
  461. package/dist/services/content-api/permissions/providers/action.mjs +16 -16
  462. package/dist/services/content-api/permissions/providers/action.mjs.map +1 -1
  463. package/dist/services/content-api/permissions/providers/condition.d.ts +5 -6
  464. package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
  465. package/dist/services/content-api/permissions/providers/condition.js +17 -14
  466. package/dist/services/content-api/permissions/providers/condition.js.map +1 -1
  467. package/dist/services/content-api/permissions/providers/condition.mjs +16 -16
  468. package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -1
  469. package/dist/services/content-source-maps.d.ts +13 -0
  470. package/dist/services/content-source-maps.d.ts.map +1 -0
  471. package/dist/services/content-source-maps.js +108 -0
  472. package/dist/services/content-source-maps.js.map +1 -0
  473. package/dist/services/content-source-maps.mjs +106 -0
  474. package/dist/services/content-source-maps.mjs.map +1 -0
  475. package/dist/services/core-store.d.ts +2 -2
  476. package/dist/services/core-store.d.ts.map +1 -1
  477. package/dist/services/core-store.js +115 -95
  478. package/dist/services/core-store.js.map +1 -1
  479. package/dist/services/core-store.mjs +114 -97
  480. package/dist/services/core-store.mjs.map +1 -1
  481. package/dist/services/cron.d.ts +3 -3
  482. package/dist/services/cron.d.ts.map +1 -1
  483. package/dist/services/cron.js +74 -60
  484. package/dist/services/cron.js.map +1 -1
  485. package/dist/services/cron.mjs +73 -62
  486. package/dist/services/cron.mjs.map +1 -1
  487. package/dist/services/custom-fields.js +9 -7
  488. package/dist/services/custom-fields.js.map +1 -1
  489. package/dist/services/custom-fields.mjs +8 -9
  490. package/dist/services/custom-fields.mjs.map +1 -1
  491. package/dist/services/document-service/attributes/index.js +23 -18
  492. package/dist/services/document-service/attributes/index.js.map +1 -1
  493. package/dist/services/document-service/attributes/index.mjs +22 -19
  494. package/dist/services/document-service/attributes/index.mjs.map +1 -1
  495. package/dist/services/document-service/attributes/transforms.js +16 -15
  496. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  497. package/dist/services/document-service/attributes/transforms.mjs +15 -15
  498. package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
  499. package/dist/services/document-service/common.d.ts +1 -1
  500. package/dist/services/document-service/common.d.ts.map +1 -1
  501. package/dist/services/document-service/common.js +5 -4
  502. package/dist/services/document-service/common.js.map +1 -1
  503. package/dist/services/document-service/common.mjs +4 -5
  504. package/dist/services/document-service/common.mjs.map +1 -1
  505. package/dist/services/document-service/components.d.ts +31 -1
  506. package/dist/services/document-service/components.d.ts.map +1 -1
  507. package/dist/services/document-service/components.js +364 -257
  508. package/dist/services/document-service/components.js.map +1 -1
  509. package/dist/services/document-service/components.mjs +359 -261
  510. package/dist/services/document-service/components.mjs.map +1 -1
  511. package/dist/services/document-service/draft-and-publish.d.ts +1 -1
  512. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  513. package/dist/services/document-service/draft-and-publish.js +94 -54
  514. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  515. package/dist/services/document-service/draft-and-publish.mjs +87 -54
  516. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  517. package/dist/services/document-service/entries.d.ts +3 -3
  518. package/dist/services/document-service/entries.d.ts.map +1 -1
  519. package/dist/services/document-service/entries.js +151 -91
  520. package/dist/services/document-service/entries.js.map +1 -1
  521. package/dist/services/document-service/entries.mjs +150 -92
  522. package/dist/services/document-service/entries.mjs.map +1 -1
  523. package/dist/services/document-service/events.d.ts +25 -0
  524. package/dist/services/document-service/events.d.ts.map +1 -0
  525. package/dist/services/document-service/events.js +59 -0
  526. package/dist/services/document-service/events.js.map +1 -0
  527. package/dist/services/document-service/events.mjs +57 -0
  528. package/dist/services/document-service/events.mjs.map +1 -0
  529. package/dist/services/document-service/first-published-at.d.ts +7 -0
  530. package/dist/services/document-service/first-published-at.d.ts.map +1 -0
  531. package/dist/services/document-service/first-published-at.js +31 -0
  532. package/dist/services/document-service/first-published-at.js.map +1 -0
  533. package/dist/services/document-service/first-published-at.mjs +28 -0
  534. package/dist/services/document-service/first-published-at.mjs.map +1 -0
  535. package/dist/services/document-service/index.d.ts +2 -1
  536. package/dist/services/document-service/index.d.ts.map +1 -1
  537. package/dist/services/document-service/index.js +53 -32
  538. package/dist/services/document-service/index.js.map +1 -1
  539. package/dist/services/document-service/index.mjs +52 -33
  540. package/dist/services/document-service/index.mjs.map +1 -1
  541. package/dist/services/document-service/internationalization.d.ts +6 -1
  542. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  543. package/dist/services/document-service/internationalization.js +98 -41
  544. package/dist/services/document-service/internationalization.js.map +1 -1
  545. package/dist/services/document-service/internationalization.mjs +92 -41
  546. package/dist/services/document-service/internationalization.mjs.map +1 -1
  547. package/dist/services/document-service/middlewares/errors.js +23 -19
  548. package/dist/services/document-service/middlewares/errors.js.map +1 -1
  549. package/dist/services/document-service/middlewares/errors.mjs +22 -20
  550. package/dist/services/document-service/middlewares/errors.mjs.map +1 -1
  551. package/dist/services/document-service/middlewares/middleware-manager.js +46 -44
  552. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -1
  553. package/dist/services/document-service/middlewares/middleware-manager.mjs +45 -45
  554. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -1
  555. package/dist/services/document-service/params.js +11 -5
  556. package/dist/services/document-service/params.js.map +1 -1
  557. package/dist/services/document-service/params.mjs +10 -6
  558. package/dist/services/document-service/params.mjs.map +1 -1
  559. package/dist/services/document-service/repository.d.ts.map +1 -1
  560. package/dist/services/document-service/repository.js +363 -241
  561. package/dist/services/document-service/repository.js.map +1 -1
  562. package/dist/services/document-service/repository.mjs +362 -242
  563. package/dist/services/document-service/repository.mjs.map +1 -1
  564. package/dist/services/document-service/transform/data.js +22 -12
  565. package/dist/services/document-service/transform/data.js.map +1 -1
  566. package/dist/services/document-service/transform/data.mjs +21 -13
  567. package/dist/services/document-service/transform/data.mjs.map +1 -1
  568. package/dist/services/document-service/transform/fields.js +26 -17
  569. package/dist/services/document-service/transform/fields.js.map +1 -1
  570. package/dist/services/document-service/transform/fields.mjs +25 -18
  571. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  572. package/dist/services/document-service/transform/id-map.d.ts +1 -1
  573. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  574. package/dist/services/document-service/transform/id-map.js +116 -69
  575. package/dist/services/document-service/transform/id-map.js.map +1 -1
  576. package/dist/services/document-service/transform/id-map.mjs +115 -70
  577. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  578. package/dist/services/document-service/transform/id-transform.d.ts +1 -1
  579. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  580. package/dist/services/document-service/transform/id-transform.js +38 -30
  581. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  582. package/dist/services/document-service/transform/id-transform.mjs +36 -30
  583. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  584. package/dist/services/document-service/transform/populate.js +23 -18
  585. package/dist/services/document-service/transform/populate.js.map +1 -1
  586. package/dist/services/document-service/transform/populate.mjs +22 -19
  587. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  588. package/dist/services/document-service/transform/query.js +11 -6
  589. package/dist/services/document-service/transform/query.js.map +1 -1
  590. package/dist/services/document-service/transform/query.mjs +10 -7
  591. package/dist/services/document-service/transform/query.mjs.map +1 -1
  592. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +1 -1
  593. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  594. package/dist/services/document-service/transform/relations/extract/data-ids.js +71 -45
  595. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  596. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +70 -46
  597. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  598. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  599. package/dist/services/document-service/transform/relations/transform/data-ids.js +97 -60
  600. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  601. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +96 -61
  602. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  603. package/dist/services/document-service/transform/relations/transform/default-locale.js +47 -29
  604. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
  605. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +46 -30
  606. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
  607. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  608. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  609. package/dist/services/document-service/transform/relations/utils/dp.js +52 -26
  610. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  611. package/dist/services/document-service/transform/relations/utils/dp.mjs +51 -27
  612. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  613. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +1 -1
  614. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  615. package/dist/services/document-service/transform/relations/utils/i18n.js +20 -18
  616. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  617. package/dist/services/document-service/transform/relations/utils/i18n.mjs +19 -21
  618. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  619. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  620. package/dist/services/document-service/transform/relations/utils/map-relation.js +118 -75
  621. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  622. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +115 -75
  623. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  624. package/dist/services/document-service/utils/bidirectional-relations.d.ts +95 -0
  625. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -0
  626. package/dist/services/document-service/utils/bidirectional-relations.js +148 -0
  627. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -0
  628. package/dist/services/document-service/utils/bidirectional-relations.mjs +145 -0
  629. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -0
  630. package/dist/services/document-service/utils/clean-component-join-table.d.ts +7 -0
  631. package/dist/services/document-service/utils/clean-component-join-table.d.ts.map +1 -0
  632. package/dist/services/document-service/utils/clean-component-join-table.js +138 -0
  633. package/dist/services/document-service/utils/clean-component-join-table.js.map +1 -0
  634. package/dist/services/document-service/utils/clean-component-join-table.mjs +136 -0
  635. package/dist/services/document-service/utils/clean-component-join-table.mjs.map +1 -0
  636. package/dist/services/document-service/utils/populate.d.ts +1 -1
  637. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  638. package/dist/services/document-service/utils/populate.js +67 -37
  639. package/dist/services/document-service/utils/populate.js.map +1 -1
  640. package/dist/services/document-service/utils/populate.mjs +66 -38
  641. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  642. package/dist/services/document-service/utils/unidirectional-relations.d.ts +53 -0
  643. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -0
  644. package/dist/services/document-service/utils/unidirectional-relations.js +131 -0
  645. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -0
  646. package/dist/services/document-service/utils/unidirectional-relations.mjs +128 -0
  647. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -0
  648. package/dist/services/entity-service/index.js +230 -161
  649. package/dist/services/entity-service/index.js.map +1 -1
  650. package/dist/services/entity-service/index.mjs +229 -160
  651. package/dist/services/entity-service/index.mjs.map +1 -1
  652. package/dist/services/entity-validator/blocks-validator.d.ts +1 -2
  653. package/dist/services/entity-validator/blocks-validator.d.ts.map +1 -1
  654. package/dist/services/entity-validator/blocks-validator.js +137 -104
  655. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  656. package/dist/services/entity-validator/blocks-validator.mjs +135 -105
  657. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  658. package/dist/services/entity-validator/index.d.ts +15 -1
  659. package/dist/services/entity-validator/index.d.ts.map +1 -1
  660. package/dist/services/entity-validator/index.js +370 -310
  661. package/dist/services/entity-validator/index.js.map +1 -1
  662. package/dist/services/entity-validator/index.mjs +366 -307
  663. package/dist/services/entity-validator/index.mjs.map +1 -1
  664. package/dist/services/entity-validator/validators.d.ts +37 -25
  665. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  666. package/dist/services/entity-validator/validators.js +286 -110
  667. package/dist/services/entity-validator/validators.js.map +1 -1
  668. package/dist/services/entity-validator/validators.mjs +277 -108
  669. package/dist/services/entity-validator/validators.mjs.map +1 -1
  670. package/dist/services/errors.js +65 -65
  671. package/dist/services/errors.js.map +1 -1
  672. package/dist/services/errors.mjs +64 -66
  673. package/dist/services/errors.mjs.map +1 -1
  674. package/dist/services/event-hub.d.ts +1 -0
  675. package/dist/services/event-hub.d.ts.map +1 -1
  676. package/dist/services/event-hub.js +82 -64
  677. package/dist/services/event-hub.js.map +1 -1
  678. package/dist/services/event-hub.mjs +81 -66
  679. package/dist/services/event-hub.mjs.map +1 -1
  680. package/dist/services/features.js +19 -14
  681. package/dist/services/features.js.map +1 -1
  682. package/dist/services/features.mjs +18 -15
  683. package/dist/services/features.mjs.map +1 -1
  684. package/dist/services/fs.js +41 -40
  685. package/dist/services/fs.js.map +1 -1
  686. package/dist/services/fs.mjs +40 -39
  687. package/dist/services/fs.mjs.map +1 -1
  688. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  689. package/dist/services/metrics/admin-user-hash.js +13 -11
  690. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  691. package/dist/services/metrics/admin-user-hash.mjs +12 -10
  692. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  693. package/dist/services/metrics/index.d.ts +1 -1
  694. package/dist/services/metrics/index.d.ts.map +1 -1
  695. package/dist/services/metrics/index.js +48 -40
  696. package/dist/services/metrics/index.js.map +1 -1
  697. package/dist/services/metrics/index.mjs +47 -42
  698. package/dist/services/metrics/index.mjs.map +1 -1
  699. package/dist/services/metrics/is-truthy.js +13 -6
  700. package/dist/services/metrics/is-truthy.js.map +1 -1
  701. package/dist/services/metrics/is-truthy.mjs +12 -6
  702. package/dist/services/metrics/is-truthy.mjs.map +1 -1
  703. package/dist/services/metrics/middleware.d.ts +2 -1
  704. package/dist/services/metrics/middleware.d.ts.map +1 -1
  705. package/dist/services/metrics/middleware.js +37 -22
  706. package/dist/services/metrics/middleware.js.map +1 -1
  707. package/dist/services/metrics/middleware.mjs +36 -24
  708. package/dist/services/metrics/middleware.mjs.map +1 -1
  709. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  710. package/dist/services/metrics/rate-limiter.js +24 -19
  711. package/dist/services/metrics/rate-limiter.js.map +1 -1
  712. package/dist/services/metrics/rate-limiter.mjs +23 -21
  713. package/dist/services/metrics/rate-limiter.mjs.map +1 -1
  714. package/dist/services/metrics/sender.d.ts.map +1 -1
  715. package/dist/services/metrics/sender.js +78 -69
  716. package/dist/services/metrics/sender.js.map +1 -1
  717. package/dist/services/metrics/sender.mjs +77 -64
  718. package/dist/services/metrics/sender.mjs.map +1 -1
  719. package/dist/services/query-params.js +13 -10
  720. package/dist/services/query-params.js.map +1 -1
  721. package/dist/services/query-params.mjs +12 -12
  722. package/dist/services/query-params.mjs.map +1 -1
  723. package/dist/services/reloader.js +35 -32
  724. package/dist/services/reloader.js.map +1 -1
  725. package/dist/services/reloader.mjs +34 -33
  726. package/dist/services/reloader.mjs.map +1 -1
  727. package/dist/services/request-context.js +11 -8
  728. package/dist/services/request-context.js.map +1 -1
  729. package/dist/services/request-context.mjs +10 -10
  730. package/dist/services/request-context.mjs.map +1 -1
  731. package/dist/services/server/admin-api.js +11 -10
  732. package/dist/services/server/admin-api.js.map +1 -1
  733. package/dist/services/server/admin-api.mjs +10 -11
  734. package/dist/services/server/admin-api.mjs.map +1 -1
  735. package/dist/services/server/api.js +33 -27
  736. package/dist/services/server/api.js.map +1 -1
  737. package/dist/services/server/api.mjs +32 -26
  738. package/dist/services/server/api.mjs.map +1 -1
  739. package/dist/services/server/compose-endpoint.js +116 -105
  740. package/dist/services/server/compose-endpoint.js.map +1 -1
  741. package/dist/services/server/compose-endpoint.mjs +115 -105
  742. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  743. package/dist/services/server/content-api.js +11 -9
  744. package/dist/services/server/content-api.js.map +1 -1
  745. package/dist/services/server/content-api.mjs +10 -10
  746. package/dist/services/server/content-api.mjs.map +1 -1
  747. package/dist/services/server/http-server.js +48 -44
  748. package/dist/services/server/http-server.js.map +1 -1
  749. package/dist/services/server/http-server.mjs +47 -43
  750. package/dist/services/server/http-server.mjs.map +1 -1
  751. package/dist/services/server/index.js +85 -82
  752. package/dist/services/server/index.js.map +1 -1
  753. package/dist/services/server/index.mjs +84 -81
  754. package/dist/services/server/index.mjs.map +1 -1
  755. package/dist/services/server/koa.d.ts.map +1 -1
  756. package/dist/services/server/koa.js +49 -47
  757. package/dist/services/server/koa.js.map +1 -1
  758. package/dist/services/server/koa.mjs +48 -44
  759. package/dist/services/server/koa.mjs.map +1 -1
  760. package/dist/services/server/middleware.js +86 -82
  761. package/dist/services/server/middleware.js.map +1 -1
  762. package/dist/services/server/middleware.mjs +85 -82
  763. package/dist/services/server/middleware.mjs.map +1 -1
  764. package/dist/services/server/policy.js +24 -17
  765. package/dist/services/server/policy.js.map +1 -1
  766. package/dist/services/server/policy.mjs +23 -18
  767. package/dist/services/server/policy.mjs.map +1 -1
  768. package/dist/services/server/register-middlewares.js +68 -61
  769. package/dist/services/server/register-middlewares.js.map +1 -1
  770. package/dist/services/server/register-middlewares.mjs +67 -63
  771. package/dist/services/server/register-middlewares.mjs.map +1 -1
  772. package/dist/services/server/register-routes.js +109 -66
  773. package/dist/services/server/register-routes.js.map +1 -1
  774. package/dist/services/server/register-routes.mjs +108 -66
  775. package/dist/services/server/register-routes.mjs.map +1 -1
  776. package/dist/services/server/routing.d.ts +10 -0
  777. package/dist/services/server/routing.d.ts.map +1 -1
  778. package/dist/services/server/routing.js +100 -81
  779. package/dist/services/server/routing.js.map +1 -1
  780. package/dist/services/server/routing.mjs +99 -81
  781. package/dist/services/server/routing.mjs.map +1 -1
  782. package/dist/services/session-manager.d.ts +160 -0
  783. package/dist/services/session-manager.d.ts.map +1 -0
  784. package/dist/services/session-manager.js +476 -0
  785. package/dist/services/session-manager.js.map +1 -0
  786. package/dist/services/session-manager.mjs +473 -0
  787. package/dist/services/session-manager.mjs.map +1 -0
  788. package/dist/services/utils/conditional-fields.d.ts +3 -0
  789. package/dist/services/utils/conditional-fields.d.ts.map +1 -0
  790. package/dist/services/utils/conditional-fields.js +22 -0
  791. package/dist/services/utils/conditional-fields.js.map +1 -0
  792. package/dist/services/utils/conditional-fields.mjs +20 -0
  793. package/dist/services/utils/conditional-fields.mjs.map +1 -0
  794. package/dist/services/utils/dynamic-zones.js +13 -14
  795. package/dist/services/utils/dynamic-zones.js.map +1 -1
  796. package/dist/services/utils/dynamic-zones.mjs +12 -16
  797. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  798. package/dist/services/webhook-runner.d.ts +2 -1
  799. package/dist/services/webhook-runner.d.ts.map +1 -1
  800. package/dist/services/webhook-runner.js +124 -122
  801. package/dist/services/webhook-runner.js.map +1 -1
  802. package/dist/services/webhook-runner.mjs +123 -121
  803. package/dist/services/webhook-runner.mjs.map +1 -1
  804. package/dist/services/webhook-store.d.ts +2 -8
  805. package/dist/services/webhook-store.d.ts.map +1 -1
  806. package/dist/services/webhook-store.js +132 -92
  807. package/dist/services/webhook-store.js.map +1 -1
  808. package/dist/services/webhook-store.mjs +131 -94
  809. package/dist/services/webhook-store.mjs.map +1 -1
  810. package/dist/services/worker-queue.js +44 -49
  811. package/dist/services/worker-queue.js.map +1 -1
  812. package/dist/services/worker-queue.mjs +43 -49
  813. package/dist/services/worker-queue.mjs.map +1 -1
  814. package/dist/utils/convert-custom-field-type.js +17 -20
  815. package/dist/utils/convert-custom-field-type.js.map +1 -1
  816. package/dist/utils/convert-custom-field-type.mjs +16 -21
  817. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  818. package/dist/utils/cron.js +64 -30
  819. package/dist/utils/cron.js.map +1 -1
  820. package/dist/utils/cron.mjs +63 -31
  821. package/dist/utils/cron.mjs.map +1 -1
  822. package/dist/utils/fetch.d.ts +5 -1
  823. package/dist/utils/fetch.d.ts.map +1 -1
  824. package/dist/utils/fetch.js +28 -17
  825. package/dist/utils/fetch.js.map +1 -1
  826. package/dist/utils/fetch.mjs +27 -18
  827. package/dist/utils/fetch.mjs.map +1 -1
  828. package/dist/utils/filepath-to-prop-path.d.ts +1 -1
  829. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  830. package/dist/utils/filepath-to-prop-path.js +22 -9
  831. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  832. package/dist/utils/filepath-to-prop-path.mjs +20 -7
  833. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  834. package/dist/utils/is-initialized.js +21 -12
  835. package/dist/utils/is-initialized.js.map +1 -1
  836. package/dist/utils/is-initialized.mjs +20 -13
  837. package/dist/utils/is-initialized.mjs.map +1 -1
  838. package/dist/utils/lifecycles.js +6 -5
  839. package/dist/utils/lifecycles.js.map +1 -1
  840. package/dist/utils/lifecycles.mjs +5 -6
  841. package/dist/utils/lifecycles.mjs.map +1 -1
  842. package/dist/utils/load-config-file.js +40 -38
  843. package/dist/utils/load-config-file.js.map +1 -1
  844. package/dist/utils/load-config-file.mjs +39 -36
  845. package/dist/utils/load-config-file.mjs.map +1 -1
  846. package/dist/utils/load-files.js +40 -35
  847. package/dist/utils/load-files.js.map +1 -1
  848. package/dist/utils/load-files.mjs +39 -32
  849. package/dist/utils/load-files.mjs.map +1 -1
  850. package/dist/utils/open-browser.js +8 -8
  851. package/dist/utils/open-browser.js.map +1 -1
  852. package/dist/utils/open-browser.mjs +7 -7
  853. package/dist/utils/open-browser.mjs.map +1 -1
  854. package/dist/utils/resolve-working-dirs.js +23 -10
  855. package/dist/utils/resolve-working-dirs.js.map +1 -1
  856. package/dist/utils/resolve-working-dirs.mjs +22 -9
  857. package/dist/utils/resolve-working-dirs.mjs.map +1 -1
  858. package/dist/utils/signals.js +20 -14
  859. package/dist/utils/signals.js.map +1 -1
  860. package/dist/utils/signals.mjs +19 -15
  861. package/dist/utils/signals.mjs.map +1 -1
  862. package/dist/utils/startup-logger.d.ts.map +1 -1
  863. package/dist/utils/startup-logger.js +107 -78
  864. package/dist/utils/startup-logger.js.map +1 -1
  865. package/dist/utils/startup-logger.mjs +106 -75
  866. package/dist/utils/startup-logger.mjs.map +1 -1
  867. package/dist/utils/transform-content-types-to-models.d.ts +552 -23
  868. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  869. package/dist/utils/transform-content-types-to-models.js +350 -248
  870. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  871. package/dist/utils/transform-content-types-to-models.mjs +349 -256
  872. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  873. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  874. package/dist/utils/update-notifier/index.js +68 -73
  875. package/dist/utils/update-notifier/index.js.map +1 -1
  876. package/dist/utils/update-notifier/index.mjs +67 -67
  877. package/dist/utils/update-notifier/index.mjs.map +1 -1
  878. package/package.json +44 -36
  879. package/dist/services/document-service/document-engine.d.ts +0 -1
  880. package/dist/services/document-service/document-engine.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-component-join-table.js","sources":["../../../../src/services/document-service/utils/clean-component-join-table.ts"],"sourcesContent":["import type { Database } from '@strapi/database';\nimport type { Schema } from '@strapi/types';\nimport { findComponentParent, getParentSchemasForComponent } from '../components';\n\n/**\n * Cleans ghost relations with publication state mismatches from a join table\n * Uses schema-based draft/publish checking like prevention fix\n */\nexport const cleanComponentJoinTable = async (\n db: Database,\n joinTableName: string,\n relation: any,\n sourceModel: any\n): Promise<number> => {\n try {\n // Get the target model metadata\n const targetModel = db.metadata.get(relation.target);\n if (!targetModel) {\n db.logger.debug(`Target model ${relation.target} not found, skipping ${joinTableName}`);\n return 0;\n }\n\n // Check if target supports draft/publish using schema-based approach (like prevention fix)\n const targetContentType =\n strapi.contentTypes[relation.target as keyof typeof strapi.contentTypes];\n const targetSupportsDraftPublish = targetContentType?.options?.draftAndPublish || false;\n\n if (!targetSupportsDraftPublish) {\n return 0;\n }\n\n // Find entries with publication state mismatches\n const ghostEntries = await findPublicationStateMismatches(\n db,\n joinTableName,\n relation,\n targetModel,\n sourceModel\n );\n\n if (ghostEntries.length === 0) {\n return 0;\n }\n\n // Remove ghost entries\n await db.connection(joinTableName).whereIn('id', ghostEntries).del();\n db.logger.debug(\n `Removed ${ghostEntries.length} ghost relations with publication state mismatches from ${joinTableName}`\n );\n\n return ghostEntries.length;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n db.logger.error(`Failed to clean join table \"${joinTableName}\": ${errorMessage}`);\n return 0;\n }\n};\n\nconst findContentTypeParentForComponentInstance = async (\n componentSchema: Schema.Component,\n componentId: number | string\n): Promise<{ uid: string; table: string; parentId: number | string } | null> => {\n // Get the parent schemas that could contain this component\n const parentSchemas = getParentSchemasForComponent(componentSchema);\n if (parentSchemas.length === 0) {\n // No potential parents\n return null;\n }\n\n // Find the actual parent for THIS specific component instance\n const parent = await findComponentParent(componentSchema, componentId, parentSchemas);\n if (!parent) {\n // No parent found for this component instance\n return null;\n }\n\n if (strapi.components[parent.uid as keyof typeof strapi.components]) {\n // If the parent is a component, we need to check its parents recursively\n const parentComponentSchema = strapi.components[parent.uid as keyof typeof strapi.components];\n return findContentTypeParentForComponentInstance(parentComponentSchema, parent.parentId);\n }\n\n if (strapi.contentTypes[parent.uid as keyof typeof strapi.contentTypes]) {\n // Found a content type parent\n return parent;\n }\n\n return null;\n};\n\n/**\n * Finds join table entries with publication state mismatches\n * Uses existing component parent detection from document service\n */\nconst findPublicationStateMismatches = async (\n db: Database,\n joinTableName: string,\n relation: any,\n targetModel: any,\n sourceModel: any\n): Promise<number[]> => {\n try {\n // Get join column names using proper functions (addressing PR feedback)\n const sourceColumn = relation.joinTable.joinColumn.name;\n const targetColumn = relation.joinTable.inverseJoinColumn.name;\n\n // Get all join entries with their target entities\n const query = db\n .connection(joinTableName)\n .select(\n `${joinTableName}.id as join_id`,\n `${joinTableName}.${sourceColumn} as source_id`,\n `${joinTableName}.${targetColumn} as target_id`,\n `${targetModel.tableName}.published_at as target_published_at`\n )\n .leftJoin(\n targetModel.tableName,\n `${joinTableName}.${targetColumn}`,\n `${targetModel.tableName}.id`\n );\n\n const joinEntries = await query;\n\n // Group by source_id to find duplicates pointing to draft/published versions of same entity\n const entriesBySource: { [key: string]: any[] } = {};\n for (const entry of joinEntries) {\n const sourceId = entry.source_id;\n if (!entriesBySource[sourceId]) {\n entriesBySource[sourceId] = [];\n }\n entriesBySource[sourceId].push(entry);\n }\n\n const ghostEntries: number[] = [];\n\n // Check if this is a join table (ends with _lnk)\n const isRelationJoinTable = joinTableName.endsWith('_lnk');\n const isComponentModel =\n !sourceModel.uid?.startsWith('api::') &&\n !sourceModel.uid?.startsWith('plugin::') &&\n sourceModel.uid?.includes('.');\n\n // Check for draft/publish inconsistencies\n for (const [sourceId, entries] of Object.entries(entriesBySource)) {\n // Skip entries with single relations\n if (entries.length <= 1) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // For component join tables, check if THIS specific component instance's parent supports D&P\n if (isRelationJoinTable && isComponentModel) {\n try {\n const componentSchema = strapi.components[sourceModel.uid] as Schema.Component;\n if (!componentSchema) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const parent = await findContentTypeParentForComponentInstance(componentSchema, sourceId);\n if (!parent) {\n continue;\n }\n\n // Check if THIS component instance's parent supports draft/publish\n const parentContentType =\n strapi.contentTypes[parent.uid as keyof typeof strapi.contentTypes];\n if (!parentContentType?.options?.draftAndPublish) {\n // This component instance's parent does NOT support D&P - skip cleanup\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // If we reach here, this component instance's parent DOES support D&P\n // Continue to process this component instance for ghost relations\n } catch (error) {\n // Skip this component instance on error\n // eslint-disable-next-line no-continue\n continue;\n }\n }\n\n // Find ghost relations (same logic as original but with improved parent checking)\n for (const entry of entries) {\n if (entry.target_published_at === null) {\n // This is a draft target - find its published version\n const draftTarget = await db\n .connection(targetModel.tableName)\n .select('document_id')\n .where('id', entry.target_id)\n .first();\n\n if (draftTarget) {\n const publishedVersion = await db\n .connection(targetModel.tableName)\n .select('id', 'document_id')\n .where('document_id', draftTarget.document_id)\n .whereNotNull('published_at')\n .first();\n\n if (publishedVersion) {\n // Check if we also have a relation to the published version\n const publishedRelation = entries.find((e) => e.target_id === publishedVersion.id);\n if (publishedRelation) {\n ghostEntries.push(publishedRelation.join_id);\n }\n }\n }\n }\n }\n }\n\n return ghostEntries;\n } catch (error) {\n return [];\n }\n};\n"],"names":["cleanComponentJoinTable","db","joinTableName","relation","sourceModel","targetModel","metadata","get","target","logger","debug","targetContentType","strapi","contentTypes","targetSupportsDraftPublish","options","draftAndPublish","ghostEntries","findPublicationStateMismatches","length","connection","whereIn","del","error","errorMessage","Error","message","String","findContentTypeParentForComponentInstance","componentSchema","componentId","parentSchemas","getParentSchemasForComponent","parent","findComponentParent","components","uid","parentComponentSchema","parentId","sourceColumn","joinTable","joinColumn","name","targetColumn","inverseJoinColumn","query","select","tableName","leftJoin","joinEntries","entriesBySource","entry","sourceId","source_id","push","isRelationJoinTable","endsWith","isComponentModel","startsWith","includes","entries","Object","parentContentType","target_published_at","draftTarget","where","target_id","first","publishedVersion","document_id","whereNotNull","publishedRelation","find","e","id","join_id"],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ import { getParentSchemasForComponent, findComponentParent } from '../components.mjs';
2
+
3
+ /**
4
+ * Cleans ghost relations with publication state mismatches from a join table
5
+ * Uses schema-based draft/publish checking like prevention fix
6
+ */ const cleanComponentJoinTable = async (db, joinTableName, relation, sourceModel)=>{
7
+ try {
8
+ // Get the target model metadata
9
+ const targetModel = db.metadata.get(relation.target);
10
+ if (!targetModel) {
11
+ db.logger.debug(`Target model ${relation.target} not found, skipping ${joinTableName}`);
12
+ return 0;
13
+ }
14
+ // Check if target supports draft/publish using schema-based approach (like prevention fix)
15
+ const targetContentType = strapi.contentTypes[relation.target];
16
+ const targetSupportsDraftPublish = targetContentType?.options?.draftAndPublish || false;
17
+ if (!targetSupportsDraftPublish) {
18
+ return 0;
19
+ }
20
+ // Find entries with publication state mismatches
21
+ const ghostEntries = await findPublicationStateMismatches(db, joinTableName, relation, targetModel, sourceModel);
22
+ if (ghostEntries.length === 0) {
23
+ return 0;
24
+ }
25
+ // Remove ghost entries
26
+ await db.connection(joinTableName).whereIn('id', ghostEntries).del();
27
+ db.logger.debug(`Removed ${ghostEntries.length} ghost relations with publication state mismatches from ${joinTableName}`);
28
+ return ghostEntries.length;
29
+ } catch (error) {
30
+ const errorMessage = error instanceof Error ? error.message : String(error);
31
+ db.logger.error(`Failed to clean join table "${joinTableName}": ${errorMessage}`);
32
+ return 0;
33
+ }
34
+ };
35
+ const findContentTypeParentForComponentInstance = async (componentSchema, componentId)=>{
36
+ // Get the parent schemas that could contain this component
37
+ const parentSchemas = getParentSchemasForComponent(componentSchema);
38
+ if (parentSchemas.length === 0) {
39
+ // No potential parents
40
+ return null;
41
+ }
42
+ // Find the actual parent for THIS specific component instance
43
+ const parent = await findComponentParent(componentSchema, componentId, parentSchemas);
44
+ if (!parent) {
45
+ // No parent found for this component instance
46
+ return null;
47
+ }
48
+ if (strapi.components[parent.uid]) {
49
+ // If the parent is a component, we need to check its parents recursively
50
+ const parentComponentSchema = strapi.components[parent.uid];
51
+ return findContentTypeParentForComponentInstance(parentComponentSchema, parent.parentId);
52
+ }
53
+ if (strapi.contentTypes[parent.uid]) {
54
+ // Found a content type parent
55
+ return parent;
56
+ }
57
+ return null;
58
+ };
59
+ /**
60
+ * Finds join table entries with publication state mismatches
61
+ * Uses existing component parent detection from document service
62
+ */ const findPublicationStateMismatches = async (db, joinTableName, relation, targetModel, sourceModel)=>{
63
+ try {
64
+ // Get join column names using proper functions (addressing PR feedback)
65
+ const sourceColumn = relation.joinTable.joinColumn.name;
66
+ const targetColumn = relation.joinTable.inverseJoinColumn.name;
67
+ // Get all join entries with their target entities
68
+ const query = db.connection(joinTableName).select(`${joinTableName}.id as join_id`, `${joinTableName}.${sourceColumn} as source_id`, `${joinTableName}.${targetColumn} as target_id`, `${targetModel.tableName}.published_at as target_published_at`).leftJoin(targetModel.tableName, `${joinTableName}.${targetColumn}`, `${targetModel.tableName}.id`);
69
+ const joinEntries = await query;
70
+ // Group by source_id to find duplicates pointing to draft/published versions of same entity
71
+ const entriesBySource = {};
72
+ for (const entry of joinEntries){
73
+ const sourceId = entry.source_id;
74
+ if (!entriesBySource[sourceId]) {
75
+ entriesBySource[sourceId] = [];
76
+ }
77
+ entriesBySource[sourceId].push(entry);
78
+ }
79
+ const ghostEntries = [];
80
+ // Check if this is a join table (ends with _lnk)
81
+ const isRelationJoinTable = joinTableName.endsWith('_lnk');
82
+ const isComponentModel = !sourceModel.uid?.startsWith('api::') && !sourceModel.uid?.startsWith('plugin::') && sourceModel.uid?.includes('.');
83
+ // Check for draft/publish inconsistencies
84
+ for (const [sourceId, entries] of Object.entries(entriesBySource)){
85
+ // Skip entries with single relations
86
+ if (entries.length <= 1) {
87
+ continue;
88
+ }
89
+ // For component join tables, check if THIS specific component instance's parent supports D&P
90
+ if (isRelationJoinTable && isComponentModel) {
91
+ try {
92
+ const componentSchema = strapi.components[sourceModel.uid];
93
+ if (!componentSchema) {
94
+ continue;
95
+ }
96
+ const parent = await findContentTypeParentForComponentInstance(componentSchema, sourceId);
97
+ if (!parent) {
98
+ continue;
99
+ }
100
+ // Check if THIS component instance's parent supports draft/publish
101
+ const parentContentType = strapi.contentTypes[parent.uid];
102
+ if (!parentContentType?.options?.draftAndPublish) {
103
+ continue;
104
+ }
105
+ // If we reach here, this component instance's parent DOES support D&P
106
+ // Continue to process this component instance for ghost relations
107
+ } catch (error) {
108
+ continue;
109
+ }
110
+ }
111
+ // Find ghost relations (same logic as original but with improved parent checking)
112
+ for (const entry of entries){
113
+ if (entry.target_published_at === null) {
114
+ // This is a draft target - find its published version
115
+ const draftTarget = await db.connection(targetModel.tableName).select('document_id').where('id', entry.target_id).first();
116
+ if (draftTarget) {
117
+ const publishedVersion = await db.connection(targetModel.tableName).select('id', 'document_id').where('document_id', draftTarget.document_id).whereNotNull('published_at').first();
118
+ if (publishedVersion) {
119
+ // Check if we also have a relation to the published version
120
+ const publishedRelation = entries.find((e)=>e.target_id === publishedVersion.id);
121
+ if (publishedRelation) {
122
+ ghostEntries.push(publishedRelation.join_id);
123
+ }
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
129
+ return ghostEntries;
130
+ } catch (error) {
131
+ return [];
132
+ }
133
+ };
134
+
135
+ export { cleanComponentJoinTable };
136
+ //# sourceMappingURL=clean-component-join-table.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-component-join-table.mjs","sources":["../../../../src/services/document-service/utils/clean-component-join-table.ts"],"sourcesContent":["import type { Database } from '@strapi/database';\nimport type { Schema } from '@strapi/types';\nimport { findComponentParent, getParentSchemasForComponent } from '../components';\n\n/**\n * Cleans ghost relations with publication state mismatches from a join table\n * Uses schema-based draft/publish checking like prevention fix\n */\nexport const cleanComponentJoinTable = async (\n db: Database,\n joinTableName: string,\n relation: any,\n sourceModel: any\n): Promise<number> => {\n try {\n // Get the target model metadata\n const targetModel = db.metadata.get(relation.target);\n if (!targetModel) {\n db.logger.debug(`Target model ${relation.target} not found, skipping ${joinTableName}`);\n return 0;\n }\n\n // Check if target supports draft/publish using schema-based approach (like prevention fix)\n const targetContentType =\n strapi.contentTypes[relation.target as keyof typeof strapi.contentTypes];\n const targetSupportsDraftPublish = targetContentType?.options?.draftAndPublish || false;\n\n if (!targetSupportsDraftPublish) {\n return 0;\n }\n\n // Find entries with publication state mismatches\n const ghostEntries = await findPublicationStateMismatches(\n db,\n joinTableName,\n relation,\n targetModel,\n sourceModel\n );\n\n if (ghostEntries.length === 0) {\n return 0;\n }\n\n // Remove ghost entries\n await db.connection(joinTableName).whereIn('id', ghostEntries).del();\n db.logger.debug(\n `Removed ${ghostEntries.length} ghost relations with publication state mismatches from ${joinTableName}`\n );\n\n return ghostEntries.length;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n db.logger.error(`Failed to clean join table \"${joinTableName}\": ${errorMessage}`);\n return 0;\n }\n};\n\nconst findContentTypeParentForComponentInstance = async (\n componentSchema: Schema.Component,\n componentId: number | string\n): Promise<{ uid: string; table: string; parentId: number | string } | null> => {\n // Get the parent schemas that could contain this component\n const parentSchemas = getParentSchemasForComponent(componentSchema);\n if (parentSchemas.length === 0) {\n // No potential parents\n return null;\n }\n\n // Find the actual parent for THIS specific component instance\n const parent = await findComponentParent(componentSchema, componentId, parentSchemas);\n if (!parent) {\n // No parent found for this component instance\n return null;\n }\n\n if (strapi.components[parent.uid as keyof typeof strapi.components]) {\n // If the parent is a component, we need to check its parents recursively\n const parentComponentSchema = strapi.components[parent.uid as keyof typeof strapi.components];\n return findContentTypeParentForComponentInstance(parentComponentSchema, parent.parentId);\n }\n\n if (strapi.contentTypes[parent.uid as keyof typeof strapi.contentTypes]) {\n // Found a content type parent\n return parent;\n }\n\n return null;\n};\n\n/**\n * Finds join table entries with publication state mismatches\n * Uses existing component parent detection from document service\n */\nconst findPublicationStateMismatches = async (\n db: Database,\n joinTableName: string,\n relation: any,\n targetModel: any,\n sourceModel: any\n): Promise<number[]> => {\n try {\n // Get join column names using proper functions (addressing PR feedback)\n const sourceColumn = relation.joinTable.joinColumn.name;\n const targetColumn = relation.joinTable.inverseJoinColumn.name;\n\n // Get all join entries with their target entities\n const query = db\n .connection(joinTableName)\n .select(\n `${joinTableName}.id as join_id`,\n `${joinTableName}.${sourceColumn} as source_id`,\n `${joinTableName}.${targetColumn} as target_id`,\n `${targetModel.tableName}.published_at as target_published_at`\n )\n .leftJoin(\n targetModel.tableName,\n `${joinTableName}.${targetColumn}`,\n `${targetModel.tableName}.id`\n );\n\n const joinEntries = await query;\n\n // Group by source_id to find duplicates pointing to draft/published versions of same entity\n const entriesBySource: { [key: string]: any[] } = {};\n for (const entry of joinEntries) {\n const sourceId = entry.source_id;\n if (!entriesBySource[sourceId]) {\n entriesBySource[sourceId] = [];\n }\n entriesBySource[sourceId].push(entry);\n }\n\n const ghostEntries: number[] = [];\n\n // Check if this is a join table (ends with _lnk)\n const isRelationJoinTable = joinTableName.endsWith('_lnk');\n const isComponentModel =\n !sourceModel.uid?.startsWith('api::') &&\n !sourceModel.uid?.startsWith('plugin::') &&\n sourceModel.uid?.includes('.');\n\n // Check for draft/publish inconsistencies\n for (const [sourceId, entries] of Object.entries(entriesBySource)) {\n // Skip entries with single relations\n if (entries.length <= 1) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // For component join tables, check if THIS specific component instance's parent supports D&P\n if (isRelationJoinTable && isComponentModel) {\n try {\n const componentSchema = strapi.components[sourceModel.uid] as Schema.Component;\n if (!componentSchema) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const parent = await findContentTypeParentForComponentInstance(componentSchema, sourceId);\n if (!parent) {\n continue;\n }\n\n // Check if THIS component instance's parent supports draft/publish\n const parentContentType =\n strapi.contentTypes[parent.uid as keyof typeof strapi.contentTypes];\n if (!parentContentType?.options?.draftAndPublish) {\n // This component instance's parent does NOT support D&P - skip cleanup\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // If we reach here, this component instance's parent DOES support D&P\n // Continue to process this component instance for ghost relations\n } catch (error) {\n // Skip this component instance on error\n // eslint-disable-next-line no-continue\n continue;\n }\n }\n\n // Find ghost relations (same logic as original but with improved parent checking)\n for (const entry of entries) {\n if (entry.target_published_at === null) {\n // This is a draft target - find its published version\n const draftTarget = await db\n .connection(targetModel.tableName)\n .select('document_id')\n .where('id', entry.target_id)\n .first();\n\n if (draftTarget) {\n const publishedVersion = await db\n .connection(targetModel.tableName)\n .select('id', 'document_id')\n .where('document_id', draftTarget.document_id)\n .whereNotNull('published_at')\n .first();\n\n if (publishedVersion) {\n // Check if we also have a relation to the published version\n const publishedRelation = entries.find((e) => e.target_id === publishedVersion.id);\n if (publishedRelation) {\n ghostEntries.push(publishedRelation.join_id);\n }\n }\n }\n }\n }\n }\n\n return ghostEntries;\n } catch (error) {\n return [];\n }\n};\n"],"names":["cleanComponentJoinTable","db","joinTableName","relation","sourceModel","targetModel","metadata","get","target","logger","debug","targetContentType","strapi","contentTypes","targetSupportsDraftPublish","options","draftAndPublish","ghostEntries","findPublicationStateMismatches","length","connection","whereIn","del","error","errorMessage","Error","message","String","findContentTypeParentForComponentInstance","componentSchema","componentId","parentSchemas","getParentSchemasForComponent","parent","findComponentParent","components","uid","parentComponentSchema","parentId","sourceColumn","joinTable","joinColumn","name","targetColumn","inverseJoinColumn","query","select","tableName","leftJoin","joinEntries","entriesBySource","entry","sourceId","source_id","push","isRelationJoinTable","endsWith","isComponentModel","startsWith","includes","entries","Object","parentContentType","target_published_at","draftTarget","where","target_id","first","publishedVersion","document_id","whereNotNull","publishedRelation","find","e","id","join_id"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { UID } from '@strapi/types';
1
+ import type { UID } from '@strapi/types';
2
2
  interface Options {
3
3
  /**
4
4
  * Fields to select when populating relations
@@ -1 +1 @@
1
- {"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/utils/populate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGpC,UAAU,OAAO;IACf;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAGD,eAAO,MAAM,eAAe,QAAS,IAAI,MAAM,SAAQ,OAAO,QA8C7D,CAAC"}
1
+ {"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/utils/populate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGzC,UAAU,OAAO;IACf;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAKD,eAAO,MAAM,eAAe,QAAS,IAAI,MAAM,SAAQ,OAAO,QAwD7D,CAAC"}
@@ -1,41 +1,71 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const strapiUtils = require("@strapi/utils");
4
- const getDeepPopulate = (uid, opts = {}) => {
5
- const model = strapi.getModel(uid);
6
- const attributes = Object.entries(model.attributes);
7
- return attributes.reduce((acc, [attributeName, attribute]) => {
8
- switch (attribute.type) {
9
- case "relation": {
10
- const isVisible = strapiUtils.contentTypes.isVisibleAttribute(model, attributeName);
11
- if (isVisible) {
12
- acc[attributeName] = { select: opts.relationalFields };
1
+ 'use strict';
2
+
3
+ var strapiUtils = require('@strapi/utils');
4
+
5
+ const { CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE } = strapiUtils.contentTypes.constants;
6
+ // We want to build a populate object based on the schema
7
+ const getDeepPopulate = (uid, opts = {})=>{
8
+ const model = strapi.getModel(uid);
9
+ const attributes = Object.entries(model.attributes);
10
+ return attributes.reduce((acc, [attributeName, attribute])=>{
11
+ switch(attribute.type){
12
+ case 'relation':
13
+ {
14
+ // TODO: Support polymorphic relations
15
+ const isMorphRelation = attribute.relation.toLowerCase().startsWith('morph');
16
+ if (isMorphRelation) {
17
+ break;
18
+ }
19
+ // Ignore not visible fields other than createdBy and updatedBy
20
+ const isVisible = strapiUtils.contentTypes.isVisibleAttribute(model, attributeName);
21
+ const isCreatorField = [
22
+ CREATED_BY_ATTRIBUTE,
23
+ UPDATED_BY_ATTRIBUTE
24
+ ].includes(attributeName);
25
+ if (isVisible || isCreatorField) {
26
+ acc[attributeName] = {
27
+ select: opts.relationalFields
28
+ };
29
+ }
30
+ break;
31
+ }
32
+ case 'media':
33
+ {
34
+ // We populate all media fields for completeness of webhook responses
35
+ // see https://github.com/strapi/strapi/issues/21546
36
+ acc[attributeName] = {
37
+ select: [
38
+ '*'
39
+ ]
40
+ };
41
+ break;
42
+ }
43
+ case 'component':
44
+ {
45
+ const populate = getDeepPopulate(attribute.component, opts);
46
+ acc[attributeName] = {
47
+ populate
48
+ };
49
+ break;
50
+ }
51
+ case 'dynamiczone':
52
+ {
53
+ // Use fragments to populate the dynamic zone components
54
+ const populatedComponents = (attribute.components || []).reduce((acc, componentUID)=>{
55
+ acc[componentUID] = {
56
+ populate: getDeepPopulate(componentUID, opts)
57
+ };
58
+ return acc;
59
+ }, {});
60
+ acc[attributeName] = {
61
+ on: populatedComponents
62
+ };
63
+ break;
64
+ }
13
65
  }
14
- break;
15
- }
16
- case "media": {
17
- acc[attributeName] = { select: ["id"] };
18
- break;
19
- }
20
- case "component": {
21
- const populate = getDeepPopulate(attribute.component, opts);
22
- acc[attributeName] = { populate };
23
- break;
24
- }
25
- case "dynamiczone": {
26
- const populatedComponents = (attribute.components || []).reduce(
27
- (acc2, componentUID) => {
28
- acc2[componentUID] = { populate: getDeepPopulate(componentUID, opts) };
29
- return acc2;
30
- },
31
- {}
32
- );
33
- acc[attributeName] = { on: populatedComponents };
34
- break;
35
- }
36
- }
37
- return acc;
38
- }, {});
66
+ return acc;
67
+ }, {});
39
68
  };
69
+
40
70
  exports.getDeepPopulate = getDeepPopulate;
41
71
  //# sourceMappingURL=populate.js.map
@@ -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: 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;AAGf,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,41 +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 isVisible = contentTypes.isVisibleAttribute(model, attributeName);
9
- if (isVisible) {
10
- acc[attributeName] = { select: opts.relationalFields };
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
- break;
13
- }
14
- case "media": {
15
- acc[attributeName] = { select: ["id"] };
16
- break;
17
- }
18
- case "component": {
19
- const populate = getDeepPopulate(attribute.component, opts);
20
- acc[attributeName] = { populate };
21
- break;
22
- }
23
- case "dynamiczone": {
24
- const populatedComponents = (attribute.components || []).reduce(
25
- (acc2, componentUID) => {
26
- acc2[componentUID] = { populate: getDeepPopulate(componentUID, opts) };
27
- return acc2;
28
- },
29
- {}
30
- );
31
- acc[attributeName] = { on: populatedComponents };
32
- break;
33
- }
34
- }
35
- return acc;
36
- }, {});
37
- };
38
- export {
39
- getDeepPopulate
64
+ return acc;
65
+ }, {});
40
66
  };
67
+
68
+ export { getDeepPopulate };
41
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: 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;AAGf,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,CAyG1B,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,kBAiCrD,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,CAAC"}