@strapi/core 0.0.0-experimental.e02b4637b3906c6d31048d00600d09a23a0edc3d → 0.0.0-experimental.e100737b0ed96d0d80a5c6f4925c7374e63a342a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (710) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +427 -403
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +426 -402
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/compile.js +23 -14
  7. package/dist/compile.js.map +1 -1
  8. package/dist/compile.mjs +22 -14
  9. package/dist/compile.mjs.map +1 -1
  10. package/dist/configuration/config-loader.js +110 -97
  11. package/dist/configuration/config-loader.js.map +1 -1
  12. package/dist/configuration/config-loader.mjs +109 -96
  13. package/dist/configuration/config-loader.mjs.map +1 -1
  14. package/dist/configuration/get-dirs.js +31 -29
  15. package/dist/configuration/get-dirs.js.map +1 -1
  16. package/dist/configuration/get-dirs.mjs +30 -30
  17. package/dist/configuration/get-dirs.mjs.map +1 -1
  18. package/dist/configuration/index.d.ts.map +1 -1
  19. package/dist/configuration/index.js +84 -73
  20. package/dist/configuration/index.js.map +1 -1
  21. package/dist/configuration/index.mjs +83 -69
  22. package/dist/configuration/index.mjs.map +1 -1
  23. package/dist/configuration/urls.js +65 -61
  24. package/dist/configuration/urls.js.map +1 -1
  25. package/dist/configuration/urls.mjs +64 -62
  26. package/dist/configuration/urls.mjs.map +1 -1
  27. package/dist/container.js +27 -23
  28. package/dist/container.js.map +1 -1
  29. package/dist/container.mjs +26 -24
  30. package/dist/container.mjs.map +1 -1
  31. package/dist/core-api/controller/collection-type.js +77 -76
  32. package/dist/core-api/controller/collection-type.js.map +1 -1
  33. package/dist/core-api/controller/collection-type.mjs +76 -77
  34. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  35. package/dist/core-api/controller/index.js +63 -48
  36. package/dist/core-api/controller/index.js.map +1 -1
  37. package/dist/core-api/controller/index.mjs +62 -49
  38. package/dist/core-api/controller/index.mjs.map +1 -1
  39. package/dist/core-api/controller/single-type.js +41 -40
  40. package/dist/core-api/controller/single-type.js.map +1 -1
  41. package/dist/core-api/controller/single-type.mjs +40 -41
  42. package/dist/core-api/controller/single-type.mjs.map +1 -1
  43. package/dist/core-api/controller/transform.js +72 -63
  44. package/dist/core-api/controller/transform.js.map +1 -1
  45. package/dist/core-api/controller/transform.mjs +71 -64
  46. package/dist/core-api/controller/transform.mjs.map +1 -1
  47. package/dist/core-api/routes/index.js +64 -62
  48. package/dist/core-api/routes/index.js.map +1 -1
  49. package/dist/core-api/routes/index.mjs +62 -62
  50. package/dist/core-api/routes/index.mjs.map +1 -1
  51. package/dist/core-api/service/collection-type.js +73 -60
  52. package/dist/core-api/service/collection-type.js.map +1 -1
  53. package/dist/core-api/service/collection-type.mjs +72 -62
  54. package/dist/core-api/service/collection-type.mjs.map +1 -1
  55. package/dist/core-api/service/core-service.js +9 -8
  56. package/dist/core-api/service/core-service.js.map +1 -1
  57. package/dist/core-api/service/core-service.mjs +8 -9
  58. package/dist/core-api/service/core-service.mjs.map +1 -1
  59. package/dist/core-api/service/index.js +13 -13
  60. package/dist/core-api/service/index.js.map +1 -1
  61. package/dist/core-api/service/index.mjs +12 -14
  62. package/dist/core-api/service/index.mjs.map +1 -1
  63. package/dist/core-api/service/pagination.js +69 -43
  64. package/dist/core-api/service/pagination.js.map +1 -1
  65. package/dist/core-api/service/pagination.mjs +68 -47
  66. package/dist/core-api/service/pagination.mjs.map +1 -1
  67. package/dist/core-api/service/single-type.js +43 -39
  68. package/dist/core-api/service/single-type.js.map +1 -1
  69. package/dist/core-api/service/single-type.mjs +42 -41
  70. package/dist/core-api/service/single-type.mjs.map +1 -1
  71. package/dist/domain/content-type/index.js +95 -100
  72. package/dist/domain/content-type/index.js.map +1 -1
  73. package/dist/domain/content-type/index.mjs +94 -100
  74. package/dist/domain/content-type/index.mjs.map +1 -1
  75. package/dist/domain/content-type/validator.js +84 -69
  76. package/dist/domain/content-type/validator.js.map +1 -1
  77. package/dist/domain/content-type/validator.mjs +83 -68
  78. package/dist/domain/content-type/validator.mjs.map +1 -1
  79. package/dist/domain/module/index.js +109 -100
  80. package/dist/domain/module/index.js.map +1 -1
  81. package/dist/domain/module/index.mjs +108 -99
  82. package/dist/domain/module/index.mjs.map +1 -1
  83. package/dist/domain/module/validation.js +25 -20
  84. package/dist/domain/module/validation.js.map +1 -1
  85. package/dist/domain/module/validation.mjs +24 -21
  86. package/dist/domain/module/validation.mjs.map +1 -1
  87. package/dist/ee/index.d.ts +1 -0
  88. package/dist/ee/index.d.ts.map +1 -1
  89. package/dist/ee/index.js +171 -132
  90. package/dist/ee/index.js.map +1 -1
  91. package/dist/ee/index.mjs +170 -134
  92. package/dist/ee/index.mjs.map +1 -1
  93. package/dist/ee/license.d.ts.map +1 -1
  94. package/dist/ee/license.js +99 -75
  95. package/dist/ee/license.js.map +1 -1
  96. package/dist/ee/license.mjs +98 -76
  97. package/dist/ee/license.mjs.map +1 -1
  98. package/dist/factories.js +72 -67
  99. package/dist/factories.js.map +1 -1
  100. package/dist/factories.mjs +71 -71
  101. package/dist/factories.mjs.map +1 -1
  102. package/dist/index.js +29 -26
  103. package/dist/index.js.map +1 -1
  104. package/dist/index.mjs +29 -29
  105. package/dist/index.mjs.map +1 -1
  106. package/dist/loaders/admin.d.ts.map +1 -1
  107. package/dist/loaders/admin.js +21 -20
  108. package/dist/loaders/admin.js.map +1 -1
  109. package/dist/loaders/admin.mjs +20 -20
  110. package/dist/loaders/admin.mjs.map +1 -1
  111. package/dist/loaders/apis.js +143 -120
  112. package/dist/loaders/apis.js.map +1 -1
  113. package/dist/loaders/apis.mjs +142 -119
  114. package/dist/loaders/apis.mjs.map +1 -1
  115. package/dist/loaders/components.js +33 -34
  116. package/dist/loaders/components.js.map +1 -1
  117. package/dist/loaders/components.mjs +32 -34
  118. package/dist/loaders/components.mjs.map +1 -1
  119. package/dist/loaders/index.js +22 -20
  120. package/dist/loaders/index.js.map +1 -1
  121. package/dist/loaders/index.mjs +21 -21
  122. package/dist/loaders/index.mjs.map +1 -1
  123. package/dist/loaders/middlewares.js +29 -25
  124. package/dist/loaders/middlewares.js.map +1 -1
  125. package/dist/loaders/middlewares.mjs +28 -25
  126. package/dist/loaders/middlewares.mjs.map +1 -1
  127. package/dist/loaders/plugins/get-enabled-plugins.js +126 -131
  128. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  129. package/dist/loaders/plugins/get-enabled-plugins.mjs +125 -108
  130. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  131. package/dist/loaders/plugins/get-user-plugins-config.js +25 -24
  132. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  133. package/dist/loaders/plugins/get-user-plugins-config.mjs +24 -23
  134. package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
  135. package/dist/loaders/plugins/index.js +132 -122
  136. package/dist/loaders/plugins/index.js.map +1 -1
  137. package/dist/loaders/plugins/index.mjs +121 -112
  138. package/dist/loaders/plugins/index.mjs.map +1 -1
  139. package/dist/loaders/policies.js +24 -20
  140. package/dist/loaders/policies.js.map +1 -1
  141. package/dist/loaders/policies.mjs +23 -20
  142. package/dist/loaders/policies.mjs.map +1 -1
  143. package/dist/loaders/sanitizers.js +10 -4
  144. package/dist/loaders/sanitizers.js.map +1 -1
  145. package/dist/loaders/sanitizers.mjs +9 -6
  146. package/dist/loaders/sanitizers.mjs.map +1 -1
  147. package/dist/loaders/src-index.js +35 -27
  148. package/dist/loaders/src-index.js.map +1 -1
  149. package/dist/loaders/src-index.mjs +34 -29
  150. package/dist/loaders/src-index.mjs.map +1 -1
  151. package/dist/loaders/validators.js +9 -4
  152. package/dist/loaders/validators.js.map +1 -1
  153. package/dist/loaders/validators.mjs +8 -6
  154. package/dist/loaders/validators.mjs.map +1 -1
  155. package/dist/middlewares/body.d.ts.map +1 -1
  156. package/dist/middlewares/body.js +58 -54
  157. package/dist/middlewares/body.js.map +1 -1
  158. package/dist/middlewares/body.mjs +57 -51
  159. package/dist/middlewares/body.mjs.map +1 -1
  160. package/dist/middlewares/compression.js +6 -6
  161. package/dist/middlewares/compression.js.map +1 -1
  162. package/dist/middlewares/compression.mjs +5 -5
  163. package/dist/middlewares/compression.mjs.map +1 -1
  164. package/dist/middlewares/cors.js +59 -48
  165. package/dist/middlewares/cors.js.map +1 -1
  166. package/dist/middlewares/cors.mjs +58 -47
  167. package/dist/middlewares/cors.mjs.map +1 -1
  168. package/dist/middlewares/errors.js +32 -30
  169. package/dist/middlewares/errors.js.map +1 -1
  170. package/dist/middlewares/errors.mjs +31 -31
  171. package/dist/middlewares/errors.mjs.map +1 -1
  172. package/dist/middlewares/favicon.js +27 -17
  173. package/dist/middlewares/favicon.js.map +1 -1
  174. package/dist/middlewares/favicon.mjs +26 -16
  175. package/dist/middlewares/favicon.mjs.map +1 -1
  176. package/dist/middlewares/index.js +32 -30
  177. package/dist/middlewares/index.js.map +1 -1
  178. package/dist/middlewares/index.mjs +31 -31
  179. package/dist/middlewares/index.mjs.map +1 -1
  180. package/dist/middlewares/ip.js +6 -6
  181. package/dist/middlewares/ip.js.map +1 -1
  182. package/dist/middlewares/ip.mjs +5 -5
  183. package/dist/middlewares/ip.mjs.map +1 -1
  184. package/dist/middlewares/logger.js +10 -9
  185. package/dist/middlewares/logger.js.map +1 -1
  186. package/dist/middlewares/logger.mjs +9 -10
  187. package/dist/middlewares/logger.mjs.map +1 -1
  188. package/dist/middlewares/powered-by.js +13 -9
  189. package/dist/middlewares/powered-by.js.map +1 -1
  190. package/dist/middlewares/powered-by.mjs +12 -10
  191. package/dist/middlewares/powered-by.mjs.map +1 -1
  192. package/dist/middlewares/public.js +33 -29
  193. package/dist/middlewares/public.js.map +1 -1
  194. package/dist/middlewares/public.mjs +32 -28
  195. package/dist/middlewares/public.mjs.map +1 -1
  196. package/dist/middlewares/query.js +35 -32
  197. package/dist/middlewares/query.js.map +1 -1
  198. package/dist/middlewares/query.mjs +34 -31
  199. package/dist/middlewares/query.mjs.map +1 -1
  200. package/dist/middlewares/response-time.js +10 -9
  201. package/dist/middlewares/response-time.js.map +1 -1
  202. package/dist/middlewares/response-time.mjs +9 -10
  203. package/dist/middlewares/response-time.mjs.map +1 -1
  204. package/dist/middlewares/responses.js +14 -12
  205. package/dist/middlewares/responses.js.map +1 -1
  206. package/dist/middlewares/responses.mjs +13 -13
  207. package/dist/middlewares/responses.mjs.map +1 -1
  208. package/dist/middlewares/security.js +109 -71
  209. package/dist/middlewares/security.js.map +1 -1
  210. package/dist/middlewares/security.mjs +108 -70
  211. package/dist/middlewares/security.mjs.map +1 -1
  212. package/dist/middlewares/session.js +26 -25
  213. package/dist/middlewares/session.js.map +1 -1
  214. package/dist/middlewares/session.mjs +25 -24
  215. package/dist/middlewares/session.mjs.map +1 -1
  216. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +2 -2
  217. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
  218. package/dist/migrations/database/5.0.0-discard-drafts.js +154 -80
  219. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  220. package/dist/migrations/database/5.0.0-discard-drafts.mjs +153 -82
  221. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  222. package/dist/migrations/draft-publish.d.ts +1 -1
  223. package/dist/migrations/draft-publish.d.ts.map +1 -1
  224. package/dist/migrations/draft-publish.js +61 -34
  225. package/dist/migrations/draft-publish.js.map +1 -1
  226. package/dist/migrations/draft-publish.mjs +60 -36
  227. package/dist/migrations/draft-publish.mjs.map +1 -1
  228. package/dist/migrations/i18n.js +62 -45
  229. package/dist/migrations/i18n.js.map +1 -1
  230. package/dist/migrations/i18n.mjs +61 -47
  231. package/dist/migrations/i18n.mjs.map +1 -1
  232. package/dist/migrations/index.js +24 -10
  233. package/dist/migrations/index.js.map +1 -1
  234. package/dist/migrations/index.mjs +23 -12
  235. package/dist/migrations/index.mjs.map +1 -1
  236. package/dist/package.json.js +182 -0
  237. package/dist/package.json.js.map +1 -0
  238. package/dist/package.json.mjs +159 -0
  239. package/dist/package.json.mjs.map +1 -0
  240. package/dist/providers/admin.js +27 -17
  241. package/dist/providers/admin.js.map +1 -1
  242. package/dist/providers/admin.mjs +26 -19
  243. package/dist/providers/admin.mjs.map +1 -1
  244. package/dist/providers/coreStore.js +13 -8
  245. package/dist/providers/coreStore.js.map +1 -1
  246. package/dist/providers/coreStore.mjs +12 -10
  247. package/dist/providers/coreStore.mjs.map +1 -1
  248. package/dist/providers/cron.js +19 -16
  249. package/dist/providers/cron.js.map +1 -1
  250. package/dist/providers/cron.mjs +18 -18
  251. package/dist/providers/cron.mjs.map +1 -1
  252. package/dist/providers/index.js +18 -9
  253. package/dist/providers/index.js.map +1 -1
  254. package/dist/providers/index.mjs +17 -10
  255. package/dist/providers/index.mjs.map +1 -1
  256. package/dist/providers/provider.js +4 -3
  257. package/dist/providers/provider.js.map +1 -1
  258. package/dist/providers/provider.mjs +3 -4
  259. package/dist/providers/provider.mjs.map +1 -1
  260. package/dist/providers/registries.js +37 -32
  261. package/dist/providers/registries.js.map +1 -1
  262. package/dist/providers/registries.mjs +36 -34
  263. package/dist/providers/registries.mjs.map +1 -1
  264. package/dist/providers/telemetry.js +19 -16
  265. package/dist/providers/telemetry.js.map +1 -1
  266. package/dist/providers/telemetry.mjs +18 -18
  267. package/dist/providers/telemetry.mjs.map +1 -1
  268. package/dist/providers/webhooks.js +28 -26
  269. package/dist/providers/webhooks.js.map +1 -1
  270. package/dist/providers/webhooks.mjs +27 -28
  271. package/dist/providers/webhooks.mjs.map +1 -1
  272. package/dist/registries/apis.js +23 -20
  273. package/dist/registries/apis.js.map +1 -1
  274. package/dist/registries/apis.mjs +22 -22
  275. package/dist/registries/apis.mjs.map +1 -1
  276. package/dist/registries/components.js +35 -37
  277. package/dist/registries/components.js.map +1 -1
  278. package/dist/registries/components.mjs +34 -39
  279. package/dist/registries/components.mjs.map +1 -1
  280. package/dist/registries/content-types.js +54 -59
  281. package/dist/registries/content-types.js.map +1 -1
  282. package/dist/registries/content-types.mjs +53 -61
  283. package/dist/registries/content-types.mjs.map +1 -1
  284. package/dist/registries/controllers.js +70 -71
  285. package/dist/registries/controllers.js.map +1 -1
  286. package/dist/registries/controllers.mjs +69 -73
  287. package/dist/registries/controllers.mjs.map +1 -1
  288. package/dist/registries/custom-fields.js +75 -65
  289. package/dist/registries/custom-fields.js.map +1 -1
  290. package/dist/registries/custom-fields.mjs +74 -67
  291. package/dist/registries/custom-fields.mjs.map +1 -1
  292. package/dist/registries/hooks.js +46 -49
  293. package/dist/registries/hooks.js.map +1 -1
  294. package/dist/registries/hooks.mjs +45 -51
  295. package/dist/registries/hooks.mjs.map +1 -1
  296. package/dist/registries/middlewares.js +49 -51
  297. package/dist/registries/middlewares.js.map +1 -1
  298. package/dist/registries/middlewares.mjs +48 -53
  299. package/dist/registries/middlewares.mjs.map +1 -1
  300. package/dist/registries/models.js +14 -13
  301. package/dist/registries/models.js.map +1 -1
  302. package/dist/registries/models.mjs +13 -14
  303. package/dist/registries/models.mjs.map +1 -1
  304. package/dist/registries/modules.js +39 -36
  305. package/dist/registries/modules.js.map +1 -1
  306. package/dist/registries/modules.mjs +38 -38
  307. package/dist/registries/modules.mjs.map +1 -1
  308. package/dist/registries/namespace.js +21 -20
  309. package/dist/registries/namespace.js.map +1 -1
  310. package/dist/registries/namespace.mjs +20 -23
  311. package/dist/registries/namespace.mjs.map +1 -1
  312. package/dist/registries/plugins.js +23 -20
  313. package/dist/registries/plugins.js.map +1 -1
  314. package/dist/registries/plugins.mjs +22 -22
  315. package/dist/registries/plugins.mjs.map +1 -1
  316. package/dist/registries/policies.js +103 -96
  317. package/dist/registries/policies.js.map +1 -1
  318. package/dist/registries/policies.mjs +102 -98
  319. package/dist/registries/policies.mjs.map +1 -1
  320. package/dist/registries/sanitizers.js +23 -22
  321. package/dist/registries/sanitizers.js.map +1 -1
  322. package/dist/registries/sanitizers.mjs +22 -22
  323. package/dist/registries/sanitizers.mjs.map +1 -1
  324. package/dist/registries/services.js +71 -71
  325. package/dist/registries/services.js.map +1 -1
  326. package/dist/registries/services.mjs +70 -73
  327. package/dist/registries/services.mjs.map +1 -1
  328. package/dist/registries/validators.js +23 -22
  329. package/dist/registries/validators.js.map +1 -1
  330. package/dist/registries/validators.mjs +22 -22
  331. package/dist/registries/validators.mjs.map +1 -1
  332. package/dist/services/auth/index.js +74 -74
  333. package/dist/services/auth/index.js.map +1 -1
  334. package/dist/services/auth/index.mjs +73 -74
  335. package/dist/services/auth/index.mjs.map +1 -1
  336. package/dist/services/config.js +47 -43
  337. package/dist/services/config.js.map +1 -1
  338. package/dist/services/config.mjs +46 -44
  339. package/dist/services/config.mjs.map +1 -1
  340. package/dist/services/content-api/index.js +80 -79
  341. package/dist/services/content-api/index.js.map +1 -1
  342. package/dist/services/content-api/index.mjs +79 -79
  343. package/dist/services/content-api/index.mjs.map +1 -1
  344. package/dist/services/content-api/permissions/engine.js +8 -5
  345. package/dist/services/content-api/permissions/engine.js.map +1 -1
  346. package/dist/services/content-api/permissions/engine.mjs +7 -5
  347. package/dist/services/content-api/permissions/engine.mjs.map +1 -1
  348. package/dist/services/content-api/permissions/index.js +101 -81
  349. package/dist/services/content-api/permissions/index.js.map +1 -1
  350. package/dist/services/content-api/permissions/index.mjs +100 -81
  351. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  352. package/dist/services/content-api/permissions/providers/action.js +17 -14
  353. package/dist/services/content-api/permissions/providers/action.js.map +1 -1
  354. package/dist/services/content-api/permissions/providers/action.mjs +16 -16
  355. package/dist/services/content-api/permissions/providers/action.mjs.map +1 -1
  356. package/dist/services/content-api/permissions/providers/condition.js +17 -14
  357. package/dist/services/content-api/permissions/providers/condition.js.map +1 -1
  358. package/dist/services/content-api/permissions/providers/condition.mjs +16 -16
  359. package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -1
  360. package/dist/services/core-store.js +115 -95
  361. package/dist/services/core-store.js.map +1 -1
  362. package/dist/services/core-store.mjs +114 -97
  363. package/dist/services/core-store.mjs.map +1 -1
  364. package/dist/services/cron.js +74 -60
  365. package/dist/services/cron.js.map +1 -1
  366. package/dist/services/cron.mjs +73 -62
  367. package/dist/services/cron.mjs.map +1 -1
  368. package/dist/services/custom-fields.js +9 -7
  369. package/dist/services/custom-fields.js.map +1 -1
  370. package/dist/services/custom-fields.mjs +8 -9
  371. package/dist/services/custom-fields.mjs.map +1 -1
  372. package/dist/services/document-service/attributes/index.js +23 -18
  373. package/dist/services/document-service/attributes/index.js.map +1 -1
  374. package/dist/services/document-service/attributes/index.mjs +22 -19
  375. package/dist/services/document-service/attributes/index.mjs.map +1 -1
  376. package/dist/services/document-service/attributes/transforms.js +16 -15
  377. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  378. package/dist/services/document-service/attributes/transforms.mjs +15 -15
  379. package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
  380. package/dist/services/document-service/common.d.ts +1 -1
  381. package/dist/services/document-service/common.d.ts.map +1 -1
  382. package/dist/services/document-service/common.js +5 -4
  383. package/dist/services/document-service/common.js.map +1 -1
  384. package/dist/services/document-service/common.mjs +4 -5
  385. package/dist/services/document-service/common.mjs.map +1 -1
  386. package/dist/services/document-service/components.d.ts.map +1 -1
  387. package/dist/services/document-service/components.js +255 -257
  388. package/dist/services/document-service/components.js.map +1 -1
  389. package/dist/services/document-service/components.mjs +254 -262
  390. package/dist/services/document-service/components.mjs.map +1 -1
  391. package/dist/services/document-service/draft-and-publish.d.ts +1 -1
  392. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  393. package/dist/services/document-service/draft-and-publish.js +88 -48
  394. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  395. package/dist/services/document-service/draft-and-publish.mjs +87 -54
  396. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  397. package/dist/services/document-service/entries.d.ts +2 -2
  398. package/dist/services/document-service/entries.d.ts.map +1 -1
  399. package/dist/services/document-service/entries.js +109 -92
  400. package/dist/services/document-service/entries.js.map +1 -1
  401. package/dist/services/document-service/entries.mjs +108 -93
  402. package/dist/services/document-service/entries.mjs.map +1 -1
  403. package/dist/services/document-service/events.d.ts +1 -1
  404. package/dist/services/document-service/events.d.ts.map +1 -1
  405. package/dist/services/document-service/events.js +52 -40
  406. package/dist/services/document-service/events.js.map +1 -1
  407. package/dist/services/document-service/events.mjs +51 -41
  408. package/dist/services/document-service/events.mjs.map +1 -1
  409. package/dist/services/document-service/index.d.ts +2 -1
  410. package/dist/services/document-service/index.d.ts.map +1 -1
  411. package/dist/services/document-service/index.js +53 -32
  412. package/dist/services/document-service/index.js.map +1 -1
  413. package/dist/services/document-service/index.mjs +52 -33
  414. package/dist/services/document-service/index.mjs.map +1 -1
  415. package/dist/services/document-service/internationalization.js +62 -46
  416. package/dist/services/document-service/internationalization.js.map +1 -1
  417. package/dist/services/document-service/internationalization.mjs +61 -50
  418. package/dist/services/document-service/internationalization.mjs.map +1 -1
  419. package/dist/services/document-service/middlewares/errors.js +23 -19
  420. package/dist/services/document-service/middlewares/errors.js.map +1 -1
  421. package/dist/services/document-service/middlewares/errors.mjs +22 -20
  422. package/dist/services/document-service/middlewares/errors.mjs.map +1 -1
  423. package/dist/services/document-service/middlewares/middleware-manager.js +46 -44
  424. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -1
  425. package/dist/services/document-service/middlewares/middleware-manager.mjs +45 -45
  426. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -1
  427. package/dist/services/document-service/params.js +11 -5
  428. package/dist/services/document-service/params.js.map +1 -1
  429. package/dist/services/document-service/params.mjs +10 -6
  430. package/dist/services/document-service/params.mjs.map +1 -1
  431. package/dist/services/document-service/repository.d.ts.map +1 -1
  432. package/dist/services/document-service/repository.js +354 -304
  433. package/dist/services/document-service/repository.js.map +1 -1
  434. package/dist/services/document-service/repository.mjs +353 -305
  435. package/dist/services/document-service/repository.mjs.map +1 -1
  436. package/dist/services/document-service/transform/data.js +22 -12
  437. package/dist/services/document-service/transform/data.js.map +1 -1
  438. package/dist/services/document-service/transform/data.mjs +21 -13
  439. package/dist/services/document-service/transform/data.mjs.map +1 -1
  440. package/dist/services/document-service/transform/fields.js +26 -17
  441. package/dist/services/document-service/transform/fields.js.map +1 -1
  442. package/dist/services/document-service/transform/fields.mjs +25 -18
  443. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  444. package/dist/services/document-service/transform/id-map.d.ts +1 -1
  445. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  446. package/dist/services/document-service/transform/id-map.js +116 -69
  447. package/dist/services/document-service/transform/id-map.js.map +1 -1
  448. package/dist/services/document-service/transform/id-map.mjs +115 -70
  449. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  450. package/dist/services/document-service/transform/id-transform.d.ts +1 -1
  451. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  452. package/dist/services/document-service/transform/id-transform.js +37 -29
  453. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  454. package/dist/services/document-service/transform/id-transform.mjs +36 -30
  455. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  456. package/dist/services/document-service/transform/populate.js +23 -18
  457. package/dist/services/document-service/transform/populate.js.map +1 -1
  458. package/dist/services/document-service/transform/populate.mjs +22 -19
  459. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  460. package/dist/services/document-service/transform/query.js +11 -6
  461. package/dist/services/document-service/transform/query.js.map +1 -1
  462. package/dist/services/document-service/transform/query.mjs +10 -7
  463. package/dist/services/document-service/transform/query.mjs.map +1 -1
  464. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +1 -1
  465. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  466. package/dist/services/document-service/transform/relations/extract/data-ids.js +71 -48
  467. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  468. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +70 -49
  469. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  470. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  471. package/dist/services/document-service/transform/relations/transform/data-ids.js +97 -63
  472. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  473. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +96 -64
  474. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  475. package/dist/services/document-service/transform/relations/transform/default-locale.js +47 -29
  476. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
  477. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +46 -30
  478. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
  479. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  480. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  481. package/dist/services/document-service/transform/relations/utils/dp.js +52 -26
  482. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  483. package/dist/services/document-service/transform/relations/utils/dp.mjs +51 -27
  484. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  485. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +1 -1
  486. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  487. package/dist/services/document-service/transform/relations/utils/i18n.js +20 -18
  488. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  489. package/dist/services/document-service/transform/relations/utils/i18n.mjs +19 -21
  490. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  491. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  492. package/dist/services/document-service/transform/relations/utils/map-relation.js +116 -77
  493. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  494. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +115 -79
  495. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  496. package/dist/services/document-service/utils/bidirectional-relations.d.ts +95 -0
  497. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -0
  498. package/dist/services/document-service/utils/bidirectional-relations.js +148 -0
  499. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -0
  500. package/dist/services/document-service/utils/bidirectional-relations.mjs +145 -0
  501. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -0
  502. package/dist/services/document-service/utils/populate.d.ts +1 -1
  503. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  504. package/dist/services/document-service/utils/populate.js +66 -42
  505. package/dist/services/document-service/utils/populate.js.map +1 -1
  506. package/dist/services/document-service/utils/populate.mjs +65 -43
  507. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  508. package/dist/services/document-service/utils/unidirectional-relations.d.ts +12 -9
  509. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  510. package/dist/services/document-service/utils/unidirectional-relations.js +110 -51
  511. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  512. package/dist/services/document-service/utils/unidirectional-relations.mjs +109 -53
  513. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  514. package/dist/services/entity-service/index.js +230 -161
  515. package/dist/services/entity-service/index.js.map +1 -1
  516. package/dist/services/entity-service/index.mjs +229 -160
  517. package/dist/services/entity-service/index.mjs.map +1 -1
  518. package/dist/services/entity-validator/blocks-validator.js +135 -103
  519. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  520. package/dist/services/entity-validator/blocks-validator.mjs +134 -104
  521. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  522. package/dist/services/entity-validator/index.d.ts +1 -1
  523. package/dist/services/entity-validator/index.d.ts.map +1 -1
  524. package/dist/services/entity-validator/index.js +362 -367
  525. package/dist/services/entity-validator/index.js.map +1 -1
  526. package/dist/services/entity-validator/index.mjs +358 -364
  527. package/dist/services/entity-validator/index.mjs.map +1 -1
  528. package/dist/services/entity-validator/validators.js +268 -210
  529. package/dist/services/entity-validator/validators.js.map +1 -1
  530. package/dist/services/entity-validator/validators.mjs +267 -216
  531. package/dist/services/entity-validator/validators.mjs.map +1 -1
  532. package/dist/services/errors.js +65 -65
  533. package/dist/services/errors.js.map +1 -1
  534. package/dist/services/errors.mjs +64 -66
  535. package/dist/services/errors.mjs.map +1 -1
  536. package/dist/services/event-hub.js +82 -69
  537. package/dist/services/event-hub.js.map +1 -1
  538. package/dist/services/event-hub.mjs +81 -71
  539. package/dist/services/event-hub.mjs.map +1 -1
  540. package/dist/services/features.js +19 -14
  541. package/dist/services/features.js.map +1 -1
  542. package/dist/services/features.mjs +18 -15
  543. package/dist/services/features.mjs.map +1 -1
  544. package/dist/services/fs.js +41 -40
  545. package/dist/services/fs.js.map +1 -1
  546. package/dist/services/fs.mjs +40 -39
  547. package/dist/services/fs.mjs.map +1 -1
  548. package/dist/services/metrics/admin-user-hash.js +13 -11
  549. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  550. package/dist/services/metrics/admin-user-hash.mjs +12 -10
  551. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  552. package/dist/services/metrics/index.js +46 -40
  553. package/dist/services/metrics/index.js.map +1 -1
  554. package/dist/services/metrics/index.mjs +45 -42
  555. package/dist/services/metrics/index.mjs.map +1 -1
  556. package/dist/services/metrics/is-truthy.js +13 -6
  557. package/dist/services/metrics/is-truthy.js.map +1 -1
  558. package/dist/services/metrics/is-truthy.mjs +12 -6
  559. package/dist/services/metrics/is-truthy.mjs.map +1 -1
  560. package/dist/services/metrics/middleware.d.ts.map +1 -1
  561. package/dist/services/metrics/middleware.js +37 -22
  562. package/dist/services/metrics/middleware.js.map +1 -1
  563. package/dist/services/metrics/middleware.mjs +36 -24
  564. package/dist/services/metrics/middleware.mjs.map +1 -1
  565. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  566. package/dist/services/metrics/rate-limiter.js +24 -19
  567. package/dist/services/metrics/rate-limiter.js.map +1 -1
  568. package/dist/services/metrics/rate-limiter.mjs +23 -21
  569. package/dist/services/metrics/rate-limiter.mjs.map +1 -1
  570. package/dist/services/metrics/sender.js +78 -69
  571. package/dist/services/metrics/sender.js.map +1 -1
  572. package/dist/services/metrics/sender.mjs +77 -64
  573. package/dist/services/metrics/sender.mjs.map +1 -1
  574. package/dist/services/query-params.js +13 -10
  575. package/dist/services/query-params.js.map +1 -1
  576. package/dist/services/query-params.mjs +12 -12
  577. package/dist/services/query-params.mjs.map +1 -1
  578. package/dist/services/reloader.js +35 -32
  579. package/dist/services/reloader.js.map +1 -1
  580. package/dist/services/reloader.mjs +34 -33
  581. package/dist/services/reloader.mjs.map +1 -1
  582. package/dist/services/request-context.js +11 -8
  583. package/dist/services/request-context.js.map +1 -1
  584. package/dist/services/request-context.mjs +10 -10
  585. package/dist/services/request-context.mjs.map +1 -1
  586. package/dist/services/server/admin-api.js +11 -10
  587. package/dist/services/server/admin-api.js.map +1 -1
  588. package/dist/services/server/admin-api.mjs +10 -11
  589. package/dist/services/server/admin-api.mjs.map +1 -1
  590. package/dist/services/server/api.js +33 -27
  591. package/dist/services/server/api.js.map +1 -1
  592. package/dist/services/server/api.mjs +32 -26
  593. package/dist/services/server/api.mjs.map +1 -1
  594. package/dist/services/server/compose-endpoint.js +116 -105
  595. package/dist/services/server/compose-endpoint.js.map +1 -1
  596. package/dist/services/server/compose-endpoint.mjs +115 -105
  597. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  598. package/dist/services/server/content-api.js +11 -9
  599. package/dist/services/server/content-api.js.map +1 -1
  600. package/dist/services/server/content-api.mjs +10 -10
  601. package/dist/services/server/content-api.mjs.map +1 -1
  602. package/dist/services/server/http-server.js +48 -44
  603. package/dist/services/server/http-server.js.map +1 -1
  604. package/dist/services/server/http-server.mjs +47 -43
  605. package/dist/services/server/http-server.mjs.map +1 -1
  606. package/dist/services/server/index.js +85 -82
  607. package/dist/services/server/index.js.map +1 -1
  608. package/dist/services/server/index.mjs +84 -81
  609. package/dist/services/server/index.mjs.map +1 -1
  610. package/dist/services/server/koa.js +49 -47
  611. package/dist/services/server/koa.js.map +1 -1
  612. package/dist/services/server/koa.mjs +48 -44
  613. package/dist/services/server/koa.mjs.map +1 -1
  614. package/dist/services/server/middleware.js +86 -82
  615. package/dist/services/server/middleware.js.map +1 -1
  616. package/dist/services/server/middleware.mjs +85 -82
  617. package/dist/services/server/middleware.mjs.map +1 -1
  618. package/dist/services/server/policy.js +24 -17
  619. package/dist/services/server/policy.js.map +1 -1
  620. package/dist/services/server/policy.mjs +23 -18
  621. package/dist/services/server/policy.mjs.map +1 -1
  622. package/dist/services/server/register-middlewares.js +68 -61
  623. package/dist/services/server/register-middlewares.js.map +1 -1
  624. package/dist/services/server/register-middlewares.mjs +67 -63
  625. package/dist/services/server/register-middlewares.mjs.map +1 -1
  626. package/dist/services/server/register-routes.js +90 -67
  627. package/dist/services/server/register-routes.js.map +1 -1
  628. package/dist/services/server/register-routes.mjs +89 -67
  629. package/dist/services/server/register-routes.mjs.map +1 -1
  630. package/dist/services/server/routing.js +94 -81
  631. package/dist/services/server/routing.js.map +1 -1
  632. package/dist/services/server/routing.mjs +93 -81
  633. package/dist/services/server/routing.mjs.map +1 -1
  634. package/dist/services/utils/dynamic-zones.js +13 -14
  635. package/dist/services/utils/dynamic-zones.js.map +1 -1
  636. package/dist/services/utils/dynamic-zones.mjs +12 -16
  637. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  638. package/dist/services/webhook-runner.js +124 -122
  639. package/dist/services/webhook-runner.js.map +1 -1
  640. package/dist/services/webhook-runner.mjs +123 -121
  641. package/dist/services/webhook-runner.mjs.map +1 -1
  642. package/dist/services/webhook-store.js +132 -99
  643. package/dist/services/webhook-store.js.map +1 -1
  644. package/dist/services/webhook-store.mjs +131 -101
  645. package/dist/services/webhook-store.mjs.map +1 -1
  646. package/dist/services/worker-queue.js +44 -49
  647. package/dist/services/worker-queue.js.map +1 -1
  648. package/dist/services/worker-queue.mjs +43 -49
  649. package/dist/services/worker-queue.mjs.map +1 -1
  650. package/dist/utils/convert-custom-field-type.js +17 -20
  651. package/dist/utils/convert-custom-field-type.js.map +1 -1
  652. package/dist/utils/convert-custom-field-type.mjs +16 -21
  653. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  654. package/dist/utils/cron.js +64 -30
  655. package/dist/utils/cron.js.map +1 -1
  656. package/dist/utils/cron.mjs +63 -31
  657. package/dist/utils/cron.mjs.map +1 -1
  658. package/dist/utils/fetch.js +24 -18
  659. package/dist/utils/fetch.js.map +1 -1
  660. package/dist/utils/fetch.mjs +23 -19
  661. package/dist/utils/fetch.mjs.map +1 -1
  662. package/dist/utils/filepath-to-prop-path.js +20 -28
  663. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  664. package/dist/utils/filepath-to-prop-path.mjs +19 -26
  665. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  666. package/dist/utils/is-initialized.js +21 -12
  667. package/dist/utils/is-initialized.js.map +1 -1
  668. package/dist/utils/is-initialized.mjs +20 -13
  669. package/dist/utils/is-initialized.mjs.map +1 -1
  670. package/dist/utils/lifecycles.js +6 -5
  671. package/dist/utils/lifecycles.js.map +1 -1
  672. package/dist/utils/lifecycles.mjs +5 -6
  673. package/dist/utils/lifecycles.mjs.map +1 -1
  674. package/dist/utils/load-config-file.js +40 -38
  675. package/dist/utils/load-config-file.js.map +1 -1
  676. package/dist/utils/load-config-file.mjs +39 -36
  677. package/dist/utils/load-config-file.mjs.map +1 -1
  678. package/dist/utils/load-files.js +40 -35
  679. package/dist/utils/load-files.js.map +1 -1
  680. package/dist/utils/load-files.mjs +39 -32
  681. package/dist/utils/load-files.mjs.map +1 -1
  682. package/dist/utils/open-browser.js +8 -8
  683. package/dist/utils/open-browser.js.map +1 -1
  684. package/dist/utils/open-browser.mjs +7 -7
  685. package/dist/utils/open-browser.mjs.map +1 -1
  686. package/dist/utils/resolve-working-dirs.js +23 -10
  687. package/dist/utils/resolve-working-dirs.js.map +1 -1
  688. package/dist/utils/resolve-working-dirs.mjs +22 -9
  689. package/dist/utils/resolve-working-dirs.mjs.map +1 -1
  690. package/dist/utils/signals.js +20 -14
  691. package/dist/utils/signals.js.map +1 -1
  692. package/dist/utils/signals.mjs +19 -15
  693. package/dist/utils/signals.mjs.map +1 -1
  694. package/dist/utils/startup-logger.d.ts.map +1 -1
  695. package/dist/utils/startup-logger.js +107 -78
  696. package/dist/utils/startup-logger.js.map +1 -1
  697. package/dist/utils/startup-logger.mjs +106 -75
  698. package/dist/utils/startup-logger.mjs.map +1 -1
  699. package/dist/utils/transform-content-types-to-models.d.ts +353 -21
  700. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  701. package/dist/utils/transform-content-types-to-models.js +350 -261
  702. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  703. package/dist/utils/transform-content-types-to-models.mjs +349 -269
  704. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  705. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  706. package/dist/utils/update-notifier/index.js +68 -73
  707. package/dist/utils/update-notifier/index.js.map +1 -1
  708. package/dist/utils/update-notifier/index.mjs +67 -67
  709. package/dist/utils/update-notifier/index.mjs.map +1 -1
  710. package/package.json +27 -28
