@strapi/core 0.0.0-experimental.e3e48deb89bd0a1b6cc69b698696566fa7854a95 → 0.0.0-experimental.f75e3c6d67cc47c64ab37479efdbb7b43be50b78

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 (722) hide show
  1. package/dist/Strapi.d.ts +46 -57
  2. package/dist/Strapi.d.ts.map +1 -1
  3. package/dist/Strapi.js +145 -217
  4. package/dist/Strapi.js.map +1 -1
  5. package/dist/Strapi.mjs +135 -208
  6. package/dist/Strapi.mjs.map +1 -1
  7. package/dist/configuration/config-loader.d.ts.map +1 -1
  8. package/dist/configuration/config-loader.js +9 -5
  9. package/dist/configuration/config-loader.js.map +1 -1
  10. package/dist/configuration/config-loader.mjs +9 -5
  11. package/dist/configuration/config-loader.mjs.map +1 -1
  12. package/dist/configuration/get-dirs.d.ts +10 -0
  13. package/dist/configuration/get-dirs.d.ts.map +1 -0
  14. package/dist/{utils → configuration}/get-dirs.js +3 -2
  15. package/dist/configuration/get-dirs.js.map +1 -0
  16. package/dist/{utils → configuration}/get-dirs.mjs +3 -2
  17. package/dist/configuration/get-dirs.mjs.map +1 -0
  18. package/dist/configuration/index.d.ts +4 -7
  19. package/dist/configuration/index.d.ts.map +1 -1
  20. package/dist/configuration/index.js +6 -4
  21. package/dist/configuration/index.js.map +1 -1
  22. package/dist/configuration/index.mjs +5 -4
  23. package/dist/configuration/index.mjs.map +1 -1
  24. package/dist/container.d.ts +2 -2
  25. package/dist/container.d.ts.map +1 -1
  26. package/dist/container.js.map +1 -1
  27. package/dist/container.mjs.map +1 -1
  28. package/dist/core-api/controller/collection-type.d.ts +3 -3
  29. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  30. package/dist/core-api/controller/collection-type.js +3 -0
  31. package/dist/core-api/controller/collection-type.js.map +1 -1
  32. package/dist/core-api/controller/collection-type.mjs +3 -0
  33. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  34. package/dist/core-api/controller/index.d.ts +3 -3
  35. package/dist/core-api/controller/index.d.ts.map +1 -1
  36. package/dist/core-api/controller/index.js +5 -5
  37. package/dist/core-api/controller/index.js.map +1 -1
  38. package/dist/core-api/controller/index.mjs +6 -6
  39. package/dist/core-api/controller/index.mjs.map +1 -1
  40. package/dist/core-api/controller/single-type.d.ts +3 -3
  41. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  42. package/dist/core-api/controller/single-type.js +1 -0
  43. package/dist/core-api/controller/single-type.js.map +1 -1
  44. package/dist/core-api/controller/single-type.mjs +1 -0
  45. package/dist/core-api/controller/single-type.mjs.map +1 -1
  46. package/dist/core-api/controller/transform.d.ts +2 -2
  47. package/dist/core-api/controller/transform.d.ts.map +1 -1
  48. package/dist/core-api/controller/transform.js +2 -5
  49. package/dist/core-api/controller/transform.js.map +1 -1
  50. package/dist/core-api/controller/transform.mjs +2 -5
  51. package/dist/core-api/controller/transform.mjs.map +1 -1
  52. package/dist/core-api/routes/index.d.ts.map +1 -1
  53. package/dist/core-api/service/collection-type.d.ts +11 -17
  54. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  55. package/dist/core-api/service/collection-type.js +18 -7
  56. package/dist/core-api/service/collection-type.js.map +1 -1
  57. package/dist/core-api/service/collection-type.mjs +19 -8
  58. package/dist/core-api/service/collection-type.mjs.map +1 -1
  59. package/dist/core-api/service/index.d.ts +3 -3
  60. package/dist/core-api/service/index.d.ts.map +1 -1
  61. package/dist/core-api/service/index.js.map +1 -1
  62. package/dist/core-api/service/index.mjs.map +1 -1
  63. package/dist/core-api/service/pagination.d.ts +4 -11
  64. package/dist/core-api/service/pagination.d.ts.map +1 -1
  65. package/dist/core-api/service/pagination.js +14 -40
  66. package/dist/core-api/service/pagination.js.map +1 -1
  67. package/dist/core-api/service/pagination.mjs +16 -42
  68. package/dist/core-api/service/pagination.mjs.map +1 -1
  69. package/dist/core-api/service/single-type.d.ts +4 -4
  70. package/dist/core-api/service/single-type.d.ts.map +1 -1
  71. package/dist/core-api/service/single-type.js +9 -2
  72. package/dist/core-api/service/single-type.js.map +1 -1
  73. package/dist/core-api/service/single-type.mjs +9 -2
  74. package/dist/core-api/service/single-type.mjs.map +1 -1
  75. package/dist/domain/content-type/index.d.ts +1 -1
  76. package/dist/domain/content-type/index.d.ts.map +1 -1
  77. package/dist/domain/module/index.d.ts +24 -23
  78. package/dist/domain/module/index.d.ts.map +1 -1
  79. package/dist/domain/module/index.js +2 -1
  80. package/dist/domain/module/index.js.map +1 -1
  81. package/dist/domain/module/index.mjs +3 -2
  82. package/dist/domain/module/index.mjs.map +1 -1
  83. package/dist/ee/index.d.ts +4 -2
  84. package/dist/ee/index.d.ts.map +1 -1
  85. package/dist/ee/index.js.map +1 -1
  86. package/dist/ee/index.mjs.map +1 -1
  87. package/dist/ee/license.d.ts +2 -2
  88. package/dist/ee/license.d.ts.map +1 -1
  89. package/dist/ee/license.js +2 -1
  90. package/dist/ee/license.js.map +1 -1
  91. package/dist/ee/license.mjs +2 -1
  92. package/dist/ee/license.mjs.map +1 -1
  93. package/dist/factories.d.ts +10 -10
  94. package/dist/factories.d.ts.map +1 -1
  95. package/dist/factories.js +6 -2
  96. package/dist/factories.js.map +1 -1
  97. package/dist/factories.mjs +6 -2
  98. package/dist/factories.mjs.map +1 -1
  99. package/dist/index.d.ts +4 -2
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +25 -1
  102. package/dist/index.js.map +1 -1
  103. package/dist/index.mjs +27 -3
  104. package/dist/index.mjs.map +1 -1
  105. package/dist/loaders/admin.d.ts +2 -2
  106. package/dist/loaders/admin.d.ts.map +1 -1
  107. package/dist/loaders/admin.js +0 -1
  108. package/dist/loaders/admin.js.map +1 -1
  109. package/dist/loaders/admin.mjs +0 -1
  110. package/dist/loaders/admin.mjs.map +1 -1
  111. package/dist/loaders/apis.d.ts +2 -2
  112. package/dist/loaders/apis.d.ts.map +1 -1
  113. package/dist/loaders/apis.js +10 -10
  114. package/dist/loaders/apis.js.map +1 -1
  115. package/dist/loaders/apis.mjs +10 -10
  116. package/dist/loaders/apis.mjs.map +1 -1
  117. package/dist/loaders/components.d.ts +2 -2
  118. package/dist/loaders/components.d.ts.map +1 -1
  119. package/dist/loaders/components.js.map +1 -1
  120. package/dist/loaders/components.mjs.map +1 -1
  121. package/dist/loaders/index.d.ts +2 -2
  122. package/dist/loaders/index.d.ts.map +1 -1
  123. package/dist/loaders/index.js +0 -2
  124. package/dist/loaders/index.js.map +1 -1
  125. package/dist/loaders/index.mjs +0 -2
  126. package/dist/loaders/index.mjs.map +1 -1
  127. package/dist/loaders/middlewares.d.ts +2 -2
  128. package/dist/loaders/middlewares.d.ts.map +1 -1
  129. package/dist/loaders/middlewares.js.map +1 -1
  130. package/dist/loaders/middlewares.mjs.map +1 -1
  131. package/dist/loaders/plugins/get-enabled-plugins.d.ts +2 -2
  132. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  133. package/dist/loaders/plugins/get-enabled-plugins.js +7 -5
  134. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  135. package/dist/loaders/plugins/get-enabled-plugins.mjs +7 -5
  136. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  137. package/dist/loaders/plugins/index.d.ts +2 -2
  138. package/dist/loaders/plugins/index.d.ts.map +1 -1
  139. package/dist/loaders/plugins/index.js.map +1 -1
  140. package/dist/loaders/plugins/index.mjs.map +1 -1
  141. package/dist/loaders/policies.d.ts +2 -2
  142. package/dist/loaders/policies.d.ts.map +1 -1
  143. package/dist/loaders/policies.js.map +1 -1
  144. package/dist/loaders/policies.mjs.map +1 -1
  145. package/dist/loaders/sanitizers.d.ts +2 -2
  146. package/dist/loaders/sanitizers.d.ts.map +1 -1
  147. package/dist/loaders/sanitizers.js.map +1 -1
  148. package/dist/loaders/sanitizers.mjs.map +1 -1
  149. package/dist/loaders/src-index.d.ts +2 -2
  150. package/dist/loaders/src-index.d.ts.map +1 -1
  151. package/dist/loaders/src-index.js.map +1 -1
  152. package/dist/loaders/src-index.mjs.map +1 -1
  153. package/dist/loaders/validators.d.ts +2 -2
  154. package/dist/loaders/validators.d.ts.map +1 -1
  155. package/dist/loaders/validators.js.map +1 -1
  156. package/dist/loaders/validators.mjs.map +1 -1
  157. package/dist/middlewares/body.d.ts +4 -4
  158. package/dist/middlewares/body.d.ts.map +1 -1
  159. package/dist/middlewares/body.js +4 -4
  160. package/dist/middlewares/body.js.map +1 -1
  161. package/dist/middlewares/body.mjs +4 -4
  162. package/dist/middlewares/body.mjs.map +1 -1
  163. package/dist/middlewares/compression.d.ts +2 -2
  164. package/dist/middlewares/compression.d.ts.map +1 -1
  165. package/dist/middlewares/compression.js.map +1 -1
  166. package/dist/middlewares/compression.mjs.map +1 -1
  167. package/dist/middlewares/cors.d.ts +2 -2
  168. package/dist/middlewares/cors.d.ts.map +1 -1
  169. package/dist/middlewares/cors.js.map +1 -1
  170. package/dist/middlewares/cors.mjs.map +1 -1
  171. package/dist/middlewares/errors.d.ts +2 -2
  172. package/dist/middlewares/errors.d.ts.map +1 -1
  173. package/dist/middlewares/errors.js.map +1 -1
  174. package/dist/middlewares/errors.mjs.map +1 -1
  175. package/dist/middlewares/favicon.d.ts +2 -2
  176. package/dist/middlewares/favicon.d.ts.map +1 -1
  177. package/dist/middlewares/favicon.js.map +1 -1
  178. package/dist/middlewares/favicon.mjs.map +1 -1
  179. package/dist/middlewares/index.d.ts +2 -2
  180. package/dist/middlewares/index.d.ts.map +1 -1
  181. package/dist/middlewares/index.js.map +1 -1
  182. package/dist/middlewares/index.mjs.map +1 -1
  183. package/dist/middlewares/ip.d.ts +2 -2
  184. package/dist/middlewares/ip.d.ts.map +1 -1
  185. package/dist/middlewares/ip.js.map +1 -1
  186. package/dist/middlewares/ip.mjs.map +1 -1
  187. package/dist/middlewares/logger.d.ts +2 -2
  188. package/dist/middlewares/logger.d.ts.map +1 -1
  189. package/dist/middlewares/logger.js.map +1 -1
  190. package/dist/middlewares/logger.mjs.map +1 -1
  191. package/dist/middlewares/powered-by.d.ts +2 -2
  192. package/dist/middlewares/powered-by.d.ts.map +1 -1
  193. package/dist/middlewares/powered-by.js.map +1 -1
  194. package/dist/middlewares/powered-by.mjs.map +1 -1
  195. package/dist/middlewares/public.d.ts +2 -2
  196. package/dist/middlewares/public.d.ts.map +1 -1
  197. package/dist/middlewares/public.js +1 -1
  198. package/dist/middlewares/public.js.map +1 -1
  199. package/dist/middlewares/public.mjs +1 -1
  200. package/dist/middlewares/public.mjs.map +1 -1
  201. package/dist/middlewares/query.d.ts +2 -2
  202. package/dist/middlewares/query.d.ts.map +1 -1
  203. package/dist/middlewares/query.js.map +1 -1
  204. package/dist/middlewares/query.mjs.map +1 -1
  205. package/dist/middlewares/response-time.d.ts +2 -2
  206. package/dist/middlewares/response-time.d.ts.map +1 -1
  207. package/dist/middlewares/response-time.js.map +1 -1
  208. package/dist/middlewares/response-time.mjs.map +1 -1
  209. package/dist/middlewares/responses.d.ts +3 -3
  210. package/dist/middlewares/responses.d.ts.map +1 -1
  211. package/dist/middlewares/responses.js.map +1 -1
  212. package/dist/middlewares/responses.mjs.map +1 -1
  213. package/dist/middlewares/security.d.ts +2 -2
  214. package/dist/middlewares/security.d.ts.map +1 -1
  215. package/dist/middlewares/security.js.map +1 -1
  216. package/dist/middlewares/security.mjs.map +1 -1
  217. package/dist/middlewares/session.d.ts +2 -2
  218. package/dist/middlewares/session.d.ts.map +1 -1
  219. package/dist/middlewares/session.js.map +1 -1
  220. package/dist/middlewares/session.mjs.map +1 -1
  221. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +30 -0
  222. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -0
  223. package/dist/migrations/database/5.0.0-discard-drafts.js +50 -0
  224. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -0
  225. package/dist/migrations/database/5.0.0-discard-drafts.mjs +50 -0
  226. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -0
  227. package/dist/migrations/draft-publish.d.ts.map +1 -1
  228. package/dist/migrations/draft-publish.js +14 -31
  229. package/dist/migrations/draft-publish.js.map +1 -1
  230. package/dist/migrations/draft-publish.mjs +15 -32
  231. package/dist/migrations/draft-publish.mjs.map +1 -1
  232. package/dist/providers/admin.d.ts +3 -0
  233. package/dist/providers/admin.d.ts.map +1 -0
  234. package/dist/providers/admin.js +20 -0
  235. package/dist/providers/admin.js.map +1 -0
  236. package/dist/providers/admin.mjs +21 -0
  237. package/dist/providers/admin.mjs.map +1 -0
  238. package/dist/providers/coreStore.d.ts +3 -0
  239. package/dist/providers/coreStore.d.ts.map +1 -0
  240. package/dist/providers/coreStore.js +11 -0
  241. package/dist/providers/coreStore.js.map +1 -0
  242. package/dist/providers/coreStore.mjs +12 -0
  243. package/dist/providers/coreStore.mjs.map +1 -0
  244. package/dist/providers/cron.d.ts +3 -0
  245. package/dist/providers/cron.d.ts.map +1 -0
  246. package/dist/providers/cron.js +20 -0
  247. package/dist/providers/cron.js.map +1 -0
  248. package/dist/providers/cron.mjs +21 -0
  249. package/dist/providers/cron.mjs.map +1 -0
  250. package/dist/providers/index.d.ts +3 -0
  251. package/dist/providers/index.d.ts.map +1 -0
  252. package/dist/providers/index.js +11 -0
  253. package/dist/providers/index.js.map +1 -0
  254. package/dist/providers/index.mjs +11 -0
  255. package/dist/providers/index.mjs.map +1 -0
  256. package/dist/providers/provider.d.ts +9 -0
  257. package/dist/providers/provider.d.ts.map +1 -0
  258. package/dist/providers/provider.js +5 -0
  259. package/dist/providers/provider.js.map +1 -0
  260. package/dist/providers/provider.mjs +5 -0
  261. package/dist/providers/provider.mjs.map +1 -0
  262. package/dist/providers/registries.d.ts +3 -0
  263. package/dist/providers/registries.d.ts.map +1 -0
  264. package/dist/providers/registries.js +35 -0
  265. package/dist/providers/registries.js.map +1 -0
  266. package/dist/providers/registries.mjs +36 -0
  267. package/dist/providers/registries.mjs.map +1 -0
  268. package/dist/providers/telemetry.d.ts +3 -0
  269. package/dist/providers/telemetry.d.ts.map +1 -0
  270. package/dist/providers/telemetry.js +19 -0
  271. package/dist/providers/telemetry.js.map +1 -0
  272. package/dist/providers/telemetry.mjs +20 -0
  273. package/dist/providers/telemetry.mjs.map +1 -0
  274. package/dist/providers/webhooks.d.ts +3 -0
  275. package/dist/providers/webhooks.d.ts.map +1 -0
  276. package/dist/providers/webhooks.js +30 -0
  277. package/dist/providers/webhooks.js.map +1 -0
  278. package/dist/providers/webhooks.mjs +31 -0
  279. package/dist/providers/webhooks.mjs.map +1 -0
  280. package/dist/registries/apis.d.ts +2 -2
  281. package/dist/registries/apis.d.ts.map +1 -1
  282. package/dist/registries/apis.js.map +1 -1
  283. package/dist/registries/apis.mjs.map +1 -1
  284. package/dist/registries/components.d.ts +6 -6
  285. package/dist/registries/components.d.ts.map +1 -1
  286. package/dist/registries/components.js.map +1 -1
  287. package/dist/registries/components.mjs.map +1 -1
  288. package/dist/registries/content-types.d.ts +5 -5
  289. package/dist/registries/content-types.d.ts.map +1 -1
  290. package/dist/registries/content-types.js.map +1 -1
  291. package/dist/registries/content-types.mjs.map +1 -1
  292. package/dist/registries/controllers.d.ts +10 -10
  293. package/dist/registries/controllers.d.ts.map +1 -1
  294. package/dist/registries/controllers.js.map +1 -1
  295. package/dist/registries/controllers.mjs.map +1 -1
  296. package/dist/registries/custom-fields.d.ts +3 -3
  297. package/dist/registries/custom-fields.d.ts.map +1 -1
  298. package/dist/registries/custom-fields.js.map +1 -1
  299. package/dist/registries/custom-fields.mjs.map +1 -1
  300. package/dist/registries/index.d.ts +0 -1
  301. package/dist/registries/index.d.ts.map +1 -1
  302. package/dist/registries/middlewares.d.ts +6 -6
  303. package/dist/registries/middlewares.d.ts.map +1 -1
  304. package/dist/registries/middlewares.js.map +1 -1
  305. package/dist/registries/middlewares.mjs.map +1 -1
  306. package/dist/registries/modules.d.ts +2 -2
  307. package/dist/registries/modules.d.ts.map +1 -1
  308. package/dist/registries/modules.js.map +1 -1
  309. package/dist/registries/modules.mjs.map +1 -1
  310. package/dist/registries/plugins.d.ts +5 -5
  311. package/dist/registries/plugins.d.ts.map +1 -1
  312. package/dist/registries/plugins.js.map +1 -1
  313. package/dist/registries/plugins.mjs.map +1 -1
  314. package/dist/registries/policies.d.ts +23 -11
  315. package/dist/registries/policies.d.ts.map +1 -1
  316. package/dist/registries/policies.js +64 -18
  317. package/dist/registries/policies.js.map +1 -1
  318. package/dist/registries/policies.mjs +65 -19
  319. package/dist/registries/policies.mjs.map +1 -1
  320. package/dist/registries/services.d.ts +8 -8
  321. package/dist/registries/services.d.ts.map +1 -1
  322. package/dist/registries/services.js.map +1 -1
  323. package/dist/registries/services.mjs.map +1 -1
  324. package/dist/services/auth/index.d.ts +4 -4
  325. package/dist/services/auth/index.d.ts.map +1 -1
  326. package/dist/services/auth/index.js.map +1 -1
  327. package/dist/services/auth/index.mjs.map +1 -1
  328. package/dist/services/config.d.ts +3 -0
  329. package/dist/services/config.d.ts.map +1 -0
  330. package/dist/services/config.js +47 -0
  331. package/dist/services/config.js.map +1 -0
  332. package/dist/services/config.mjs +47 -0
  333. package/dist/services/config.mjs.map +1 -0
  334. package/dist/services/content-api/index.d.ts +21 -3
  335. package/dist/services/content-api/index.d.ts.map +1 -1
  336. package/dist/services/content-api/index.js +28 -2
  337. package/dist/services/content-api/index.js.map +1 -1
  338. package/dist/services/content-api/index.mjs +28 -2
  339. package/dist/services/content-api/index.mjs.map +1 -1
  340. package/dist/services/content-api/permissions/index.d.ts +3 -3
  341. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  342. package/dist/services/content-api/permissions/index.js +1 -1
  343. package/dist/services/content-api/permissions/index.js.map +1 -1
  344. package/dist/services/content-api/permissions/index.mjs +1 -1
  345. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  346. package/dist/services/core-store.d.ts.map +1 -1
  347. package/dist/services/cron.d.ts +2 -2
  348. package/dist/services/cron.d.ts.map +1 -1
  349. package/dist/services/cron.js.map +1 -1
  350. package/dist/services/cron.mjs.map +1 -1
  351. package/dist/services/custom-fields.d.ts +2 -2
  352. package/dist/services/custom-fields.d.ts.map +1 -1
  353. package/dist/services/custom-fields.js.map +1 -1
  354. package/dist/services/custom-fields.mjs.map +1 -1
  355. package/dist/services/document-service/attributes/index.d.ts +6 -0
  356. package/dist/services/document-service/attributes/index.d.ts.map +1 -0
  357. package/dist/services/{entity-service → document-service}/attributes/index.js +5 -5
  358. package/dist/services/document-service/attributes/index.js.map +1 -0
  359. package/dist/services/{entity-service → document-service}/attributes/index.mjs +5 -5
  360. package/dist/services/document-service/attributes/index.mjs.map +1 -0
  361. package/dist/services/document-service/attributes/transforms.d.ts +10 -0
  362. package/dist/services/document-service/attributes/transforms.d.ts.map +1 -0
  363. package/dist/services/document-service/attributes/transforms.js.map +1 -0
  364. package/dist/services/document-service/attributes/transforms.mjs.map +1 -0
  365. package/dist/services/document-service/common.d.ts +2 -2
  366. package/dist/services/document-service/common.d.ts.map +1 -1
  367. package/dist/services/document-service/common.js.map +1 -1
  368. package/dist/services/document-service/common.mjs.map +1 -1
  369. package/dist/services/document-service/components.d.ts +25 -1
  370. package/dist/services/document-service/components.d.ts.map +1 -1
  371. package/dist/services/{entity-service → document-service}/components.js +35 -45
  372. package/dist/services/document-service/components.js.map +1 -0
  373. package/dist/services/{entity-service → document-service}/components.mjs +36 -46
  374. package/dist/services/document-service/components.mjs.map +1 -0
  375. package/dist/services/document-service/draft-and-publish.d.ts +7 -7
  376. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  377. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  378. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  379. package/dist/services/document-service/entries.d.ts +10 -0
  380. package/dist/services/document-service/entries.d.ts.map +1 -0
  381. package/dist/services/document-service/entries.js +96 -0
  382. package/dist/services/document-service/entries.js.map +1 -0
  383. package/dist/services/document-service/entries.mjs +96 -0
  384. package/dist/services/document-service/entries.mjs.map +1 -0
  385. package/dist/services/document-service/events.d.ts +25 -0
  386. package/dist/services/document-service/events.d.ts.map +1 -0
  387. package/dist/services/document-service/events.js +47 -0
  388. package/dist/services/document-service/events.js.map +1 -0
  389. package/dist/services/document-service/events.mjs +47 -0
  390. package/dist/services/document-service/events.mjs.map +1 -0
  391. package/dist/services/document-service/index.d.ts +2 -4
  392. package/dist/services/document-service/index.d.ts.map +1 -1
  393. package/dist/services/document-service/index.js +18 -5
  394. package/dist/services/document-service/index.js.map +1 -1
  395. package/dist/services/document-service/index.mjs +16 -3
  396. package/dist/services/document-service/index.mjs.map +1 -1
  397. package/dist/services/document-service/internationalization.d.ts +5 -5
  398. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  399. package/dist/services/document-service/internationalization.js +14 -5
  400. package/dist/services/document-service/internationalization.js.map +1 -1
  401. package/dist/services/document-service/internationalization.mjs +14 -5
  402. package/dist/services/document-service/internationalization.mjs.map +1 -1
  403. package/dist/services/document-service/middlewares/errors.d.ts +6 -0
  404. package/dist/services/document-service/middlewares/errors.d.ts.map +1 -0
  405. package/dist/services/document-service/middlewares/errors.js +25 -0
  406. package/dist/services/document-service/middlewares/errors.js.map +1 -0
  407. package/dist/services/document-service/middlewares/errors.mjs +25 -0
  408. package/dist/services/document-service/middlewares/errors.mjs.map +1 -0
  409. package/dist/services/document-service/middlewares/index.d.ts +3 -0
  410. package/dist/services/document-service/middlewares/index.d.ts.map +1 -0
  411. package/dist/services/document-service/middlewares/middleware-manager.d.ts +10 -0
  412. package/dist/services/document-service/middlewares/middleware-manager.d.ts.map +1 -0
  413. package/dist/services/document-service/{middlewares.js → middlewares/middleware-manager.js} +9 -6
  414. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -0
  415. package/dist/services/document-service/{middlewares.mjs → middlewares/middleware-manager.mjs} +9 -6
  416. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -0
  417. package/dist/services/document-service/params.d.ts +3 -1
  418. package/dist/services/document-service/params.d.ts.map +1 -1
  419. package/dist/services/document-service/params.js.map +1 -0
  420. package/dist/services/document-service/params.mjs.map +1 -0
  421. package/dist/services/document-service/repository.d.ts.map +1 -1
  422. package/dist/services/document-service/repository.js +135 -152
  423. package/dist/services/document-service/repository.js.map +1 -1
  424. package/dist/services/document-service/repository.mjs +118 -135
  425. package/dist/services/document-service/repository.mjs.map +1 -1
  426. package/dist/services/document-service/transform/data.d.ts.map +1 -1
  427. package/dist/services/document-service/transform/data.js +4 -2
  428. package/dist/services/document-service/transform/data.js.map +1 -1
  429. package/dist/services/document-service/transform/data.mjs +4 -2
  430. package/dist/services/document-service/transform/data.mjs.map +1 -1
  431. package/dist/services/document-service/transform/fields.d.ts +2 -2
  432. package/dist/services/document-service/transform/fields.d.ts.map +1 -1
  433. package/dist/services/document-service/transform/fields.js.map +1 -1
  434. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  435. package/dist/services/document-service/transform/id-map.d.ts +3 -3
  436. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  437. package/dist/services/document-service/transform/id-map.js.map +1 -1
  438. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  439. package/dist/services/document-service/transform/id-transform.d.ts +2 -2
  440. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  441. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  442. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  443. package/dist/services/document-service/transform/populate.d.ts +2 -2
  444. package/dist/services/document-service/transform/populate.d.ts.map +1 -1
  445. package/dist/services/document-service/transform/populate.js +1 -1
  446. package/dist/services/document-service/transform/populate.js.map +1 -1
  447. package/dist/services/document-service/transform/populate.mjs +1 -1
  448. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  449. package/dist/services/document-service/transform/query.d.ts +5 -0
  450. package/dist/services/document-service/transform/query.d.ts.map +1 -0
  451. package/dist/services/document-service/transform/query.js +9 -0
  452. package/dist/services/document-service/transform/query.js.map +1 -0
  453. package/dist/services/document-service/transform/query.mjs +9 -0
  454. package/dist/services/document-service/transform/query.mjs.map +1 -0
  455. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +8 -7
  456. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  457. package/dist/services/document-service/transform/relations/extract/data-ids.js +44 -77
  458. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  459. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +44 -77
  460. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  461. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts +8 -4
  462. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  463. package/dist/services/document-service/transform/relations/transform/data-ids.js +60 -125
  464. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  465. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +61 -126
  466. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  467. package/dist/services/document-service/transform/relations/transform/default-locale.d.ts +9 -0
  468. package/dist/services/document-service/transform/relations/transform/default-locale.d.ts.map +1 -0
  469. package/dist/services/document-service/transform/relations/transform/default-locale.js +32 -0
  470. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -0
  471. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +32 -0
  472. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -0
  473. package/dist/services/document-service/transform/relations/utils/dp.d.ts +3 -3
  474. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  475. package/dist/services/document-service/transform/relations/utils/dp.js +9 -4
  476. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  477. package/dist/services/document-service/transform/relations/utils/dp.mjs +9 -4
  478. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  479. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +6 -6
  480. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  481. package/dist/services/document-service/transform/relations/utils/i18n.js +3 -9
  482. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  483. package/dist/services/document-service/transform/relations/utils/i18n.mjs +3 -9
  484. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  485. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts +6 -0
  486. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -0
  487. package/dist/services/document-service/transform/relations/utils/map-relation.js +91 -0
  488. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -0
  489. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +91 -0
  490. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -0
  491. package/dist/services/document-service/transform/relations/utils/types.d.ts +6 -0
  492. package/dist/services/document-service/transform/relations/utils/types.d.ts.map +1 -1
  493. package/dist/services/document-service/transform/types.d.ts +3 -3
  494. package/dist/services/document-service/transform/types.d.ts.map +1 -1
  495. package/dist/services/document-service/utils/populate.d.ts +2 -2
  496. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  497. package/dist/services/document-service/utils/populate.js.map +1 -1
  498. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  499. package/dist/services/entity-service/index.d.ts +4 -4
  500. package/dist/services/entity-service/index.d.ts.map +1 -1
  501. package/dist/services/entity-service/index.js +22 -16
  502. package/dist/services/entity-service/index.js.map +1 -1
  503. package/dist/services/entity-service/index.mjs +23 -17
  504. package/dist/services/entity-service/index.mjs.map +1 -1
  505. package/dist/services/entity-validator/index.d.ts +2 -2
  506. package/dist/services/entity-validator/index.d.ts.map +1 -1
  507. package/dist/services/entity-validator/index.js +100 -89
  508. package/dist/services/entity-validator/index.js.map +1 -1
  509. package/dist/services/entity-validator/index.mjs +100 -89
  510. package/dist/services/entity-validator/index.mjs.map +1 -1
  511. package/dist/services/entity-validator/validators.d.ts +18 -18
  512. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  513. package/dist/services/entity-validator/validators.js +6 -1
  514. package/dist/services/entity-validator/validators.js.map +1 -1
  515. package/dist/services/entity-validator/validators.mjs +6 -1
  516. package/dist/services/entity-validator/validators.mjs.map +1 -1
  517. package/dist/services/event-hub.d.ts +1 -0
  518. package/dist/services/event-hub.d.ts.map +1 -1
  519. package/dist/services/event-hub.js +9 -4
  520. package/dist/services/event-hub.js.map +1 -1
  521. package/dist/services/event-hub.mjs +9 -4
  522. package/dist/services/event-hub.mjs.map +1 -1
  523. package/dist/services/features.d.ts +3 -3
  524. package/dist/services/features.d.ts.map +1 -1
  525. package/dist/services/features.js.map +1 -1
  526. package/dist/services/features.mjs.map +1 -1
  527. package/dist/services/fs.d.ts +2 -2
  528. package/dist/services/fs.d.ts.map +1 -1
  529. package/dist/services/fs.js.map +1 -1
  530. package/dist/services/fs.mjs.map +1 -1
  531. package/dist/services/metrics/admin-user-hash.d.ts +2 -2
  532. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  533. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  534. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  535. package/dist/services/metrics/index.d.ts +2 -2
  536. package/dist/services/metrics/index.d.ts.map +1 -1
  537. package/dist/services/metrics/index.js.map +1 -1
  538. package/dist/services/metrics/index.mjs.map +1 -1
  539. package/dist/services/metrics/middleware.d.ts +2 -2
  540. package/dist/services/metrics/middleware.d.ts.map +1 -1
  541. package/dist/services/metrics/middleware.js.map +1 -1
  542. package/dist/services/metrics/middleware.mjs.map +1 -1
  543. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  544. package/dist/services/metrics/rate-limiter.js.map +1 -1
  545. package/dist/services/metrics/rate-limiter.mjs.map +1 -1
  546. package/dist/services/metrics/sender.d.ts +3 -3
  547. package/dist/services/metrics/sender.d.ts.map +1 -1
  548. package/dist/services/metrics/sender.js.map +1 -1
  549. package/dist/services/metrics/sender.mjs.map +1 -1
  550. package/dist/services/query-params.d.ts +7 -0
  551. package/dist/services/query-params.d.ts.map +1 -0
  552. package/dist/services/query-params.js +12 -0
  553. package/dist/services/query-params.js.map +1 -0
  554. package/dist/services/query-params.mjs +13 -0
  555. package/dist/services/query-params.mjs.map +1 -0
  556. package/dist/services/reloader.d.ts +7 -0
  557. package/dist/services/reloader.d.ts.map +1 -0
  558. package/dist/services/reloader.js +36 -0
  559. package/dist/services/reloader.js.map +1 -0
  560. package/dist/services/reloader.mjs +36 -0
  561. package/dist/services/reloader.mjs.map +1 -0
  562. package/dist/services/server/admin-api.d.ts +3 -3
  563. package/dist/services/server/admin-api.d.ts.map +1 -1
  564. package/dist/services/server/admin-api.js.map +1 -1
  565. package/dist/services/server/admin-api.mjs.map +1 -1
  566. package/dist/services/server/api.d.ts +3 -3
  567. package/dist/services/server/api.d.ts.map +1 -1
  568. package/dist/services/server/api.js.map +1 -1
  569. package/dist/services/server/api.mjs.map +1 -1
  570. package/dist/services/server/compose-endpoint.d.ts +2 -2
  571. package/dist/services/server/compose-endpoint.d.ts.map +1 -1
  572. package/dist/services/server/compose-endpoint.js +1 -2
  573. package/dist/services/server/compose-endpoint.js.map +1 -1
  574. package/dist/services/server/compose-endpoint.mjs +2 -3
  575. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  576. package/dist/services/server/content-api.d.ts +3 -3
  577. package/dist/services/server/content-api.d.ts.map +1 -1
  578. package/dist/services/server/content-api.js.map +1 -1
  579. package/dist/services/server/content-api.mjs.map +1 -1
  580. package/dist/services/server/http-server.d.ts +2 -2
  581. package/dist/services/server/http-server.d.ts.map +1 -1
  582. package/dist/services/server/http-server.js.map +1 -1
  583. package/dist/services/server/http-server.mjs.map +1 -1
  584. package/dist/services/server/index.d.ts +2 -2
  585. package/dist/services/server/index.d.ts.map +1 -1
  586. package/dist/services/server/index.js +1 -2
  587. package/dist/services/server/index.js.map +1 -1
  588. package/dist/services/server/index.mjs +1 -2
  589. package/dist/services/server/index.mjs.map +1 -1
  590. package/dist/services/server/koa.d.ts.map +1 -1
  591. package/dist/services/server/koa.js +1 -1
  592. package/dist/services/server/koa.js.map +1 -1
  593. package/dist/services/server/koa.mjs +1 -1
  594. package/dist/services/server/koa.mjs.map +1 -1
  595. package/dist/services/server/middleware.d.ts +4 -4
  596. package/dist/services/server/middleware.d.ts.map +1 -1
  597. package/dist/services/server/middleware.js.map +1 -1
  598. package/dist/services/server/middleware.mjs.map +1 -1
  599. package/dist/services/server/policy.d.ts +3 -3
  600. package/dist/services/server/policy.d.ts.map +1 -1
  601. package/dist/services/server/policy.js +4 -4
  602. package/dist/services/server/policy.js.map +1 -1
  603. package/dist/services/server/policy.mjs +4 -4
  604. package/dist/services/server/policy.mjs.map +1 -1
  605. package/dist/services/server/register-middlewares.d.ts +2 -2
  606. package/dist/services/server/register-middlewares.d.ts.map +1 -1
  607. package/dist/services/server/register-middlewares.js.map +1 -1
  608. package/dist/services/server/register-middlewares.mjs.map +1 -1
  609. package/dist/services/server/register-routes.d.ts +2 -2
  610. package/dist/services/server/register-routes.d.ts.map +1 -1
  611. package/dist/services/server/register-routes.js +3 -3
  612. package/dist/services/server/register-routes.js.map +1 -1
  613. package/dist/services/server/register-routes.mjs +3 -3
  614. package/dist/services/server/register-routes.mjs.map +1 -1
  615. package/dist/services/server/routing.d.ts +5 -5
  616. package/dist/services/server/routing.d.ts.map +1 -1
  617. package/dist/services/server/routing.js.map +1 -1
  618. package/dist/services/server/routing.mjs.map +1 -1
  619. package/dist/services/utils/dynamic-zones.d.ts.map +1 -1
  620. package/dist/services/utils/dynamic-zones.js +2 -1
  621. package/dist/services/utils/dynamic-zones.js.map +1 -1
  622. package/dist/services/utils/dynamic-zones.mjs +2 -1
  623. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  624. package/dist/services/webhook-runner.js.map +1 -1
  625. package/dist/services/webhook-runner.mjs.map +1 -1
  626. package/dist/services/webhook-store.d.ts.map +1 -1
  627. package/dist/services/webhook-store.js +13 -7
  628. package/dist/services/webhook-store.js.map +1 -1
  629. package/dist/services/webhook-store.mjs +13 -7
  630. package/dist/services/webhook-store.mjs.map +1 -1
  631. package/dist/utils/convert-custom-field-type.d.ts +2 -2
  632. package/dist/utils/convert-custom-field-type.d.ts.map +1 -1
  633. package/dist/utils/convert-custom-field-type.js.map +1 -1
  634. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  635. package/dist/utils/fetch.d.ts +3 -3
  636. package/dist/utils/fetch.d.ts.map +1 -1
  637. package/dist/utils/fetch.js.map +1 -1
  638. package/dist/utils/fetch.mjs.map +1 -1
  639. package/dist/utils/index.d.ts +2 -1
  640. package/dist/utils/index.d.ts.map +1 -1
  641. package/dist/utils/is-initialized.d.ts +2 -2
  642. package/dist/utils/is-initialized.d.ts.map +1 -1
  643. package/dist/utils/is-initialized.js.map +1 -1
  644. package/dist/utils/is-initialized.mjs.map +1 -1
  645. package/dist/utils/load-files.d.ts.map +1 -1
  646. package/dist/utils/open-browser.d.ts +2 -2
  647. package/dist/utils/open-browser.d.ts.map +1 -1
  648. package/dist/utils/open-browser.js.map +1 -1
  649. package/dist/utils/open-browser.mjs.map +1 -1
  650. package/dist/utils/resolve-working-dirs.d.ts +19 -0
  651. package/dist/utils/resolve-working-dirs.d.ts.map +1 -0
  652. package/dist/utils/resolve-working-dirs.js +13 -0
  653. package/dist/utils/resolve-working-dirs.js.map +1 -0
  654. package/dist/utils/resolve-working-dirs.mjs +11 -0
  655. package/dist/utils/resolve-working-dirs.mjs.map +1 -0
  656. package/dist/utils/signals.d.ts +2 -2
  657. package/dist/utils/signals.d.ts.map +1 -1
  658. package/dist/utils/signals.js.map +1 -1
  659. package/dist/utils/signals.mjs.map +1 -1
  660. package/dist/utils/startup-logger.d.ts +2 -2
  661. package/dist/utils/startup-logger.d.ts.map +1 -1
  662. package/dist/utils/startup-logger.js.map +1 -1
  663. package/dist/utils/startup-logger.mjs.map +1 -1
  664. package/dist/utils/transform-content-types-to-models.d.ts +54 -99
  665. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  666. package/dist/utils/transform-content-types-to-models.js +95 -57
  667. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  668. package/dist/utils/transform-content-types-to-models.mjs +95 -57
  669. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  670. package/dist/utils/update-notifier/index.d.ts +2 -7
  671. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  672. package/dist/utils/update-notifier/index.js +11 -14
  673. package/dist/utils/update-notifier/index.js.map +1 -1
  674. package/dist/utils/update-notifier/index.mjs +11 -14
  675. package/dist/utils/update-notifier/index.mjs.map +1 -1
  676. package/package.json +29 -27
  677. package/dist/registries/config.d.ts +0 -4
  678. package/dist/registries/config.d.ts.map +0 -1
  679. package/dist/registries/config.js +0 -31
  680. package/dist/registries/config.js.map +0 -1
  681. package/dist/registries/config.mjs +0 -32
  682. package/dist/registries/config.mjs.map +0 -1
  683. package/dist/services/document-service/middlewares.d.ts +0 -8
  684. package/dist/services/document-service/middlewares.d.ts.map +0 -1
  685. package/dist/services/document-service/middlewares.js.map +0 -1
  686. package/dist/services/document-service/middlewares.mjs.map +0 -1
  687. package/dist/services/document-service/transform/filters.d.ts +0 -3
  688. package/dist/services/document-service/transform/filters.d.ts.map +0 -1
  689. package/dist/services/document-service/transform/relations/transform/output-ids.d.ts +0 -4
  690. package/dist/services/document-service/transform/relations/transform/output-ids.d.ts.map +0 -1
  691. package/dist/services/document-service/transform/relations/utils/data.js +0 -12
  692. package/dist/services/document-service/transform/relations/utils/data.js.map +0 -1
  693. package/dist/services/document-service/transform/relations/utils/data.mjs +0 -12
  694. package/dist/services/document-service/transform/relations/utils/data.mjs.map +0 -1
  695. package/dist/services/document-service/transform/sort.d.ts +0 -5
  696. package/dist/services/document-service/transform/sort.d.ts.map +0 -1
  697. package/dist/services/document-service/transform/utils.d.ts +0 -9
  698. package/dist/services/document-service/transform/utils.d.ts.map +0 -1
  699. package/dist/services/entity-service/attributes/index.d.ts +0 -6
  700. package/dist/services/entity-service/attributes/index.d.ts.map +0 -1
  701. package/dist/services/entity-service/attributes/index.js.map +0 -1
  702. package/dist/services/entity-service/attributes/index.mjs.map +0 -1
  703. package/dist/services/entity-service/attributes/transforms.d.ts +0 -10
  704. package/dist/services/entity-service/attributes/transforms.d.ts.map +0 -1
  705. package/dist/services/entity-service/attributes/transforms.js.map +0 -1
  706. package/dist/services/entity-service/attributes/transforms.mjs.map +0 -1
  707. package/dist/services/entity-service/components.d.ts +0 -20
  708. package/dist/services/entity-service/components.d.ts.map +0 -1
  709. package/dist/services/entity-service/components.js.map +0 -1
  710. package/dist/services/entity-service/components.mjs.map +0 -1
  711. package/dist/services/entity-service/params.d.ts +0 -8
  712. package/dist/services/entity-service/params.d.ts.map +0 -1
  713. package/dist/services/entity-service/params.js.map +0 -1
  714. package/dist/services/entity-service/params.mjs.map +0 -1
  715. package/dist/utils/get-dirs.d.ts +0 -9
  716. package/dist/utils/get-dirs.d.ts.map +0 -1
  717. package/dist/utils/get-dirs.js.map +0 -1
  718. package/dist/utils/get-dirs.mjs.map +0 -1
  719. /package/dist/services/{entity-service → document-service}/attributes/transforms.js +0 -0
  720. /package/dist/services/{entity-service → document-service}/attributes/transforms.mjs +0 -0
  721. /package/dist/services/{entity-service → document-service}/params.js +0 -0
  722. /package/dist/services/{entity-service → document-service}/params.mjs +0 -0
