@strapi/core 5.56.0 → 5.57.0

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 (346) hide show
  1. package/dist/Strapi.d.ts +1 -0
  2. package/dist/Strapi.d.ts.map +1 -1
  3. package/dist/Strapi.js +6 -3
  4. package/dist/Strapi.js.map +1 -1
  5. package/dist/Strapi.mjs +6 -3
  6. package/dist/Strapi.mjs.map +1 -1
  7. package/dist/configuration/get-dirs.js +2 -2
  8. package/dist/configuration/get-dirs.js.map +1 -1
  9. package/dist/configuration/get-dirs.mjs +2 -2
  10. package/dist/configuration/get-dirs.mjs.map +1 -1
  11. package/dist/configuration/index.d.ts +1 -2
  12. package/dist/configuration/index.d.ts.map +1 -1
  13. package/dist/configuration/index.js +1 -2
  14. package/dist/configuration/index.js.map +1 -1
  15. package/dist/configuration/index.mjs +2 -3
  16. package/dist/configuration/index.mjs.map +1 -1
  17. package/dist/core-api/controller/collection-type.js +3 -3
  18. package/dist/core-api/controller/collection-type.js.map +1 -1
  19. package/dist/core-api/controller/collection-type.mjs +1 -1
  20. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  21. package/dist/core-api/controller/index.js +2 -2
  22. package/dist/core-api/controller/index.js.map +1 -1
  23. package/dist/core-api/controller/index.mjs +2 -2
  24. package/dist/core-api/controller/index.mjs.map +1 -1
  25. package/dist/core-api/controller/single-type.js +2 -2
  26. package/dist/core-api/controller/single-type.js.map +1 -1
  27. package/dist/core-api/controller/single-type.mjs +1 -1
  28. package/dist/core-api/controller/single-type.mjs.map +1 -1
  29. package/dist/core-api/controller/transform.d.ts +1 -4
  30. package/dist/core-api/controller/transform.d.ts.map +1 -1
  31. package/dist/core-api/controller/transform.js +8 -8
  32. package/dist/core-api/controller/transform.js.map +1 -1
  33. package/dist/core-api/controller/transform.mjs +5 -5
  34. package/dist/core-api/controller/transform.mjs.map +1 -1
  35. package/dist/core-api/routes/index.js +1 -1
  36. package/dist/core-api/routes/index.js.map +1 -1
  37. package/dist/core-api/routes/index.mjs +1 -1
  38. package/dist/core-api/routes/index.mjs.map +1 -1
  39. package/dist/core-api/service/pagination.js +9 -9
  40. package/dist/core-api/service/pagination.js.map +1 -1
  41. package/dist/core-api/service/pagination.mjs +7 -7
  42. package/dist/core-api/service/pagination.mjs.map +1 -1
  43. package/dist/domain/content-type/index.d.ts.map +1 -1
  44. package/dist/domain/content-type/index.js +1 -2
  45. package/dist/domain/content-type/index.js.map +1 -1
  46. package/dist/domain/content-type/index.mjs +1 -2
  47. package/dist/domain/content-type/index.mjs.map +1 -1
  48. package/dist/ee/index.js +4 -4
  49. package/dist/ee/index.js.map +1 -1
  50. package/dist/ee/index.mjs +3 -3
  51. package/dist/ee/index.mjs.map +1 -1
  52. package/dist/factories.d.ts.map +1 -1
  53. package/dist/factories.js +3 -2
  54. package/dist/factories.js.map +1 -1
  55. package/dist/factories.mjs +3 -2
  56. package/dist/factories.mjs.map +1 -1
  57. package/dist/index.js +1 -1
  58. package/dist/index.mjs +1 -1
  59. package/dist/loaders/apis.d.ts.map +1 -1
  60. package/dist/loaders/apis.js +1 -2
  61. package/dist/loaders/apis.js.map +1 -1
  62. package/dist/loaders/apis.mjs +1 -2
  63. package/dist/loaders/apis.mjs.map +1 -1
  64. package/dist/loaders/plugins/get-enabled-plugins.d.ts +1 -1
  65. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  66. package/dist/loaders/plugins/get-enabled-plugins.js +6 -5
  67. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  68. package/dist/loaders/plugins/get-enabled-plugins.mjs +6 -5
  69. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  70. package/dist/loaders/plugins/get-user-plugins-config.js +2 -2
  71. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  72. package/dist/loaders/plugins/get-user-plugins-config.mjs +2 -2
  73. package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -1
  74. package/dist/loaders/plugins/index.js +9 -12
  75. package/dist/loaders/plugins/index.js.map +1 -1
  76. package/dist/loaders/plugins/index.mjs +9 -12
  77. package/dist/loaders/plugins/index.mjs.map +1 -1
  78. package/dist/middlewares/body.js +2 -2
  79. package/dist/middlewares/body.js.map +1 -1
  80. package/dist/middlewares/body.mjs +2 -2
  81. package/dist/middlewares/body.mjs.map +1 -1
  82. package/dist/middlewares/public.js +2 -2
  83. package/dist/middlewares/public.js.map +1 -1
  84. package/dist/middlewares/public.mjs +2 -2
  85. package/dist/middlewares/public.mjs.map +1 -1
  86. package/dist/middlewares/responses.d.ts.map +1 -1
  87. package/dist/middlewares/responses.js +1 -3
  88. package/dist/middlewares/responses.js.map +1 -1
  89. package/dist/middlewares/responses.mjs +1 -3
  90. package/dist/middlewares/responses.mjs.map +1 -1
  91. package/dist/middlewares/security.d.ts.map +1 -1
  92. package/dist/middlewares/security.js +3 -3
  93. package/dist/middlewares/security.js.map +1 -1
  94. package/dist/middlewares/security.mjs +3 -3
  95. package/dist/middlewares/security.mjs.map +1 -1
  96. package/dist/middlewares/session.js +2 -2
  97. package/dist/middlewares/session.js.map +1 -1
  98. package/dist/middlewares/session.mjs +2 -2
  99. package/dist/middlewares/session.mjs.map +1 -1
  100. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
  101. package/dist/migrations/database/5.0.0-discard-drafts.js +1 -2
  102. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  103. package/dist/migrations/database/5.0.0-discard-drafts.mjs +1 -2
  104. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  105. package/dist/migrations/i18n.d.ts.map +1 -1
  106. package/dist/migrations/i18n.js +6 -4
  107. package/dist/migrations/i18n.js.map +1 -1
  108. package/dist/migrations/i18n.mjs +6 -4
  109. package/dist/migrations/i18n.mjs.map +1 -1
  110. package/dist/package.json.js +13 -13
  111. package/dist/package.json.mjs +13 -13
  112. package/dist/registries/apis.js +2 -2
  113. package/dist/registries/apis.js.map +1 -1
  114. package/dist/registries/apis.mjs +2 -2
  115. package/dist/registries/apis.mjs.map +1 -1
  116. package/dist/registries/components.js +2 -2
  117. package/dist/registries/components.js.map +1 -1
  118. package/dist/registries/components.mjs +2 -2
  119. package/dist/registries/components.mjs.map +1 -1
  120. package/dist/registries/content-types.d.ts +1 -1
  121. package/dist/registries/content-types.js +3 -3
  122. package/dist/registries/content-types.js.map +1 -1
  123. package/dist/registries/content-types.mjs +3 -3
  124. package/dist/registries/content-types.mjs.map +1 -1
  125. package/dist/registries/controllers.js +3 -3
  126. package/dist/registries/controllers.js.map +1 -1
  127. package/dist/registries/controllers.mjs +3 -3
  128. package/dist/registries/controllers.mjs.map +1 -1
  129. package/dist/registries/custom-fields.js +4 -4
  130. package/dist/registries/custom-fields.js.map +1 -1
  131. package/dist/registries/custom-fields.mjs +4 -4
  132. package/dist/registries/custom-fields.mjs.map +1 -1
  133. package/dist/registries/hooks.d.ts +1 -1
  134. package/dist/registries/hooks.js +2 -2
  135. package/dist/registries/hooks.js.map +1 -1
  136. package/dist/registries/hooks.mjs +2 -2
  137. package/dist/registries/hooks.mjs.map +1 -1
  138. package/dist/registries/middlewares.d.ts +1 -1
  139. package/dist/registries/middlewares.js +3 -3
  140. package/dist/registries/middlewares.js.map +1 -1
  141. package/dist/registries/middlewares.mjs +3 -3
  142. package/dist/registries/middlewares.mjs.map +1 -1
  143. package/dist/registries/modules.d.ts +1 -4
  144. package/dist/registries/modules.d.ts.map +1 -1
  145. package/dist/registries/modules.js +3 -3
  146. package/dist/registries/modules.js.map +1 -1
  147. package/dist/registries/modules.mjs +3 -3
  148. package/dist/registries/modules.mjs.map +1 -1
  149. package/dist/registries/plugins.js +2 -2
  150. package/dist/registries/plugins.js.map +1 -1
  151. package/dist/registries/plugins.mjs +2 -2
  152. package/dist/registries/plugins.mjs.map +1 -1
  153. package/dist/registries/policies.d.ts +1 -1
  154. package/dist/registries/policies.js +4 -4
  155. package/dist/registries/policies.js.map +1 -1
  156. package/dist/registries/policies.mjs +3 -3
  157. package/dist/registries/policies.mjs.map +1 -1
  158. package/dist/registries/services.js +3 -3
  159. package/dist/registries/services.js.map +1 -1
  160. package/dist/registries/services.mjs +3 -3
  161. package/dist/registries/services.mjs.map +1 -1
  162. package/dist/services/auth/index.js +3 -3
  163. package/dist/services/auth/index.js.map +1 -1
  164. package/dist/services/auth/index.mjs +3 -3
  165. package/dist/services/auth/index.mjs.map +1 -1
  166. package/dist/services/core-store.js +3 -3
  167. package/dist/services/core-store.js.map +1 -1
  168. package/dist/services/core-store.mjs +1 -1
  169. package/dist/services/core-store.mjs.map +1 -1
  170. package/dist/services/cron.d.ts.map +1 -1
  171. package/dist/services/cron.js +2 -4
  172. package/dist/services/cron.js.map +1 -1
  173. package/dist/services/cron.mjs +2 -4
  174. package/dist/services/cron.mjs.map +1 -1
  175. package/dist/services/document-service/attributes/index.js +2 -2
  176. package/dist/services/document-service/attributes/index.js.map +1 -1
  177. package/dist/services/document-service/attributes/index.mjs +1 -1
  178. package/dist/services/document-service/attributes/index.mjs.map +1 -1
  179. package/dist/services/document-service/attributes/transforms.js +3 -3
  180. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  181. package/dist/services/document-service/attributes/transforms.mjs +2 -2
  182. package/dist/services/document-service/attributes/transforms.mjs.map +1 -1
  183. package/dist/services/document-service/components.d.ts.map +1 -1
  184. package/dist/services/document-service/components.js +13 -14
  185. package/dist/services/document-service/components.js.map +1 -1
  186. package/dist/services/document-service/components.mjs +12 -13
  187. package/dist/services/document-service/components.mjs.map +1 -1
  188. package/dist/services/document-service/draft-and-publish.js +65 -38
  189. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  190. package/dist/services/document-service/draft-and-publish.mjs +59 -32
  191. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  192. package/dist/services/document-service/entries.d.ts +2 -2
  193. package/dist/services/document-service/entries.d.ts.map +1 -1
  194. package/dist/services/document-service/entries.js +16 -8
  195. package/dist/services/document-service/entries.js.map +1 -1
  196. package/dist/services/document-service/entries.mjs +17 -9
  197. package/dist/services/document-service/entries.mjs.map +1 -1
  198. package/dist/services/document-service/first-published-at.js +7 -5
  199. package/dist/services/document-service/first-published-at.js.map +1 -1
  200. package/dist/services/document-service/first-published-at.mjs +7 -5
  201. package/dist/services/document-service/first-published-at.mjs.map +1 -1
  202. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  203. package/dist/services/document-service/internationalization.js +37 -28
  204. package/dist/services/document-service/internationalization.js.map +1 -1
  205. package/dist/services/document-service/internationalization.mjs +33 -24
  206. package/dist/services/document-service/internationalization.mjs.map +1 -1
  207. package/dist/services/document-service/params.d.ts +1 -0
  208. package/dist/services/document-service/params.d.ts.map +1 -1
  209. package/dist/services/document-service/params.js +6 -4
  210. package/dist/services/document-service/params.js.map +1 -1
  211. package/dist/services/document-service/params.mjs +6 -5
  212. package/dist/services/document-service/params.mjs.map +1 -1
  213. package/dist/services/document-service/repository.d.ts.map +1 -1
  214. package/dist/services/document-service/repository.js +84 -61
  215. package/dist/services/document-service/repository.js.map +1 -1
  216. package/dist/services/document-service/repository.mjs +47 -24
  217. package/dist/services/document-service/repository.mjs.map +1 -1
  218. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  219. package/dist/services/document-service/transform/id-map.js +2 -1
  220. package/dist/services/document-service/transform/id-map.js.map +1 -1
  221. package/dist/services/document-service/transform/id-map.mjs +2 -1
  222. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  223. package/dist/services/document-service/transform/id-transform.js +2 -2
  224. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  225. package/dist/services/document-service/transform/id-transform.mjs +1 -1
  226. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  227. package/dist/services/document-service/transform/query.d.ts +3 -1
  228. package/dist/services/document-service/transform/query.d.ts.map +1 -1
  229. package/dist/services/document-service/transform/query.js +12 -6
  230. package/dist/services/document-service/transform/query.js.map +1 -1
  231. package/dist/services/document-service/transform/query.mjs +11 -5
  232. package/dist/services/document-service/transform/query.mjs.map +1 -1
  233. package/dist/services/document-service/transform/relations/extract/data-ids.js +2 -2
  234. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  235. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +1 -1
  236. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  237. package/dist/services/document-service/transform/relations/transform/data-ids.js +2 -2
  238. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  239. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +1 -1
  240. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  241. package/dist/services/document-service/transform/relations/transform/default-locale.js +1 -1
  242. package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -1
  243. package/dist/services/document-service/transform/relations/transform/default-locale.mjs +1 -1
  244. package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -1
  245. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  246. package/dist/services/document-service/transform/relations/utils/dp.js +1 -2
  247. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  248. package/dist/services/document-service/transform/relations/utils/dp.mjs +1 -2
  249. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -1
  250. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +2 -2
  251. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  252. package/dist/services/document-service/transform/relations/utils/i18n.js +2 -2
  253. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  254. package/dist/services/document-service/transform/relations/utils/i18n.mjs +2 -2
  255. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  256. package/dist/services/document-service/transform/relations/utils/map-relation.js +6 -6
  257. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  258. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +3 -3
  259. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  260. package/dist/services/document-service/transform/relations/utils/xto-one.js +3 -3
  261. package/dist/services/document-service/transform/relations/utils/xto-one.js.map +1 -1
  262. package/dist/services/document-service/transform/relations/utils/xto-one.mjs +2 -2
  263. package/dist/services/document-service/transform/relations/utils/xto-one.mjs.map +1 -1
  264. package/dist/services/document-service/utils/bidirectional-relations.js +3 -3
  265. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -1
  266. package/dist/services/document-service/utils/bidirectional-relations.mjs +3 -3
  267. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -1
  268. package/dist/services/document-service/utils/clone-relations.js +3 -3
  269. package/dist/services/document-service/utils/clone-relations.js.map +1 -1
  270. package/dist/services/document-service/utils/clone-relations.mjs +3 -3
  271. package/dist/services/document-service/utils/clone-relations.mjs.map +1 -1
  272. package/dist/services/document-service/utils/self-referential-relations.js +4 -4
  273. package/dist/services/document-service/utils/self-referential-relations.js.map +1 -1
  274. package/dist/services/document-service/utils/self-referential-relations.mjs +4 -4
  275. package/dist/services/document-service/utils/self-referential-relations.mjs.map +1 -1
  276. package/dist/services/document-service/utils/unidirectional-relations.js +3 -3
  277. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -1
  278. package/dist/services/document-service/utils/unidirectional-relations.mjs +3 -3
  279. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -1
  280. package/dist/services/entity-validator/index.d.ts.map +1 -1
  281. package/dist/services/entity-validator/index.js +9 -10
  282. package/dist/services/entity-validator/index.js.map +1 -1
  283. package/dist/services/entity-validator/index.mjs +4 -5
  284. package/dist/services/entity-validator/index.mjs.map +1 -1
  285. package/dist/services/localization.d.ts +4 -0
  286. package/dist/services/localization.d.ts.map +1 -0
  287. package/dist/services/localization.js +51 -0
  288. package/dist/services/localization.js.map +1 -0
  289. package/dist/services/localization.mjs +49 -0
  290. package/dist/services/localization.mjs.map +1 -0
  291. package/dist/services/server/compose-endpoint.js +7 -7
  292. package/dist/services/server/compose-endpoint.js.map +1 -1
  293. package/dist/services/server/compose-endpoint.mjs +3 -3
  294. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  295. package/dist/services/server/koa-methods.js +2 -2
  296. package/dist/services/server/koa-methods.js.map +1 -1
  297. package/dist/services/server/koa-methods.mjs +1 -1
  298. package/dist/services/server/koa-methods.mjs.map +1 -1
  299. package/dist/services/server/koa.d.ts.map +1 -1
  300. package/dist/services/server/koa.js +1 -2
  301. package/dist/services/server/koa.js.map +1 -1
  302. package/dist/services/server/koa.mjs +1 -2
  303. package/dist/services/server/koa.mjs.map +1 -1
  304. package/dist/services/server/middleware.d.ts.map +1 -1
  305. package/dist/services/server/middleware.js +1 -2
  306. package/dist/services/server/middleware.js.map +1 -1
  307. package/dist/services/server/middleware.mjs +1 -2
  308. package/dist/services/server/middleware.mjs.map +1 -1
  309. package/dist/services/server/routing.js +2 -2
  310. package/dist/services/server/routing.js.map +1 -1
  311. package/dist/services/server/routing.mjs +2 -2
  312. package/dist/services/server/routing.mjs.map +1 -1
  313. package/dist/services/utils/conditional-fields.d.ts +1 -1
  314. package/dist/services/utils/conditional-fields.d.ts.map +1 -1
  315. package/dist/services/utils/conditional-fields.js +2 -8
  316. package/dist/services/utils/conditional-fields.js.map +1 -1
  317. package/dist/services/utils/conditional-fields.mjs +2 -8
  318. package/dist/services/utils/conditional-fields.mjs.map +1 -1
  319. package/dist/services/utils/dynamic-zones.d.ts.map +1 -1
  320. package/dist/services/utils/dynamic-zones.js +2 -8
  321. package/dist/services/utils/dynamic-zones.js.map +1 -1
  322. package/dist/services/utils/dynamic-zones.mjs +2 -8
  323. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  324. package/dist/utils/cron.js +2 -2
  325. package/dist/utils/cron.js.map +1 -1
  326. package/dist/utils/cron.mjs +1 -1
  327. package/dist/utils/cron.mjs.map +1 -1
  328. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  329. package/dist/utils/filepath-to-prop-path.js +5 -12
  330. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  331. package/dist/utils/filepath-to-prop-path.mjs +5 -11
  332. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  333. package/dist/utils/is-initialized.js +3 -3
  334. package/dist/utils/is-initialized.js.map +1 -1
  335. package/dist/utils/is-initialized.mjs +2 -2
  336. package/dist/utils/is-initialized.mjs.map +1 -1
  337. package/dist/utils/startup-logger.d.ts.map +1 -1
  338. package/dist/utils/startup-logger.js +2 -4
  339. package/dist/utils/startup-logger.js.map +1 -1
  340. package/dist/utils/startup-logger.mjs +2 -3
  341. package/dist/utils/startup-logger.mjs.map +1 -1
  342. package/dist/utils/transform-content-types-to-models.js +4 -4
  343. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  344. package/dist/utils/transform-content-types-to-models.mjs +3 -3
  345. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  346. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"cron.mjs","sources":["../../src/services/cron.ts"],"sourcesContent":["import { isFunction } from 'lodash/fp';\nimport type { Modules } from '@strapi/types';\nimport type { Cron } from 'croner';\n\ntype RecurrenceSpecObjLit = Modules.Cron.RecurrenceSpecObjLit;\ntype CronRuleOptions = Modules.Cron.CronRuleOptions;\ntype CronSchedule = Modules.Cron.CronSchedule;\ntype CronJob = Modules.Cron.CronJob;\ntype JobSpec = Modules.Cron.JobSpec;\ntype TaskFn = Modules.Cron.CronTaskFn;\ntype Tasks = Modules.Cron.CronTasks;\n\nlet lazyCroner: typeof import('croner') | undefined;\nconst getCroner = (): typeof import('croner') => {\n if (!lazyCroner) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n lazyCroner = require('croner');\n }\n return lazyCroner as typeof import('croner');\n};\n\nconst RECURRENCE_KEYS = [\n 'date',\n 'dayOfWeek',\n 'hour',\n 'minute',\n 'month',\n 'second',\n 'year',\n 'recurs',\n] as const;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !(value instanceof Date);\n\nconst isRuleOptions = (value: unknown): value is CronRuleOptions =>\n isPlainObject(value) && 'rule' in value;\n\nconst isRecurrenceSpec = (value: unknown): value is RecurrenceSpecObjLit =>\n isPlainObject(value) && !('rule' in value) && RECURRENCE_KEYS.some((key) => key in value);\n\nconst toDate = (value: Date | number | string): Date =>\n value instanceof Date ? value : new Date(value);\n\nconst toSegmentPart = (value: unknown, offset = 0): string | null => {\n if (typeof value === 'number') {\n return String(value + offset);\n }\n return typeof value === 'string' ? value : null;\n};\n\nconst segmentToField = (segment: unknown, fallback = '*', offset = 0): string => {\n if (segment == null) {\n return fallback;\n }\n\n const part = toSegmentPart(segment, offset);\n if (part !== null) {\n return part;\n }\n\n if (Array.isArray(segment)) {\n return segment.map((item) => segmentToField(item, fallback, offset)).join(',');\n }\n\n if (isPlainObject(segment)) {\n const start = toSegmentPart(segment.start ?? segment.from, offset);\n const end = toSegmentPart(segment.end ?? segment.to, offset);\n if (start !== null && end !== null) {\n const range = `${start}-${end}`;\n const step = toSegmentPart(segment.step);\n return step === null ? range : `${range}/${step}`;\n }\n }\n\n return fallback;\n};\n\nconst recurrenceToCron = (spec: RecurrenceSpecObjLit): string => {\n const second = segmentToField(spec.second, '0');\n const minute = segmentToField(spec.minute);\n const hour = segmentToField(spec.hour);\n const date = segmentToField(spec.date);\n const month = segmentToField(spec.month, '*', 1);\n const dayOfWeek = segmentToField(spec.dayOfWeek);\n const fields = `${second} ${minute} ${hour} ${date} ${month} ${dayOfWeek}`;\n\n return spec.year == null ? fields : `${fields} ${segmentToField(spec.year)}`;\n};\n\ntype ScheduleWindow = {\n tz?: string;\n start?: Date | number | string;\n end?: Date | number | string;\n};\n\nconst toCronerOptions = ({ tz, start, end }: ScheduleWindow): Record<string, unknown> => {\n const cronerOptions: Record<string, unknown> = {};\n\n if (tz) {\n cronerOptions.timezone = tz;\n }\n if (start != null) {\n cronerOptions.startAt = toDate(start);\n }\n if (end != null) {\n cronerOptions.stopAt = toDate(end);\n }\n\n return cronerOptions;\n};\n\nconst ruleToPattern = (\n rule: CronRuleOptions['rule']\n): { pattern: string | Date; oneShot: boolean } => {\n if (typeof rule === 'number') {\n return { pattern: new Date(rule), oneShot: true };\n }\n if (rule instanceof Date) {\n return { pattern: rule, oneShot: true };\n }\n if (typeof rule === 'string') {\n return { pattern: rule, oneShot: false };\n }\n if (isRecurrenceSpec(rule)) {\n return { pattern: recurrenceToCron(rule), oneShot: false };\n }\n throw new Error('Unsupported cron rule');\n};\n\nconst toCronerArgs = (\n options: CronSchedule\n): { pattern: string | Date; cronerOptions: Record<string, unknown> } => {\n if (typeof options === 'number') {\n return { pattern: new Date(options), cronerOptions: { maxRuns: 1 } };\n }\n\n if (options instanceof Date) {\n return { pattern: options, cronerOptions: { maxRuns: 1 } };\n }\n\n if (typeof options === 'string') {\n return { pattern: options, cronerOptions: {} };\n }\n\n if (isRecurrenceSpec(options)) {\n return {\n pattern: recurrenceToCron(options),\n cronerOptions: toCronerOptions(options),\n };\n }\n\n if (isRuleOptions(options)) {\n const cronerOptions = toCronerOptions(options);\n const { pattern, oneShot } = ruleToPattern(options.rule);\n if (oneShot) {\n cronerOptions.maxRuns = 1;\n }\n\n return { pattern, cronerOptions };\n }\n\n throw new Error('Unsupported cron schedule');\n};\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n const createRunner = (fn: TaskFn) => {\n let nextFireDate: Date | null = null;\n\n return {\n async run(self?: Cron): Promise<void> {\n const fireDate = nextFireDate ?? self?.currentRun() ?? new Date();\n nextFireDate = self?.nextRun(fireDate) ?? null;\n await fn({ strapi }, fireDate);\n },\n setNextRun(date: Date | null) {\n nextFireDate = date;\n },\n };\n };\n\n const createCronJob = (\n pattern: string | Date,\n cronerOptions: Record<string, unknown>,\n fn: TaskFn,\n jobLabel: string\n ) => {\n const { Cron: CronCtor } = getCroner();\n const runner = createRunner(fn);\n const job = new CronCtor(\n pattern,\n {\n paused: !running,\n // cron-parser (via node-schedule) accepted numeric-prefix stepping\n // like `5/15` as `5-59/15`. Croner 10 rejects it unless this is set.\n sloppyRanges: true,\n ...cronerOptions,\n catch(error: unknown) {\n strapi.log.error(`Cron job \"${jobLabel}\" failed`, error);\n },\n },\n runner.run\n );\n runner.setNextRun(job.nextRun());\n return job;\n };\n\n const attachHandle = (job: Cron, fn: TaskFn, jobLabel: string): CronJob => {\n let current = job;\n let handle: CronJob;\n\n const invoke = async () => {\n const fireDate = current.currentRun() ?? new Date();\n return fn({ strapi }, fireDate);\n };\n\n const cancel = () => {\n current.stop();\n return true;\n };\n\n const nextInvocation = () => current.nextRun();\n\n const reschedule = (spec: CronSchedule) => {\n try {\n const idx = jobsSpecs.findIndex((jobSpec) => jobSpec.job === handle);\n if (idx === -1) {\n return false;\n }\n\n const { pattern, cronerOptions } = toCronerArgs(spec);\n const next = createCronJob(pattern, cronerOptions, fn, jobLabel);\n\n current.stop();\n current = next;\n jobsSpecs[idx] = {\n ...jobsSpecs[idx],\n options: spec,\n };\n return true;\n } catch (error) {\n strapi.log.error(`Could not reschedule cron job \"${jobLabel}\"`, error);\n return false;\n }\n };\n\n handle = new Proxy(job as CronJob, {\n get(_target, property) {\n if (property === 'invoke') return invoke;\n if (property === 'cancel') return cancel;\n if (property === 'nextInvocation') return nextInvocation;\n if (property === 'reschedule') return reschedule;\n\n const value = Reflect.get(current, property, current);\n return typeof value === 'function' ? value.bind(current) : value;\n },\n });\n\n return handle;\n };\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: CronSchedule;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const jobLabel = taskName ?? taskExpression;\n\n try {\n const { pattern, cronerOptions } = toCronerArgs(options);\n const job = createCronJob(pattern, cronerOptions, fn, jobLabel);\n\n jobsSpecs.push({\n job: attachHandle(job, fn, jobLabel),\n options,\n name: taskName,\n });\n } catch (error) {\n strapi.log.error(`Could not schedule cron job \"${jobLabel}\": invalid schedule`, error);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) throw new Error('You must provide a name to remove a cron job.');\n const remaining: JobSpec[] = [];\n for (const jobSpec of jobsSpecs) {\n if (jobSpec.name === name) {\n jobSpec.job.stop();\n } else {\n remaining.push(jobSpec);\n }\n }\n jobsSpecs = remaining;\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job }) => job.resume());\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.pause());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs.forEach(({ job }) => job.stop());\n jobsSpecs = [];\n return this;\n },\n\n get jobs() {\n return jobsSpecs;\n },\n };\n};\n\nexport default createCronService;\n"],"names":["lazyCroner","getCroner","require","RECURRENCE_KEYS","isPlainObject","value","Date","isRuleOptions","isRecurrenceSpec","some","key","toDate","toSegmentPart","offset","String","segmentToField","segment","fallback","part","Array","isArray","map","item","join","start","from","end","to","range","step","recurrenceToCron","spec","second","minute","hour","date","month","dayOfWeek","fields","year","toCronerOptions","tz","cronerOptions","timezone","startAt","stopAt","ruleToPattern","rule","pattern","oneShot","Error","toCronerArgs","options","maxRuns","createCronService","jobsSpecs","running","createRunner","fn","nextFireDate","run","self","fireDate","currentRun","nextRun","strapi","setNextRun","createCronJob","jobLabel","Cron","CronCtor","runner","job","paused","sloppyRanges","catch","error","log","attachHandle","current","handle","invoke","cancel","stop","nextInvocation","reschedule","idx","findIndex","jobSpec","next","Proxy","get","_target","property","Reflect","bind","add","tasks","taskExpression","Object","keys","taskValue","taskName","isFunction","task","push","name","remove","remaining","forEach","resume","pause","destroy","jobs"],"mappings":"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"}