@@ -1 +1 @@
1
- {"version":3,"file":"unidirectional-relations.mjs","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport { keyBy } from 'lodash/fp';\n\nimport { UID, Schema } from '@strapi/types';\n\n/**\n * Loads lingering relations that need to be updated when overriding a published or draft entry.\n * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.\n * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.\n *\n * @param uid The content type uid\n * @param oldEntries The old entries that are being overridden\n * @returns An array of relations that need to be updated with the join table reference.\n */\nconst load = async (uid: UID.ContentType, oldEntries: { id: string; locale: string }[]) => {\n const updates = [] as any;\n\n // Iterate all components and content types to find relations that need to be updated\n await strapi.db.transaction(async ({ trx }) => {\n const contentTypes = Object.values(strapi.contentTypes) as Schema.ContentType[];\n const components = Object.values(strapi.components) as Schema.Component[];\n\n for (const model of [...contentTypes, ...components]) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as any) {\n /**\n * Only consider unidirectional relations\n */\n if (attribute.type !== 'relation') continue;\n if (attribute.target !== uid) continue;\n if (attribute.inversedBy || attribute.mappedBy) continue;\n const joinTable = attribute.joinTable;\n // TODO: joinColumn relations\n if (!joinTable) continue;\n\n const { name } = joinTable.inverseJoinColumn;\n\n /**\n * Load all relations that need to be updated\n */\n const oldEntriesIds = oldEntries.map((entry) => entry.id);\n const relations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(name, oldEntriesIds)\n .transacting(trx);\n\n if (relations.length === 0) continue;\n\n updates.push({ joinTable, relations });\n }\n }\n });\n\n return updates;\n};\n\n/**\n * Updates uni directional relations to target the right entries when overriding published or draft entries.\n *\n * @param oldEntries The old entries that are being overridden\n * @param newEntries The new entries that are overriding the old ones\n * @param oldRelations The relations that were previously loaded with `load` @see load\n */\nconst sync = async (\n oldEntries: { id: string; locale: string }[],\n newEntries: { id: string; locale: string }[],\n oldRelations: { joinTable: any; relations: any[] }[]\n) => {\n /**\n * Create a map of old entry ids to new entry ids\n *\n * Will be used to update the relation target ids\n */\n const newEntryByLocale = keyBy('locale', newEntries);\n const oldEntriesMap = oldEntries.reduce(\n (acc, entry) => {\n const newEntry = newEntryByLocale[entry.locale];\n if (!newEntry) return acc;\n acc[entry.id] = newEntry.id;\n return acc;\n },\n {} as Record<string, string>\n );\n\n await strapi.db.transaction(async ({ trx }) => {\n // Iterate old relations that are deleted and insert the new ones\n for (const { joinTable, relations } of oldRelations) {\n // Update old ids with the new ones\n const newRelations = relations.map((relation) => {\n const column = joinTable.inverseJoinColumn.name;\n const newId = oldEntriesMap[relation[column]];\n return { ...relation, [column]: newId };\n });\n\n // Insert those relations into the join table\n await trx.batchInsert(joinTable.name, newRelations, 1000);\n }\n });\n};\n\nexport { load, sync };\n"],"names":[],"mappings":";AAcM,MAAA,OAAO,OAAO,KAAsB,eAAiD;AACzF,QAAM,UAAU,CAAA;AAGhB,QAAM,OAAO,GAAG,YAAY,OAAO,EAAE,UAAU;AAC7C,UAAM,eAAe,OAAO,OAAO,OAAO,YAAY;AACtD,UAAM,aAAa,OAAO,OAAO,OAAO,UAAU;AAElD,eAAW,SAAS,CAAC,GAAG,cAAc,GAAG,UAAU,GAAG;AACpD,YAAM,UAAU,OAAO,GAAG,SAAS,IAAI,MAAM,GAAG;AAEhD,iBAAW,aAAa,OAAO,OAAO,QAAQ,UAAU,GAAU;AAIhE,YAAI,UAAU,SAAS;AAAY;AACnC,YAAI,UAAU,WAAW;AAAK;AAC1B,YAAA,UAAU,cAAc,UAAU;AAAU;AAChD,cAAM,YAAY,UAAU;AAE5B,YAAI,CAAC;AAAW;AAEV,cAAA,EAAE,KAAK,IAAI,UAAU;AAK3B,cAAM,gBAAgB,WAAW,IAAI,CAAC,UAAU,MAAM,EAAE;AACxD,cAAM,YAAY,MAAM,OAAO,GAC5B,gBACA,OAAO,GAAG,EACV,KAAK,UAAU,IAAI,EACnB,QAAQ,MAAM,aAAa,EAC3B,YAAY,GAAG;AAElB,YAAI,UAAU,WAAW;AAAG;AAE5B,gBAAQ,KAAK,EAAE,WAAW,UAAW,CAAA;AAAA,MACvC;AAAA,IACF;AAAA,EAAA,CACD;AAEM,SAAA;AACT;AASA,MAAM,OAAO,OACX,YACA,YACA,iBACG;AAMG,QAAA,mBAAmB,MAAM,UAAU,UAAU;AACnD,QAAM,gBAAgB,WAAW;AAAA,IAC/B,CAAC,KAAK,UAAU;AACR,YAAA,WAAW,iBAAiB,MAAM,MAAM;AAC9C,UAAI,CAAC;AAAiB,eAAA;AAClB,UAAA,MAAM,EAAE,IAAI,SAAS;AAClB,aAAA;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EAAA;AAGH,QAAM,OAAO,GAAG,YAAY,OAAO,EAAE,UAAU;AAE7C,eAAW,EAAE,WAAW,UAAU,KAAK,cAAc;AAEnD,YAAM,eAAe,UAAU,IAAI,CAAC,aAAa;AACzC,cAAA,SAAS,UAAU,kBAAkB;AAC3C,cAAM,QAAQ,cAAc,SAAS,MAAM,CAAC;AAC5C,eAAO,EAAE,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM;AAAA,MAAA,CACvC;AAGD,YAAM,IAAI,YAAY,UAAU,MAAM,cAAc,GAAI;AAAA,IAC1D;AAAA,EAAA,CACD;AACH;"}
1
+ {"version":3,"file":"unidirectional-relations.mjs","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport { keyBy, omit } from 'lodash/fp';\n\nimport type { UID, Schema } from '@strapi/types';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\n/**\n * Loads lingering relations that need to be updated when overriding a published or draft entry.\n * This is necessary because the relations are uni-directional and the target entry is not aware of the source entry.\n * This is not the case for bi-directional relations, where the target entry is also linked to the source entry.\n */\nconst load = async (uid: UID.ContentType, { oldVersions, newVersions }: LoadContext) => {\n const updates = [] as any;\n\n // Iterate all components and content types to find relations that need to be updated\n await strapi.db.transaction(async ({ trx }) => {\n const contentTypes = Object.values(strapi.contentTypes) as Schema.ContentType[];\n const components = Object.values(strapi.components) as Schema.Component[];\n\n for (const model of [...contentTypes, ...components]) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as any) {\n /**\n * Only consider unidirectional relations\n */\n if (\n attribute.type !== 'relation' ||\n attribute.target !== uid ||\n attribute.inversedBy ||\n attribute.mappedBy\n ) {\n continue;\n }\n\n // TODO: joinColumn relations\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: sourceColumnName } = joinTable.joinColumn;\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n /**\n * Load all relations that need to be updated\n */\n // NOTE: when the model has draft and publish, we can assume relation are only draft to draft & published to published\n const ids = oldVersions.map((entry) => entry.id);\n\n const oldVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (oldVersionsRelations.length > 0) {\n updates.push({ joinTable, relations: oldVersionsRelations });\n }\n\n /**\n * if publishing\n * if published version exists\n * updated published versions links\n * else\n * create link to newly published version\n *\n * if discarding\n * if published version link exists & not draft version link\n * create link to new draft version\n */\n\n if (!model.options?.draftAndPublish) {\n const ids = newVersions.map((entry) => entry.id);\n\n const newVersionsRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, ids)\n .transacting(trx);\n\n if (newVersionsRelations.length > 0) {\n // when publishing a draft that doesn't have a published version yet,\n // copy the links to the draft over to the published version\n // when discarding a published version, if no drafts exists\n const discardToAdd = newVersionsRelations\n .filter((relation) => {\n const matchingOldVerion = oldVersionsRelations.find((oldRelation) => {\n return oldRelation[sourceColumnName] === relation[sourceColumnName];\n });\n\n return !matchingOldVerion;\n })\n .map(omit('id'));\n\n updates.push({ joinTable, relations: discardToAdd });\n }\n }\n }\n }\n });\n\n return updates;\n};\n\n/**\n * Updates uni directional relations to target the right entries when overriding published or draft entries.\n *\n * @param oldEntries The old entries that are being overridden\n * @param newEntries The new entries that are overriding the old ones\n * @param oldRelations The relations that were previously loaded with `load` @see load\n */\nconst sync = async (\n oldEntries: { id: string; locale: string }[],\n newEntries: { id: string; locale: string }[],\n oldRelations: { joinTable: any; relations: any[] }[]\n) => {\n /**\n * Create a map of old entry ids to new entry ids\n *\n * Will be used to update the relation target ids\n */\n const newEntryByLocale = keyBy('locale', newEntries);\n const oldEntriesMap = oldEntries.reduce(\n (acc, entry) => {\n const newEntry = newEntryByLocale[entry.locale];\n if (!newEntry) return acc;\n acc[entry.id] = newEntry.id;\n return acc;\n },\n {} as Record<string, string>\n );\n\n await strapi.db.transaction(async ({ trx }) => {\n // Iterate old relations that are deleted and insert the new ones\n for (const { joinTable, relations } of oldRelations) {\n // Update old ids with the new ones\n const column = joinTable.inverseJoinColumn.name;\n\n const newRelations = relations.map((relation) => {\n const newId = oldEntriesMap[relation[column]];\n return { ...relation, [column]: newId };\n });\n\n // Insert those relations into the join table\n await trx.batchInsert(joinTable.name, newRelations, 1000);\n }\n });\n};\n\nexport { load, sync };\n"],"names":["load","uid","oldVersions","newVersions","updates","strapi","db","transaction","trx","contentTypes","Object","values","components","model","dbModel","metadata","get","attribute","attributes","type","target","inversedBy","mappedBy","joinTable","name","sourceColumnName","joinColumn","targetColumnName","inverseJoinColumn","ids","map","entry","id","oldVersionsRelations","getConnection","select","from","whereIn","transacting","length","push","relations","options","draftAndPublish","newVersionsRelations","discardToAdd","filter","relation","matchingOldVerion","find","oldRelation","omit","sync","oldEntries","newEntries","oldRelations","newEntryByLocale","keyBy","oldEntriesMap","reduce","acc","newEntry","locale","column","newRelations","newId","batchInsert"],"mappings":"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"}
@@ -1,169 +1,238 @@
1
- "use strict";
2
- const _ = require("lodash");
3
- const delegate = require("delegates");
4
- const database = require("@strapi/database");
5
- const strapiUtils = require("@strapi/utils");
6
- const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
7
- const ___default = /* @__PURE__ */ _interopDefault(_);
8
- const delegate__default = /* @__PURE__ */ _interopDefault(delegate);
9
- const transformLoadParamsToQuery = (uid, field, params, pagination = {}) => {
10
- const query = strapi.get("query-params").transform(uid, { populate: { [field]: params } });
11
- const res = {
12
- ...query.populate[field],
13
- ...pagination
14
- };
15
- return res;
1
+ 'use strict';
2
+
3
+ var _ = require('lodash');
4
+ var delegate = require('delegates');
5
+ var database = require('@strapi/database');
6
+ var strapiUtils = require('@strapi/utils');
7
+
8
+ const transformLoadParamsToQuery = (uid, field, params, pagination = {})=>{
9
+ const query = strapi.get('query-params').transform(uid, {
10
+ populate: {
11
+ [field]: params
12
+ }
13
+ });
14
+ const res = {
15
+ ...query.populate[field],
16
+ ...pagination
17
+ };
18
+ return res;
16
19
  };
17
20
  const databaseErrorsToTransform = [
18
- database.errors.InvalidTimeError,
19
- database.errors.InvalidDateTimeError,
20
- database.errors.InvalidDateError,
21
- database.errors.InvalidRelationError
21
+ database.errors.InvalidTimeError,
22
+ database.errors.InvalidDateTimeError,
23
+ database.errors.InvalidDateError,
24
+ database.errors.InvalidRelationError
22
25
  ];
23
- const createDefaultImplementation = ({
24
- strapi: strapi2,
25
- db
26
- }) => ({
27
- async wrapParams(options = {}) {
28
- return options;
29
- },
30
- async wrapResult(result = {}) {
31
- return result;
32
- },
33
- async findMany(uid, opts) {
34
- const { kind } = strapi2.getModel(uid);
35
- const wrappedParams = await this.wrapParams(opts, { uid, action: "findMany" });
36
- if (kind === "singleType") {
37
- const entity = strapi2.documents(uid).findFirst(wrappedParams);
38
- return this.wrapResult(entity, { uid, action: "findOne" });
39
- }
40
- const entities = await strapi2.documents(uid).findMany(wrappedParams);
41
- return this.wrapResult(entities, { uid, action: "findMany" });
42
- },
43
- async findPage(uid, opts) {
44
- const wrappedParams = await this.wrapParams(opts, { uid, action: "findPage" });
45
- const query = strapi2.get("query-params").transform(uid, wrappedParams);
46
- const entities = await db.query(uid).findPage(query);
47
- return this.wrapResult(entities, { uid, action: "findMany" });
48
- },
49
- async findOne(uid, entityId, opts) {
50
- const wrappedParams = await this.wrapParams(opts, { uid, action: "findOne" });
51
- const res = await db.query(uid).findOne({ where: { id: entityId } });
52
- if (!res) {
53
- return this.wrapResult(null, { uid, action: "findOne" });
54
- }
55
- const entity = await strapi2.documents(uid).findOne({
56
- ...wrappedParams,
57
- documentId: res.documentId
58
- });
59
- return this.wrapResult(entity, { uid, action: "findOne" });
60
- },
61
- async count(uid, opts) {
62
- const wrappedParams = await this.wrapParams(opts, { uid, action: "count" });
63
- return strapi2.documents(uid).count(wrappedParams);
64
- },
65
- async create(uid, params) {
66
- const wrappedParams = await this.wrapParams(params, { uid, action: "create" });
67
- const { data } = wrappedParams;
68
- if (!data) {
69
- throw new Error("cannot create");
70
- }
71
- const shouldPublish = !strapiUtils.contentTypes.isDraft(data, strapi2.getModel(uid));
72
- const entity = await strapi2.documents(uid).create({
73
- ...wrappedParams,
74
- status: shouldPublish ? "published" : "draft"
75
- });
76
- return this.wrapResult(entity, { uid, action: "create" });
77
- },
78
- async update(uid, entityId, opts) {
79
- const wrappedParams = await this.wrapParams(opts, {
80
- uid,
81
- action: "update"
82
- });
83
- const entityToUpdate = await db.query(uid).findOne({ where: { id: entityId } });
84
- if (!entityToUpdate) {
85
- return this.wrapResult(null, { uid, action: "update" });
86
- }
87
- const shouldPublish = !strapiUtils.contentTypes.isDraft(entityToUpdate, strapi2.getModel(uid));
88
- const entity = strapi2.documents(uid).update({
89
- ...wrappedParams,
90
- status: shouldPublish ? "published" : "draft",
91
- documentId: entityToUpdate.documentId
92
- });
93
- return this.wrapResult(entity, { uid, action: "update" });
94
- },
95
- async delete(uid, entityId, opts) {
96
- const wrappedParams = await this.wrapParams(opts, { uid, action: "delete" });
97
- const entityToDelete = await db.query(uid).findOne({ where: { id: entityId } });
98
- if (!entityToDelete) {
99
- return this.wrapResult(null, { uid, action: "delete" });
100
- }
101
- await strapi2.documents(uid).delete({
102
- ...wrappedParams,
103
- documentId: entityToDelete.documentId
26
+ const createDefaultImplementation = ({ strapi: strapi1, db })=>({
27
+ async wrapParams (options = {}) {
28
+ return options;
29
+ },
30
+ async wrapResult (result = {}) {
31
+ return result;
32
+ },
33
+ async findMany (uid, opts) {
34
+ const { kind } = strapi1.getModel(uid);
35
+ const wrappedParams = await this.wrapParams(opts, {
36
+ uid,
37
+ action: 'findMany'
38
+ });
39
+ if (kind === 'singleType') {
40
+ const entity = strapi1.documents(uid).findFirst(wrappedParams);
41
+ return this.wrapResult(entity, {
42
+ uid,
43
+ action: 'findOne'
44
+ });
45
+ }
46
+ const entities = await strapi1.documents(uid).findMany(wrappedParams);
47
+ return this.wrapResult(entities, {
48
+ uid,
49
+ action: 'findMany'
50
+ });
51
+ },
52
+ async findPage (uid, opts) {
53
+ const wrappedParams = await this.wrapParams(opts, {
54
+ uid,
55
+ action: 'findPage'
56
+ });
57
+ const query = strapi1.get('query-params').transform(uid, wrappedParams);
58
+ const entities = await db.query(uid).findPage(query);
59
+ return this.wrapResult(entities, {
60
+ uid,
61
+ action: 'findMany'
62
+ });
63
+ },
64
+ async findOne (uid, entityId, opts) {
65
+ const wrappedParams = await this.wrapParams(opts, {
66
+ uid,
67
+ action: 'findOne'
68
+ });
69
+ const res = await db.query(uid).findOne({
70
+ where: {
71
+ id: entityId
72
+ }
73
+ });
74
+ if (!res) {
75
+ return this.wrapResult(null, {
76
+ uid,
77
+ action: 'findOne'
78
+ });
79
+ }
80
+ const entity = await strapi1.documents(uid).findOne({
81
+ ...wrappedParams,
82
+ documentId: res.documentId
83
+ });
84
+ return this.wrapResult(entity, {
85
+ uid,
86
+ action: 'findOne'
87
+ });
88
+ },
89
+ async count (uid, opts) {
90
+ const wrappedParams = await this.wrapParams(opts, {
91
+ uid,
92
+ action: 'count'
93
+ });
94
+ return strapi1.documents(uid).count(wrappedParams);
95
+ },
96
+ async create (uid, params) {
97
+ const wrappedParams = await this.wrapParams(params, {
98
+ uid,
99
+ action: 'create'
100
+ });
101
+ const { data } = wrappedParams;
102
+ if (!data) {
103
+ throw new Error('cannot create');
104
+ }
105
+ const shouldPublish = !strapiUtils.contentTypes.isDraft(data, strapi1.getModel(uid));
106
+ const entity = await strapi1.documents(uid).create({
107
+ ...wrappedParams,
108
+ status: shouldPublish ? 'published' : 'draft'
109
+ });
110
+ return this.wrapResult(entity, {
111
+ uid,
112
+ action: 'create'
113
+ });
114
+ },
115
+ async update (uid, entityId, opts) {
116
+ const wrappedParams = await this.wrapParams(opts, {
117
+ uid,
118
+ action: 'update'
119
+ });
120
+ const entityToUpdate = await db.query(uid).findOne({
121
+ where: {
122
+ id: entityId
123
+ }
124
+ });
125
+ if (!entityToUpdate) {
126
+ return this.wrapResult(null, {
127
+ uid,
128
+ action: 'update'
129
+ });
130
+ }
131
+ const shouldPublish = !strapiUtils.contentTypes.isDraft(entityToUpdate, strapi1.getModel(uid));
132
+ const entity = strapi1.documents(uid).update({
133
+ ...wrappedParams,
134
+ status: shouldPublish ? 'published' : 'draft',
135
+ documentId: entityToUpdate.documentId
136
+ });
137
+ return this.wrapResult(entity, {
138
+ uid,
139
+ action: 'update'
140
+ });
141
+ },
142
+ async delete (uid, entityId, opts) {
143
+ const wrappedParams = await this.wrapParams(opts, {
144
+ uid,
145
+ action: 'delete'
146
+ });
147
+ const entityToDelete = await db.query(uid).findOne({
148
+ where: {
149
+ id: entityId
150
+ }
151
+ });
152
+ if (!entityToDelete) {
153
+ return this.wrapResult(null, {
154
+ uid,
155
+ action: 'delete'
156
+ });
157
+ }
158
+ await strapi1.documents(uid).delete({
159
+ ...wrappedParams,
160
+ documentId: entityToDelete.documentId
161
+ });
162
+ return this.wrapResult(entityToDelete, {
163
+ uid,
164
+ action: 'delete'
165
+ });
166
+ },
167
+ async load (uid, entity, field, params) {
168
+ if (!_.isString(field)) {
169
+ throw new Error(`Invalid load. Expected "${field}" to be a string`);
170
+ }
171
+ const loadedEntity = await db.query(uid).load(entity, field, transformLoadParamsToQuery(uid, field, params ?? {}));
172
+ return this.wrapResult(loadedEntity, {
173
+ uid,
174
+ field,
175
+ action: 'load'
176
+ });
177
+ },
178
+ async loadPages (uid, entity, field, params, pagination = {}) {
179
+ if (!_.isString(field)) {
180
+ throw new Error(`Invalid load. Expected "${field}" to be a string`);
181
+ }
182
+ const { attributes } = strapi1.getModel(uid);
183
+ const attribute = attributes[field];
184
+ if (!strapiUtils.relations.isAnyToMany(attribute)) {
185
+ throw new Error(`Invalid load. Expected "${field}" to be an anyToMany relational attribute`);
186
+ }
187
+ const query = transformLoadParamsToQuery(uid, field, params ?? {}, pagination);
188
+ const loadedPage = await db.query(uid).loadPages(entity, field, query);
189
+ return {
190
+ ...loadedPage,
191
+ results: await this.wrapResult(loadedPage.results, {
192
+ uid,
193
+ field,
194
+ action: 'load'
195
+ })
196
+ };
197
+ }
104
198
  });
105
- return this.wrapResult(entityToDelete, { uid, action: "delete" });
106
- },
107
- async load(uid, entity, field, params) {
108
- if (!___default.default.isString(field)) {
109
- throw new Error(`Invalid load. Expected "${field}" to be a string`);
110
- }
111
- const loadedEntity = await db.query(uid).load(entity, field, transformLoadParamsToQuery(uid, field, params ?? {}));
112
- return this.wrapResult(loadedEntity, { uid, field, action: "load" });
113
- },
114
- async loadPages(uid, entity, field, params, pagination = {}) {
115
- if (!___default.default.isString(field)) {
116
- throw new Error(`Invalid load. Expected "${field}" to be a string`);
117
- }
118
- const { attributes } = strapi2.getModel(uid);
119
- const attribute = attributes[field];
120
- if (!strapiUtils.relations.isAnyToMany(attribute)) {
121
- throw new Error(`Invalid load. Expected "${field}" to be an anyToMany relational attribute`);
122
- }
123
- const query = transformLoadParamsToQuery(uid, field, params ?? {}, pagination);
124
- const loadedPage = await db.query(uid).loadPages(entity, field, query);
125
- return {
126
- ...loadedPage,
127
- results: await this.wrapResult(loadedPage.results, { uid, field, action: "load" })
128
- };
129
- }
130
- });
131
- const createEntityService = (ctx) => {
132
- const implementation = createDefaultImplementation(ctx);
133
- const service = {
134
- implementation,
135
- decorate(decorator) {
136
- if (typeof decorator !== "function") {
137
- throw new Error(`Decorator must be a function, received ${typeof decorator}`);
138
- }
139
- this.implementation = { ...this.implementation, ...decorator(this.implementation) };
140
- return this;
141
- }
142
- };
143
- const delegator = delegate__default.default(service, "implementation");
144
- Object.keys(service.implementation).forEach((key) => delegator.method(key));
145
- service.decorate((oldService) => {
146
- const newService = ___default.default.mapValues(
147
- oldService,
148
- (method, methodName) => async function(...args) {
149
- try {
150
- return await oldService[methodName].call(this, ...args);
151
- } catch (error) {
152
- if (databaseErrorsToTransform.some(
153
- (errorToTransform) => error instanceof errorToTransform
154
- )) {
155
- if (error instanceof Error) {
156
- throw new strapiUtils.errors.ValidationError(error.message);
199
+ var createEntityService = ((ctx)=>{
200
+ const implementation = createDefaultImplementation(ctx);
201
+ const service = {
202
+ implementation,
203
+ decorate (decorator) {
204
+ if (typeof decorator !== 'function') {
205
+ throw new Error(`Decorator must be a function, received ${typeof decorator}`);
157
206
  }
158
- throw error;
159
- }
160
- throw error;
207
+ this.implementation = {
208
+ ...this.implementation,
209
+ ...decorator(this.implementation)
210
+ };
211
+ return this;
161
212
  }
162
- }
163
- );
164
- return newService;
165
- });
166
- return service;
167
- };
213
+ };
214
+ const delegator = delegate(service, 'implementation');
215
+ // delegate every method in implementation
216
+ Object.keys(service.implementation).forEach((key)=>delegator.method(key));
217
+ // wrap methods to handle Database Errors
218
+ service.decorate((oldService)=>{
219
+ const newService = _.mapValues(oldService, (method, methodName)=>async function(...args) {
220
+ try {
221
+ return await oldService[methodName].call(this, ...args);
222
+ } catch (error) {
223
+ if (databaseErrorsToTransform.some((errorToTransform)=>error instanceof errorToTransform)) {
224
+ if (error instanceof Error) {
225
+ throw new strapiUtils.errors.ValidationError(error.message);
226
+ }
227
+ throw error;
228
+ }
229
+ throw error;
230
+ }
231
+ });
232
+ return newService;
233
+ });
234
+ return service;
235
+ });
236
+
168
237
  module.exports = createEntityService;
169
238
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/services/entity-service/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport delegate from 'delegates';\nimport { errors as databaseErrors } from '@strapi/database';\nimport {\n contentTypes as contentTypesUtils,\n errors,\n relations as relationUtils,\n} from '@strapi/utils';\nimport type { Database } from '@strapi/database';\nimport type { Core, Modules, Utils } from '@strapi/types';\n\ntype Decoratable<T> = T & {\n decorate(\n decorator: (old: Modules.EntityService.EntityService) => Modules.EntityService.EntityService & {\n [key: string]: unknown;\n }\n ): void;\n};\n\nconst transformLoadParamsToQuery = (\n uid: string,\n field: string,\n params: Record<string, unknown>,\n pagination = {}\n) => {\n const query = strapi\n .get('query-params')\n .transform(uid, { populate: { [field]: params } as any }) as any;\n\n const res = {\n ...query.populate[field],\n ...pagination,\n };\n\n return res;\n};\n\nconst databaseErrorsToTransform = [\n databaseErrors.InvalidTimeError,\n databaseErrors.InvalidDateTimeError,\n databaseErrors.InvalidDateError,\n databaseErrors.InvalidRelationError,\n];\n\nconst createDefaultImplementation = ({\n strapi,\n db,\n}: {\n strapi: Core.Strapi;\n db: Database;\n}): Modules.EntityService.EntityService => ({\n async wrapParams(options: any = {}) {\n return options;\n },\n\n async wrapResult(result: any = {}) {\n return result;\n },\n\n async findMany(uid, opts) {\n const { kind } = strapi.getModel(uid);\n\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findMany' });\n\n if (kind === 'singleType') {\n const entity = strapi.documents!(uid).findFirst(wrappedParams);\n return this.wrapResult(entity, { uid, action: 'findOne' });\n }\n\n const entities = await strapi.documents!(uid).findMany(wrappedParams);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findPage(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findPage' });\n\n const query = strapi.get('query-params').transform(uid, wrappedParams);\n\n const entities = await db.query(uid).findPage(query);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findOne(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findOne' });\n\n const res = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!res) {\n return this.wrapResult(null, { uid, action: 'findOne' });\n }\n\n const entity = await strapi.documents!(uid).findOne({\n ...wrappedParams,\n documentId: res.documentId,\n });\n return this.wrapResult(entity, { uid, action: 'findOne' });\n },\n\n async count(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'count' });\n\n return strapi.documents!(uid).count(wrappedParams);\n },\n\n async create(uid, params) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data' | 'fields' | 'populate'>\n >(params, { uid, action: 'create' });\n const { data } = wrappedParams;\n\n if (!data) {\n throw new Error('cannot create');\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(data, strapi.getModel(uid));\n\n const entity = await strapi.documents!(uid).create({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n });\n\n return this.wrapResult(entity, { uid, action: 'create' });\n },\n\n async update(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data:partial' | 'fields' | 'populate'>\n >(opts, {\n uid,\n action: 'update',\n });\n const entityToUpdate = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToUpdate) {\n return this.wrapResult(null, { uid, action: 'update' });\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(entityToUpdate, strapi.getModel(uid));\n\n const entity = strapi.documents!(uid).update({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n documentId: entityToUpdate.documentId,\n });\n\n return this.wrapResult(entity, { uid, action: 'update' });\n },\n\n async delete(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'delete' });\n\n const entityToDelete = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToDelete) {\n return this.wrapResult(null, { uid, action: 'delete' });\n }\n\n await strapi.documents!(uid).delete({\n ...wrappedParams,\n documentId: entityToDelete.documentId,\n });\n\n return this.wrapResult(entityToDelete, { uid, action: 'delete' });\n },\n\n async load(uid, entity, field, params) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const loadedEntity = await db\n .query(uid)\n .load(entity, field, transformLoadParamsToQuery(uid, field, params ?? {}));\n\n return this.wrapResult(loadedEntity, { uid, field, action: 'load' });\n },\n\n async loadPages(uid, entity, field, params, pagination = {}) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const { attributes } = strapi.getModel(uid);\n const attribute = attributes[field];\n\n if (!relationUtils.isAnyToMany(attribute)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be an anyToMany relational attribute`);\n }\n\n const query = transformLoadParamsToQuery(uid, field, params ?? {}, pagination);\n\n const loadedPage = await db.query(uid).loadPages(entity, field, query);\n\n return {\n ...loadedPage,\n results: await this.wrapResult(loadedPage.results, { uid, field, action: 'load' }),\n };\n },\n});\n\nexport default (ctx: {\n strapi: Core.Strapi;\n db: Database;\n}): Decoratable<Modules.EntityService.EntityService> => {\n const implementation = createDefaultImplementation(ctx);\n\n const service = {\n implementation,\n decorate<T extends object>(decorator: (current: typeof implementation) => T) {\n if (typeof decorator !== 'function') {\n throw new Error(`Decorator must be a function, received ${typeof decorator}`);\n }\n\n this.implementation = { ...this.implementation, ...decorator(this.implementation) };\n return this;\n },\n };\n\n const delegator = delegate(service, 'implementation');\n\n // delegate every method in implementation\n Object.keys(service.implementation).forEach((key) => delegator.method(key));\n\n // wrap methods to handle Database Errors\n service.decorate((oldService: Modules.EntityService.EntityService) => {\n const newService = _.mapValues(\n oldService,\n (method, methodName: keyof Modules.EntityService.EntityService) =>\n async function (this: Modules.EntityService.EntityService, ...args: []) {\n try {\n return await (oldService[methodName] as Utils.Function.AnyPromise).call(this, ...args);\n } catch (error) {\n if (\n databaseErrorsToTransform.some(\n (errorToTransform) => error instanceof errorToTransform\n )\n ) {\n if (error instanceof Error) {\n throw new errors.ValidationError(error.message);\n }\n\n throw error;\n }\n throw error;\n }\n }\n );\n\n return newService;\n });\n\n return service as unknown as Decoratable<Modules.EntityService.EntityService>;\n};\n"],"names":["databaseErrors","strapi","contentTypesUtils","_","relationUtils","delegate","errors"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/services/entity-service/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport delegate from 'delegates';\nimport { errors as databaseErrors } from '@strapi/database';\nimport {\n contentTypes as contentTypesUtils,\n errors,\n relations as relationUtils,\n} from '@strapi/utils';\nimport type { Database } from '@strapi/database';\nimport type { Core, Modules, Utils } from '@strapi/types';\n\ntype Decoratable<T> = T & {\n decorate(\n decorator: (old: Modules.EntityService.EntityService) => Modules.EntityService.EntityService & {\n [key: string]: unknown;\n }\n ): void;\n};\n\nconst transformLoadParamsToQuery = (\n uid: string,\n field: string,\n params: Record<string, unknown>,\n pagination = {}\n) => {\n const query = strapi\n .get('query-params')\n .transform(uid, { populate: { [field]: params } as any }) as any;\n\n const res = {\n ...query.populate[field],\n ...pagination,\n };\n\n return res;\n};\n\nconst databaseErrorsToTransform = [\n databaseErrors.InvalidTimeError,\n databaseErrors.InvalidDateTimeError,\n databaseErrors.InvalidDateError,\n databaseErrors.InvalidRelationError,\n];\n\nconst createDefaultImplementation = ({\n strapi,\n db,\n}: {\n strapi: Core.Strapi;\n db: Database;\n}): Modules.EntityService.EntityService => ({\n async wrapParams(options: any = {}) {\n return options;\n },\n\n async wrapResult(result: any = {}) {\n return result;\n },\n\n async findMany(uid, opts) {\n const { kind } = strapi.getModel(uid);\n\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findMany' });\n\n if (kind === 'singleType') {\n const entity = strapi.documents!(uid).findFirst(wrappedParams);\n return this.wrapResult(entity, { uid, action: 'findOne' });\n }\n\n const entities = await strapi.documents!(uid).findMany(wrappedParams);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findPage(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findPage' });\n\n const query = strapi.get('query-params').transform(uid, wrappedParams);\n\n const entities = await db.query(uid).findPage(query);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findOne(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findOne' });\n\n const res = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!res) {\n return this.wrapResult(null, { uid, action: 'findOne' });\n }\n\n const entity = await strapi.documents!(uid).findOne({\n ...wrappedParams,\n documentId: res.documentId,\n });\n return this.wrapResult(entity, { uid, action: 'findOne' });\n },\n\n async count(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'count' });\n\n return strapi.documents!(uid).count(wrappedParams);\n },\n\n async create(uid, params) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data' | 'fields' | 'populate'>\n >(params, { uid, action: 'create' });\n const { data } = wrappedParams;\n\n if (!data) {\n throw new Error('cannot create');\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(data, strapi.getModel(uid));\n\n const entity = await strapi.documents!(uid).create({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n });\n\n return this.wrapResult(entity, { uid, action: 'create' });\n },\n\n async update(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data:partial' | 'fields' | 'populate'>\n >(opts, {\n uid,\n action: 'update',\n });\n const entityToUpdate = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToUpdate) {\n return this.wrapResult(null, { uid, action: 'update' });\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(entityToUpdate, strapi.getModel(uid));\n\n const entity = strapi.documents!(uid).update({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n documentId: entityToUpdate.documentId,\n });\n\n return this.wrapResult(entity, { uid, action: 'update' });\n },\n\n async delete(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'delete' });\n\n const entityToDelete = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToDelete) {\n return this.wrapResult(null, { uid, action: 'delete' });\n }\n\n await strapi.documents!(uid).delete({\n ...wrappedParams,\n documentId: entityToDelete.documentId,\n });\n\n return this.wrapResult(entityToDelete, { uid, action: 'delete' });\n },\n\n async load(uid, entity, field, params) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const loadedEntity = await db\n .query(uid)\n .load(entity, field, transformLoadParamsToQuery(uid, field, params ?? {}));\n\n return this.wrapResult(loadedEntity, { uid, field, action: 'load' });\n },\n\n async loadPages(uid, entity, field, params, pagination = {}) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const { attributes } = strapi.getModel(uid);\n const attribute = attributes[field];\n\n if (!relationUtils.isAnyToMany(attribute)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be an anyToMany relational attribute`);\n }\n\n const query = transformLoadParamsToQuery(uid, field, params ?? {}, pagination);\n\n const loadedPage = await db.query(uid).loadPages(entity, field, query);\n\n return {\n ...loadedPage,\n results: await this.wrapResult(loadedPage.results, { uid, field, action: 'load' }),\n };\n },\n});\n\nexport default (ctx: {\n strapi: Core.Strapi;\n db: Database;\n}): Decoratable<Modules.EntityService.EntityService> => {\n const implementation = createDefaultImplementation(ctx);\n\n const service = {\n implementation,\n decorate<T extends object>(decorator: (current: typeof implementation) => T) {\n if (typeof decorator !== 'function') {\n throw new Error(`Decorator must be a function, received ${typeof decorator}`);\n }\n\n this.implementation = { ...this.implementation, ...decorator(this.implementation) };\n return this;\n },\n };\n\n const delegator = delegate(service, 'implementation');\n\n // delegate every method in implementation\n Object.keys(service.implementation).forEach((key) => delegator.method(key));\n\n // wrap methods to handle Database Errors\n service.decorate((oldService: Modules.EntityService.EntityService) => {\n const newService = _.mapValues(\n oldService,\n (method, methodName: keyof Modules.EntityService.EntityService) =>\n async function (this: Modules.EntityService.EntityService, ...args: []) {\n try {\n return await (oldService[methodName] as Utils.Function.AnyPromise).call(this, ...args);\n } catch (error) {\n if (\n databaseErrorsToTransform.some(\n (errorToTransform) => error instanceof errorToTransform\n )\n ) {\n if (error instanceof Error) {\n throw new errors.ValidationError(error.message);\n }\n\n throw error;\n }\n throw error;\n }\n }\n );\n\n return newService;\n });\n\n return service as unknown as Decoratable<Modules.EntityService.EntityService>;\n};\n"],"names":["transformLoadParamsToQuery","uid","field","params","pagination","query","strapi","get","transform","populate","res","databaseErrorsToTransform","databaseErrors","InvalidTimeError","InvalidDateTimeError","InvalidDateError","InvalidRelationError","createDefaultImplementation","db","wrapParams","options","wrapResult","result","findMany","opts","kind","getModel","wrappedParams","action","entity","documents","findFirst","entities","findPage","findOne","entityId","where","id","documentId","count","create","data","Error","shouldPublish","contentTypesUtils","isDraft","status","update","entityToUpdate","delete","entityToDelete","load","_","isString","loadedEntity","loadPages","attributes","attribute","relationUtils","isAnyToMany","loadedPage","results","ctx","implementation","service","decorate","decorator","delegator","delegate","Object","keys","forEach","key","method","oldService","newService","mapValues","methodName","args","call","error","some","errorToTransform","errors","ValidationError","message"],"mappings":"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"}