@@ -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 convertQueryParams,\n} from '@strapi/utils';\nimport type { Database } from '@strapi/database';\nimport type { Strapi, EntityService, Utils } from '@strapi/types';\n\nconst { transformParamsToQuery } = convertQueryParams;\n\ntype Decoratable<T> = T & {\n decorate(\n decorator: (old: EntityService.EntityService) => 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 = transformParamsToQuery(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: Strapi;\n db: Database;\n}): 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 = transformParamsToQuery(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(res.documentId, wrappedParams);\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 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 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(entityToUpdate.documentId, {\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\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(entityToDelete.documentId, wrappedParams);\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: Strapi;\n db: Database;\n}): Decoratable<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: EntityService.EntityService) => {\n const newService = _.mapValues(\n oldService,\n (method, methodName: keyof EntityService.EntityService) =>\n async function (this: 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<EntityService.EntityService>;\n};\n"],"names":["convertQueryParams","databaseErrors","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":["databaseErrors","strapi","contentTypesUtils","_","relationUtils","delegate","errors"],"mappings":"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"}
@@ -1,10 +1,9 @@
1
1
  import _ from "lodash";
2
2
  import delegate from "delegates";
3
3
  import { errors } from "@strapi/database";
4
- import { errors as errors$1, contentTypes, relations, convertQueryParams } from "@strapi/utils";
5
- const { transformParamsToQuery } = convertQueryParams;
4
+ import { errors as errors$1, contentTypes, relations } from "@strapi/utils";
6
5
  const transformLoadParamsToQuery = (uid, field, params, pagination = {}) => {
7
- const query = transformParamsToQuery(uid, { populate: { [field]: params } });
6
+ const query = strapi.get("query-params").transform(uid, { populate: { [field]: params } });
8
7
  const res = {
9
8
  ...query.populate[field],
10
9
  ...pagination
@@ -18,7 +17,7 @@ const databaseErrorsToTransform = [
18
17
  errors.InvalidRelationError
19
18
  ];
20
19
  const createDefaultImplementation = ({
21
- strapi,
20
+ strapi: strapi2,
22
21
  db
23
22
  }) => ({
24
23
  async wrapParams(options = {}) {
@@ -28,18 +27,18 @@ const createDefaultImplementation = ({
28
27
  return result;
29
28
  },
30
29
  async findMany(uid, opts) {
31
- const { kind } = strapi.getModel(uid);
30
+ const { kind } = strapi2.getModel(uid);
32
31
  const wrappedParams = await this.wrapParams(opts, { uid, action: "findMany" });
33
32
  if (kind === "singleType") {
34
- const entity = strapi.documents(uid).findFirst(wrappedParams);
33
+ const entity = strapi2.documents(uid).findFirst(wrappedParams);
35
34
  return this.wrapResult(entity, { uid, action: "findOne" });
36
35
  }
37
- const entities = await strapi.documents(uid).findMany(wrappedParams);
36
+ const entities = await strapi2.documents(uid).findMany(wrappedParams);
38
37
  return this.wrapResult(entities, { uid, action: "findMany" });
39
38
  },
40
39
  async findPage(uid, opts) {
41
40
  const wrappedParams = await this.wrapParams(opts, { uid, action: "findPage" });
42
- const query = transformParamsToQuery(uid, wrappedParams);
41
+ const query = strapi2.get("query-params").transform(uid, wrappedParams);
43
42
  const entities = await db.query(uid).findPage(query);
44
43
  return this.wrapResult(entities, { uid, action: "findMany" });
45
44
  },
@@ -49,12 +48,15 @@ const createDefaultImplementation = ({
49
48
  if (!res) {
50
49
  return this.wrapResult(null, { uid, action: "findOne" });
51
50
  }
52
- const entity = await strapi.documents(uid).findOne(res.documentId, wrappedParams);
51
+ const entity = await strapi2.documents(uid).findOne({
52
+ ...wrappedParams,
53
+ documentId: res.documentId
54
+ });
53
55
  return this.wrapResult(entity, { uid, action: "findOne" });
54
56
  },
55
57
  async count(uid, opts) {
56
58
  const wrappedParams = await this.wrapParams(opts, { uid, action: "count" });
57
- return strapi.documents(uid).count(wrappedParams);
59
+ return strapi2.documents(uid).count(wrappedParams);
58
60
  },
59
61
  async create(uid, params) {
60
62
  const wrappedParams = await this.wrapParams(params, { uid, action: "create" });
@@ -62,8 +64,8 @@ const createDefaultImplementation = ({
62
64
  if (!data) {
63
65
  throw new Error("cannot create");
64
66
  }
65
- const shouldPublish = !contentTypes.isDraft(data, strapi.getModel(uid));
66
- const entity = await strapi.documents(uid).create({
67
+ const shouldPublish = !contentTypes.isDraft(data, strapi2.getModel(uid));
68
+ const entity = await strapi2.documents(uid).create({
67
69
  ...wrappedParams,
68
70
  status: shouldPublish ? "published" : "draft"
69
71
  });
@@ -78,10 +80,11 @@ const createDefaultImplementation = ({
78
80
  if (!entityToUpdate) {
79
81
  return this.wrapResult(null, { uid, action: "update" });
80
82
  }
81
- const shouldPublish = !contentTypes.isDraft(entityToUpdate, strapi.getModel(uid));
82
- const entity = strapi.documents(uid).update(entityToUpdate.documentId, {
83
+ const shouldPublish = !contentTypes.isDraft(entityToUpdate, strapi2.getModel(uid));
84
+ const entity = strapi2.documents(uid).update({
83
85
  ...wrappedParams,
84
- status: shouldPublish ? "published" : "draft"
86
+ status: shouldPublish ? "published" : "draft",
87
+ documentId: entityToUpdate.documentId
85
88
  });
86
89
  return this.wrapResult(entity, { uid, action: "update" });
87
90
  },
@@ -91,7 +94,10 @@ const createDefaultImplementation = ({
91
94
  if (!entityToDelete) {
92
95
  return this.wrapResult(null, { uid, action: "delete" });
93
96
  }
94
- await strapi.documents(uid).delete(entityToDelete.documentId, wrappedParams);
97
+ await strapi2.documents(uid).delete({
98
+ ...wrappedParams,
99
+ documentId: entityToDelete.documentId
100
+ });
95
101
  return this.wrapResult(entityToDelete, { uid, action: "delete" });
96
102
  },
97
103
  async load(uid, entity, field, params) {
@@ -105,7 +111,7 @@ const createDefaultImplementation = ({
105
111
  if (!_.isString(field)) {
106
112
  throw new Error(`Invalid load. Expected "${field}" to be a string`);
107
113
  }
108
- const { attributes } = strapi.getModel(uid);
114
+ const { attributes } = strapi2.getModel(uid);
109
115
  const attribute = attributes[field];
110
116
  if (!relations.isAnyToMany(attribute)) {
111
117
  throw new Error(`Invalid load. Expected "${field}" to be an anyToMany relational attribute`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","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 convertQueryParams,\n} from '@strapi/utils';\nimport type { Database } from '@strapi/database';\nimport type { Strapi, EntityService, Utils } from '@strapi/types';\n\nconst { transformParamsToQuery } = convertQueryParams;\n\ntype Decoratable<T> = T & {\n decorate(\n decorator: (old: EntityService.EntityService) => 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 = transformParamsToQuery(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: Strapi;\n db: Database;\n}): 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 = transformParamsToQuery(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(res.documentId, wrappedParams);\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 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 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(entityToUpdate.documentId, {\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\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(entityToDelete.documentId, wrappedParams);\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: Strapi;\n db: Database;\n}): Decoratable<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: EntityService.EntityService) => {\n const newService = _.mapValues(\n oldService,\n (method, methodName: keyof EntityService.EntityService) =>\n async function (this: 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<EntityService.EntityService>;\n};\n"],"names":["databaseErrors","contentTypesUtils","relationUtils","errors"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","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","errors"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Entity validator
3
3
  * Module that will validate input data for entity creation or edition
4
4
  */
5
- import { EntityValidator } from '@strapi/types';
6
- declare const entityValidator: EntityValidator;
5
+ import { Modules } from '@strapi/types';
6
+ declare const entityValidator: Modules.EntityValidator.EntityValidator;
7
7
  export default entityValidator;
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/entity-validator/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,eAAe,EAAoD,MAAM,eAAe,CAAC;AAwelG,QAAA,MAAM,eAAe,EAAE,eAGtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/entity-validator/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,OAAO,EAAuB,MAAM,eAAe,CAAC;AAmf7D,QAAA,MAAM,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,eAG9C,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -9,7 +9,10 @@ const { yup, validateYupSchema } = strapiUtils__default.default;
9
9
  const { isMediaAttribute, isScalarAttribute, getWritableAttributes } = strapiUtils__default.default.contentTypes;
10
10
  const { ValidationError } = strapiUtils__default.default.errors;
11
11
  const isInteger = (value) => Number.isInteger(value);
12
- const addMinMax = (validator, { attr, updatedAttribute }) => {
12
+ const addMinMax = (validator, {
13
+ attr,
14
+ updatedAttribute
15
+ }) => {
13
16
  let nextValidator = validator;
14
17
  if (isInteger(attr.min) && ("required" in attr && attr.required || Array.isArray(updatedAttribute.value) && updatedAttribute.value.length > 0)) {
15
18
  nextValidator = nextValidator.min(attr.min);
@@ -20,7 +23,9 @@ const addMinMax = (validator, { attr, updatedAttribute }) => {
20
23
  return nextValidator;
21
24
  };
22
25
  const addRequiredValidation = (createOrUpdate) => {
23
- return (validator, { attr: { required } }) => {
26
+ return (validator, {
27
+ attr: { required }
28
+ }) => {
24
29
  let nextValidator = validator;
25
30
  if (required) {
26
31
  if (createOrUpdate === "creation") {
@@ -153,17 +158,20 @@ const createAttributeValidator = (createOrUpdate) => (metas, options) => {
153
158
  };
154
159
  const createModelValidator = (createOrUpdate) => ({ model, data, entity }, options) => {
155
160
  const writableAttributes = model ? getWritableAttributes(model) : [];
156
- const schema = writableAttributes.reduce((validators2, attributeName) => {
157
- const metas = {
158
- attr: model.attributes[attributeName],
159
- updatedAttribute: { name: attributeName, value: _.prop(attributeName, data) },
160
- model,
161
- entity
162
- };
163
- const validator = createAttributeValidator(createOrUpdate)(metas, options);
164
- validators2[attributeName] = validator;
165
- return validators2;
166
- }, {});
161
+ const schema = writableAttributes.reduce(
162
+ (validators2, attributeName) => {
163
+ const metas = {
164
+ attr: model.attributes[attributeName],
165
+ updatedAttribute: { name: attributeName, value: _.prop(attributeName, data) },
166
+ model,
167
+ entity
168
+ };
169
+ const validator = createAttributeValidator(createOrUpdate)(metas, options);
170
+ validators2[attributeName] = validator;
171
+ return validators2;
172
+ },
173
+ {}
174
+ );
167
175
  return yup.object().shape(schema);
168
176
  };
169
177
  const createValidateEntity = (createOrUpdate) => {
@@ -208,89 +216,92 @@ const buildRelationsStore = ({
208
216
  return {};
209
217
  }
210
218
  const currentModel = strapi.getModel(uid);
211
- return Object.keys(currentModel.attributes).reduce((result, attributeName) => {
212
- const attribute = currentModel.attributes[attributeName];
213
- const value = data[attributeName];
214
- if (_$1.isNil(value)) {
215
- return result;
216
- }
217
- switch (attribute.type) {
218
- case "relation":
219
- case "media": {
220
- if (attribute.type === "relation" && (attribute.relation === "morphToMany" || attribute.relation === "morphToOne")) {
221
- break;
222
- }
223
- const target = (
224
- // eslint-disable-next-line no-nested-ternary
225
- attribute.type === "media" ? "plugin::upload.file" : attribute.target
226
- );
227
- let source;
228
- if (Array.isArray(value)) {
229
- source = value;
230
- } else if (_.isObject(value)) {
231
- if ("connect" in value && !_$1.isNil(value.connect)) {
232
- source = value.connect;
233
- } else if ("set" in value && !_$1.isNil(value.set)) {
234
- source = value.set;
235
- } else {
236
- source = [];
237
- }
238
- } else {
239
- source = _$1.castArray(value);
240
- }
241
- const idArray = source.map((v) => ({
242
- id: typeof v === "object" ? v.id : v
243
- }));
244
- result[target] = result[target] || [];
245
- result[target].push(...idArray);
246
- break;
219
+ return Object.keys(currentModel.attributes).reduce(
220
+ (result, attributeName) => {
221
+ const attribute = currentModel.attributes[attributeName];
222
+ const value = data[attributeName];
223
+ if (_$1.isNil(value)) {
224
+ return result;
247
225
  }
248
- case "component": {
249
- return _$1.castArray(value).reduce((relationsStore, componentValue) => {
250
- if (!attribute.component) {
251
- throw new ValidationError(
252
- `Cannot build relations store from component, component identifier is undefined`
253
- );
226
+ switch (attribute.type) {
227
+ case "relation":
228
+ case "media": {
229
+ if (attribute.type === "relation" && (attribute.relation === "morphToMany" || attribute.relation === "morphToOne")) {
230
+ break;
254
231
  }
255
- return _$1.mergeWith(
256
- relationsStore,
257
- buildRelationsStore({
258
- uid: attribute.component,
259
- data: componentValue
260
- }),
261
- (objValue, srcValue) => {
262
- if (_$1.isArray(objValue)) {
263
- return objValue.concat(srcValue);
264
- }
265
- }
232
+ const target = (
233
+ // eslint-disable-next-line no-nested-ternary
234
+ attribute.type === "media" ? "plugin::upload.file" : attribute.target
266
235
  );
267
- }, result);
268
- }
269
- case "dynamiczone": {
270
- return _$1.castArray(value).reduce((relationsStore, dzValue) => {
271
- const value2 = dzValue;
272
- if (!value2.__component) {
273
- throw new ValidationError(
274
- `Cannot build relations store from dynamiczone, component identifier is undefined`
275
- );
236
+ let source;
237
+ if (Array.isArray(value)) {
238
+ source = value;
239
+ } else if (_.isObject(value)) {
240
+ if ("connect" in value && !_$1.isNil(value.connect)) {
241
+ source = value.connect;
242
+ } else if ("set" in value && !_$1.isNil(value.set)) {
243
+ source = value.set;
244
+ } else {
245
+ source = [];
246
+ }
247
+ } else {
248
+ source = _$1.castArray(value);
276
249
  }
277
- return _$1.mergeWith(
278
- relationsStore,
279
- buildRelationsStore({
280
- uid: value2.__component,
281
- data: value2
282
- }),
283
- (objValue, srcValue) => {
284
- if (_$1.isArray(objValue)) {
285
- return objValue.concat(srcValue);
250
+ const idArray = source.map((v) => ({
251
+ id: typeof v === "object" ? v.id : v
252
+ }));
253
+ result[target] = result[target] || [];
254
+ result[target].push(...idArray);
255
+ break;
256
+ }
257
+ case "component": {
258
+ return _$1.castArray(value).reduce((relationsStore, componentValue) => {
259
+ if (!attribute.component) {
260
+ throw new ValidationError(
261
+ `Cannot build relations store from component, component identifier is undefined`
262
+ );
263
+ }
264
+ return _$1.mergeWith(
265
+ relationsStore,
266
+ buildRelationsStore({
267
+ uid: attribute.component,
268
+ data: componentValue
269
+ }),
270
+ (objValue, srcValue) => {
271
+ if (_$1.isArray(objValue)) {
272
+ return objValue.concat(srcValue);
273
+ }
286
274
  }
275
+ );
276
+ }, result);
277
+ }
278
+ case "dynamiczone": {
279
+ return _$1.castArray(value).reduce((relationsStore, dzValue) => {
280
+ const value2 = dzValue;
281
+ if (!value2.__component) {
282
+ throw new ValidationError(
283
+ `Cannot build relations store from dynamiczone, component identifier is undefined`
284
+ );
287
285
  }
288
- );
289
- }, result);
286
+ return _$1.mergeWith(
287
+ relationsStore,
288
+ buildRelationsStore({
289
+ uid: value2.__component,
290
+ data: value2
291
+ }),
292
+ (objValue, srcValue) => {
293
+ if (_$1.isArray(objValue)) {
294
+ return objValue.concat(srcValue);
295
+ }
296
+ }
297
+ );
298
+ }, result);
299
+ }
290
300
  }
291
- }
292
- return result;
293
- }, {});
301
+ return result;
302
+ },
303
+ {}
304
+ );
294
305
  };
295
306
  const checkRelationsExist = async (relationsStore = {}) => {
296
307
  const promises = [];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/services/entity-validator/index.ts"],"sourcesContent":["/**\n * Entity validator\n * Module that will validate input data for entity creation or edition\n */\n\nimport { uniqBy, castArray, isNil, isArray, mergeWith } from 'lodash';\nimport { has, prop, isObject, isEmpty } from 'lodash/fp';\nimport strapiUtils from '@strapi/utils';\nimport { EntityValidator, Common, Schema, Attribute, Shared, EntityService } from '@strapi/types';\nimport validators from './validators';\n\ntype CreateOrUpdate = 'creation' | 'update';\n\nconst { yup, validateYupSchema } = strapiUtils;\nconst { isMediaAttribute, isScalarAttribute, getWritableAttributes } = strapiUtils.contentTypes;\nconst { ValidationError } = strapiUtils.errors;\n\ntype Entity = {\n id: ID;\n [key: string]: unknown;\n} | null;\n\ntype ID = { id: string | number };\n\ntype RelationSource = string | number | ID;\n\ninterface ValidatorMeta<TAttribute = Attribute.Any> {\n attr: TAttribute;\n updatedAttribute: { name: string; value: any };\n}\n\ninterface ValidatorContext {\n isDraft?: boolean;\n locale?: string | null;\n}\n\ninterface AttributeValidatorMetas {\n attr: Attribute.Any;\n updatedAttribute: { name: string; value: unknown };\n model: Schema.ContentType | Schema.Component;\n entity?: Entity;\n}\n\ninterface ModelValidatorMetas {\n model: Schema.ContentType | Schema.Component;\n data: Record<string, unknown>;\n entity?: Entity;\n}\n\nconst isInteger = (value: unknown): value is number => Number.isInteger(value);\n\nconst addMinMax = <\n T extends {\n min(value: number): T;\n max(value: number): T;\n }\n>(\n validator: T,\n { attr, updatedAttribute }: ValidatorMeta<Attribute.Any & Attribute.MinMaxOption<string | number>>\n): T => {\n let nextValidator: T = validator;\n\n if (\n isInteger(attr.min) &&\n (('required' in attr && attr.required) ||\n (Array.isArray(updatedAttribute.value) && updatedAttribute.value.length > 0))\n ) {\n nextValidator = nextValidator.min(attr.min);\n }\n if (isInteger(attr.max)) {\n nextValidator = nextValidator.max(attr.max);\n }\n return nextValidator;\n};\n\nconst addRequiredValidation = (createOrUpdate: CreateOrUpdate) => {\n return <T extends strapiUtils.yup.AnySchema>(\n validator: T,\n { attr: { required } }: ValidatorMeta<Partial<Attribute.Any & Attribute.RequiredOption>>\n ): T => {\n let nextValidator = validator;\n\n if (required) {\n if (createOrUpdate === 'creation') {\n nextValidator = nextValidator.notNil();\n } else if (createOrUpdate === 'update') {\n nextValidator = nextValidator.notNull();\n }\n } else {\n nextValidator = nextValidator.nullable();\n }\n return nextValidator;\n };\n};\n\nconst addDefault = (createOrUpdate: CreateOrUpdate) => {\n return (\n validator: strapiUtils.yup.BaseSchema,\n { attr }: ValidatorMeta<Attribute.Any & Attribute.DefaultOption<unknown>>\n ) => {\n let nextValidator = validator;\n\n if (createOrUpdate === 'creation') {\n if (\n ((attr.type === 'component' && attr.repeatable) || attr.type === 'dynamiczone') &&\n !attr.required\n ) {\n nextValidator = nextValidator.default([]);\n } else {\n nextValidator = nextValidator.default(attr.default);\n }\n } else {\n nextValidator = nextValidator.default(undefined);\n }\n\n return nextValidator;\n };\n};\n\nconst preventCast = (validator: strapiUtils.yup.AnySchema) =>\n validator.transform((val, originalVal) => originalVal);\n\nconst createComponentValidator =\n (createOrUpdate: CreateOrUpdate) =>\n (\n { attr, updatedAttribute }: ValidatorMeta<Attribute.Component<Common.UID.Component, boolean>>,\n { isDraft }: ValidatorContext\n ) => {\n const model = strapi.getModel(attr.component);\n if (!model) {\n throw new Error('Validation failed: Model not found');\n }\n\n if (attr?.repeatable) {\n // FIXME: yup v1\n\n let validator = yup\n .array()\n .of(\n yup.lazy((item) =>\n createModelValidator(createOrUpdate)({ model, data: item }, { isDraft }).notNull()\n ) as any\n );\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: true },\n updatedAttribute,\n });\n\n validator = addMinMax(validator, { attr, updatedAttribute });\n\n return validator;\n }\n\n // FIXME: v4 was broken\n let validator = createModelValidator(createOrUpdate)(\n { model, data: updatedAttribute.value },\n { isDraft }\n );\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: !isDraft && attr.required },\n updatedAttribute,\n });\n\n return validator;\n };\n\nconst createDzValidator =\n (createOrUpdate: CreateOrUpdate) =>\n ({ attr, updatedAttribute }: ValidatorMeta, { isDraft }: ValidatorContext) => {\n let validator;\n\n validator = yup.array().of(\n yup.lazy((item) => {\n const model = strapi.getModel(prop('__component', item));\n const schema = yup\n .object()\n .shape({\n __component: yup.string().required().oneOf(Object.keys(strapi.components)),\n })\n .notNull();\n\n return model\n ? schema.concat(createModelValidator(createOrUpdate)({ model, data: item }, { isDraft }))\n : schema;\n }) as any // FIXME: yup v1\n );\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: true },\n updatedAttribute,\n });\n\n validator = addMinMax(validator, { attr, updatedAttribute });\n\n return validator;\n };\n\nconst createRelationValidator =\n (createOrUpdate: CreateOrUpdate) =>\n (\n { attr, updatedAttribute }: ValidatorMeta<Attribute.Relation>,\n { isDraft }: ValidatorContext\n ) => {\n let validator;\n\n if (Array.isArray(updatedAttribute.value)) {\n validator = yup.array().of(yup.mixed());\n } else {\n validator = yup.mixed();\n }\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: !isDraft && attr.required },\n updatedAttribute,\n });\n\n return validator;\n };\n\nconst createScalarAttributeValidator =\n (createOrUpdate: CreateOrUpdate) => (metas: ValidatorMeta, options: ValidatorContext) => {\n let validator;\n\n if (has(metas.attr.type, validators)) {\n validator = (validators as any)[metas.attr.type](metas, options);\n } else {\n // No validators specified - fall back to mixed\n validator = yup.mixed();\n }\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: !options.isDraft && metas.attr.required },\n updatedAttribute: metas.updatedAttribute,\n });\n\n return validator;\n };\n\nconst createAttributeValidator =\n (createOrUpdate: CreateOrUpdate) =>\n (metas: AttributeValidatorMetas, options: ValidatorContext) => {\n let validator = yup.mixed();\n\n if (isMediaAttribute(metas.attr)) {\n validator = yup.mixed();\n } else if (isScalarAttribute(metas.attr)) {\n validator = createScalarAttributeValidator(createOrUpdate)(metas, options);\n } else {\n if (metas.attr.type === 'component') {\n validator = createComponentValidator(createOrUpdate)(\n { attr: metas.attr, updatedAttribute: metas.updatedAttribute },\n options\n );\n } else if (metas.attr.type === 'dynamiczone') {\n validator = createDzValidator(createOrUpdate)(metas, options);\n } else if (metas.attr.type === 'relation') {\n validator = createRelationValidator(createOrUpdate)(\n {\n attr: metas.attr,\n updatedAttribute: metas.updatedAttribute,\n },\n options\n );\n }\n\n validator = preventCast(validator);\n }\n\n validator = addDefault(createOrUpdate)(validator, metas);\n\n return validator;\n };\n\nconst createModelValidator =\n (createOrUpdate: CreateOrUpdate) =>\n ({ model, data, entity }: ModelValidatorMetas, options: ValidatorContext) => {\n const writableAttributes = model ? getWritableAttributes(model as any) : [];\n\n const schema = writableAttributes.reduce((validators, attributeName) => {\n const metas = {\n attr: model.attributes[attributeName],\n updatedAttribute: { name: attributeName, value: prop(attributeName, data) },\n model,\n entity,\n };\n\n const validator = createAttributeValidator(createOrUpdate)(metas, options);\n\n validators[attributeName] = validator;\n\n return validators;\n }, {} as Record<string, strapiUtils.yup.BaseSchema>);\n\n return yup.object().shape(schema);\n };\n\nconst createValidateEntity = (createOrUpdate: CreateOrUpdate) => {\n return async <\n TUID extends Common.UID.ContentType,\n TData extends EntityService.Params.Data.Input<TUID>\n >(\n model: Shared.ContentTypes[TUID],\n data: TData | Partial<TData> | undefined,\n options?: ValidatorContext,\n entity?: Entity\n ): Promise<TData> => {\n if (!isObject(data)) {\n const { displayName } = model.info;\n\n throw new ValidationError(\n `Invalid payload submitted for the ${createOrUpdate} of an entity of type ${displayName}. Expected an object, but got ${typeof data}`\n );\n }\n\n const validator = createModelValidator(createOrUpdate)(\n { model, data, entity },\n {\n isDraft: options?.isDraft ?? false,\n locale: options?.locale ?? null,\n }\n )\n .test('relations-test', 'check that all relations exist', async function (data) {\n try {\n await checkRelationsExist(buildRelationsStore({ uid: model.uid, data }));\n } catch (e) {\n return this.createError({\n path: this.path,\n message: (e instanceof ValidationError && e.message) || 'Invalid relations',\n });\n }\n return true;\n })\n .required();\n\n return validateYupSchema(validator, {\n strict: false,\n abortEarly: false,\n })(data);\n };\n};\n\n/**\n * Builds an object containing all the media and relations being associated with an entity\n */\nconst buildRelationsStore = <TUID extends Common.UID.ContentType | Common.UID.Component>({\n uid,\n data,\n}: {\n uid: TUID;\n data: Record<string, unknown> | null;\n}): Record<string, ID[]> => {\n if (!uid) {\n throw new ValidationError(`Cannot build relations store: \"uid\" is undefined`);\n }\n\n if (isEmpty(data)) {\n return {};\n }\n\n const currentModel = strapi.getModel(uid);\n\n return Object.keys(currentModel.attributes).reduce((result, attributeName: string) => {\n const attribute = currentModel.attributes[attributeName];\n const value = data[attributeName];\n\n if (isNil(value)) {\n return result;\n }\n\n switch (attribute.type) {\n case 'relation':\n case 'media': {\n if (\n attribute.type === 'relation' &&\n (attribute.relation === 'morphToMany' || attribute.relation === 'morphToOne')\n ) {\n // TODO: handle polymorphic relations\n break;\n }\n\n const target =\n // eslint-disable-next-line no-nested-ternary\n attribute.type === 'media' ? 'plugin::upload.file' : attribute.target;\n // As there are multiple formats supported for associating relations\n // with an entity, the value here can be an: array, object or number.\n let source: RelationSource[];\n if (Array.isArray(value)) {\n source = value;\n } else if (isObject(value)) {\n if ('connect' in value && !isNil(value.connect)) {\n source = value.connect as RelationSource[];\n } else if ('set' in value && !isNil(value.set)) {\n source = value.set as RelationSource[];\n } else {\n source = [];\n }\n } else {\n source = castArray(value as RelationSource);\n }\n const idArray = source.map((v) => ({\n id: typeof v === 'object' ? v.id : v,\n }));\n\n // Update the relationStore to keep track of all associations being made\n // with relations and media.\n result[target] = result[target] || [];\n result[target].push(...idArray);\n break;\n }\n case 'component': {\n return castArray(value).reduce((relationsStore, componentValue) => {\n if (!attribute.component) {\n throw new ValidationError(\n `Cannot build relations store from component, component identifier is undefined`\n );\n }\n\n return mergeWith(\n relationsStore,\n buildRelationsStore({\n uid: attribute.component,\n data: componentValue as Record<string, unknown>,\n }),\n (objValue, srcValue) => {\n if (isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n );\n }, result) as Record<string, ID[]>;\n }\n case 'dynamiczone': {\n return castArray(value).reduce((relationsStore, dzValue) => {\n const value = dzValue as Record<string, unknown>;\n if (!value.__component) {\n throw new ValidationError(\n `Cannot build relations store from dynamiczone, component identifier is undefined`\n );\n }\n\n return mergeWith(\n relationsStore,\n buildRelationsStore({\n uid: value.__component as Common.UID.Component,\n data: value,\n }),\n (objValue, srcValue) => {\n if (isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n );\n }, result) as Record<string, ID[]>;\n }\n default:\n break;\n }\n\n return result;\n }, {} as Record<string, ID[]>);\n};\n\n/**\n * Iterate through the relations store and validates that every relation or media\n * mentioned exists\n */\nconst checkRelationsExist = async (relationsStore: Record<string, ID[]> = {}) => {\n const promises = [];\n\n for (const [key, value] of Object.entries(relationsStore)) {\n const evaluate = async () => {\n const uniqueValues = uniqBy(value, `id`);\n const count = await strapi.db.query(key as Common.UID.Schema).count({\n where: {\n id: {\n $in: uniqueValues.map((v) => v.id),\n },\n },\n });\n\n if (count !== uniqueValues.length) {\n throw new ValidationError(\n `${\n uniqueValues.length - count\n } relation(s) of type ${key} associated with this entity do not exist`\n );\n }\n };\n promises.push(evaluate());\n }\n\n return Promise.all(promises);\n};\n\nconst entityValidator: EntityValidator = {\n validateEntityCreation: createValidateEntity('creation'),\n validateEntityUpdate: createValidateEntity('update'),\n};\n\nexport default entityValidator;\n"],"names":["strapiUtils","validator","prop","has","validators","isObject","data","isEmpty","isNil","castArray","mergeWith","isArray","value","uniqBy"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/services/entity-validator/index.ts"],"sourcesContent":["/**\n * Entity validator\n * Module that will validate input data for entity creation or edition\n */\n\nimport { uniqBy, castArray, isNil, isArray, mergeWith } from 'lodash';\nimport { has, prop, isObject, isEmpty } from 'lodash/fp';\nimport strapiUtils from '@strapi/utils';\nimport { Modules, UID, Struct, Schema } from '@strapi/types';\nimport validators from './validators';\n\ntype CreateOrUpdate = 'creation' | 'update';\n\nconst { yup, validateYupSchema } = strapiUtils;\nconst { isMediaAttribute, isScalarAttribute, getWritableAttributes } = strapiUtils.contentTypes;\nconst { ValidationError } = strapiUtils.errors;\n\ntype Entity = {\n id: ID;\n [key: string]: unknown;\n} | null;\n\ntype ID = { id: string | number };\n\ntype RelationSource = string | number | ID;\n\ninterface ValidatorMeta<TAttribute = Schema.Attribute.AnyAttribute> {\n attr: TAttribute;\n updatedAttribute: { name: string; value: any };\n}\n\ninterface ValidatorContext {\n isDraft?: boolean;\n locale?: string | null;\n}\n\ninterface AttributeValidatorMetas {\n attr: Schema.Attribute.AnyAttribute;\n updatedAttribute: { name: string; value: unknown };\n model: Struct.Schema;\n entity?: Entity;\n}\n\ninterface ModelValidatorMetas {\n model: Struct.Schema;\n data: Record<string, unknown>;\n entity?: Entity;\n}\n\nconst isInteger = (value: unknown): value is number => Number.isInteger(value);\n\nconst addMinMax = <\n T extends {\n min(value: number): T;\n max(value: number): T;\n },\n>(\n validator: T,\n {\n attr,\n updatedAttribute,\n }: ValidatorMeta<Schema.Attribute.AnyAttribute & Schema.Attribute.MinMaxOption<string | number>>\n): T => {\n let nextValidator: T = validator;\n\n if (\n isInteger(attr.min) &&\n (('required' in attr && attr.required) ||\n (Array.isArray(updatedAttribute.value) && updatedAttribute.value.length > 0))\n ) {\n nextValidator = nextValidator.min(attr.min);\n }\n if (isInteger(attr.max)) {\n nextValidator = nextValidator.max(attr.max);\n }\n return nextValidator;\n};\n\nconst addRequiredValidation = (createOrUpdate: CreateOrUpdate) => {\n return <T extends strapiUtils.yup.AnySchema>(\n validator: T,\n {\n attr: { required },\n }: ValidatorMeta<Partial<Schema.Attribute.AnyAttribute & Schema.Attribute.RequiredOption>>\n ): T => {\n let nextValidator = validator;\n\n if (required) {\n if (createOrUpdate === 'creation') {\n nextValidator = nextValidator.notNil();\n } else if (createOrUpdate === 'update') {\n nextValidator = nextValidator.notNull();\n }\n } else {\n nextValidator = nextValidator.nullable();\n }\n return nextValidator;\n };\n};\n\nconst addDefault = (createOrUpdate: CreateOrUpdate) => {\n return (\n validator: strapiUtils.yup.BaseSchema,\n { attr }: ValidatorMeta<Schema.Attribute.AnyAttribute & Schema.Attribute.DefaultOption<unknown>>\n ) => {\n let nextValidator = validator;\n\n if (createOrUpdate === 'creation') {\n if (\n ((attr.type === 'component' && attr.repeatable) || attr.type === 'dynamiczone') &&\n !attr.required\n ) {\n nextValidator = nextValidator.default([]);\n } else {\n nextValidator = nextValidator.default(attr.default);\n }\n } else {\n nextValidator = nextValidator.default(undefined);\n }\n\n return nextValidator;\n };\n};\n\nconst preventCast = (validator: strapiUtils.yup.AnySchema) =>\n validator.transform((val, originalVal) => originalVal);\n\nconst createComponentValidator =\n (createOrUpdate: CreateOrUpdate) =>\n (\n { attr, updatedAttribute }: ValidatorMeta<Schema.Attribute.Component<UID.Component, boolean>>,\n { isDraft }: ValidatorContext\n ) => {\n const model = strapi.getModel(attr.component);\n if (!model) {\n throw new Error('Validation failed: Model not found');\n }\n\n if (attr?.repeatable) {\n // FIXME: yup v1\n\n let validator = yup\n .array()\n .of(\n yup.lazy((item) =>\n createModelValidator(createOrUpdate)({ model, data: item }, { isDraft }).notNull()\n ) as any\n );\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: true },\n updatedAttribute,\n });\n\n validator = addMinMax(validator, { attr, updatedAttribute });\n\n return validator;\n }\n\n // FIXME: v4 was broken\n let validator = createModelValidator(createOrUpdate)(\n { model, data: updatedAttribute.value },\n { isDraft }\n );\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: !isDraft && attr.required },\n updatedAttribute,\n });\n\n return validator;\n };\n\nconst createDzValidator =\n (createOrUpdate: CreateOrUpdate) =>\n ({ attr, updatedAttribute }: ValidatorMeta, { isDraft }: ValidatorContext) => {\n let validator;\n\n validator = yup.array().of(\n yup.lazy((item) => {\n const model = strapi.getModel(prop('__component', item));\n const schema = yup\n .object()\n .shape({\n __component: yup.string().required().oneOf(Object.keys(strapi.components)),\n })\n .notNull();\n\n return model\n ? schema.concat(createModelValidator(createOrUpdate)({ model, data: item }, { isDraft }))\n : schema;\n }) as any // FIXME: yup v1\n );\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: true },\n updatedAttribute,\n });\n\n validator = addMinMax(validator, { attr, updatedAttribute });\n\n return validator;\n };\n\nconst createRelationValidator =\n (createOrUpdate: CreateOrUpdate) =>\n (\n { attr, updatedAttribute }: ValidatorMeta<Schema.Attribute.Relation>,\n { isDraft }: ValidatorContext\n ) => {\n let validator;\n\n if (Array.isArray(updatedAttribute.value)) {\n validator = yup.array().of(yup.mixed());\n } else {\n validator = yup.mixed();\n }\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: !isDraft && attr.required },\n updatedAttribute,\n });\n\n return validator;\n };\n\nconst createScalarAttributeValidator =\n (createOrUpdate: CreateOrUpdate) => (metas: ValidatorMeta, options: ValidatorContext) => {\n let validator;\n\n if (has(metas.attr.type, validators)) {\n validator = (validators as any)[metas.attr.type](metas, options);\n } else {\n // No validators specified - fall back to mixed\n validator = yup.mixed();\n }\n\n validator = addRequiredValidation(createOrUpdate)(validator, {\n attr: { required: !options.isDraft && metas.attr.required },\n updatedAttribute: metas.updatedAttribute,\n });\n\n return validator;\n };\n\nconst createAttributeValidator =\n (createOrUpdate: CreateOrUpdate) =>\n (metas: AttributeValidatorMetas, options: ValidatorContext) => {\n let validator = yup.mixed();\n\n if (isMediaAttribute(metas.attr)) {\n validator = yup.mixed();\n } else if (isScalarAttribute(metas.attr)) {\n validator = createScalarAttributeValidator(createOrUpdate)(metas, options);\n } else {\n if (metas.attr.type === 'component') {\n validator = createComponentValidator(createOrUpdate)(\n { attr: metas.attr, updatedAttribute: metas.updatedAttribute },\n options\n );\n } else if (metas.attr.type === 'dynamiczone') {\n validator = createDzValidator(createOrUpdate)(metas, options);\n } else if (metas.attr.type === 'relation') {\n validator = createRelationValidator(createOrUpdate)(\n {\n attr: metas.attr,\n updatedAttribute: metas.updatedAttribute,\n },\n options\n );\n }\n\n validator = preventCast(validator);\n }\n\n validator = addDefault(createOrUpdate)(validator, metas);\n\n return validator;\n };\n\nconst createModelValidator =\n (createOrUpdate: CreateOrUpdate) =>\n ({ model, data, entity }: ModelValidatorMetas, options: ValidatorContext) => {\n const writableAttributes = model ? getWritableAttributes(model as any) : [];\n\n const schema = writableAttributes.reduce(\n (validators, attributeName) => {\n const metas = {\n attr: model.attributes[attributeName],\n updatedAttribute: { name: attributeName, value: prop(attributeName, data) },\n model,\n entity,\n };\n\n const validator = createAttributeValidator(createOrUpdate)(metas, options);\n\n validators[attributeName] = validator;\n\n return validators;\n },\n {} as Record<string, strapiUtils.yup.BaseSchema>\n );\n\n return yup.object().shape(schema);\n };\n\nconst createValidateEntity = (createOrUpdate: CreateOrUpdate) => {\n return async <\n TUID extends UID.ContentType,\n TData extends Modules.EntityService.Params.Data.Input<TUID>,\n >(\n model: Schema.ContentType<TUID>,\n data: TData | Partial<TData> | undefined,\n options?: ValidatorContext,\n entity?: Entity\n ): Promise<TData> => {\n if (!isObject(data)) {\n const { displayName } = model.info;\n\n throw new ValidationError(\n `Invalid payload submitted for the ${createOrUpdate} of an entity of type ${displayName}. Expected an object, but got ${typeof data}`\n );\n }\n\n const validator = createModelValidator(createOrUpdate)(\n { model, data, entity },\n {\n isDraft: options?.isDraft ?? false,\n locale: options?.locale ?? null,\n }\n )\n .test('relations-test', 'check that all relations exist', async function (data) {\n try {\n await checkRelationsExist(buildRelationsStore({ uid: model.uid, data }));\n } catch (e) {\n return this.createError({\n path: this.path,\n message: (e instanceof ValidationError && e.message) || 'Invalid relations',\n });\n }\n return true;\n })\n .required();\n\n return validateYupSchema(validator, {\n strict: false,\n abortEarly: false,\n })(data);\n };\n};\n\n/**\n * Builds an object containing all the media and relations being associated with an entity\n */\nconst buildRelationsStore = <TUID extends UID.Schema>({\n uid,\n data,\n}: {\n uid: TUID;\n data: Record<string, unknown> | null;\n}): Record<string, ID[]> => {\n if (!uid) {\n throw new ValidationError(`Cannot build relations store: \"uid\" is undefined`);\n }\n\n if (isEmpty(data)) {\n return {};\n }\n\n const currentModel = strapi.getModel(uid);\n\n return Object.keys(currentModel.attributes).reduce(\n (result, attributeName: string) => {\n const attribute = currentModel.attributes[attributeName];\n const value = data[attributeName];\n\n if (isNil(value)) {\n return result;\n }\n\n switch (attribute.type) {\n case 'relation':\n case 'media': {\n if (\n attribute.type === 'relation' &&\n (attribute.relation === 'morphToMany' || attribute.relation === 'morphToOne')\n ) {\n // TODO: handle polymorphic relations\n break;\n }\n\n const target =\n // eslint-disable-next-line no-nested-ternary\n attribute.type === 'media' ? 'plugin::upload.file' : attribute.target;\n // As there are multiple formats supported for associating relations\n // with an entity, the value here can be an: array, object or number.\n let source: RelationSource[];\n if (Array.isArray(value)) {\n source = value;\n } else if (isObject(value)) {\n if ('connect' in value && !isNil(value.connect)) {\n source = value.connect as RelationSource[];\n } else if ('set' in value && !isNil(value.set)) {\n source = value.set as RelationSource[];\n } else {\n source = [];\n }\n } else {\n source = castArray(value as RelationSource);\n }\n const idArray = source.map((v) => ({\n id: typeof v === 'object' ? v.id : v,\n }));\n\n // Update the relationStore to keep track of all associations being made\n // with relations and media.\n result[target] = result[target] || [];\n result[target].push(...idArray);\n break;\n }\n case 'component': {\n return castArray(value).reduce((relationsStore, componentValue) => {\n if (!attribute.component) {\n throw new ValidationError(\n `Cannot build relations store from component, component identifier is undefined`\n );\n }\n\n return mergeWith(\n relationsStore,\n buildRelationsStore({\n uid: attribute.component,\n data: componentValue as Record<string, unknown>,\n }),\n (objValue, srcValue) => {\n if (isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n );\n }, result) as Record<string, ID[]>;\n }\n case 'dynamiczone': {\n return castArray(value).reduce((relationsStore, dzValue) => {\n const value = dzValue as Record<string, unknown>;\n if (!value.__component) {\n throw new ValidationError(\n `Cannot build relations store from dynamiczone, component identifier is undefined`\n );\n }\n\n return mergeWith(\n relationsStore,\n buildRelationsStore({\n uid: value.__component as UID.Component,\n data: value,\n }),\n (objValue, srcValue) => {\n if (isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n );\n }, result) as Record<string, ID[]>;\n }\n default:\n break;\n }\n\n return result;\n },\n {} as Record<string, ID[]>\n );\n};\n\n/**\n * Iterate through the relations store and validates that every relation or media\n * mentioned exists\n */\nconst checkRelationsExist = async (relationsStore: Record<string, ID[]> = {}) => {\n const promises: Promise<void>[] = [];\n\n for (const [key, value] of Object.entries(relationsStore)) {\n const evaluate = async () => {\n const uniqueValues = uniqBy(value, `id`);\n const count = await strapi.db.query(key as UID.Schema).count({\n where: {\n id: {\n $in: uniqueValues.map((v) => v.id),\n },\n },\n });\n\n if (count !== uniqueValues.length) {\n throw new ValidationError(\n `${\n uniqueValues.length - count\n } relation(s) of type ${key} associated with this entity do not exist`\n );\n }\n };\n promises.push(evaluate());\n }\n\n return Promise.all(promises);\n};\n\nconst entityValidator: Modules.EntityValidator.EntityValidator = {\n validateEntityCreation: createValidateEntity('creation'),\n validateEntityUpdate: createValidateEntity('update'),\n};\n\nexport default entityValidator;\n"],"names":["strapiUtils","validator","prop","has","validators","isObject","data","isEmpty","isNil","castArray","mergeWith","isArray","value","uniqBy"],"mappings":"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"}