1
+ {"version":3,"file":"cron.mjs","sources":["../../src/services/cron.ts"],"sourcesContent":["import type { Modules } from '@strapi/types';\nimport type { Cron } from 'croner';\n\ntype RecurrenceSpecObjLit = Modules.Cron.RecurrenceSpecObjLit;\ntype CronRuleOptions = Modules.Cron.CronRuleOptions;\ntype CronSchedule = Modules.Cron.CronSchedule;\ntype CronJob = Modules.Cron.CronJob;\ntype JobSpec = Modules.Cron.JobSpec;\ntype TaskFn = Modules.Cron.CronTaskFn;\ntype Tasks = Modules.Cron.CronTasks;\n\nlet lazyCroner: typeof import('croner') | undefined;\nconst getCroner = (): typeof import('croner') => {\n if (!lazyCroner) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n lazyCroner = require('croner');\n }\n return lazyCroner as typeof import('croner');\n};\n\nconst RECURRENCE_KEYS = [\n 'date',\n 'dayOfWeek',\n 'hour',\n 'minute',\n 'month',\n 'second',\n 'year',\n 'recurs',\n] as const;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !(value instanceof Date);\n\nconst isRuleOptions = (value: unknown): value is CronRuleOptions =>\n isPlainObject(value) && 'rule' in value;\n\nconst isRecurrenceSpec = (value: unknown): value is RecurrenceSpecObjLit =>\n isPlainObject(value) && !('rule' in value) && RECURRENCE_KEYS.some((key) => key in value);\n\nconst toDate = (value: Date | number | string): Date =>\n value instanceof Date ? value : new Date(value);\n\nconst toSegmentPart = (value: unknown, offset = 0): string | null => {\n if (typeof value === 'number') {\n return String(value + offset);\n }\n return typeof value === 'string' ? value : null;\n};\n\nconst segmentToField = (segment: unknown, fallback = '*', offset = 0): string => {\n if (segment == null) {\n return fallback;\n }\n\n const part = toSegmentPart(segment, offset);\n if (part !== null) {\n return part;\n }\n\n if (Array.isArray(segment)) {\n return segment.map((item) => segmentToField(item, fallback, offset)).join(',');\n }\n\n if (isPlainObject(segment)) {\n const start = toSegmentPart(segment.start ?? segment.from, offset);\n const end = toSegmentPart(segment.end ?? segment.to, offset);\n if (start !== null && end !== null) {\n const range = `${start}-${end}`;\n const step = toSegmentPart(segment.step);\n return step === null ? range : `${range}/${step}`;\n }\n }\n\n return fallback;\n};\n\nconst recurrenceToCron = (spec: RecurrenceSpecObjLit): string => {\n const second = segmentToField(spec.second, '0');\n const minute = segmentToField(spec.minute);\n const hour = segmentToField(spec.hour);\n const date = segmentToField(spec.date);\n const month = segmentToField(spec.month, '*', 1);\n const dayOfWeek = segmentToField(spec.dayOfWeek);\n const fields = `${second} ${minute} ${hour} ${date} ${month} ${dayOfWeek}`;\n\n return spec.year == null ? fields : `${fields} ${segmentToField(spec.year)}`;\n};\n\ntype ScheduleWindow = {\n tz?: string;\n start?: Date | number | string;\n end?: Date | number | string;\n};\n\nconst toCronerOptions = ({ tz, start, end }: ScheduleWindow): Record<string, unknown> => {\n const cronerOptions: Record<string, unknown> = {};\n\n if (tz) {\n cronerOptions.timezone = tz;\n }\n if (start != null) {\n cronerOptions.startAt = toDate(start);\n }\n if (end != null) {\n cronerOptions.stopAt = toDate(end);\n }\n\n return cronerOptions;\n};\n\nconst ruleToPattern = (\n rule: CronRuleOptions['rule']\n): { pattern: string | Date; oneShot: boolean } => {\n if (typeof rule === 'number') {\n return { pattern: new Date(rule), oneShot: true };\n }\n if (rule instanceof Date) {\n return { pattern: rule, oneShot: true };\n }\n if (typeof rule === 'string') {\n return { pattern: rule, oneShot: false };\n }\n if (isRecurrenceSpec(rule)) {\n return { pattern: recurrenceToCron(rule), oneShot: false };\n }\n throw new Error('Unsupported cron rule');\n};\n\nconst toCronerArgs = (\n options: CronSchedule\n): { pattern: string | Date; cronerOptions: Record<string, unknown> } => {\n if (typeof options === 'number') {\n return { pattern: new Date(options), cronerOptions: { maxRuns: 1 } };\n }\n\n if (options instanceof Date) {\n return { pattern: options, cronerOptions: { maxRuns: 1 } };\n }\n\n if (typeof options === 'string') {\n return { pattern: options, cronerOptions: {} };\n }\n\n if (isRecurrenceSpec(options)) {\n return {\n pattern: recurrenceToCron(options),\n cronerOptions: toCronerOptions(options),\n };\n }\n\n if (isRuleOptions(options)) {\n const cronerOptions = toCronerOptions(options);\n const { pattern, oneShot } = ruleToPattern(options.rule);\n if (oneShot) {\n cronerOptions.maxRuns = 1;\n }\n\n return { pattern, cronerOptions };\n }\n\n throw new Error('Unsupported cron schedule');\n};\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n const createRunner = (fn: TaskFn) => {\n let nextFireDate: Date | null = null;\n\n return {\n async run(self?: Cron): Promise<void> {\n const fireDate = nextFireDate ?? self?.currentRun() ?? new Date();\n nextFireDate = self?.nextRun(fireDate) ?? null;\n await fn({ strapi }, fireDate);\n },\n setNextRun(date: Date | null) {\n nextFireDate = date;\n },\n };\n };\n\n const createCronJob = (\n pattern: string | Date,\n cronerOptions: Record<string, unknown>,\n fn: TaskFn,\n jobLabel: string\n ) => {\n const { Cron: CronCtor } = getCroner();\n const runner = createRunner(fn);\n const job = new CronCtor(\n pattern,\n {\n paused: !running,\n // cron-parser (via node-schedule) accepted numeric-prefix stepping\n // like `5/15` as `5-59/15`. Croner 10 rejects it unless this is set.\n sloppyRanges: true,\n ...cronerOptions,\n catch(error: unknown) {\n strapi.log.error(`Cron job \"${jobLabel}\" failed`, error);\n },\n },\n runner.run\n );\n runner.setNextRun(job.nextRun());\n return job;\n };\n\n const attachHandle = (job: Cron, fn: TaskFn, jobLabel: string): CronJob => {\n let current = job;\n let handle: CronJob;\n\n const invoke = async () => {\n const fireDate = current.currentRun() ?? new Date();\n return fn({ strapi }, fireDate);\n };\n\n const cancel = () => {\n current.stop();\n return true;\n };\n\n const nextInvocation = () => current.nextRun();\n\n const reschedule = (spec: CronSchedule) => {\n try {\n const idx = jobsSpecs.findIndex((jobSpec) => jobSpec.job === handle);\n if (idx === -1) {\n return false;\n }\n\n const { pattern, cronerOptions } = toCronerArgs(spec);\n const next = createCronJob(pattern, cronerOptions, fn, jobLabel);\n\n current.stop();\n current = next;\n jobsSpecs[idx] = {\n ...jobsSpecs[idx],\n options: spec,\n };\n return true;\n } catch (error) {\n strapi.log.error(`Could not reschedule cron job \"${jobLabel}\"`, error);\n return false;\n }\n };\n\n handle = new Proxy(job as CronJob, {\n get(_target, property) {\n if (property === 'invoke') return invoke;\n if (property === 'cancel') return cancel;\n if (property === 'nextInvocation') return nextInvocation;\n if (property === 'reschedule') return reschedule;\n\n const value = Reflect.get(current, property, current);\n return typeof value === 'function' ? value.bind(current) : value;\n },\n });\n\n return handle;\n };\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: CronSchedule;\n let taskName: string | null;\n if (typeof taskValue === 'function') {\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (typeof taskValue.task === 'function') {\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const jobLabel = taskName ?? taskExpression;\n\n try {\n const { pattern, cronerOptions } = toCronerArgs(options);\n const job = createCronJob(pattern, cronerOptions, fn, jobLabel);\n\n jobsSpecs.push({\n job: attachHandle(job, fn, jobLabel),\n options,\n name: taskName,\n });\n } catch (error) {\n strapi.log.error(`Could not schedule cron job \"${jobLabel}\": invalid schedule`, error);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) throw new Error('You must provide a name to remove a cron job.');\n const remaining: JobSpec[] = [];\n for (const jobSpec of jobsSpecs) {\n if (jobSpec.name === name) {\n jobSpec.job.stop();\n } else {\n remaining.push(jobSpec);\n }\n }\n jobsSpecs = remaining;\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job }) => job.resume());\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.pause());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs.forEach(({ job }) => job.stop());\n jobsSpecs = [];\n return this;\n },\n\n get jobs() {\n return jobsSpecs;\n },\n };\n};\n\nexport default createCronService;\n"],"names":["lazyCroner","getCroner","require","RECURRENCE_KEYS","isPlainObject","value","Date","isRuleOptions","isRecurrenceSpec","some","key","toDate","toSegmentPart","offset","String","segmentToField","segment","fallback","part","Array","isArray","map","item","join","start","from","end","to","range","step","recurrenceToCron","spec","second","minute","hour","date","month","dayOfWeek","fields","year","toCronerOptions","tz","cronerOptions","timezone","startAt","stopAt","ruleToPattern","rule","pattern","oneShot","Error","toCronerArgs","options","maxRuns","createCronService","jobsSpecs","running","createRunner","fn","nextFireDate","run","self","fireDate","currentRun","nextRun","strapi","setNextRun","createCronJob","jobLabel","Cron","CronCtor","runner","job","paused","sloppyRanges","catch","error","log","attachHandle","current","handle","invoke","cancel","stop","nextInvocation","reschedule","idx","findIndex","jobSpec","next","Proxy","get","_target","property","Reflect","bind","add","tasks","taskExpression","Object","keys","taskValue","taskName","task","push","name","remove","remaining","forEach","resume","pause","destroy","jobs"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var fp = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
  var transforms = require('./transforms.js');
5
5
 
6
- const applyTransforms = fp.curry((schema, data)=>{
6
+ const applyTransforms = _.curry((schema, data)=>{
7
7
  const attributeNames = Object.keys(data);
8
8
  for (const attributeName of attributeNames){
9
9
  const value = data[attributeName];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/services/document-service/attributes/index.ts"],"sourcesContent":["import { curry } from 'lodash/fp';\n\nimport type { UID, Modules, Schema } from '@strapi/types';\n\nimport transforms from './transforms';\n\n// aliasing the type to make it easier to read\ntype Data = Modules.Documents.Params.Data.Input<UID.Schema>;\n\nconst applyTransforms = curry((schema: Schema.Schema, data: Data) => {\n const attributeNames = Object.keys(data) as Array<keyof typeof data & string>;\n\n for (const attributeName of attributeNames) {\n const value = data[attributeName];\n\n const attribute = schema.attributes[attributeName];\n\n if (!attribute) {\n continue;\n }\n\n const transform = transforms[attribute.type];\n\n if (transform) {\n const attributeContext = { attributeName, attribute };\n\n data[attributeName] = transform(value, attributeContext);\n }\n }\n\n return data;\n});\n\nexport { applyTransforms };\n"],"names":["applyTransforms","curry","schema","data","attributeNames","Object","keys","attributeName","value","attribute","attributes","transform","transforms","type","attributeContext"],"mappings":";;;;;AASA,MAAMA,eAAAA,GAAkBC,QAAAA,CAAM,CAACC,MAAAA,EAAuBC,IAAAA,GAAAA;IACpD,MAAMC,cAAAA,GAAiBC,MAAAA,CAAOC,IAAI,CAACH,IAAAA,CAAAA;IAEnC,KAAK,MAAMI,iBAAiBH,cAAAA,CAAgB;QAC1C,MAAMI,KAAAA,GAAQL,IAAI,CAACI,aAAAA,CAAc;AAEjC,QAAA,MAAME,SAAAA,GAAYP,MAAAA,CAAOQ,UAAU,CAACH,aAAAA,CAAc;AAElD,QAAA,IAAI,CAACE,SAAAA,EAAW;AACd,YAAA;AACF,QAAA;AAEA,QAAA,MAAME,SAAAA,GAAYC,UAAU,CAACH,SAAAA,CAAUI,IAAI,CAAC;AAE5C,QAAA,IAAIF,SAAAA,EAAW;AACb,YAAA,MAAMG,gBAAAA,GAAmB;AAAEP,gBAAAA,aAAAA;AAAeE,gBAAAA;AAAU,aAAA;AAEpDN,YAAAA,IAAI,CAACI,aAAAA,CAAc,GAAGI,SAAAA,CAAUH,KAAAA,EAAOM,gBAAAA,CAAAA;AACzC,QAAA;AACF,IAAA;IAEA,OAAOX,IAAAA;AACT,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/services/document-service/attributes/index.ts"],"sourcesContent":["import { curry } from 'lodash';\n\nimport type { UID, Modules, Schema } from '@strapi/types';\n\nimport transforms from './transforms';\n\n// aliasing the type to make it easier to read\ntype Data = Modules.Documents.Params.Data.Input<UID.Schema>;\n\nconst applyTransforms = curry((schema: Schema.Schema, data: Data) => {\n const attributeNames = Object.keys(data) as Array<keyof typeof data & string>;\n\n for (const attributeName of attributeNames) {\n const value = data[attributeName];\n\n const attribute = schema.attributes[attributeName];\n\n if (!attribute) {\n continue;\n }\n\n const transform = transforms[attribute.type];\n\n if (transform) {\n const attributeContext = { attributeName, attribute };\n\n data[attributeName] = transform(value, attributeContext);\n }\n }\n\n return data;\n});\n\nexport { applyTransforms };\n"],"names":["applyTransforms","curry","schema","data","attributeNames","Object","keys","attributeName","value","attribute","attributes","transform","transforms","type","attributeContext"],"mappings":";;;;;AASA,MAAMA,eAAAA,GAAkBC,OAAAA,CAAM,CAACC,MAAAA,EAAuBC,IAAAA,GAAAA;IACpD,MAAMC,cAAAA,GAAiBC,MAAAA,CAAOC,IAAI,CAACH,IAAAA,CAAAA;IAEnC,KAAK,MAAMI,iBAAiBH,cAAAA,CAAgB;QAC1C,MAAMI,KAAAA,GAAQL,IAAI,CAACI,aAAAA,CAAc;AAEjC,QAAA,MAAME,SAAAA,GAAYP,MAAAA,CAAOQ,UAAU,CAACH,aAAAA,CAAc;AAElD,QAAA,IAAI,CAACE,SAAAA,EAAW;AACd,YAAA;AACF,QAAA;AAEA,QAAA,MAAME,SAAAA,GAAYC,UAAU,CAACH,SAAAA,CAAUI,IAAI,CAAC;AAE5C,QAAA,IAAIF,SAAAA,EAAW;AACb,YAAA,MAAMG,gBAAAA,GAAmB;AAAEP,gBAAAA,aAAAA;AAAeE,gBAAAA;AAAU,aAAA;AAEpDN,YAAAA,IAAI,CAACI,aAAAA,CAAc,GAAGI,SAAAA,CAAUH,KAAAA,EAAOM,gBAAAA,CAAAA;AACzC,QAAA;AACF,IAAA;IAEA,OAAOX,IAAAA;AACT,CAAA;;;;"}
@@ -1,4 +1,4 @@
1
- import { curry } from 'lodash/fp';
1
+ import { curry } from 'lodash';
2
2
  import transforms from './transforms.mjs';
3
3
 
4
4
  const applyTransforms = curry((schema, data)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../src/services/document-service/attributes/index.ts"],"sourcesContent":["import { curry } from 'lodash/fp';\n\nimport type { UID, Modules, Schema } from '@strapi/types';\n\nimport transforms from './transforms';\n\n// aliasing the type to make it easier to read\ntype Data = Modules.Documents.Params.Data.Input<UID.Schema>;\n\nconst applyTransforms = curry((schema: Schema.Schema, data: Data) => {\n const attributeNames = Object.keys(data) as Array<keyof typeof data & string>;\n\n for (const attributeName of attributeNames) {\n const value = data[attributeName];\n\n const attribute = schema.attributes[attributeName];\n\n if (!attribute) {\n continue;\n }\n\n const transform = transforms[attribute.type];\n\n if (transform) {\n const attributeContext = { attributeName, attribute };\n\n data[attributeName] = transform(value, attributeContext);\n }\n }\n\n return data;\n});\n\nexport { applyTransforms };\n"],"names":["applyTransforms","curry","schema","data","attributeNames","Object","keys","attributeName","value","attribute","attributes","transform","transforms","type","attributeContext"],"mappings":";;;AASA,MAAMA,eAAAA,GAAkBC,KAAAA,CAAM,CAACC,MAAAA,EAAuBC,IAAAA,GAAAA;IACpD,MAAMC,cAAAA,GAAiBC,MAAAA,CAAOC,IAAI,CAACH,IAAAA,CAAAA;IAEnC,KAAK,MAAMI,iBAAiBH,cAAAA,CAAgB;QAC1C,MAAMI,KAAAA,GAAQL,IAAI,CAACI,aAAAA,CAAc;AAEjC,QAAA,MAAME,SAAAA,GAAYP,MAAAA,CAAOQ,UAAU,CAACH,aAAAA,CAAc;AAElD,QAAA,IAAI,CAACE,SAAAA,EAAW;AACd,YAAA;AACF,QAAA;AAEA,QAAA,MAAME,SAAAA,GAAYC,UAAU,CAACH,SAAAA,CAAUI,IAAI,CAAC;AAE5C,QAAA,IAAIF,SAAAA,EAAW;AACb,YAAA,MAAMG,gBAAAA,GAAmB;AAAEP,gBAAAA,aAAAA;AAAeE,gBAAAA;AAAU,aAAA;AAEpDN,YAAAA,IAAI,CAACI,aAAAA,CAAc,GAAGI,SAAAA,CAAUH,KAAAA,EAAOM,gBAAAA,CAAAA;AACzC,QAAA;AACF,IAAA;IAEA,OAAOX,IAAAA;AACT,CAAA;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/services/document-service/attributes/index.ts"],"sourcesContent":["import { curry } from 'lodash';\n\nimport type { UID, Modules, Schema } from '@strapi/types';\n\nimport transforms from './transforms';\n\n// aliasing the type to make it easier to read\ntype Data = Modules.Documents.Params.Data.Input<UID.Schema>;\n\nconst applyTransforms = curry((schema: Schema.Schema, data: Data) => {\n const attributeNames = Object.keys(data) as Array<keyof typeof data & string>;\n\n for (const attributeName of attributeNames) {\n const value = data[attributeName];\n\n const attribute = schema.attributes[attributeName];\n\n if (!attribute) {\n continue;\n }\n\n const transform = transforms[attribute.type];\n\n if (transform) {\n const attributeContext = { attributeName, attribute };\n\n data[attributeName] = transform(value, attributeContext);\n }\n }\n\n return data;\n});\n\nexport { applyTransforms };\n"],"names":["applyTransforms","curry","schema","data","attributeNames","Object","keys","attributeName","value","attribute","attributes","transform","transforms","type","attributeContext"],"mappings":";;;AASA,MAAMA,eAAAA,GAAkBC,KAAAA,CAAM,CAACC,MAAAA,EAAuBC,IAAAA,GAAAA;IACpD,MAAMC,cAAAA,GAAiBC,MAAAA,CAAOC,IAAI,CAACH,IAAAA,CAAAA;IAEnC,KAAK,MAAMI,iBAAiBH,cAAAA,CAAgB;QAC1C,MAAMI,KAAAA,GAAQL,IAAI,CAACI,aAAAA,CAAc;AAEjC,QAAA,MAAME,SAAAA,GAAYP,MAAAA,CAAOQ,UAAU,CAACH,aAAAA,CAAc;AAElD,QAAA,IAAI,CAACE,SAAAA,EAAW;AACd,YAAA;AACF,QAAA;AAEA,QAAA,MAAME,SAAAA,GAAYC,UAAU,CAACH,SAAAA,CAAUI,IAAI,CAAC;AAE5C,QAAA,IAAIF,SAAAA,EAAW;AACb,YAAA,MAAMG,gBAAAA,GAAmB;AAAEP,gBAAAA,aAAAA;AAAeE,gBAAAA;AAAU,aAAA;AAEpDN,YAAAA,IAAI,CAACI,aAAAA,CAAc,GAAGI,SAAAA,CAAUH,KAAAA,EAAOM,gBAAAA,CAAAA;AACzC,QAAA;AACF,IAAA;IAEA,OAAOX,IAAAA;AACT,CAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var fp = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
  var bcrypt = require('bcryptjs');
5
5
 
6
6
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -13,10 +13,10 @@ const transforms = {
13
13
  if (attribute.type !== 'password') {
14
14
  throw new Error('Invalid attribute type');
15
15
  }
16
- if (!fp.isString(value) && !(value instanceof Buffer)) {
16
+ if (!_.isString(value) && !(value instanceof Buffer)) {
17
17
  return value;
18
18
  }
19
- const rounds = fp.toNumber(fp.getOr(10, 'encryption.rounds', attribute));
19
+ const rounds = _.toNumber(_.get(attribute, 'encryption.rounds', 10));
20
20
  return bcrypt__default.default.hashSync(value.toString(), rounds);
21
21
  }
22
22
  };
@@ -1 +1 @@
1
- {"version":3,"file":"transforms.js","sources":["../../../../src/services/document-service/attributes/transforms.ts"],"sourcesContent":["import { getOr, toNumber, isString } from 'lodash/fp';\nimport type { Schema } from '@strapi/types';\nimport bcrypt from 'bcryptjs';\n\ntype Transforms = {\n [TKind in Schema.Attribute.Kind]?: (\n value: unknown,\n context: {\n attribute: Schema.Attribute.AnyAttribute;\n attributeName: string;\n }\n ) => any;\n};\n\nconst transforms: Transforms = {\n password(value, context) {\n const { attribute } = context;\n\n if (attribute.type !== 'password') {\n throw new Error('Invalid attribute type');\n }\n\n if (!isString(value) && !(value instanceof Buffer)) {\n return value;\n }\n\n const rounds = toNumber(getOr(10, 'encryption.rounds', attribute));\n\n return bcrypt.hashSync(value.toString(), rounds);\n },\n};\n\nexport default transforms;\n"],"names":["transforms","password","value","context","attribute","type","Error","isString","Buffer","rounds","toNumber","getOr","bcrypt","hashSync","toString"],"mappings":";;;;;;;;;AAcA,MAAMA,UAAAA,GAAyB;IAC7BC,QAAAA,CAAAA,CAASC,KAAK,EAAEC,OAAO,EAAA;QACrB,MAAM,EAAEC,SAAS,EAAE,GAAGD,OAAAA;QAEtB,IAAIC,SAAAA,CAAUC,IAAI,KAAK,UAAA,EAAY;AACjC,YAAA,MAAM,IAAIC,KAAAA,CAAM,wBAAA,CAAA;AAClB,QAAA;AAEA,QAAA,IAAI,CAACC,WAAAA,CAASL,KAAAA,CAAAA,IAAU,EAAEA,KAAAA,YAAiBM,MAAK,CAAA,EAAI;YAClD,OAAON,KAAAA;AACT,QAAA;AAEA,QAAA,MAAMO,MAAAA,GAASC,WAAAA,CAASC,QAAAA,CAAM,EAAA,EAAI,mBAAA,EAAqBP,SAAAA,CAAAA,CAAAA;AAEvD,QAAA,OAAOQ,uBAAAA,CAAOC,QAAQ,CAACX,KAAAA,CAAMY,QAAQ,EAAA,EAAIL,MAAAA,CAAAA;AAC3C,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"transforms.js","sources":["../../../../src/services/document-service/attributes/transforms.ts"],"sourcesContent":["import { get, isString, toNumber } from 'lodash';\nimport type { Schema } from '@strapi/types';\nimport bcrypt from 'bcryptjs';\n\ntype Transforms = {\n [TKind in Schema.Attribute.Kind]?: (\n value: unknown,\n context: {\n attribute: Schema.Attribute.AnyAttribute;\n attributeName: string;\n }\n ) => any;\n};\n\nconst transforms: Transforms = {\n password(value, context) {\n const { attribute } = context;\n\n if (attribute.type !== 'password') {\n throw new Error('Invalid attribute type');\n }\n\n if (!isString(value) && !(value instanceof Buffer)) {\n return value;\n }\n\n const rounds = toNumber(get(attribute, 'encryption.rounds', 10));\n\n return bcrypt.hashSync(value.toString(), rounds);\n },\n};\n\nexport default transforms;\n"],"names":["transforms","password","value","context","attribute","type","Error","isString","Buffer","rounds","toNumber","get","bcrypt","hashSync","toString"],"mappings":";;;;;;;;;AAcA,MAAMA,UAAAA,GAAyB;IAC7BC,QAAAA,CAAAA,CAASC,KAAK,EAAEC,OAAO,EAAA;QACrB,MAAM,EAAEC,SAAS,EAAE,GAAGD,OAAAA;QAEtB,IAAIC,SAAAA,CAAUC,IAAI,KAAK,UAAA,EAAY;AACjC,YAAA,MAAM,IAAIC,KAAAA,CAAM,wBAAA,CAAA;AAClB,QAAA;AAEA,QAAA,IAAI,CAACC,UAAAA,CAASL,KAAAA,CAAAA,IAAU,EAAEA,KAAAA,YAAiBM,MAAK,CAAA,EAAI;YAClD,OAAON,KAAAA;AACT,QAAA;AAEA,QAAA,MAAMO,MAAAA,GAASC,UAAAA,CAASC,KAAAA,CAAIP,SAAAA,EAAW,mBAAA,EAAqB,EAAA,CAAA,CAAA;AAE5D,QAAA,OAAOQ,uBAAAA,CAAOC,QAAQ,CAACX,KAAAA,CAAMY,QAAQ,EAAA,EAAIL,MAAAA,CAAAA;AAC3C,IAAA;AACF;;;;"}
@@ -1,4 +1,4 @@
1
- import { isString, toNumber, getOr } from 'lodash/fp';
1
+ import { isString, toNumber, get } from 'lodash';
2
2
  import bcrypt from 'bcryptjs';
3
3
 
4
4
  const transforms = {
@@ -10,7 +10,7 @@ const transforms = {
10
10
  if (!isString(value) && !(value instanceof Buffer)) {
11
11
  return value;
12
12
  }
13
- const rounds = toNumber(getOr(10, 'encryption.rounds', attribute));
13
+ const rounds = toNumber(get(attribute, 'encryption.rounds', 10));
14
14
  return bcrypt.hashSync(value.toString(), rounds);
15
15
  }
16
16
  };
@@ -1 +1 @@
1
- {"version":3,"file":"transforms.mjs","sources":["../../../../src/services/document-service/attributes/transforms.ts"],"sourcesContent":["import { getOr, toNumber, isString } from 'lodash/fp';\nimport type { Schema } from '@strapi/types';\nimport bcrypt from 'bcryptjs';\n\ntype Transforms = {\n [TKind in Schema.Attribute.Kind]?: (\n value: unknown,\n context: {\n attribute: Schema.Attribute.AnyAttribute;\n attributeName: string;\n }\n ) => any;\n};\n\nconst transforms: Transforms = {\n password(value, context) {\n const { attribute } = context;\n\n if (attribute.type !== 'password') {\n throw new Error('Invalid attribute type');\n }\n\n if (!isString(value) && !(value instanceof Buffer)) {\n return value;\n }\n\n const rounds = toNumber(getOr(10, 'encryption.rounds', attribute));\n\n return bcrypt.hashSync(value.toString(), rounds);\n },\n};\n\nexport default transforms;\n"],"names":["transforms","password","value","context","attribute","type","Error","isString","Buffer","rounds","toNumber","getOr","bcrypt","hashSync","toString"],"mappings":";;;AAcA,MAAMA,UAAAA,GAAyB;IAC7BC,QAAAA,CAAAA,CAASC,KAAK,EAAEC,OAAO,EAAA;QACrB,MAAM,EAAEC,SAAS,EAAE,GAAGD,OAAAA;QAEtB,IAAIC,SAAAA,CAAUC,IAAI,KAAK,UAAA,EAAY;AACjC,YAAA,MAAM,IAAIC,KAAAA,CAAM,wBAAA,CAAA;AAClB,QAAA;AAEA,QAAA,IAAI,CAACC,QAAAA,CAASL,KAAAA,CAAAA,IAAU,EAAEA,KAAAA,YAAiBM,MAAK,CAAA,EAAI;YAClD,OAAON,KAAAA;AACT,QAAA;AAEA,QAAA,MAAMO,MAAAA,GAASC,QAAAA,CAASC,KAAAA,CAAM,EAAA,EAAI,mBAAA,EAAqBP,SAAAA,CAAAA,CAAAA;AAEvD,QAAA,OAAOQ,MAAAA,CAAOC,QAAQ,CAACX,KAAAA,CAAMY,QAAQ,EAAA,EAAIL,MAAAA,CAAAA;AAC3C,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"transforms.mjs","sources":["../../../../src/services/document-service/attributes/transforms.ts"],"sourcesContent":["import { get, isString, toNumber } from 'lodash';\nimport type { Schema } from '@strapi/types';\nimport bcrypt from 'bcryptjs';\n\ntype Transforms = {\n [TKind in Schema.Attribute.Kind]?: (\n value: unknown,\n context: {\n attribute: Schema.Attribute.AnyAttribute;\n attributeName: string;\n }\n ) => any;\n};\n\nconst transforms: Transforms = {\n password(value, context) {\n const { attribute } = context;\n\n if (attribute.type !== 'password') {\n throw new Error('Invalid attribute type');\n }\n\n if (!isString(value) && !(value instanceof Buffer)) {\n return value;\n }\n\n const rounds = toNumber(get(attribute, 'encryption.rounds', 10));\n\n return bcrypt.hashSync(value.toString(), rounds);\n },\n};\n\nexport default transforms;\n"],"names":["transforms","password","value","context","attribute","type","Error","isString","Buffer","rounds","toNumber","get","bcrypt","hashSync","toString"],"mappings":";;;AAcA,MAAMA,UAAAA,GAAyB;IAC7BC,QAAAA,CAAAA,CAASC,KAAK,EAAEC,OAAO,EAAA;QACrB,MAAM,EAAEC,SAAS,EAAE,GAAGD,OAAAA;QAEtB,IAAIC,SAAAA,CAAUC,IAAI,KAAK,UAAA,EAAY;AACjC,YAAA,MAAM,IAAIC,KAAAA,CAAM,wBAAA,CAAA;AAClB,QAAA;AAEA,QAAA,IAAI,CAACC,QAAAA,CAASL,KAAAA,CAAAA,IAAU,EAAEA,KAAAA,YAAiBM,MAAK,CAAA,EAAI;YAClD,OAAON,KAAAA;AACT,QAAA;AAEA,QAAA,MAAMO,MAAAA,GAASC,QAAAA,CAASC,GAAAA,CAAIP,SAAAA,EAAW,mBAAA,EAAqB,EAAA,CAAA,CAAA;AAE5D,QAAA,OAAOQ,MAAAA,CAAOC,QAAQ,CAACX,KAAAA,CAAMY,QAAQ,EAAA,EAAIL,MAAAA,CAAAA;AAC3C,IAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/components.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/components.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var _ = require('lodash');
4
- var fp = require('lodash/fp');
5
4
  var strapiUtils = require('@strapi/utils');
6
5
  var transformContentTypesToModels = require('../../utils/transform-content-types-to-models.js');
7
6
 
@@ -9,10 +8,10 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
8
 
10
9
  var ___default = /*#__PURE__*/_interopDefault(_);
11
10
 
12
- const omitComponentData = fp.curry((schema, data)=>{
11
+ const omitComponentData = _.curry((schema, data)=>{
13
12
  const { attributes } = schema;
14
13
  const componentAttributes = Object.keys(attributes).filter((attributeName)=>strapiUtils.contentTypes.isComponentAttribute(attributes[attributeName]));
15
- return fp.omit(componentAttributes, data);
14
+ return _.omit(data, componentAttributes);
16
15
  });
17
16
  // NOTE: we could generalize the logic to allow CRUD of relation directly in the DB layer
18
17
  const createComponents = async (uid, data)=>{
@@ -21,7 +20,7 @@ const createComponents = async (uid, data)=>{
21
20
  const attributeNames = Object.keys(attributes);
22
21
  for (const attributeName of attributeNames){
23
22
  const attribute = attributes[attributeName];
24
- if (!fp.has(attributeName, data) || !strapiUtils.contentTypes.isComponentAttribute(attribute)) {
23
+ if (!_.has(data, attributeName) || !strapiUtils.contentTypes.isComponentAttribute(attribute)) {
25
24
  continue;
26
25
  }
27
26
  if (attribute.type === 'component') {
@@ -93,7 +92,7 @@ const getComponents = async (uid, entity)=>{
93
92
  const componentBody = {};
94
93
  for (const attributeName of Object.keys(attributes)){
95
94
  const attribute = attributes[attributeName];
96
- if (!fp.has(attributeName, data)) {
95
+ if (!_.has(data, attributeName)) {
97
96
  continue;
98
97
  }
99
98
  if (attribute.type === 'component') {
@@ -154,8 +153,8 @@ const pickStringifiedId = ({ id })=>{
154
153
  };
155
154
  const deleteOldComponents = async (uid, componentUID, entityToUpdate, attributeName, componentValue)=>{
156
155
  const previousValue = await strapi.db.query(uid).load(entityToUpdate, attributeName);
157
- const idsToKeep = ___default.default.castArray(componentValue).filter(fp.has('id')).map(pickStringifiedId);
158
- const allIds = ___default.default.castArray(previousValue).filter(fp.has('id')).map(pickStringifiedId);
156
+ const idsToKeep = ___default.default.castArray(componentValue).filter((value)=>_.has(value, 'id')).map(pickStringifiedId);
157
+ const allIds = ___default.default.castArray(previousValue).filter((value)=>_.has(value, 'id')).map(pickStringifiedId);
159
158
  idsToKeep.forEach((id)=>{
160
159
  if (!allIds.includes(id)) {
161
160
  throw new strapiUtils.errors.ApplicationError(`Some of the provided components in ${attributeName} are not related to the entity`);
@@ -172,11 +171,11 @@ const deleteOldComponents = async (uid, componentUID, entityToUpdate, attributeN
172
171
  };
173
172
  const deleteOldDZComponents = async (uid, entityToUpdate, attributeName, dynamiczoneValues)=>{
174
173
  const previousValue = await strapi.db.query(uid).load(entityToUpdate, attributeName);
175
- const idsToKeep = ___default.default.castArray(dynamiczoneValues).filter(fp.has('id')).map((v)=>({
174
+ const idsToKeep = ___default.default.castArray(dynamiczoneValues).filter((value)=>_.has(value, 'id')).map((v)=>({
176
175
  id: pickStringifiedId(v),
177
176
  __component: v.__component
178
177
  }));
179
- const allIds = ___default.default.castArray(previousValue).filter(fp.has('id')).map((v)=>({
178
+ const allIds = ___default.default.castArray(previousValue).filter((value)=>_.has(value, 'id')).map((v)=>({
180
179
  id: pickStringifiedId(v),
181
180
  __component: v.__component
182
181
  }));
@@ -238,10 +237,10 @@ const deleteComponents = async (uid, entityToDelete, { loadComponents = true } =
238
237
  const createComponent = async (uid, data)=>{
239
238
  const schema = strapi.getModel(uid);
240
239
  const componentData = await createComponents(uid, data);
241
- const transform = fp.pipe(// Make sure we don't save the component with a pre-defined ID
242
- fp.omit('id'), assignComponentData(schema, componentData));
240
+ // Make sure we don't save the component with a pre-defined ID.
241
+ const entryData = assignComponentData(schema, componentData, _.omit(data, 'id'));
243
242
  return strapi.db.query(uid).create({
244
- data: transform(data)
243
+ data: entryData
245
244
  });
246
245
  };
247
246
  // components can have nested compos so this must be recursive
@@ -277,8 +276,8 @@ const deleteComponent = async (uid, componentToDelete)=>{
277
276
  }
278
277
  });
279
278
  };
280
- const assignComponentData = fp.curry((schema, componentData, data)=>{
281
- return fp.pipe(omitComponentData(schema), fp.assign(componentData))(data);
279
+ const assignComponentData = _.curry((schema, componentData, data)=>{
280
+ return _.assign({}, componentData, omitComponentData(schema, data));
282
281
  });
283
282
  /** *************************
284
283
  Component relation handling for document operations
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sources":["../../../src/services/document-service/components.ts"],"sourcesContent":["import _ from 'lodash';\nimport { has, omit, pipe, assign, curry } from 'lodash/fp';\nimport type { Utils, UID, Schema, Data, Modules } from '@strapi/types';\nimport { contentTypes as contentTypesUtils, async, errors } from '@strapi/utils';\nimport {\n getComponentJoinTableName,\n getComponentJoinColumnEntityName,\n getComponentJoinColumnInverseName,\n getComponentTypeColumn,\n} from '../../utils/transform-content-types-to-models';\n\n// type aliases for readability\ntype Input<T extends UID.Schema> = Modules.Documents.Params.Data.Input<T>;\n\ntype LoadedComponents<TUID extends UID.Schema> = Data.Entity<\n TUID,\n Schema.AttributeNamesByType<TUID, 'component' | 'dynamiczone'>\n>;\n\ntype SingleComponentValue = Schema.Attribute.ComponentValue<UID.Component, false>;\ntype RepeatableComponentValue = Schema.Attribute.ComponentValue<UID.Component, true>;\n\ntype ComponentValue = SingleComponentValue | RepeatableComponentValue;\n\ntype DynamicZoneValue = Schema.Attribute.DynamicZoneValue<UID.Component[]>;\n\ntype ComponentBody = {\n [key: string]: ComponentValue | DynamicZoneValue;\n};\n\nconst omitComponentData = curry(\n (schema: Schema.Schema, data: Input<UID.Schema>): Partial<Input<UID.Schema>> => {\n const { attributes } = schema;\n const componentAttributes = Object.keys(attributes).filter((attributeName) =>\n contentTypesUtils.isComponentAttribute(attributes[attributeName])\n );\n\n return omit(componentAttributes, data);\n }\n);\n\n// NOTE: we could generalize the logic to allow CRUD of relation directly in the DB layer\nconst createComponents = async <TUID extends UID.Schema, TData extends Input<TUID>>(\n uid: TUID,\n data: TData\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const componentBody: ComponentBody = {};\n\n const attributeNames = Object.keys(attributes);\n\n for (const attributeName of attributeNames) {\n const attribute = attributes[attributeName];\n\n if (!has(attributeName, data) || !contentTypesUtils.isComponentAttribute(attribute)) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID, repeatable = false } = attribute;\n\n const componentValue = data[attributeName as keyof TData];\n\n if (componentValue === null) {\n continue;\n }\n\n if (repeatable === true) {\n if (!Array.isArray(componentValue)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n const components: RepeatableComponentValue = await async.map(componentValue, (value: any) =>\n createComponent(componentUID, value)\n );\n\n componentBody[attributeName] = components.map(({ id }) => {\n return {\n id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n });\n } else {\n const component = await createComponent(\n componentUID,\n componentValue as Input<UID.Component>\n );\n\n componentBody[attributeName] = {\n id: component.id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n }\n\n continue;\n }\n\n if (attribute.type === 'dynamiczone') {\n const dynamiczoneValues = data[\n attributeName as keyof TData\n ] as Modules.EntityService.Params.Attribute.GetValue<Schema.Attribute.DynamicZone>;\n\n if (!Array.isArray(dynamiczoneValues)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n const createDynamicZoneComponents = async (\n value: Utils.Array.Values<typeof dynamiczoneValues>\n ) => {\n const { id } = await createComponent(value.__component, value);\n return {\n id,\n __component: value.__component,\n __pivot: {\n field: attributeName,\n },\n };\n };\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n componentBody[attributeName] = await async.map(\n dynamiczoneValues,\n createDynamicZoneComponents\n );\n\n continue;\n }\n }\n\n return componentBody;\n};\n\nconst getComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n entity: { id: Modules.EntityService.Params.Attribute.ID }\n): Promise<LoadedComponents<TUID>> => {\n const componentAttributes = contentTypesUtils.getComponentAttributes(strapi.getModel(uid));\n\n if (_.isEmpty(componentAttributes)) {\n return {} as LoadedComponents<TUID>;\n }\n\n return strapi.db.query(uid).load(entity, componentAttributes) as Promise<LoadedComponents<TUID>>;\n};\n\n/*\n delete old components\n create or update\n*/\nconst updateComponents = async <TUID extends UID.Schema, TData extends Partial<Input<TUID>>>(\n uid: TUID,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n data: TData\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const componentBody: ComponentBody = {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (!has(attributeName, data)) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID, repeatable = false } = attribute;\n\n const componentValue = data[attributeName as keyof TData] as ComponentValue;\n await deleteOldComponents(uid, componentUID, entityToUpdate, attributeName, componentValue);\n\n if (repeatable === true) {\n if (!Array.isArray(componentValue)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n const components: RepeatableComponentValue = await async.map(componentValue, (value: any) =>\n updateOrCreateComponent(componentUID, value)\n );\n\n componentBody[attributeName] = components.filter(_.negate(_.isNil)).map(({ id }) => {\n return {\n id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n });\n } else {\n const component = await updateOrCreateComponent(componentUID, componentValue);\n componentBody[attributeName] = component && {\n id: component.id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n }\n } else if (attribute.type === 'dynamiczone') {\n const dynamiczoneValues = data[attributeName as keyof TData] as DynamicZoneValue;\n\n await deleteOldDZComponents(uid, entityToUpdate, attributeName, dynamiczoneValues);\n\n if (!Array.isArray(dynamiczoneValues)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n componentBody[attributeName] = await async.map(dynamiczoneValues, async (value: any) => {\n const { id } = await updateOrCreateComponent(value.__component, value);\n\n return {\n id,\n __component: value.__component,\n __pivot: {\n field: attributeName,\n },\n };\n });\n }\n }\n\n return componentBody;\n};\n\nconst pickStringifiedId = ({\n id,\n}: {\n id: Modules.EntityService.Params.Attribute.ID;\n}): Modules.EntityService.Params.Attribute.ID & string => {\n if (typeof id === 'string') {\n return id;\n }\n\n return `${id}`;\n};\n\nconst deleteOldComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n componentUID: UID.Component,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n attributeName: string,\n componentValue: ComponentValue\n) => {\n const previousValue = (await strapi.db\n .query(uid)\n .load(entityToUpdate, attributeName)) as ComponentValue;\n const idsToKeep = _.castArray(componentValue).filter(has('id')).map(pickStringifiedId);\n const allIds = _.castArray(previousValue).filter(has('id')).map(pickStringifiedId);\n\n idsToKeep.forEach((id) => {\n if (!allIds.includes(id)) {\n throw new errors.ApplicationError(\n `Some of the provided components in ${attributeName} are not related to the entity`\n );\n }\n });\n\n const idsToDelete = _.difference(allIds, idsToKeep);\n\n if (idsToDelete.length > 0) {\n for (const idToDelete of idsToDelete) {\n await deleteComponent(componentUID, { id: idToDelete });\n }\n }\n};\n\nconst deleteOldDZComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n attributeName: string,\n dynamiczoneValues: DynamicZoneValue\n) => {\n const previousValue = (await strapi.db\n .query(uid)\n .load(entityToUpdate, attributeName)) as DynamicZoneValue;\n\n const idsToKeep = _.castArray(dynamiczoneValues)\n .filter(has('id'))\n .map((v) => ({\n id: pickStringifiedId(v),\n __component: v.__component,\n }));\n\n const allIds = _.castArray(previousValue)\n .filter(has('id'))\n .map((v) => ({\n id: pickStringifiedId(v),\n __component: v.__component,\n }));\n\n idsToKeep.forEach(({ id, __component: componentUID }) => {\n if (!allIds.find((el) => el.id === id && el.__component === componentUID)) {\n const err = new Error(\n `Some of the provided components in ${attributeName} are not related to the entity`\n );\n\n Object.assign(err, { status: 400 });\n throw err;\n }\n });\n\n type IdsToDelete = DynamicZoneValue;\n\n const idsToDelete = allIds.reduce((acc, { id, __component: componentUID }) => {\n if (!idsToKeep.find((el) => el.id === id && el.__component === componentUID)) {\n acc.push({ id, __component: componentUID });\n }\n\n return acc;\n }, [] as IdsToDelete);\n\n if (idsToDelete.length > 0) {\n for (const idToDelete of idsToDelete) {\n const { id, __component: componentUID } = idToDelete;\n await deleteComponent(componentUID, { id });\n }\n }\n};\n\nconst deleteComponents = async <TUID extends UID.Schema, TEntity extends Data.Entity<TUID>>(\n uid: TUID,\n entityToDelete: TEntity,\n { loadComponents = true } = {}\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const attributeNames = Object.keys(attributes);\n\n for (const attributeName of attributeNames) {\n const attribute = attributes[attributeName];\n\n if (attribute.type === 'component' || attribute.type === 'dynamiczone') {\n let value;\n\n if (loadComponents) {\n value = await strapi.db.query(uid).load(entityToDelete, attributeName);\n } else {\n value = entityToDelete[attributeName as keyof TEntity];\n }\n\n if (!value) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID } = attribute;\n await async.map(_.castArray(value), (subValue: any) =>\n deleteComponent(componentUID, subValue)\n );\n } else {\n await async.map(_.castArray(value), (subValue: any) =>\n deleteComponent(subValue.__component, subValue)\n );\n }\n\n continue;\n }\n }\n};\n\n/** *************************\n Component queries\n************************** */\n\n// components can have nested compos so this must be recursive\nconst createComponent = async <TUID extends UID.Component>(\n uid: TUID,\n data: Input<TUID>\n): Promise<Data.Component<TUID>> => {\n const schema = strapi.getModel(uid);\n\n const componentData = await createComponents(uid, data);\n\n const transform = pipe(\n // Make sure we don't save the component with a pre-defined ID\n omit('id'),\n assignComponentData(schema, componentData)\n );\n\n return strapi.db.query(uid).create({ data: transform(data) });\n};\n\n// components can have nested compos so this must be recursive\nconst updateComponent = async <TUID extends UID.Component>(\n uid: TUID,\n componentToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n data: Input<TUID>\n) => {\n const schema = strapi.getModel(uid);\n\n const componentData = await updateComponents(uid, componentToUpdate, data);\n\n return strapi.db.query(uid).update({\n where: {\n id: componentToUpdate.id,\n },\n data: assignComponentData(schema, componentData, data),\n });\n};\n\nconst updateOrCreateComponent = <TUID extends UID.Component>(\n componentUID: TUID,\n value: Input<TUID>\n) => {\n if (value === null) {\n return null;\n }\n\n // update\n if ('id' in value && typeof value.id !== 'undefined') {\n // TODO: verify the compo is associated with the entity\n return updateComponent(componentUID, { id: value.id }, value);\n }\n\n // create\n return createComponent(componentUID, value);\n};\n\nconst deleteComponent = async <TUID extends UID.Component>(\n uid: TUID,\n componentToDelete: Data.Component<TUID>\n) => {\n await deleteComponents(uid, componentToDelete);\n await strapi.db.query(uid).delete({ where: { id: componentToDelete.id } });\n};\n\nconst assignComponentData = curry(\n (schema: Schema.Schema, componentData: ComponentBody, data: Input<UID.Schema>) => {\n return pipe(omitComponentData(schema), assign(componentData))(data);\n }\n);\n\n/** *************************\n Component relation handling for document operations\n************************** */\n\n/**\n * Find the parent entry of a component instance.\n *\n * Given a component model, a specific component instance id, and the list of\n * possible parent content types (those that can embed this component),\n * this function checks each parent's *_cmps join table to see if the component\n * instance is linked to a parent entity.\n *\n * - Returns the parent uid, parent table name, and parent id if found.\n * - Returns null if no parent relationship exists.\n */\nconst findComponentParent = async (\n componentSchema: Schema.Component,\n componentId: number | string,\n parentSchemasForComponent: (Schema.ContentType | Schema.Component)[],\n opts?: { trx?: any }\n): Promise<{ uid: string; table: string; parentId: number | string } | null> => {\n if (!componentSchema?.uid) return null;\n\n const schemaBuilder = strapi.db.getSchemaConnection(opts?.trx);\n const withTrx = (qb: any) => (opts?.trx ? qb.transacting(opts.trx) : qb);\n\n for (const parent of parentSchemasForComponent) {\n if (!parent.collectionName) continue;\n\n // Use the exact same functions that create the tables\n const identifiers = strapi.db.metadata.identifiers;\n const joinTableName = getComponentJoinTableName(parent.collectionName, identifiers);\n\n try {\n const tableExists = await schemaBuilder.hasTable(joinTableName);\n if (!tableExists) continue;\n\n // Use the exact same functions that create the columns\n const entityIdColumn = getComponentJoinColumnEntityName(identifiers);\n const componentIdColumn = getComponentJoinColumnInverseName(identifiers);\n const componentTypeColumn = getComponentTypeColumn(identifiers);\n\n const parentRow = await withTrx(strapi.db.getConnection(joinTableName))\n .where({\n [componentIdColumn]: componentId,\n [componentTypeColumn]: componentSchema.uid,\n })\n .first(entityIdColumn);\n\n if (parentRow) {\n return {\n uid: parent.uid,\n table: parent.collectionName,\n parentId: parentRow[entityIdColumn],\n };\n }\n } catch {\n continue;\n }\n }\n\n return null;\n};\n\n/**\n * Finds content types that contain the given component and have draft & publish enabled.\n */\nconst getParentSchemasForComponent = (\n componentSchema: Schema.Component\n): Array<Schema.ContentType | Schema.Component> => {\n // Find direct parents in contentTypes and components\n return [...Object.values(strapi.contentTypes), ...Object.values(strapi.components)].filter(\n (schema: any) => {\n if (!schema?.attributes) return false;\n return Object.values(schema.attributes).some((attr: any) => {\n return (\n (attr.type === 'component' && attr.component === componentSchema.uid) ||\n (attr.type === 'dynamiczone' && attr.components?.includes(componentSchema.uid))\n );\n });\n }\n );\n};\n\n/**\n * Determines if a component relation should be propagated to a new document version\n * when a document with draft and publish is updated.\n */\nconst shouldPropagateComponentRelationToNewVersion = async (\n componentRelation: Record<string, any>,\n componentSchema: Schema.Component,\n parentSchemasForComponent: (Schema.ContentType | Schema.Component)[],\n trx: any\n): Promise<boolean> => {\n // Get the component ID column name using the actual component model name\n const componentIdColumn = strapi.db.metadata.identifiers.getJoinColumnAttributeIdName(\n _.snakeCase(componentSchema.modelName)\n );\n\n const componentId = componentRelation[componentIdColumn] ?? componentRelation.parentId;\n\n const parent = await findComponentParent(\n componentSchema,\n componentId,\n parentSchemasForComponent,\n { trx }\n );\n\n // Keep relation if component has no parent entry\n if (!parent?.uid) {\n return true;\n }\n\n if (strapi.components[parent.uid as UID.Component]) {\n // If the parent is a component, we need to check its parents recursively\n const parentComponentSchema = strapi.components[parent.uid as UID.Component];\n const grandParentSchemas = getParentSchemasForComponent(parentComponentSchema);\n return shouldPropagateComponentRelationToNewVersion(\n parent,\n parentComponentSchema,\n grandParentSchemas,\n trx\n );\n }\n\n const parentContentType = strapi.contentTypes[parent.uid as UID.ContentType];\n\n // Keep relation if parent doesn't have draft & publish enabled\n if (!parentContentType?.options?.draftAndPublish) {\n return true;\n }\n\n // Discard relation if parent has draft & publish enabled\n return false;\n};\n\n/**\n * Creates a filter function for component relations that can be passed to the generic\n * unidirectional relations utility\n */\nconst createComponentRelationFilter = () => {\n return async (\n relation: Record<string, any>,\n model: Schema.Component | Schema.ContentType,\n trx: any\n ): Promise<boolean> => {\n // Only apply component-specific filtering for components\n if (model.modelType !== 'component') {\n return true;\n }\n\n const componentSchema = model as Schema.Component;\n const parentSchemas = getParentSchemasForComponent(componentSchema);\n\n // Exit if no draft & publish parent types exist\n if (parentSchemas.length === 0) {\n return true;\n }\n\n return shouldPropagateComponentRelationToNewVersion(\n relation,\n componentSchema,\n parentSchemas,\n trx\n );\n };\n};\n\nexport {\n omitComponentData,\n assignComponentData,\n getComponents,\n createComponents,\n updateComponents,\n deleteComponents,\n deleteComponent,\n createComponentRelationFilter,\n findComponentParent,\n getParentSchemasForComponent,\n};\n"],"names":["omitComponentData","curry","schema","data","attributes","componentAttributes","Object","keys","filter","attributeName","contentTypesUtils","isComponentAttribute","omit","createComponents","uid","strapi","getModel","componentBody","attributeNames","attribute","has","type","component","componentUID","repeatable","componentValue","Array","isArray","Error","components","async","map","value","createComponent","id","__pivot","field","component_type","dynamiczoneValues","createDynamicZoneComponents","__component","getComponents","entity","getComponentAttributes","_","isEmpty","db","query","load","updateComponents","entityToUpdate","deleteOldComponents","updateOrCreateComponent","negate","isNil","deleteOldDZComponents","pickStringifiedId","previousValue","idsToKeep","castArray","allIds","forEach","includes","errors","ApplicationError","idsToDelete","difference","length","idToDelete","deleteComponent","v","find","el","err","assign","status","reduce","acc","push","deleteComponents","entityToDelete","loadComponents","subValue","componentData","transform","pipe","assignComponentData","create","updateComponent","componentToUpdate","update","where","componentToDelete","delete","findComponentParent","componentSchema","componentId","parentSchemasForComponent","opts","schemaBuilder","getSchemaConnection","trx","withTrx","qb","transacting","parent","collectionName","identifiers","metadata","joinTableName","getComponentJoinTableName","tableExists","hasTable","entityIdColumn","getComponentJoinColumnEntityName","componentIdColumn","getComponentJoinColumnInverseName","componentTypeColumn","getComponentTypeColumn","parentRow","getConnection","first","table","parentId","getParentSchemasForComponent","values","contentTypes","some","attr","shouldPropagateComponentRelationToNewVersion","componentRelation","getJoinColumnAttributeIdName","snakeCase","modelName","parentComponentSchema","grandParentSchemas","parentContentType","options","draftAndPublish","createComponentRelationFilter","relation","model","modelType","parentSchemas"],"mappings":"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"}
1
+ {"version":3,"file":"components.js","sources":["../../../src/services/document-service/components.ts"],"sourcesContent":["import _, { assign, curry, has, omit } from 'lodash';\nimport type { Utils, UID, Schema, Data, Modules } from '@strapi/types';\nimport { contentTypes as contentTypesUtils, async, errors } from '@strapi/utils';\nimport {\n getComponentJoinTableName,\n getComponentJoinColumnEntityName,\n getComponentJoinColumnInverseName,\n getComponentTypeColumn,\n} from '../../utils/transform-content-types-to-models';\n\n// type aliases for readability\ntype Input<T extends UID.Schema> = Modules.Documents.Params.Data.Input<T>;\n\ntype LoadedComponents<TUID extends UID.Schema> = Data.Entity<\n TUID,\n Schema.AttributeNamesByType<TUID, 'component' | 'dynamiczone'>\n>;\n\ntype SingleComponentValue = Schema.Attribute.ComponentValue<UID.Component, false>;\ntype RepeatableComponentValue = Schema.Attribute.ComponentValue<UID.Component, true>;\n\ntype ComponentValue = SingleComponentValue | RepeatableComponentValue;\n\ntype DynamicZoneValue = Schema.Attribute.DynamicZoneValue<UID.Component[]>;\n\ntype ComponentBody = {\n [key: string]: ComponentValue | DynamicZoneValue;\n};\n\nconst omitComponentData = curry(\n (schema: Schema.Schema, data: Input<UID.Schema>): Partial<Input<UID.Schema>> => {\n const { attributes } = schema;\n const componentAttributes = Object.keys(attributes).filter((attributeName) =>\n contentTypesUtils.isComponentAttribute(attributes[attributeName])\n );\n\n return omit(data, componentAttributes);\n }\n);\n\n// NOTE: we could generalize the logic to allow CRUD of relation directly in the DB layer\nconst createComponents = async <TUID extends UID.Schema, TData extends Input<TUID>>(\n uid: TUID,\n data: TData\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const componentBody: ComponentBody = {};\n\n const attributeNames = Object.keys(attributes);\n\n for (const attributeName of attributeNames) {\n const attribute = attributes[attributeName];\n\n if (!has(data, attributeName) || !contentTypesUtils.isComponentAttribute(attribute)) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID, repeatable = false } = attribute;\n\n const componentValue = data[attributeName as keyof TData];\n\n if (componentValue === null) {\n continue;\n }\n\n if (repeatable === true) {\n if (!Array.isArray(componentValue)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n const components: RepeatableComponentValue = await async.map(componentValue, (value: any) =>\n createComponent(componentUID, value)\n );\n\n componentBody[attributeName] = components.map(({ id }) => {\n return {\n id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n });\n } else {\n const component = await createComponent(\n componentUID,\n componentValue as Input<UID.Component>\n );\n\n componentBody[attributeName] = {\n id: component.id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n }\n\n continue;\n }\n\n if (attribute.type === 'dynamiczone') {\n const dynamiczoneValues = data[\n attributeName as keyof TData\n ] as Modules.EntityService.Params.Attribute.GetValue<Schema.Attribute.DynamicZone>;\n\n if (!Array.isArray(dynamiczoneValues)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n const createDynamicZoneComponents = async (\n value: Utils.Array.Values<typeof dynamiczoneValues>\n ) => {\n const { id } = await createComponent(value.__component, value);\n return {\n id,\n __component: value.__component,\n __pivot: {\n field: attributeName,\n },\n };\n };\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n componentBody[attributeName] = await async.map(\n dynamiczoneValues,\n createDynamicZoneComponents\n );\n\n continue;\n }\n }\n\n return componentBody;\n};\n\nconst getComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n entity: { id: Modules.EntityService.Params.Attribute.ID }\n): Promise<LoadedComponents<TUID>> => {\n const componentAttributes = contentTypesUtils.getComponentAttributes(strapi.getModel(uid));\n\n if (_.isEmpty(componentAttributes)) {\n return {} as LoadedComponents<TUID>;\n }\n\n return strapi.db.query(uid).load(entity, componentAttributes) as Promise<LoadedComponents<TUID>>;\n};\n\n/*\n delete old components\n create or update\n*/\nconst updateComponents = async <TUID extends UID.Schema, TData extends Partial<Input<TUID>>>(\n uid: TUID,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n data: TData\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const componentBody: ComponentBody = {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (!has(data, attributeName)) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID, repeatable = false } = attribute;\n\n const componentValue = data[attributeName as keyof TData] as ComponentValue;\n await deleteOldComponents(uid, componentUID, entityToUpdate, attributeName, componentValue);\n\n if (repeatable === true) {\n if (!Array.isArray(componentValue)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n const components: RepeatableComponentValue = await async.map(componentValue, (value: any) =>\n updateOrCreateComponent(componentUID, value)\n );\n\n componentBody[attributeName] = components.filter(_.negate(_.isNil)).map(({ id }) => {\n return {\n id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n });\n } else {\n const component = await updateOrCreateComponent(componentUID, componentValue);\n componentBody[attributeName] = component && {\n id: component.id,\n __pivot: {\n field: attributeName,\n component_type: componentUID,\n },\n };\n }\n } else if (attribute.type === 'dynamiczone') {\n const dynamiczoneValues = data[attributeName as keyof TData] as DynamicZoneValue;\n\n await deleteOldDZComponents(uid, entityToUpdate, attributeName, dynamiczoneValues);\n\n if (!Array.isArray(dynamiczoneValues)) {\n throw new Error('Expected an array to create repeatable component');\n }\n\n // MySQL/MariaDB can cause deadlocks here if concurrency higher than 1\n componentBody[attributeName] = await async.map(dynamiczoneValues, async (value: any) => {\n const { id } = await updateOrCreateComponent(value.__component, value);\n\n return {\n id,\n __component: value.__component,\n __pivot: {\n field: attributeName,\n },\n };\n });\n }\n }\n\n return componentBody;\n};\n\nconst pickStringifiedId = ({\n id,\n}: {\n id: Modules.EntityService.Params.Attribute.ID;\n}): Modules.EntityService.Params.Attribute.ID & string => {\n if (typeof id === 'string') {\n return id;\n }\n\n return `${id}`;\n};\n\nconst deleteOldComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n componentUID: UID.Component,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n attributeName: string,\n componentValue: ComponentValue\n) => {\n const previousValue = (await strapi.db\n .query(uid)\n .load(entityToUpdate, attributeName)) as ComponentValue;\n const idsToKeep = _.castArray(componentValue)\n .filter((value) => has(value, 'id'))\n .map(pickStringifiedId);\n const allIds = _.castArray(previousValue)\n .filter((value) => has(value, 'id'))\n .map(pickStringifiedId);\n\n idsToKeep.forEach((id) => {\n if (!allIds.includes(id)) {\n throw new errors.ApplicationError(\n `Some of the provided components in ${attributeName} are not related to the entity`\n );\n }\n });\n\n const idsToDelete = _.difference(allIds, idsToKeep);\n\n if (idsToDelete.length > 0) {\n for (const idToDelete of idsToDelete) {\n await deleteComponent(componentUID, { id: idToDelete });\n }\n }\n};\n\nconst deleteOldDZComponents = async <TUID extends UID.Schema>(\n uid: TUID,\n entityToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n attributeName: string,\n dynamiczoneValues: DynamicZoneValue\n) => {\n const previousValue = (await strapi.db\n .query(uid)\n .load(entityToUpdate, attributeName)) as DynamicZoneValue;\n\n const idsToKeep = _.castArray(dynamiczoneValues)\n .filter((value) => has(value, 'id'))\n .map((v) => ({\n id: pickStringifiedId(v),\n __component: v.__component,\n }));\n\n const allIds = _.castArray(previousValue)\n .filter((value) => has(value, 'id'))\n .map((v) => ({\n id: pickStringifiedId(v),\n __component: v.__component,\n }));\n\n idsToKeep.forEach(({ id, __component: componentUID }) => {\n if (!allIds.find((el) => el.id === id && el.__component === componentUID)) {\n const err = new Error(\n `Some of the provided components in ${attributeName} are not related to the entity`\n );\n\n Object.assign(err, { status: 400 });\n throw err;\n }\n });\n\n type IdsToDelete = DynamicZoneValue;\n\n const idsToDelete = allIds.reduce((acc, { id, __component: componentUID }) => {\n if (!idsToKeep.find((el) => el.id === id && el.__component === componentUID)) {\n acc.push({ id, __component: componentUID });\n }\n\n return acc;\n }, [] as IdsToDelete);\n\n if (idsToDelete.length > 0) {\n for (const idToDelete of idsToDelete) {\n const { id, __component: componentUID } = idToDelete;\n await deleteComponent(componentUID, { id });\n }\n }\n};\n\nconst deleteComponents = async <TUID extends UID.Schema, TEntity extends Data.Entity<TUID>>(\n uid: TUID,\n entityToDelete: TEntity,\n { loadComponents = true } = {}\n) => {\n const { attributes = {} } = strapi.getModel(uid);\n\n const attributeNames = Object.keys(attributes);\n\n for (const attributeName of attributeNames) {\n const attribute = attributes[attributeName];\n\n if (attribute.type === 'component' || attribute.type === 'dynamiczone') {\n let value;\n\n if (loadComponents) {\n value = await strapi.db.query(uid).load(entityToDelete, attributeName);\n } else {\n value = entityToDelete[attributeName as keyof TEntity];\n }\n\n if (!value) {\n continue;\n }\n\n if (attribute.type === 'component') {\n const { component: componentUID } = attribute;\n await async.map(_.castArray(value), (subValue: any) =>\n deleteComponent(componentUID, subValue)\n );\n } else {\n await async.map(_.castArray(value), (subValue: any) =>\n deleteComponent(subValue.__component, subValue)\n );\n }\n\n continue;\n }\n }\n};\n\n/** *************************\n Component queries\n************************** */\n\n// components can have nested compos so this must be recursive\nconst createComponent = async <TUID extends UID.Component>(\n uid: TUID,\n data: Input<TUID>\n): Promise<Data.Component<TUID>> => {\n const schema = strapi.getModel(uid);\n\n const componentData = await createComponents(uid, data);\n\n // Make sure we don't save the component with a pre-defined ID.\n const entryData = assignComponentData(schema, componentData, omit(data, 'id'));\n\n return strapi.db.query(uid).create({ data: entryData });\n};\n\n// components can have nested compos so this must be recursive\nconst updateComponent = async <TUID extends UID.Component>(\n uid: TUID,\n componentToUpdate: { id: Modules.EntityService.Params.Attribute.ID },\n data: Input<TUID>\n) => {\n const schema = strapi.getModel(uid);\n\n const componentData = await updateComponents(uid, componentToUpdate, data);\n\n return strapi.db.query(uid).update({\n where: {\n id: componentToUpdate.id,\n },\n data: assignComponentData(schema, componentData, data),\n });\n};\n\nconst updateOrCreateComponent = <TUID extends UID.Component>(\n componentUID: TUID,\n value: Input<TUID>\n) => {\n if (value === null) {\n return null;\n }\n\n // update\n if ('id' in value && typeof value.id !== 'undefined') {\n // TODO: verify the compo is associated with the entity\n return updateComponent(componentUID, { id: value.id }, value);\n }\n\n // create\n return createComponent(componentUID, value);\n};\n\nconst deleteComponent = async <TUID extends UID.Component>(\n uid: TUID,\n componentToDelete: Data.Component<TUID>\n) => {\n await deleteComponents(uid, componentToDelete);\n await strapi.db.query(uid).delete({ where: { id: componentToDelete.id } });\n};\n\nconst assignComponentData = curry(\n (schema: Schema.Schema, componentData: ComponentBody, data: Input<UID.Schema>) => {\n return assign({}, componentData, omitComponentData(schema, data));\n }\n);\n\n/** *************************\n Component relation handling for document operations\n************************** */\n\n/**\n * Find the parent entry of a component instance.\n *\n * Given a component model, a specific component instance id, and the list of\n * possible parent content types (those that can embed this component),\n * this function checks each parent's *_cmps join table to see if the component\n * instance is linked to a parent entity.\n *\n * - Returns the parent uid, parent table name, and parent id if found.\n * - Returns null if no parent relationship exists.\n */\nconst findComponentParent = async (\n componentSchema: Schema.Component,\n componentId: number | string,\n parentSchemasForComponent: (Schema.ContentType | Schema.Component)[],\n opts?: { trx?: any }\n): Promise<{ uid: string; table: string; parentId: number | string } | null> => {\n if (!componentSchema?.uid) return null;\n\n const schemaBuilder = strapi.db.getSchemaConnection(opts?.trx);\n const withTrx = (qb: any) => (opts?.trx ? qb.transacting(opts.trx) : qb);\n\n for (const parent of parentSchemasForComponent) {\n if (!parent.collectionName) continue;\n\n // Use the exact same functions that create the tables\n const identifiers = strapi.db.metadata.identifiers;\n const joinTableName = getComponentJoinTableName(parent.collectionName, identifiers);\n\n try {\n const tableExists = await schemaBuilder.hasTable(joinTableName);\n if (!tableExists) continue;\n\n // Use the exact same functions that create the columns\n const entityIdColumn = getComponentJoinColumnEntityName(identifiers);\n const componentIdColumn = getComponentJoinColumnInverseName(identifiers);\n const componentTypeColumn = getComponentTypeColumn(identifiers);\n\n const parentRow = await withTrx(strapi.db.getConnection(joinTableName))\n .where({\n [componentIdColumn]: componentId,\n [componentTypeColumn]: componentSchema.uid,\n })\n .first(entityIdColumn);\n\n if (parentRow) {\n return {\n uid: parent.uid,\n table: parent.collectionName,\n parentId: parentRow[entityIdColumn],\n };\n }\n } catch {\n continue;\n }\n }\n\n return null;\n};\n\n/**\n * Finds content types that contain the given component and have draft & publish enabled.\n */\nconst getParentSchemasForComponent = (\n componentSchema: Schema.Component\n): Array<Schema.ContentType | Schema.Component> => {\n // Find direct parents in contentTypes and components\n return [...Object.values(strapi.contentTypes), ...Object.values(strapi.components)].filter(\n (schema: any) => {\n if (!schema?.attributes) return false;\n return Object.values(schema.attributes).some((attr: any) => {\n return (\n (attr.type === 'component' && attr.component === componentSchema.uid) ||\n (attr.type === 'dynamiczone' && attr.components?.includes(componentSchema.uid))\n );\n });\n }\n );\n};\n\n/**\n * Determines if a component relation should be propagated to a new document version\n * when a document with draft and publish is updated.\n */\nconst shouldPropagateComponentRelationToNewVersion = async (\n componentRelation: Record<string, any>,\n componentSchema: Schema.Component,\n parentSchemasForComponent: (Schema.ContentType | Schema.Component)[],\n trx: any\n): Promise<boolean> => {\n // Get the component ID column name using the actual component model name\n const componentIdColumn = strapi.db.metadata.identifiers.getJoinColumnAttributeIdName(\n _.snakeCase(componentSchema.modelName)\n );\n\n const componentId = componentRelation[componentIdColumn] ?? componentRelation.parentId;\n\n const parent = await findComponentParent(\n componentSchema,\n componentId,\n parentSchemasForComponent,\n { trx }\n );\n\n // Keep relation if component has no parent entry\n if (!parent?.uid) {\n return true;\n }\n\n if (strapi.components[parent.uid as UID.Component]) {\n // If the parent is a component, we need to check its parents recursively\n const parentComponentSchema = strapi.components[parent.uid as UID.Component];\n const grandParentSchemas = getParentSchemasForComponent(parentComponentSchema);\n return shouldPropagateComponentRelationToNewVersion(\n parent,\n parentComponentSchema,\n grandParentSchemas,\n trx\n );\n }\n\n const parentContentType = strapi.contentTypes[parent.uid as UID.ContentType];\n\n // Keep relation if parent doesn't have draft & publish enabled\n if (!parentContentType?.options?.draftAndPublish) {\n return true;\n }\n\n // Discard relation if parent has draft & publish enabled\n return false;\n};\n\n/**\n * Creates a filter function for component relations that can be passed to the generic\n * unidirectional relations utility\n */\nconst createComponentRelationFilter = () => {\n return async (\n relation: Record<string, any>,\n model: Schema.Component | Schema.ContentType,\n trx: any\n ): Promise<boolean> => {\n // Only apply component-specific filtering for components\n if (model.modelType !== 'component') {\n return true;\n }\n\n const componentSchema = model as Schema.Component;\n const parentSchemas = getParentSchemasForComponent(componentSchema);\n\n // Exit if no draft & publish parent types exist\n if (parentSchemas.length === 0) {\n return true;\n }\n\n return shouldPropagateComponentRelationToNewVersion(\n relation,\n componentSchema,\n parentSchemas,\n trx\n );\n };\n};\n\nexport {\n omitComponentData,\n assignComponentData,\n getComponents,\n createComponents,\n updateComponents,\n deleteComponents,\n deleteComponent,\n createComponentRelationFilter,\n findComponentParent,\n getParentSchemasForComponent,\n};\n"],"names":["omitComponentData","curry","schema","data","attributes","componentAttributes","Object","keys","filter","attributeName","contentTypesUtils","isComponentAttribute","omit","createComponents","uid","strapi","getModel","componentBody","attributeNames","attribute","has","type","component","componentUID","repeatable","componentValue","Array","isArray","Error","components","async","map","value","createComponent","id","__pivot","field","component_type","dynamiczoneValues","createDynamicZoneComponents","__component","getComponents","entity","getComponentAttributes","_","isEmpty","db","query","load","updateComponents","entityToUpdate","deleteOldComponents","updateOrCreateComponent","negate","isNil","deleteOldDZComponents","pickStringifiedId","previousValue","idsToKeep","castArray","allIds","forEach","includes","errors","ApplicationError","idsToDelete","difference","length","idToDelete","deleteComponent","v","find","el","err","assign","status","reduce","acc","push","deleteComponents","entityToDelete","loadComponents","subValue","componentData","entryData","assignComponentData","create","updateComponent","componentToUpdate","update","where","componentToDelete","delete","findComponentParent","componentSchema","componentId","parentSchemasForComponent","opts","schemaBuilder","getSchemaConnection","trx","withTrx","qb","transacting","parent","collectionName","identifiers","metadata","joinTableName","getComponentJoinTableName","tableExists","hasTable","entityIdColumn","getComponentJoinColumnEntityName","componentIdColumn","getComponentJoinColumnInverseName","componentTypeColumn","getComponentTypeColumn","parentRow","getConnection","first","table","parentId","getParentSchemasForComponent","values","contentTypes","some","attr","shouldPropagateComponentRelationToNewVersion","componentRelation","getJoinColumnAttributeIdName","snakeCase","modelName","parentComponentSchema","grandParentSchemas","parentContentType","options","draftAndPublish","createComponentRelationFilter","relation","model","modelType","parentSchemas"],"mappings":"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"}
@@ -1,12 +1,11 @@
1
- import _ from 'lodash';
2
- import { curry, omit, pipe, assign, has } from 'lodash/fp';
1
+ import _, { curry, omit, assign, has } from 'lodash';
3
2
  import { contentTypes, async, errors } from '@strapi/utils';
4
3
  import { getComponentJoinTableName, getComponentJoinColumnEntityName, getComponentJoinColumnInverseName, getComponentTypeColumn } from '../../utils/transform-content-types-to-models.mjs';
5
4
 
6
5
  const omitComponentData = curry((schema, data)=>{
7
6
  const { attributes } = schema;
8
7
  const componentAttributes = Object.keys(attributes).filter((attributeName)=>contentTypes.isComponentAttribute(attributes[attributeName]));
9
- return omit(componentAttributes, data);
8
+ return omit(data, componentAttributes);
10
9
  });
11
10
  // NOTE: we could generalize the logic to allow CRUD of relation directly in the DB layer
12
11
  const createComponents = async (uid, data)=>{
@@ -15,7 +14,7 @@ const createComponents = async (uid, data)=>{
15
14
  const attributeNames = Object.keys(attributes);
16
15
  for (const attributeName of attributeNames){
17
16
  const attribute = attributes[attributeName];
18
- if (!has(attributeName, data) || !contentTypes.isComponentAttribute(attribute)) {
17
+ if (!has(data, attributeName) || !contentTypes.isComponentAttribute(attribute)) {
19
18
  continue;
20
19
  }
21
20
  if (attribute.type === 'component') {
@@ -87,7 +86,7 @@ const getComponents = async (uid, entity)=>{
87
86
  const componentBody = {};
88
87
  for (const attributeName of Object.keys(attributes)){
89
88
  const attribute = attributes[attributeName];
90
- if (!has(attributeName, data)) {
89
+ if (!has(data, attributeName)) {
91
90
  continue;
92
91
  }
93
92
  if (attribute.type === 'component') {
@@ -148,8 +147,8 @@ const pickStringifiedId = ({ id })=>{
148
147
  };
149
148
  const deleteOldComponents = async (uid, componentUID, entityToUpdate, attributeName, componentValue)=>{
150
149
  const previousValue = await strapi.db.query(uid).load(entityToUpdate, attributeName);
151
- const idsToKeep = _.castArray(componentValue).filter(has('id')).map(pickStringifiedId);
152
- const allIds = _.castArray(previousValue).filter(has('id')).map(pickStringifiedId);
150
+ const idsToKeep = _.castArray(componentValue).filter((value)=>has(value, 'id')).map(pickStringifiedId);
151
+ const allIds = _.castArray(previousValue).filter((value)=>has(value, 'id')).map(pickStringifiedId);
153
152
  idsToKeep.forEach((id)=>{
154
153
  if (!allIds.includes(id)) {
155
154
  throw new errors.ApplicationError(`Some of the provided components in ${attributeName} are not related to the entity`);
@@ -166,11 +165,11 @@ const deleteOldComponents = async (uid, componentUID, entityToUpdate, attributeN
166
165
  };
167
166
  const deleteOldDZComponents = async (uid, entityToUpdate, attributeName, dynamiczoneValues)=>{
168
167
  const previousValue = await strapi.db.query(uid).load(entityToUpdate, attributeName);
169
- const idsToKeep = _.castArray(dynamiczoneValues).filter(has('id')).map((v)=>({
168
+ const idsToKeep = _.castArray(dynamiczoneValues).filter((value)=>has(value, 'id')).map((v)=>({
170
169
  id: pickStringifiedId(v),
171
170
  __component: v.__component
172
171
  }));
173
- const allIds = _.castArray(previousValue).filter(has('id')).map((v)=>({
172
+ const allIds = _.castArray(previousValue).filter((value)=>has(value, 'id')).map((v)=>({
174
173
  id: pickStringifiedId(v),
175
174
  __component: v.__component
176
175
  }));
@@ -232,10 +231,10 @@ const deleteComponents = async (uid, entityToDelete, { loadComponents = true } =
232
231
  const createComponent = async (uid, data)=>{
233
232
  const schema = strapi.getModel(uid);
234
233
  const componentData = await createComponents(uid, data);
235
- const transform = pipe(// Make sure we don't save the component with a pre-defined ID
236
- omit('id'), assignComponentData(schema, componentData));
234
+ // Make sure we don't save the component with a pre-defined ID.
235
+ const entryData = assignComponentData(schema, componentData, omit(data, 'id'));
237
236
  return strapi.db.query(uid).create({
238
- data: transform(data)
237
+ data: entryData
239
238
  });
240
239
  };
241
240
  // components can have nested compos so this must be recursive
@@ -272,7 +271,7 @@ const deleteComponent = async (uid, componentToDelete)=>{
272
271
  });
273
272
  };
274
273
  const assignComponentData = curry((schema, componentData, data)=>{
275
- return pipe(omitComponentData(schema), assign(componentData))(data);
274
+ return assign({}, componentData, omitComponentData(schema, data));
276
275
  });
277
276
  /** *************************
278
277
  Component relation handling for document operations