@strapi/core 0.0.0-next.c823b10e981295994d8b0733c78fa065aec064ee → 0.0.0-next.cb374d6b06692607bcfbd4d5131bafd4c990aa29

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