@strapi/core 0.0.0-experimental.a407f3bc8fb79a53cf7975140864526b6ddbac4b → 0.0.0-experimental.d362bf200f5f9359a4bbd4a549603de5ee1f04ca

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 (563) hide show
  1. package/dist/Strapi.d.ts +38 -36
  2. package/dist/Strapi.d.ts.map +1 -1
  3. package/dist/Strapi.js +31 -12
  4. package/dist/Strapi.js.map +1 -1
  5. package/dist/Strapi.mjs +31 -12
  6. package/dist/Strapi.mjs.map +1 -1
  7. package/dist/configuration/index.d.ts.map +1 -1
  8. package/dist/configuration/index.js +4 -4
  9. package/dist/configuration/index.js.map +1 -1
  10. package/dist/configuration/index.mjs +1 -1
  11. package/dist/configuration/index.mjs.map +1 -1
  12. package/dist/configuration/urls.d.ts +8 -0
  13. package/dist/configuration/urls.d.ts.map +1 -0
  14. package/dist/configuration/urls.js +68 -0
  15. package/dist/configuration/urls.js.map +1 -0
  16. package/dist/configuration/urls.mjs +66 -0
  17. package/dist/configuration/urls.mjs.map +1 -0
  18. package/dist/container.d.ts +2 -2
  19. package/dist/container.d.ts.map +1 -1
  20. package/dist/container.js.map +1 -1
  21. package/dist/container.mjs.map +1 -1
  22. package/dist/core-api/controller/collection-type.d.ts +3 -3
  23. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  24. package/dist/core-api/controller/collection-type.js.map +1 -1
  25. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  26. package/dist/core-api/controller/index.d.ts +3 -3
  27. package/dist/core-api/controller/index.d.ts.map +1 -1
  28. package/dist/core-api/controller/index.js +11 -6
  29. package/dist/core-api/controller/index.js.map +1 -1
  30. package/dist/core-api/controller/index.mjs +12 -7
  31. package/dist/core-api/controller/index.mjs.map +1 -1
  32. package/dist/core-api/controller/single-type.d.ts +3 -3
  33. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  34. package/dist/core-api/controller/single-type.js.map +1 -1
  35. package/dist/core-api/controller/single-type.mjs.map +1 -1
  36. package/dist/core-api/controller/transform.d.ts +10 -9
  37. package/dist/core-api/controller/transform.d.ts.map +1 -1
  38. package/dist/core-api/controller/transform.js +19 -13
  39. package/dist/core-api/controller/transform.js.map +1 -1
  40. package/dist/core-api/controller/transform.mjs +19 -13
  41. package/dist/core-api/controller/transform.mjs.map +1 -1
  42. package/dist/core-api/service/collection-type.d.ts +10 -10
  43. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  44. package/dist/core-api/service/collection-type.js.map +1 -1
  45. package/dist/core-api/service/collection-type.mjs.map +1 -1
  46. package/dist/core-api/service/index.d.ts +3 -3
  47. package/dist/core-api/service/index.d.ts.map +1 -1
  48. package/dist/core-api/service/index.js.map +1 -1
  49. package/dist/core-api/service/index.mjs.map +1 -1
  50. package/dist/core-api/service/single-type.d.ts +5 -5
  51. package/dist/core-api/service/single-type.d.ts.map +1 -1
  52. package/dist/core-api/service/single-type.js +3 -4
  53. package/dist/core-api/service/single-type.js.map +1 -1
  54. package/dist/core-api/service/single-type.mjs +3 -4
  55. package/dist/core-api/service/single-type.mjs.map +1 -1
  56. package/dist/domain/content-type/index.d.ts +1 -1
  57. package/dist/domain/content-type/index.d.ts.map +1 -1
  58. package/dist/domain/content-type/index.js +3 -0
  59. package/dist/domain/content-type/index.js.map +1 -1
  60. package/dist/domain/content-type/index.mjs +3 -0
  61. package/dist/domain/content-type/index.mjs.map +1 -1
  62. package/dist/domain/content-type/validator.d.ts.map +1 -1
  63. package/dist/domain/content-type/validator.js +1 -1
  64. package/dist/domain/content-type/validator.js.map +1 -1
  65. package/dist/domain/content-type/validator.mjs +2 -2
  66. package/dist/domain/content-type/validator.mjs.map +1 -1
  67. package/dist/domain/module/index.d.ts +24 -23
  68. package/dist/domain/module/index.d.ts.map +1 -1
  69. package/dist/domain/module/index.js +3 -3
  70. package/dist/domain/module/index.js.map +1 -1
  71. package/dist/domain/module/index.mjs +4 -4
  72. package/dist/domain/module/index.mjs.map +1 -1
  73. package/dist/ee/index.d.ts +2 -2
  74. package/dist/ee/index.d.ts.map +1 -1
  75. package/dist/ee/index.js.map +1 -1
  76. package/dist/ee/index.mjs.map +1 -1
  77. package/dist/ee/license.d.ts +2 -2
  78. package/dist/ee/license.d.ts.map +1 -1
  79. package/dist/ee/license.js.map +1 -1
  80. package/dist/ee/license.mjs.map +1 -1
  81. package/dist/factories.d.ts +10 -10
  82. package/dist/factories.d.ts.map +1 -1
  83. package/dist/factories.js +6 -2
  84. package/dist/factories.js.map +1 -1
  85. package/dist/factories.mjs +6 -2
  86. package/dist/factories.mjs.map +1 -1
  87. package/dist/loaders/admin.d.ts +2 -2
  88. package/dist/loaders/admin.d.ts.map +1 -1
  89. package/dist/loaders/admin.js.map +1 -1
  90. package/dist/loaders/admin.mjs.map +1 -1
  91. package/dist/loaders/apis.d.ts +2 -2
  92. package/dist/loaders/apis.d.ts.map +1 -1
  93. package/dist/loaders/apis.js +1 -1
  94. package/dist/loaders/apis.js.map +1 -1
  95. package/dist/loaders/apis.mjs +2 -2
  96. package/dist/loaders/apis.mjs.map +1 -1
  97. package/dist/loaders/components.d.ts +2 -2
  98. package/dist/loaders/components.d.ts.map +1 -1
  99. package/dist/loaders/components.js.map +1 -1
  100. package/dist/loaders/components.mjs.map +1 -1
  101. package/dist/loaders/index.d.ts +2 -2
  102. package/dist/loaders/index.d.ts.map +1 -1
  103. package/dist/loaders/index.js.map +1 -1
  104. package/dist/loaders/index.mjs.map +1 -1
  105. package/dist/loaders/middlewares.d.ts +2 -2
  106. package/dist/loaders/middlewares.d.ts.map +1 -1
  107. package/dist/loaders/middlewares.js.map +1 -1
  108. package/dist/loaders/middlewares.mjs.map +1 -1
  109. package/dist/loaders/plugins/get-enabled-plugins.d.ts +2 -2
  110. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  111. package/dist/loaders/plugins/get-enabled-plugins.js +2 -1
  112. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  113. package/dist/loaders/plugins/get-enabled-plugins.mjs +3 -2
  114. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  115. package/dist/loaders/plugins/index.d.ts +2 -2
  116. package/dist/loaders/plugins/index.d.ts.map +1 -1
  117. package/dist/loaders/plugins/index.js.map +1 -1
  118. package/dist/loaders/plugins/index.mjs.map +1 -1
  119. package/dist/loaders/policies.d.ts +2 -2
  120. package/dist/loaders/policies.d.ts.map +1 -1
  121. package/dist/loaders/policies.js.map +1 -1
  122. package/dist/loaders/policies.mjs.map +1 -1
  123. package/dist/loaders/sanitizers.d.ts +2 -2
  124. package/dist/loaders/sanitizers.d.ts.map +1 -1
  125. package/dist/loaders/sanitizers.js.map +1 -1
  126. package/dist/loaders/sanitizers.mjs.map +1 -1
  127. package/dist/loaders/src-index.d.ts +2 -2
  128. package/dist/loaders/src-index.d.ts.map +1 -1
  129. package/dist/loaders/src-index.js.map +1 -1
  130. package/dist/loaders/src-index.mjs.map +1 -1
  131. package/dist/loaders/validators.d.ts +2 -2
  132. package/dist/loaders/validators.d.ts.map +1 -1
  133. package/dist/loaders/validators.js.map +1 -1
  134. package/dist/loaders/validators.mjs.map +1 -1
  135. package/dist/middlewares/body.d.ts +2 -2
  136. package/dist/middlewares/body.d.ts.map +1 -1
  137. package/dist/middlewares/body.js.map +1 -1
  138. package/dist/middlewares/body.mjs.map +1 -1
  139. package/dist/middlewares/compression.d.ts +2 -2
  140. package/dist/middlewares/compression.d.ts.map +1 -1
  141. package/dist/middlewares/compression.js.map +1 -1
  142. package/dist/middlewares/compression.mjs.map +1 -1
  143. package/dist/middlewares/cors.d.ts +2 -2
  144. package/dist/middlewares/cors.d.ts.map +1 -1
  145. package/dist/middlewares/cors.js.map +1 -1
  146. package/dist/middlewares/cors.mjs.map +1 -1
  147. package/dist/middlewares/errors.d.ts +2 -2
  148. package/dist/middlewares/errors.d.ts.map +1 -1
  149. package/dist/middlewares/errors.js.map +1 -1
  150. package/dist/middlewares/errors.mjs.map +1 -1
  151. package/dist/middlewares/favicon.d.ts +2 -2
  152. package/dist/middlewares/favicon.d.ts.map +1 -1
  153. package/dist/middlewares/favicon.js.map +1 -1
  154. package/dist/middlewares/favicon.mjs.map +1 -1
  155. package/dist/middlewares/index.d.ts +2 -2
  156. package/dist/middlewares/index.d.ts.map +1 -1
  157. package/dist/middlewares/index.js.map +1 -1
  158. package/dist/middlewares/index.mjs.map +1 -1
  159. package/dist/middlewares/ip.d.ts +2 -2
  160. package/dist/middlewares/ip.d.ts.map +1 -1
  161. package/dist/middlewares/ip.js.map +1 -1
  162. package/dist/middlewares/ip.mjs.map +1 -1
  163. package/dist/middlewares/logger.d.ts +2 -2
  164. package/dist/middlewares/logger.d.ts.map +1 -1
  165. package/dist/middlewares/logger.js.map +1 -1
  166. package/dist/middlewares/logger.mjs.map +1 -1
  167. package/dist/middlewares/powered-by.d.ts +2 -2
  168. package/dist/middlewares/powered-by.d.ts.map +1 -1
  169. package/dist/middlewares/powered-by.js.map +1 -1
  170. package/dist/middlewares/powered-by.mjs.map +1 -1
  171. package/dist/middlewares/public.d.ts +2 -2
  172. package/dist/middlewares/public.d.ts.map +1 -1
  173. package/dist/middlewares/public.js.map +1 -1
  174. package/dist/middlewares/public.mjs.map +1 -1
  175. package/dist/middlewares/query.d.ts +2 -2
  176. package/dist/middlewares/query.d.ts.map +1 -1
  177. package/dist/middlewares/query.js.map +1 -1
  178. package/dist/middlewares/query.mjs.map +1 -1
  179. package/dist/middlewares/response-time.d.ts +2 -2
  180. package/dist/middlewares/response-time.d.ts.map +1 -1
  181. package/dist/middlewares/response-time.js.map +1 -1
  182. package/dist/middlewares/response-time.mjs.map +1 -1
  183. package/dist/middlewares/responses.d.ts +3 -3
  184. package/dist/middlewares/responses.d.ts.map +1 -1
  185. package/dist/middlewares/responses.js.map +1 -1
  186. package/dist/middlewares/responses.mjs.map +1 -1
  187. package/dist/middlewares/security.d.ts +2 -2
  188. package/dist/middlewares/security.d.ts.map +1 -1
  189. package/dist/middlewares/security.js +2 -2
  190. package/dist/middlewares/security.js.map +1 -1
  191. package/dist/middlewares/security.mjs +2 -2
  192. package/dist/middlewares/security.mjs.map +1 -1
  193. package/dist/middlewares/session.d.ts +2 -2
  194. package/dist/middlewares/session.d.ts.map +1 -1
  195. package/dist/middlewares/session.js.map +1 -1
  196. package/dist/middlewares/session.mjs.map +1 -1
  197. package/dist/migrations/draft-publish.d.ts +17 -0
  198. package/dist/migrations/draft-publish.d.ts.map +1 -0
  199. package/dist/migrations/draft-publish.js +59 -0
  200. package/dist/migrations/draft-publish.js.map +1 -0
  201. package/dist/migrations/draft-publish.mjs +59 -0
  202. package/dist/migrations/draft-publish.mjs.map +1 -0
  203. package/dist/registries/apis.d.ts +2 -2
  204. package/dist/registries/apis.d.ts.map +1 -1
  205. package/dist/registries/apis.js.map +1 -1
  206. package/dist/registries/apis.mjs.map +1 -1
  207. package/dist/registries/components.d.ts +6 -6
  208. package/dist/registries/components.d.ts.map +1 -1
  209. package/dist/registries/components.js.map +1 -1
  210. package/dist/registries/components.mjs.map +1 -1
  211. package/dist/registries/config.d.ts +2 -2
  212. package/dist/registries/config.d.ts.map +1 -1
  213. package/dist/registries/config.js +26 -6
  214. package/dist/registries/config.js.map +1 -1
  215. package/dist/registries/config.mjs +27 -5
  216. package/dist/registries/config.mjs.map +1 -1
  217. package/dist/registries/content-types.d.ts +5 -5
  218. package/dist/registries/content-types.d.ts.map +1 -1
  219. package/dist/registries/content-types.js.map +1 -1
  220. package/dist/registries/content-types.mjs.map +1 -1
  221. package/dist/registries/controllers.d.ts +10 -10
  222. package/dist/registries/controllers.d.ts.map +1 -1
  223. package/dist/registries/controllers.js.map +1 -1
  224. package/dist/registries/controllers.mjs.map +1 -1
  225. package/dist/registries/custom-fields.d.ts +3 -3
  226. package/dist/registries/custom-fields.d.ts.map +1 -1
  227. package/dist/registries/custom-fields.js.map +1 -1
  228. package/dist/registries/custom-fields.mjs.map +1 -1
  229. package/dist/registries/middlewares.d.ts +6 -6
  230. package/dist/registries/middlewares.d.ts.map +1 -1
  231. package/dist/registries/middlewares.js.map +1 -1
  232. package/dist/registries/middlewares.mjs.map +1 -1
  233. package/dist/registries/modules.d.ts +2 -2
  234. package/dist/registries/modules.d.ts.map +1 -1
  235. package/dist/registries/modules.js.map +1 -1
  236. package/dist/registries/modules.mjs.map +1 -1
  237. package/dist/registries/plugins.d.ts +5 -5
  238. package/dist/registries/plugins.d.ts.map +1 -1
  239. package/dist/registries/plugins.js.map +1 -1
  240. package/dist/registries/plugins.mjs.map +1 -1
  241. package/dist/registries/policies.d.ts +23 -11
  242. package/dist/registries/policies.d.ts.map +1 -1
  243. package/dist/registries/policies.js +64 -18
  244. package/dist/registries/policies.js.map +1 -1
  245. package/dist/registries/policies.mjs +65 -19
  246. package/dist/registries/policies.mjs.map +1 -1
  247. package/dist/registries/services.d.ts +8 -8
  248. package/dist/registries/services.d.ts.map +1 -1
  249. package/dist/registries/services.js.map +1 -1
  250. package/dist/registries/services.mjs.map +1 -1
  251. package/dist/services/auth/index.d.ts +4 -4
  252. package/dist/services/auth/index.d.ts.map +1 -1
  253. package/dist/services/auth/index.js.map +1 -1
  254. package/dist/services/auth/index.mjs.map +1 -1
  255. package/dist/services/content-api/index.d.ts +21 -3
  256. package/dist/services/content-api/index.d.ts.map +1 -1
  257. package/dist/services/content-api/index.js +27 -1
  258. package/dist/services/content-api/index.js.map +1 -1
  259. package/dist/services/content-api/index.mjs +27 -1
  260. package/dist/services/content-api/index.mjs.map +1 -1
  261. package/dist/services/content-api/permissions/index.d.ts +3 -3
  262. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  263. package/dist/services/content-api/permissions/index.js.map +1 -1
  264. package/dist/services/content-api/permissions/index.mjs.map +1 -1
  265. package/dist/services/cron.d.ts +2 -2
  266. package/dist/services/cron.d.ts.map +1 -1
  267. package/dist/services/cron.js.map +1 -1
  268. package/dist/services/cron.mjs.map +1 -1
  269. package/dist/services/custom-fields.d.ts +2 -2
  270. package/dist/services/custom-fields.d.ts.map +1 -1
  271. package/dist/services/custom-fields.js.map +1 -1
  272. package/dist/services/custom-fields.mjs.map +1 -1
  273. package/dist/services/document-service/common.d.ts +2 -2
  274. package/dist/services/document-service/common.d.ts.map +1 -1
  275. package/dist/services/document-service/common.js.map +1 -1
  276. package/dist/services/document-service/common.mjs.map +1 -1
  277. package/dist/services/document-service/document-engine.d.ts +1 -7
  278. package/dist/services/document-service/document-engine.d.ts.map +1 -1
  279. package/dist/services/document-service/draft-and-publish.d.ts +9 -23
  280. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  281. package/dist/services/document-service/draft-and-publish.js +37 -9
  282. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  283. package/dist/services/document-service/draft-and-publish.mjs +38 -10
  284. package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
  285. package/dist/services/document-service/index.d.ts +2 -2
  286. package/dist/services/document-service/index.d.ts.map +1 -1
  287. package/dist/services/document-service/index.js +10 -8
  288. package/dist/services/document-service/index.js.map +1 -1
  289. package/dist/services/document-service/index.mjs +4 -2
  290. package/dist/services/document-service/index.mjs.map +1 -1
  291. package/dist/services/document-service/internationalization.d.ts +5 -5
  292. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  293. package/dist/services/document-service/internationalization.js.map +1 -1
  294. package/dist/services/document-service/internationalization.mjs.map +1 -1
  295. package/dist/services/document-service/middlewares/errors.d.ts +6 -0
  296. package/dist/services/document-service/middlewares/errors.d.ts.map +1 -0
  297. package/dist/services/document-service/middlewares/errors.js +25 -0
  298. package/dist/services/document-service/middlewares/errors.js.map +1 -0
  299. package/dist/services/document-service/middlewares/errors.mjs +25 -0
  300. package/dist/services/document-service/middlewares/errors.mjs.map +1 -0
  301. package/dist/services/document-service/middlewares/index.d.ts +3 -0
  302. package/dist/services/document-service/middlewares/index.d.ts.map +1 -0
  303. package/dist/services/document-service/{middlewares.d.ts → middlewares/middleware-manager.d.ts} +3 -4
  304. package/dist/services/document-service/middlewares/middleware-manager.d.ts.map +1 -0
  305. package/dist/services/document-service/{middlewares.js → middlewares/middleware-manager.js} +1 -1
  306. package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -0
  307. package/dist/services/document-service/{middlewares.mjs → middlewares/middleware-manager.mjs} +1 -1
  308. package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -0
  309. package/dist/services/document-service/repository.d.ts +3 -0
  310. package/dist/services/document-service/repository.d.ts.map +1 -0
  311. package/dist/services/document-service/repository.js +297 -0
  312. package/dist/services/document-service/repository.js.map +1 -0
  313. package/dist/services/document-service/repository.mjs +297 -0
  314. package/dist/services/document-service/repository.mjs.map +1 -0
  315. package/dist/services/document-service/transform/fields.d.ts +2 -2
  316. package/dist/services/document-service/transform/fields.d.ts.map +1 -1
  317. package/dist/services/document-service/transform/fields.js.map +1 -1
  318. package/dist/services/document-service/transform/fields.mjs.map +1 -1
  319. package/dist/services/document-service/transform/id-map.d.ts +4 -4
  320. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  321. package/dist/services/document-service/transform/id-map.js +15 -9
  322. package/dist/services/document-service/transform/id-map.js.map +1 -1
  323. package/dist/services/document-service/transform/id-map.mjs +16 -10
  324. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  325. package/dist/services/document-service/transform/id-transform.d.ts +4 -18
  326. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  327. package/dist/services/document-service/transform/id-transform.js +18 -12
  328. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  329. package/dist/services/document-service/transform/id-transform.mjs +18 -12
  330. package/dist/services/document-service/transform/id-transform.mjs.map +1 -1
  331. package/dist/services/document-service/transform/populate.d.ts +5 -2
  332. package/dist/services/document-service/transform/populate.d.ts.map +1 -1
  333. package/dist/services/document-service/transform/populate.js +1 -1
  334. package/dist/services/document-service/transform/populate.js.map +1 -1
  335. package/dist/services/document-service/transform/populate.mjs +1 -1
  336. package/dist/services/document-service/transform/populate.mjs.map +1 -1
  337. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +3 -3
  338. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  339. package/dist/services/document-service/transform/relations/extract/data-ids.js +24 -13
  340. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  341. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +24 -13
  342. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  343. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts +3 -3
  344. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  345. package/dist/services/document-service/transform/relations/transform/data-ids.js +62 -38
  346. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  347. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +63 -39
  348. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  349. package/dist/services/document-service/transform/relations/transform/output-ids.d.ts +1 -3
  350. package/dist/services/document-service/transform/relations/transform/output-ids.d.ts.map +1 -1
  351. package/dist/services/document-service/transform/relations/utils/dp.d.ts +10 -0
  352. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -0
  353. package/dist/services/document-service/transform/relations/utils/dp.js +30 -0
  354. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -0
  355. package/dist/services/document-service/transform/relations/utils/dp.mjs +30 -0
  356. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -0
  357. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +4 -4
  358. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  359. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -1
  360. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -1
  361. package/dist/services/document-service/transform/relations/utils/types.d.ts +4 -1
  362. package/dist/services/document-service/transform/relations/utils/types.d.ts.map +1 -1
  363. package/dist/services/document-service/transform/types.d.ts +4 -4
  364. package/dist/services/document-service/transform/types.d.ts.map +1 -1
  365. package/dist/services/document-service/utils/populate.d.ts +9 -2
  366. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  367. package/dist/services/document-service/utils/populate.js +5 -5
  368. package/dist/services/document-service/utils/populate.js.map +1 -1
  369. package/dist/services/document-service/utils/populate.mjs +5 -5
  370. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  371. package/dist/services/entity-service/attributes/index.d.ts +4 -4
  372. package/dist/services/entity-service/attributes/index.d.ts.map +1 -1
  373. package/dist/services/entity-service/attributes/index.js.map +1 -1
  374. package/dist/services/entity-service/attributes/index.mjs.map +1 -1
  375. package/dist/services/entity-service/attributes/transforms.d.ts +3 -3
  376. package/dist/services/entity-service/attributes/transforms.d.ts.map +1 -1
  377. package/dist/services/entity-service/attributes/transforms.js.map +1 -1
  378. package/dist/services/entity-service/attributes/transforms.mjs.map +1 -1
  379. package/dist/services/entity-service/components.d.ts +88 -16
  380. package/dist/services/entity-service/components.d.ts.map +1 -1
  381. package/dist/services/entity-service/components.js +13 -99
  382. package/dist/services/entity-service/components.js.map +1 -1
  383. package/dist/services/entity-service/components.mjs +14 -100
  384. package/dist/services/entity-service/components.mjs.map +1 -1
  385. package/dist/services/entity-service/index.d.ts +4 -6
  386. package/dist/services/entity-service/index.d.ts.map +1 -1
  387. package/dist/services/entity-service/index.js +38 -204
  388. package/dist/services/entity-service/index.js.map +1 -1
  389. package/dist/services/entity-service/index.mjs +32 -198
  390. package/dist/services/entity-service/index.mjs.map +1 -1
  391. package/dist/services/entity-service/params.d.ts +5 -5
  392. package/dist/services/entity-service/params.d.ts.map +1 -1
  393. package/dist/services/entity-service/params.js +1 -1
  394. package/dist/services/entity-service/params.js.map +1 -1
  395. package/dist/services/entity-service/params.mjs +1 -1
  396. package/dist/services/entity-service/params.mjs.map +1 -1
  397. package/dist/services/entity-validator/index.d.ts +2 -2
  398. package/dist/services/entity-validator/index.d.ts.map +1 -1
  399. package/dist/services/entity-validator/index.js +8 -3
  400. package/dist/services/entity-validator/index.js.map +1 -1
  401. package/dist/services/entity-validator/index.mjs +8 -3
  402. package/dist/services/entity-validator/index.mjs.map +1 -1
  403. package/dist/services/entity-validator/validators.d.ts +18 -18
  404. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  405. package/dist/services/entity-validator/validators.js +6 -1
  406. package/dist/services/entity-validator/validators.js.map +1 -1
  407. package/dist/services/entity-validator/validators.mjs +6 -1
  408. package/dist/services/entity-validator/validators.mjs.map +1 -1
  409. package/dist/services/features.d.ts +3 -3
  410. package/dist/services/features.d.ts.map +1 -1
  411. package/dist/services/features.js.map +1 -1
  412. package/dist/services/features.mjs.map +1 -1
  413. package/dist/services/fs.d.ts +2 -2
  414. package/dist/services/fs.d.ts.map +1 -1
  415. package/dist/services/fs.js.map +1 -1
  416. package/dist/services/fs.mjs.map +1 -1
  417. package/dist/services/metrics/admin-user-hash.d.ts +2 -2
  418. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  419. package/dist/services/metrics/admin-user-hash.js.map +1 -1
  420. package/dist/services/metrics/admin-user-hash.mjs.map +1 -1
  421. package/dist/services/metrics/index.d.ts +2 -2
  422. package/dist/services/metrics/index.d.ts.map +1 -1
  423. package/dist/services/metrics/index.js.map +1 -1
  424. package/dist/services/metrics/index.mjs.map +1 -1
  425. package/dist/services/metrics/middleware.d.ts +2 -2
  426. package/dist/services/metrics/middleware.d.ts.map +1 -1
  427. package/dist/services/metrics/middleware.js.map +1 -1
  428. package/dist/services/metrics/middleware.mjs.map +1 -1
  429. package/dist/services/metrics/sender.d.ts +3 -3
  430. package/dist/services/metrics/sender.d.ts.map +1 -1
  431. package/dist/services/metrics/sender.js.map +1 -1
  432. package/dist/services/metrics/sender.mjs.map +1 -1
  433. package/dist/services/query-params.d.ts +7 -0
  434. package/dist/services/query-params.d.ts.map +1 -0
  435. package/dist/services/query-params.js +12 -0
  436. package/dist/services/query-params.js.map +1 -0
  437. package/dist/services/query-params.mjs +13 -0
  438. package/dist/services/query-params.mjs.map +1 -0
  439. package/dist/services/server/admin-api.d.ts +3 -3
  440. package/dist/services/server/admin-api.d.ts.map +1 -1
  441. package/dist/services/server/admin-api.js.map +1 -1
  442. package/dist/services/server/admin-api.mjs.map +1 -1
  443. package/dist/services/server/api.d.ts +3 -3
  444. package/dist/services/server/api.d.ts.map +1 -1
  445. package/dist/services/server/api.js.map +1 -1
  446. package/dist/services/server/api.mjs.map +1 -1
  447. package/dist/services/server/compose-endpoint.d.ts +2 -2
  448. package/dist/services/server/compose-endpoint.d.ts.map +1 -1
  449. package/dist/services/server/compose-endpoint.js +1 -2
  450. package/dist/services/server/compose-endpoint.js.map +1 -1
  451. package/dist/services/server/compose-endpoint.mjs +2 -3
  452. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  453. package/dist/services/server/content-api.d.ts +3 -3
  454. package/dist/services/server/content-api.d.ts.map +1 -1
  455. package/dist/services/server/content-api.js.map +1 -1
  456. package/dist/services/server/content-api.mjs.map +1 -1
  457. package/dist/services/server/http-server.d.ts +2 -2
  458. package/dist/services/server/http-server.d.ts.map +1 -1
  459. package/dist/services/server/http-server.js.map +1 -1
  460. package/dist/services/server/http-server.mjs.map +1 -1
  461. package/dist/services/server/index.d.ts +2 -2
  462. package/dist/services/server/index.d.ts.map +1 -1
  463. package/dist/services/server/index.js +1 -2
  464. package/dist/services/server/index.js.map +1 -1
  465. package/dist/services/server/index.mjs +1 -2
  466. package/dist/services/server/index.mjs.map +1 -1
  467. package/dist/services/server/middleware.d.ts +4 -4
  468. package/dist/services/server/middleware.d.ts.map +1 -1
  469. package/dist/services/server/middleware.js.map +1 -1
  470. package/dist/services/server/middleware.mjs.map +1 -1
  471. package/dist/services/server/policy.d.ts +3 -3
  472. package/dist/services/server/policy.d.ts.map +1 -1
  473. package/dist/services/server/policy.js +4 -4
  474. package/dist/services/server/policy.js.map +1 -1
  475. package/dist/services/server/policy.mjs +4 -4
  476. package/dist/services/server/policy.mjs.map +1 -1
  477. package/dist/services/server/register-middlewares.d.ts +2 -2
  478. package/dist/services/server/register-middlewares.d.ts.map +1 -1
  479. package/dist/services/server/register-middlewares.js.map +1 -1
  480. package/dist/services/server/register-middlewares.mjs.map +1 -1
  481. package/dist/services/server/register-routes.d.ts +2 -2
  482. package/dist/services/server/register-routes.d.ts.map +1 -1
  483. package/dist/services/server/register-routes.js.map +1 -1
  484. package/dist/services/server/register-routes.mjs.map +1 -1
  485. package/dist/services/server/routing.d.ts +4 -4
  486. package/dist/services/server/routing.d.ts.map +1 -1
  487. package/dist/services/server/routing.js.map +1 -1
  488. package/dist/services/server/routing.mjs.map +1 -1
  489. package/dist/services/utils/dynamic-zones.d.ts.map +1 -1
  490. package/dist/services/utils/dynamic-zones.js +2 -1
  491. package/dist/services/utils/dynamic-zones.js.map +1 -1
  492. package/dist/services/utils/dynamic-zones.mjs +2 -1
  493. package/dist/services/utils/dynamic-zones.mjs.map +1 -1
  494. package/dist/services/webhook-runner.js.map +1 -1
  495. package/dist/services/webhook-runner.mjs.map +1 -1
  496. package/dist/utils/convert-custom-field-type.d.ts +2 -2
  497. package/dist/utils/convert-custom-field-type.d.ts.map +1 -1
  498. package/dist/utils/convert-custom-field-type.js.map +1 -1
  499. package/dist/utils/convert-custom-field-type.mjs.map +1 -1
  500. package/dist/utils/fetch.d.ts +3 -3
  501. package/dist/utils/fetch.d.ts.map +1 -1
  502. package/dist/utils/fetch.js.map +1 -1
  503. package/dist/utils/fetch.mjs.map +1 -1
  504. package/dist/utils/get-dirs.d.ts +3 -3
  505. package/dist/utils/get-dirs.d.ts.map +1 -1
  506. package/dist/utils/get-dirs.js.map +1 -1
  507. package/dist/utils/get-dirs.mjs.map +1 -1
  508. package/dist/utils/is-initialized.d.ts +2 -2
  509. package/dist/utils/is-initialized.d.ts.map +1 -1
  510. package/dist/utils/is-initialized.js +1 -1
  511. package/dist/utils/is-initialized.js.map +1 -1
  512. package/dist/utils/is-initialized.mjs +1 -1
  513. package/dist/utils/is-initialized.mjs.map +1 -1
  514. package/dist/utils/load-config-file.js +1 -1
  515. package/dist/utils/load-config-file.js.map +1 -1
  516. package/dist/utils/load-config-file.mjs +2 -2
  517. package/dist/utils/load-config-file.mjs.map +1 -1
  518. package/dist/utils/open-browser.d.ts +2 -2
  519. package/dist/utils/open-browser.d.ts.map +1 -1
  520. package/dist/utils/open-browser.js.map +1 -1
  521. package/dist/utils/open-browser.mjs.map +1 -1
  522. package/dist/utils/signals.d.ts +2 -2
  523. package/dist/utils/signals.d.ts.map +1 -1
  524. package/dist/utils/signals.js.map +1 -1
  525. package/dist/utils/signals.mjs.map +1 -1
  526. package/dist/utils/startup-logger.d.ts +2 -2
  527. package/dist/utils/startup-logger.d.ts.map +1 -1
  528. package/dist/utils/startup-logger.js.map +1 -1
  529. package/dist/utils/startup-logger.mjs.map +1 -1
  530. package/dist/utils/transform-content-types-to-models.d.ts +34 -84
  531. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  532. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  533. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  534. package/dist/utils/update-notifier/index.d.ts +2 -2
  535. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  536. package/dist/utils/update-notifier/index.js.map +1 -1
  537. package/dist/utils/update-notifier/index.mjs.map +1 -1
  538. package/package.json +15 -15
  539. package/dist/services/document-service/document-engine.js +0 -241
  540. package/dist/services/document-service/document-engine.js.map +0 -1
  541. package/dist/services/document-service/document-engine.mjs +0 -242
  542. package/dist/services/document-service/document-engine.mjs.map +0 -1
  543. package/dist/services/document-service/middlewares.d.ts.map +0 -1
  544. package/dist/services/document-service/middlewares.js.map +0 -1
  545. package/dist/services/document-service/middlewares.mjs.map +0 -1
  546. package/dist/services/document-service/repositories/content-type.d.ts +0 -3
  547. package/dist/services/document-service/repositories/content-type.d.ts.map +0 -1
  548. package/dist/services/document-service/repositories/content-type.js +0 -139
  549. package/dist/services/document-service/repositories/content-type.js.map +0 -1
  550. package/dist/services/document-service/repositories/content-type.mjs +0 -139
  551. package/dist/services/document-service/repositories/content-type.mjs.map +0 -1
  552. package/dist/services/document-service/transform/filters.d.ts +0 -3
  553. package/dist/services/document-service/transform/filters.d.ts.map +0 -1
  554. package/dist/services/document-service/transform/sort.d.ts +0 -5
  555. package/dist/services/document-service/transform/sort.d.ts.map +0 -1
  556. package/dist/services/document-service/transform/utils.d.ts +0 -9
  557. package/dist/services/document-service/transform/utils.d.ts.map +0 -1
  558. package/dist/services/utils/upload-files.d.ts +0 -8
  559. package/dist/services/utils/upload-files.d.ts.map +0 -1
  560. package/dist/services/utils/upload-files.js +0 -64
  561. package/dist/services/utils/upload-files.js.map +0 -1
  562. package/dist/services/utils/upload-files.mjs +0 -63
  563. package/dist/services/utils/upload-files.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"data-ids.js","sources":["../../../../../../src/services/document-service/transform/relations/extract/data-ids.ts"],"sourcesContent":["import { isObject } from 'lodash/fp';\nimport { EntityService, Attribute, Common } from '@strapi/types';\nimport { traverseEntity } from '@strapi/utils';\nimport { IdMap } from '../../id-map';\nimport { ShortHand, LongHand, LongHandDocument } from '../utils/types';\nimport { isShortHand, isLongHand } from '../utils/data';\nimport { getRelationTargetLocale } from '../utils/i18n';\n\n/**\n * Get relation ids from primitive representation (id, id[], {id}, {id}[])\n */\nconst handlePrimitive = (\n relation: ShortHand | LongHand | ShortHand[] | LongHand[] | null | undefined | any\n): LongHandDocument[] => {\n if (!relation) {\n return []; // null\n }\n\n if (isShortHand(relation)) {\n return [{ documentId: relation }]; // id\n }\n\n if (isLongHand(relation)) {\n // { documentId, locale? }\n if ('documentId' in relation) {\n return [{ documentId: relation.documentId, locale: relation.locale }];\n }\n // { id }\n return [];\n }\n\n if (Array.isArray(relation)) {\n return relation.map((item) => (isShortHand(item) ? { documentId: item } : item)); // id[]\n }\n\n return [];\n};\n\n/**\n * Get all relations document ids from a relation input value\n */\nconst extractRelationIds = <T extends Attribute.RelationKind.Any>(\n relation: EntityService.Params.Attribute.RelationInputValue<T>\n): LongHandDocument[] => {\n const ids = handlePrimitive(relation);\n if (!isObject(relation)) return ids;\n\n if ('set' in relation) ids.push(...handlePrimitive(relation.set)); // set: id[]\n if ('disconnect' in relation) ids.push(...handlePrimitive(relation.disconnect)); // disconnect: id[]\n if ('connect' in relation) {\n // connect: id[] | { id } | ...\n if (!relation.connect) return [];\n ids.push(...handlePrimitive(relation.connect));\n\n // handle positional arguments\n const connect = Array.isArray(relation.connect) ? relation.connect : [relation.connect];\n connect.forEach((relation) => {\n if (isShortHand(relation) || !('position' in relation)) return;\n\n const { position } = relation;\n\n // { connect: { id: id, position: { before: id } } }\n if (position?.before) {\n ids.push(...handlePrimitive({ ...position, id: position.before }));\n }\n\n // { connect: { id: id, position: { after: id } } }\n if (position?.after) {\n ids.push(...handlePrimitive({ ...position, id: position.after }));\n }\n });\n }\n\n return ids;\n};\n\n/**\n * Iterate over all attributes of a Data object and extract all relational document ids.\n * Those will later be transformed to entity ids.\n */\nconst extractDataIds = (\n idMap: IdMap,\n data: Record<string, any>,\n opts: { uid: Common.UID.Schema; locale?: string | null; isDraft?: boolean }\n) => {\n return traverseEntity(\n ({ value, attribute }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n const extractedIds = extractRelationIds(value as any);\n\n // TODO: Handle morph relations (they have multiple targets)\n const target = attribute.target;\n if (!target) return;\n\n extractedIds.forEach((relation) => {\n idMap.add({\n uid: target,\n documentId: relation.documentId,\n locale: getRelationTargetLocale(relation, {\n targetUid: target as Common.UID.Schema,\n sourceUid: opts.uid,\n sourceLocale: opts.locale,\n }),\n isDraft: opts.isDraft,\n });\n });\n }\n },\n { schema: strapi.getModel(opts.uid) },\n data\n );\n};\n\nexport { extractDataIds };\n"],"names":["isShortHand","isLongHand","isObject","relation","data","traverseEntity","getRelationTargetLocale"],"mappings":";;;;;;AAWA,MAAM,kBAAkB,CACtB,aACuB;AACvB,MAAI,CAAC,UAAU;AACb,WAAO;EACT;AAEI,MAAAA,KAAAA,YAAY,QAAQ,GAAG;AACzB,WAAO,CAAC,EAAE,YAAY,SAAA,CAAU;AAAA,EAClC;AAEI,MAAAC,KAAAA,WAAW,QAAQ,GAAG;AAExB,QAAI,gBAAgB,UAAU;AACrB,aAAA,CAAC,EAAE,YAAY,SAAS,YAAY,QAAQ,SAAS,QAAQ;AAAA,IACtE;AAEA,WAAO;EACT;AAEI,MAAA,MAAM,QAAQ,QAAQ,GAAG;AACpB,WAAA,SAAS,IAAI,CAAC,SAAUD,KAAA,YAAY,IAAI,IAAI,EAAE,YAAY,KAAK,IAAI,IAAK;AAAA,EACjF;AAEA,SAAO;AACT;AAKA,MAAM,qBAAqB,CACzB,aACuB;AACjB,QAAA,MAAM,gBAAgB,QAAQ;AAChC,MAAA,CAACE,WAAS,QAAQ;AAAU,WAAA;AAEhC,MAAI,SAAS;AAAU,QAAI,KAAK,GAAG,gBAAgB,SAAS,GAAG,CAAC;AAChE,MAAI,gBAAgB;AAAU,QAAI,KAAK,GAAG,gBAAgB,SAAS,UAAU,CAAC;AAC9E,MAAI,aAAa,UAAU;AAEzB,QAAI,CAAC,SAAS;AAAS,aAAO;AAC9B,QAAI,KAAK,GAAG,gBAAgB,SAAS,OAAO,CAAC;AAGvC,UAAA,UAAU,MAAM,QAAQ,SAAS,OAAO,IAAI,SAAS,UAAU,CAAC,SAAS,OAAO;AAC9E,YAAA,QAAQ,CAACC,cAAa;AAC5B,UAAIH,KAAYG,YAAAA,SAAQ,KAAK,EAAE,cAAcA;AAAW;AAElD,YAAA,EAAE,SAAaA,IAAAA;AAGrB,UAAI,UAAU,QAAQ;AAChB,YAAA,KAAK,GAAG,gBAAgB,EAAE,GAAG,UAAU,IAAI,SAAS,OAAQ,CAAA,CAAC;AAAA,MACnE;AAGA,UAAI,UAAU,OAAO;AACf,YAAA,KAAK,GAAG,gBAAgB,EAAE,GAAG,UAAU,IAAI,SAAS,MAAO,CAAA,CAAC;AAAA,MAClE;AAAA,IAAA,CACD;AAAA,EACH;AAEO,SAAA;AACT;AAMA,MAAM,iBAAiB,CACrB,OACAC,OACA,SACG;AACI,SAAAC,YAAA;AAAA,IACL,CAAC,EAAE,OAAO,gBAAgB;AAEpB,UAAA,UAAU,SAAS,YAAY;AAC3B,cAAA,eAAe,mBAAmB,KAAY;AAGpD,cAAM,SAAS,UAAU;AACzB,YAAI,CAAC;AAAQ;AAEA,qBAAA,QAAQ,CAAC,aAAa;AACjC,gBAAM,IAAI;AAAA,YACR,KAAK;AAAA,YACL,YAAY,SAAS;AAAA,YACrB,QAAQC,6BAAwB,UAAU;AAAA,cACxC,WAAW;AAAA,cACX,WAAW,KAAK;AAAA,cAChB,cAAc,KAAK;AAAA,YAAA,CACpB;AAAA,YACD,SAAS,KAAK;AAAA,UAAA,CACf;AAAA,QAAA,CACF;AAAA,MACH;AAAA,IACF;AAAA,IACA,EAAE,QAAQ,OAAO,SAAS,KAAK,GAAG,EAAE;AAAA,IACpCF;AAAA,EAAA;AAEJ;;"}
1
+ {"version":3,"file":"data-ids.js","sources":["../../../../../../src/services/document-service/transform/relations/extract/data-ids.ts"],"sourcesContent":["import { isObject } from 'lodash/fp';\nimport { Modules, Schema, UID } from '@strapi/types';\nimport { traverseEntity } from '@strapi/utils';\nimport { IdMap } from '../../id-map';\nimport { ShortHand, LongHand, LongHandDocument } from '../utils/types';\nimport { isShortHand, isLongHand } from '../utils/data';\nimport { getRelationTargetLocale } from '../utils/i18n';\nimport { getRelationTargetStatus } from '../utils/dp';\n/**\n * Get relation ids from primitive representation (id, id[], {id}, {id}[])\n */\nconst handlePrimitive = (\n relation: ShortHand | LongHand | ShortHand[] | LongHand[] | null | undefined | any\n): LongHandDocument[] => {\n if (!relation) {\n return []; // null\n }\n\n if (isShortHand(relation)) {\n return [{ documentId: relation }]; // id\n }\n\n if (isLongHand(relation)) {\n // { documentId, locale? }\n if ('documentId' in relation) {\n return [\n { documentId: relation.documentId, locale: relation.locale, status: relation.status },\n ];\n }\n // { id }\n return [];\n }\n\n if (Array.isArray(relation)) {\n return relation.map((item) => (isShortHand(item) ? { documentId: item } : item)); // id[]\n }\n\n return [];\n};\n\n/**\n * Get all relations document ids from a relation input value\n */\nconst extractRelationIds = <T extends Schema.Attribute.RelationKind.Any>(\n relation: Modules.EntityService.Params.Attribute.RelationInputValue<T>\n): LongHandDocument[] => {\n const ids = handlePrimitive(relation);\n if (!isObject(relation)) return ids;\n\n if ('set' in relation) ids.push(...handlePrimitive(relation.set)); // set: id[]\n if ('disconnect' in relation) ids.push(...handlePrimitive(relation.disconnect)); // disconnect: id[]\n if ('connect' in relation) {\n // connect: id[] | { id } | ...\n if (!relation.connect) return [];\n ids.push(...handlePrimitive(relation.connect));\n\n // handle positional arguments\n const connect = Array.isArray(relation.connect) ? relation.connect : [relation.connect];\n connect.forEach((relation) => {\n if (isShortHand(relation) || !('position' in relation)) return;\n\n const { position } = relation;\n\n // { connect: { id: id, position: { before: id } } }\n if (position?.before) {\n ids.push(...handlePrimitive({ ...position, documentId: position.before }));\n }\n\n // { connect: { id: id, position: { after: id } } }\n if (position?.after) {\n ids.push(...handlePrimitive({ ...position, documentId: position.after }));\n }\n });\n }\n\n return ids;\n};\n\n/**\n * Iterate over all attributes of a Data object and extract all relational document ids.\n * Those will later be transformed to entity ids.\n */\nconst extractDataIds = (\n idMap: IdMap,\n data: Record<string, any>,\n opts: { uid: UID.Schema; locale?: string | null; status?: 'draft' | 'published' }\n) => {\n return traverseEntity(\n ({ value, attribute }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n const extractedIds = extractRelationIds(value as any);\n\n // TODO: Handle morph relations (they have multiple targets)\n const target = attribute.target;\n if (!target) return;\n\n // If not connecting to any version on disabled d&p, we should connect to both draft and published relations at the same time\n extractedIds.forEach((relation) => {\n const targetLocale = getRelationTargetLocale(relation, {\n targetUid: target as UID.Schema,\n sourceUid: opts.uid,\n sourceLocale: opts.locale,\n });\n\n const targetStatus = getRelationTargetStatus(relation, {\n targetUid: target as UID.Schema,\n sourceUid: opts.uid,\n sourceStatus: opts.status,\n });\n\n targetStatus.forEach((status) => {\n idMap.add({\n uid: target,\n documentId: relation.documentId,\n locale: targetLocale,\n status,\n });\n });\n });\n }\n },\n { schema: strapi.getModel(opts.uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n\nexport { extractDataIds };\n"],"names":["isShortHand","isLongHand","isObject","relation","data","traverseEntity","getRelationTargetLocale","getRelationTargetStatus"],"mappings":";;;;;;;AAWA,MAAM,kBAAkB,CACtB,aACuB;AACvB,MAAI,CAAC,UAAU;AACb,WAAO;EACT;AAEI,MAAAA,KAAAA,YAAY,QAAQ,GAAG;AACzB,WAAO,CAAC,EAAE,YAAY,SAAA,CAAU;AAAA,EAClC;AAEI,MAAAC,KAAAA,WAAW,QAAQ,GAAG;AAExB,QAAI,gBAAgB,UAAU;AACrB,aAAA;AAAA,QACL,EAAE,YAAY,SAAS,YAAY,QAAQ,SAAS,QAAQ,QAAQ,SAAS,OAAO;AAAA,MAAA;AAAA,IAExF;AAEA,WAAO;EACT;AAEI,MAAA,MAAM,QAAQ,QAAQ,GAAG;AACpB,WAAA,SAAS,IAAI,CAAC,SAAUD,KAAA,YAAY,IAAI,IAAI,EAAE,YAAY,KAAK,IAAI,IAAK;AAAA,EACjF;AAEA,SAAO;AACT;AAKA,MAAM,qBAAqB,CACzB,aACuB;AACjB,QAAA,MAAM,gBAAgB,QAAQ;AAChC,MAAA,CAACE,WAAS,QAAQ;AAAU,WAAA;AAEhC,MAAI,SAAS;AAAU,QAAI,KAAK,GAAG,gBAAgB,SAAS,GAAG,CAAC;AAChE,MAAI,gBAAgB;AAAU,QAAI,KAAK,GAAG,gBAAgB,SAAS,UAAU,CAAC;AAC9E,MAAI,aAAa,UAAU;AAEzB,QAAI,CAAC,SAAS;AAAS,aAAO;AAC9B,QAAI,KAAK,GAAG,gBAAgB,SAAS,OAAO,CAAC;AAGvC,UAAA,UAAU,MAAM,QAAQ,SAAS,OAAO,IAAI,SAAS,UAAU,CAAC,SAAS,OAAO;AAC9E,YAAA,QAAQ,CAACC,cAAa;AAC5B,UAAIH,KAAYG,YAAAA,SAAQ,KAAK,EAAE,cAAcA;AAAW;AAElD,YAAA,EAAE,SAAaA,IAAAA;AAGrB,UAAI,UAAU,QAAQ;AAChB,YAAA,KAAK,GAAG,gBAAgB,EAAE,GAAG,UAAU,YAAY,SAAS,OAAQ,CAAA,CAAC;AAAA,MAC3E;AAGA,UAAI,UAAU,OAAO;AACf,YAAA,KAAK,GAAG,gBAAgB,EAAE,GAAG,UAAU,YAAY,SAAS,MAAO,CAAA,CAAC;AAAA,MAC1E;AAAA,IAAA,CACD;AAAA,EACH;AAEO,SAAA;AACT;AAMA,MAAM,iBAAiB,CACrB,OACAC,OACA,SACG;AACI,SAAAC,YAAA;AAAA,IACL,CAAC,EAAE,OAAO,gBAAgB;AAEpB,UAAA,UAAU,SAAS,YAAY;AAC3B,cAAA,eAAe,mBAAmB,KAAY;AAGpD,cAAM,SAAS,UAAU;AACzB,YAAI,CAAC;AAAQ;AAGA,qBAAA,QAAQ,CAAC,aAAa;AAC3B,gBAAA,eAAeC,6BAAwB,UAAU;AAAA,YACrD,WAAW;AAAA,YACX,WAAW,KAAK;AAAA,YAChB,cAAc,KAAK;AAAA,UAAA,CACpB;AAEK,gBAAA,eAAeC,2BAAwB,UAAU;AAAA,YACrD,WAAW;AAAA,YACX,WAAW,KAAK;AAAA,YAChB,cAAc,KAAK;AAAA,UAAA,CACpB;AAEY,uBAAA,QAAQ,CAAC,WAAW;AAC/B,kBAAM,IAAI;AAAA,cACR,KAAK;AAAA,cACL,YAAY,SAAS;AAAA,cACrB,QAAQ;AAAA,cACR;AAAA,YAAA,CACD;AAAA,UAAA,CACF;AAAA,QAAA,CACF;AAAA,MACH;AAAA,IACF;AAAA,IACA,EAAE,QAAQ,OAAO,SAAS,KAAK,GAAG,GAAG,UAAU,OAAO,SAAS,KAAK,MAAM,EAAE;AAAA,IAC5EH;AAAA,EAAA;AAEJ;;"}
@@ -2,6 +2,7 @@ import { isObject } from "lodash/fp";
2
2
  import { traverseEntity } from "@strapi/utils";
3
3
  import { isShortHand, isLongHand } from "../utils/data.mjs";
4
4
  import { getRelationTargetLocale } from "../utils/i18n.mjs";
5
+ import { getRelationTargetStatus } from "../utils/dp.mjs";
5
6
  const handlePrimitive = (relation) => {
6
7
  if (!relation) {
7
8
  return [];
@@ -11,7 +12,9 @@ const handlePrimitive = (relation) => {
11
12
  }
12
13
  if (isLongHand(relation)) {
13
14
  if ("documentId" in relation) {
14
- return [{ documentId: relation.documentId, locale: relation.locale }];
15
+ return [
16
+ { documentId: relation.documentId, locale: relation.locale, status: relation.status }
17
+ ];
15
18
  }
16
19
  return [];
17
20
  }
@@ -38,10 +41,10 @@ const extractRelationIds = (relation) => {
38
41
  return;
39
42
  const { position } = relation2;
40
43
  if (position?.before) {
41
- ids.push(...handlePrimitive({ ...position, id: position.before }));
44
+ ids.push(...handlePrimitive({ ...position, documentId: position.before }));
42
45
  }
43
46
  if (position?.after) {
44
- ids.push(...handlePrimitive({ ...position, id: position.after }));
47
+ ids.push(...handlePrimitive({ ...position, documentId: position.after }));
45
48
  }
46
49
  });
47
50
  }
@@ -56,20 +59,28 @@ const extractDataIds = (idMap, data, opts) => {
56
59
  if (!target)
57
60
  return;
58
61
  extractedIds.forEach((relation) => {
59
- idMap.add({
60
- uid: target,
61
- documentId: relation.documentId,
62
- locale: getRelationTargetLocale(relation, {
63
- targetUid: target,
64
- sourceUid: opts.uid,
65
- sourceLocale: opts.locale
66
- }),
67
- isDraft: opts.isDraft
62
+ const targetLocale = getRelationTargetLocale(relation, {
63
+ targetUid: target,
64
+ sourceUid: opts.uid,
65
+ sourceLocale: opts.locale
66
+ });
67
+ const targetStatus = getRelationTargetStatus(relation, {
68
+ targetUid: target,
69
+ sourceUid: opts.uid,
70
+ sourceStatus: opts.status
71
+ });
72
+ targetStatus.forEach((status) => {
73
+ idMap.add({
74
+ uid: target,
75
+ documentId: relation.documentId,
76
+ locale: targetLocale,
77
+ status
78
+ });
68
79
  });
69
80
  });
70
81
  }
71
82
  },
72
- { schema: strapi.getModel(opts.uid) },
83
+ { schema: strapi.getModel(opts.uid), getModel: strapi.getModel.bind(strapi) },
73
84
  data
74
85
  );
75
86
  };
@@ -1 +1 @@
1
- {"version":3,"file":"data-ids.mjs","sources":["../../../../../../src/services/document-service/transform/relations/extract/data-ids.ts"],"sourcesContent":["import { isObject } from 'lodash/fp';\nimport { EntityService, Attribute, Common } from '@strapi/types';\nimport { traverseEntity } from '@strapi/utils';\nimport { IdMap } from '../../id-map';\nimport { ShortHand, LongHand, LongHandDocument } from '../utils/types';\nimport { isShortHand, isLongHand } from '../utils/data';\nimport { getRelationTargetLocale } from '../utils/i18n';\n\n/**\n * Get relation ids from primitive representation (id, id[], {id}, {id}[])\n */\nconst handlePrimitive = (\n relation: ShortHand | LongHand | ShortHand[] | LongHand[] | null | undefined | any\n): LongHandDocument[] => {\n if (!relation) {\n return []; // null\n }\n\n if (isShortHand(relation)) {\n return [{ documentId: relation }]; // id\n }\n\n if (isLongHand(relation)) {\n // { documentId, locale? }\n if ('documentId' in relation) {\n return [{ documentId: relation.documentId, locale: relation.locale }];\n }\n // { id }\n return [];\n }\n\n if (Array.isArray(relation)) {\n return relation.map((item) => (isShortHand(item) ? { documentId: item } : item)); // id[]\n }\n\n return [];\n};\n\n/**\n * Get all relations document ids from a relation input value\n */\nconst extractRelationIds = <T extends Attribute.RelationKind.Any>(\n relation: EntityService.Params.Attribute.RelationInputValue<T>\n): LongHandDocument[] => {\n const ids = handlePrimitive(relation);\n if (!isObject(relation)) return ids;\n\n if ('set' in relation) ids.push(...handlePrimitive(relation.set)); // set: id[]\n if ('disconnect' in relation) ids.push(...handlePrimitive(relation.disconnect)); // disconnect: id[]\n if ('connect' in relation) {\n // connect: id[] | { id } | ...\n if (!relation.connect) return [];\n ids.push(...handlePrimitive(relation.connect));\n\n // handle positional arguments\n const connect = Array.isArray(relation.connect) ? relation.connect : [relation.connect];\n connect.forEach((relation) => {\n if (isShortHand(relation) || !('position' in relation)) return;\n\n const { position } = relation;\n\n // { connect: { id: id, position: { before: id } } }\n if (position?.before) {\n ids.push(...handlePrimitive({ ...position, id: position.before }));\n }\n\n // { connect: { id: id, position: { after: id } } }\n if (position?.after) {\n ids.push(...handlePrimitive({ ...position, id: position.after }));\n }\n });\n }\n\n return ids;\n};\n\n/**\n * Iterate over all attributes of a Data object and extract all relational document ids.\n * Those will later be transformed to entity ids.\n */\nconst extractDataIds = (\n idMap: IdMap,\n data: Record<string, any>,\n opts: { uid: Common.UID.Schema; locale?: string | null; isDraft?: boolean }\n) => {\n return traverseEntity(\n ({ value, attribute }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n const extractedIds = extractRelationIds(value as any);\n\n // TODO: Handle morph relations (they have multiple targets)\n const target = attribute.target;\n if (!target) return;\n\n extractedIds.forEach((relation) => {\n idMap.add({\n uid: target,\n documentId: relation.documentId,\n locale: getRelationTargetLocale(relation, {\n targetUid: target as Common.UID.Schema,\n sourceUid: opts.uid,\n sourceLocale: opts.locale,\n }),\n isDraft: opts.isDraft,\n });\n });\n }\n },\n { schema: strapi.getModel(opts.uid) },\n data\n );\n};\n\nexport { extractDataIds };\n"],"names":["relation"],"mappings":";;;;AAWA,MAAM,kBAAkB,CACtB,aACuB;AACvB,MAAI,CAAC,UAAU;AACb,WAAO;EACT;AAEI,MAAA,YAAY,QAAQ,GAAG;AACzB,WAAO,CAAC,EAAE,YAAY,SAAA,CAAU;AAAA,EAClC;AAEI,MAAA,WAAW,QAAQ,GAAG;AAExB,QAAI,gBAAgB,UAAU;AACrB,aAAA,CAAC,EAAE,YAAY,SAAS,YAAY,QAAQ,SAAS,QAAQ;AAAA,IACtE;AAEA,WAAO;EACT;AAEI,MAAA,MAAM,QAAQ,QAAQ,GAAG;AACpB,WAAA,SAAS,IAAI,CAAC,SAAU,YAAY,IAAI,IAAI,EAAE,YAAY,KAAK,IAAI,IAAK;AAAA,EACjF;AAEA,SAAO;AACT;AAKA,MAAM,qBAAqB,CACzB,aACuB;AACjB,QAAA,MAAM,gBAAgB,QAAQ;AAChC,MAAA,CAAC,SAAS,QAAQ;AAAU,WAAA;AAEhC,MAAI,SAAS;AAAU,QAAI,KAAK,GAAG,gBAAgB,SAAS,GAAG,CAAC;AAChE,MAAI,gBAAgB;AAAU,QAAI,KAAK,GAAG,gBAAgB,SAAS,UAAU,CAAC;AAC9E,MAAI,aAAa,UAAU;AAEzB,QAAI,CAAC,SAAS;AAAS,aAAO;AAC9B,QAAI,KAAK,GAAG,gBAAgB,SAAS,OAAO,CAAC;AAGvC,UAAA,UAAU,MAAM,QAAQ,SAAS,OAAO,IAAI,SAAS,UAAU,CAAC,SAAS,OAAO;AAC9E,YAAA,QAAQ,CAACA,cAAa;AAC5B,UAAI,YAAYA,SAAQ,KAAK,EAAE,cAAcA;AAAW;AAElD,YAAA,EAAE,SAAaA,IAAAA;AAGrB,UAAI,UAAU,QAAQ;AAChB,YAAA,KAAK,GAAG,gBAAgB,EAAE,GAAG,UAAU,IAAI,SAAS,OAAQ,CAAA,CAAC;AAAA,MACnE;AAGA,UAAI,UAAU,OAAO;AACf,YAAA,KAAK,GAAG,gBAAgB,EAAE,GAAG,UAAU,IAAI,SAAS,MAAO,CAAA,CAAC;AAAA,MAClE;AAAA,IAAA,CACD;AAAA,EACH;AAEO,SAAA;AACT;AAMA,MAAM,iBAAiB,CACrB,OACA,MACA,SACG;AACI,SAAA;AAAA,IACL,CAAC,EAAE,OAAO,gBAAgB;AAEpB,UAAA,UAAU,SAAS,YAAY;AAC3B,cAAA,eAAe,mBAAmB,KAAY;AAGpD,cAAM,SAAS,UAAU;AACzB,YAAI,CAAC;AAAQ;AAEA,qBAAA,QAAQ,CAAC,aAAa;AACjC,gBAAM,IAAI;AAAA,YACR,KAAK;AAAA,YACL,YAAY,SAAS;AAAA,YACrB,QAAQ,wBAAwB,UAAU;AAAA,cACxC,WAAW;AAAA,cACX,WAAW,KAAK;AAAA,cAChB,cAAc,KAAK;AAAA,YAAA,CACpB;AAAA,YACD,SAAS,KAAK;AAAA,UAAA,CACf;AAAA,QAAA,CACF;AAAA,MACH;AAAA,IACF;AAAA,IACA,EAAE,QAAQ,OAAO,SAAS,KAAK,GAAG,EAAE;AAAA,IACpC;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"data-ids.mjs","sources":["../../../../../../src/services/document-service/transform/relations/extract/data-ids.ts"],"sourcesContent":["import { isObject } from 'lodash/fp';\nimport { Modules, Schema, UID } from '@strapi/types';\nimport { traverseEntity } from '@strapi/utils';\nimport { IdMap } from '../../id-map';\nimport { ShortHand, LongHand, LongHandDocument } from '../utils/types';\nimport { isShortHand, isLongHand } from '../utils/data';\nimport { getRelationTargetLocale } from '../utils/i18n';\nimport { getRelationTargetStatus } from '../utils/dp';\n/**\n * Get relation ids from primitive representation (id, id[], {id}, {id}[])\n */\nconst handlePrimitive = (\n relation: ShortHand | LongHand | ShortHand[] | LongHand[] | null | undefined | any\n): LongHandDocument[] => {\n if (!relation) {\n return []; // null\n }\n\n if (isShortHand(relation)) {\n return [{ documentId: relation }]; // id\n }\n\n if (isLongHand(relation)) {\n // { documentId, locale? }\n if ('documentId' in relation) {\n return [\n { documentId: relation.documentId, locale: relation.locale, status: relation.status },\n ];\n }\n // { id }\n return [];\n }\n\n if (Array.isArray(relation)) {\n return relation.map((item) => (isShortHand(item) ? { documentId: item } : item)); // id[]\n }\n\n return [];\n};\n\n/**\n * Get all relations document ids from a relation input value\n */\nconst extractRelationIds = <T extends Schema.Attribute.RelationKind.Any>(\n relation: Modules.EntityService.Params.Attribute.RelationInputValue<T>\n): LongHandDocument[] => {\n const ids = handlePrimitive(relation);\n if (!isObject(relation)) return ids;\n\n if ('set' in relation) ids.push(...handlePrimitive(relation.set)); // set: id[]\n if ('disconnect' in relation) ids.push(...handlePrimitive(relation.disconnect)); // disconnect: id[]\n if ('connect' in relation) {\n // connect: id[] | { id } | ...\n if (!relation.connect) return [];\n ids.push(...handlePrimitive(relation.connect));\n\n // handle positional arguments\n const connect = Array.isArray(relation.connect) ? relation.connect : [relation.connect];\n connect.forEach((relation) => {\n if (isShortHand(relation) || !('position' in relation)) return;\n\n const { position } = relation;\n\n // { connect: { id: id, position: { before: id } } }\n if (position?.before) {\n ids.push(...handlePrimitive({ ...position, documentId: position.before }));\n }\n\n // { connect: { id: id, position: { after: id } } }\n if (position?.after) {\n ids.push(...handlePrimitive({ ...position, documentId: position.after }));\n }\n });\n }\n\n return ids;\n};\n\n/**\n * Iterate over all attributes of a Data object and extract all relational document ids.\n * Those will later be transformed to entity ids.\n */\nconst extractDataIds = (\n idMap: IdMap,\n data: Record<string, any>,\n opts: { uid: UID.Schema; locale?: string | null; status?: 'draft' | 'published' }\n) => {\n return traverseEntity(\n ({ value, attribute }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n const extractedIds = extractRelationIds(value as any);\n\n // TODO: Handle morph relations (they have multiple targets)\n const target = attribute.target;\n if (!target) return;\n\n // If not connecting to any version on disabled d&p, we should connect to both draft and published relations at the same time\n extractedIds.forEach((relation) => {\n const targetLocale = getRelationTargetLocale(relation, {\n targetUid: target as UID.Schema,\n sourceUid: opts.uid,\n sourceLocale: opts.locale,\n });\n\n const targetStatus = getRelationTargetStatus(relation, {\n targetUid: target as UID.Schema,\n sourceUid: opts.uid,\n sourceStatus: opts.status,\n });\n\n targetStatus.forEach((status) => {\n idMap.add({\n uid: target,\n documentId: relation.documentId,\n locale: targetLocale,\n status,\n });\n });\n });\n }\n },\n { schema: strapi.getModel(opts.uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n\nexport { extractDataIds };\n"],"names":["relation"],"mappings":";;;;;AAWA,MAAM,kBAAkB,CACtB,aACuB;AACvB,MAAI,CAAC,UAAU;AACb,WAAO;EACT;AAEI,MAAA,YAAY,QAAQ,GAAG;AACzB,WAAO,CAAC,EAAE,YAAY,SAAA,CAAU;AAAA,EAClC;AAEI,MAAA,WAAW,QAAQ,GAAG;AAExB,QAAI,gBAAgB,UAAU;AACrB,aAAA;AAAA,QACL,EAAE,YAAY,SAAS,YAAY,QAAQ,SAAS,QAAQ,QAAQ,SAAS,OAAO;AAAA,MAAA;AAAA,IAExF;AAEA,WAAO;EACT;AAEI,MAAA,MAAM,QAAQ,QAAQ,GAAG;AACpB,WAAA,SAAS,IAAI,CAAC,SAAU,YAAY,IAAI,IAAI,EAAE,YAAY,KAAK,IAAI,IAAK;AAAA,EACjF;AAEA,SAAO;AACT;AAKA,MAAM,qBAAqB,CACzB,aACuB;AACjB,QAAA,MAAM,gBAAgB,QAAQ;AAChC,MAAA,CAAC,SAAS,QAAQ;AAAU,WAAA;AAEhC,MAAI,SAAS;AAAU,QAAI,KAAK,GAAG,gBAAgB,SAAS,GAAG,CAAC;AAChE,MAAI,gBAAgB;AAAU,QAAI,KAAK,GAAG,gBAAgB,SAAS,UAAU,CAAC;AAC9E,MAAI,aAAa,UAAU;AAEzB,QAAI,CAAC,SAAS;AAAS,aAAO;AAC9B,QAAI,KAAK,GAAG,gBAAgB,SAAS,OAAO,CAAC;AAGvC,UAAA,UAAU,MAAM,QAAQ,SAAS,OAAO,IAAI,SAAS,UAAU,CAAC,SAAS,OAAO;AAC9E,YAAA,QAAQ,CAACA,cAAa;AAC5B,UAAI,YAAYA,SAAQ,KAAK,EAAE,cAAcA;AAAW;AAElD,YAAA,EAAE,SAAaA,IAAAA;AAGrB,UAAI,UAAU,QAAQ;AAChB,YAAA,KAAK,GAAG,gBAAgB,EAAE,GAAG,UAAU,YAAY,SAAS,OAAQ,CAAA,CAAC;AAAA,MAC3E;AAGA,UAAI,UAAU,OAAO;AACf,YAAA,KAAK,GAAG,gBAAgB,EAAE,GAAG,UAAU,YAAY,SAAS,MAAO,CAAA,CAAC;AAAA,MAC1E;AAAA,IAAA,CACD;AAAA,EACH;AAEO,SAAA;AACT;AAMA,MAAM,iBAAiB,CACrB,OACA,MACA,SACG;AACI,SAAA;AAAA,IACL,CAAC,EAAE,OAAO,gBAAgB;AAEpB,UAAA,UAAU,SAAS,YAAY;AAC3B,cAAA,eAAe,mBAAmB,KAAY;AAGpD,cAAM,SAAS,UAAU;AACzB,YAAI,CAAC;AAAQ;AAGA,qBAAA,QAAQ,CAAC,aAAa;AAC3B,gBAAA,eAAe,wBAAwB,UAAU;AAAA,YACrD,WAAW;AAAA,YACX,WAAW,KAAK;AAAA,YAChB,cAAc,KAAK;AAAA,UAAA,CACpB;AAEK,gBAAA,eAAe,wBAAwB,UAAU;AAAA,YACrD,WAAW;AAAA,YACX,WAAW,KAAK;AAAA,YAChB,cAAc,KAAK;AAAA,UAAA,CACpB;AAEY,uBAAA,QAAQ,CAAC,WAAW;AAC/B,kBAAM,IAAI;AAAA,cACR,KAAK;AAAA,cACL,YAAY,SAAS;AAAA,cACrB,QAAQ;AAAA,cACR;AAAA,YAAA,CACD;AAAA,UAAA,CACF;AAAA,QAAA,CACF;AAAA,MACH;AAAA,IACF;AAAA,IACA,EAAE,QAAQ,OAAO,SAAS,KAAK,GAAG,GAAG,UAAU,OAAO,SAAS,KAAK,MAAM,EAAE;AAAA,IAC5E;AAAA,EAAA;AAEJ;"}
@@ -1,9 +1,9 @@
1
- import { Common } from '@strapi/types';
1
+ import type { Schema, UID } from '@strapi/types';
2
2
  import { IdMap } from '../../id-map';
3
3
  declare const transformDataIdsVisitor: (idMap: IdMap, data: Record<string, any>, opts: {
4
- uid: Common.UID.Schema;
4
+ uid: UID.Schema;
5
5
  locale?: string | null;
6
- isDraft?: boolean;
6
+ status?: 'draft' | 'published';
7
7
  allowMissingId?: boolean;
8
8
  }) => Promise<import("@strapi/utils/dist/types").Data>;
9
9
  export { transformDataIdsVisitor };
@@ -1 +1 @@
1
- {"version":3,"file":"data-ids.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/transform/data-ids.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,MAAM,EAAE,MAAM,eAAe,CAAC;AAKjE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AA8GrC,QAAA,MAAM,uBAAuB,UACpB,KAAK,QACN,OAAO,MAAM,EAAE,GAAG,CAAC,QACnB;IACJ,GAAG,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,qDAwCF,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"data-ids.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/transform/data-ids.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,MAAM,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAK1D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AA8JrC,QAAA,MAAM,uBAAuB,UACpB,KAAK,QACN,OAAO,MAAM,EAAE,GAAG,CAAC,QACnB;IACJ,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,qDA6DF,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -4,13 +4,14 @@ const _ = require("lodash/fp");
4
4
  const strapiUtils = require("@strapi/utils");
5
5
  const data = require("../utils/data.js");
6
6
  const i18n = require("../utils/i18n.js");
7
+ const dp = require("../utils/dp.js");
7
8
  const isNumeric = (value) => {
8
9
  if (Array.isArray(value))
9
10
  return false;
10
11
  const parsed = parseInt(value, 10);
11
12
  return !Number.isNaN(parsed);
12
13
  };
13
- const transformPrimitive = (relation, getId) => {
14
+ const transformPrimitive = (relation, getIds) => {
14
15
  if (isNumeric(relation)) {
15
16
  return relation;
16
17
  }
@@ -18,48 +19,64 @@ const transformPrimitive = (relation, getId) => {
18
19
  return relation;
19
20
  }
20
21
  if (data.isShortHand(relation)) {
21
- return getId(relation);
22
+ const ids = getIds(relation);
23
+ if (ids?.length === 1)
24
+ return ids[0];
25
+ return ids;
22
26
  }
23
27
  if (data.isLongHand(relation)) {
24
28
  if (!("documentId" in relation))
25
29
  return relation;
26
- const entryId = getId(relation.documentId, relation.locale);
27
- if (!entryId)
30
+ const ids = getIds(relation.documentId, relation.locale, relation.status);
31
+ if (!ids?.length)
28
32
  return void 0;
29
- return { ...relation, id: entryId };
33
+ if (ids.length === 1)
34
+ return { id: ids[0], ..._.pick(["position"], relation) };
35
+ return ids.map((id) => ({ id, ..._.pick(["position"], relation) }));
30
36
  }
31
37
  if (Array.isArray(relation)) {
32
- return relation.map((item) => transformPrimitive(item, getId)).filter(Boolean);
38
+ return relation.flatMap((item) => transformPrimitive(item, getIds)).filter(Boolean);
33
39
  }
34
40
  return void 0;
35
41
  };
36
- const transformRelationIdsVisitor = (relation, getId) => {
37
- const map = transformPrimitive(relation, getId);
42
+ const transformRelationIdsVisitor = (relation, getIds) => {
43
+ const map = transformPrimitive(relation, getIds);
38
44
  if (map)
39
45
  return map;
40
46
  if (!_.isObject(relation))
41
47
  return relation;
48
+ if (!("set" in relation) && !("disconnect" in relation) && !("connect" in relation)) {
49
+ return;
50
+ }
42
51
  if ("set" in relation) {
43
- relation.set = transformPrimitive(relation.set, getId);
52
+ relation.set = transformPrimitive(relation.set, getIds);
44
53
  }
45
54
  if ("disconnect" in relation) {
46
- relation.disconnect = transformPrimitive(relation.disconnect, getId);
55
+ relation.disconnect = transformPrimitive(relation.disconnect, getIds);
47
56
  }
48
57
  if ("connect" in relation) {
49
- relation.connect = transformPrimitive(relation.connect, getId);
58
+ relation.connect = transformPrimitive(relation.connect, getIds);
50
59
  const mapPosition = (relation2) => {
51
60
  if (data.isShortHand(relation2) || !("position" in relation2))
52
61
  return relation2;
53
- const { position } = relation2;
62
+ const position = { ...relation2?.position };
54
63
  if (position?.before) {
55
- const { id } = transformPrimitive({ ...position, documentId: position.before }, getId);
56
- position.before = id;
64
+ const result = transformPrimitive({ ...position, documentId: position.before }, getIds);
65
+ if (Array.isArray(result)) {
66
+ position.before = result[0]?.id;
67
+ } else {
68
+ position.before = result?.id;
69
+ }
57
70
  }
58
71
  if (position?.after) {
59
- const { id } = transformPrimitive({ ...position, documentId: position.after }, getId);
60
- position.after = id;
72
+ const result = transformPrimitive({ ...position, documentId: position.after }, getIds);
73
+ if (Array.isArray(result)) {
74
+ position.after = result[0]?.id;
75
+ } else {
76
+ position.after = result?.id;
77
+ }
61
78
  }
62
- return relation2;
79
+ return { ...relation2, position };
63
80
  };
64
81
  if (Array.isArray(relation.connect)) {
65
82
  relation.connect = relation.connect.map(mapPosition);
@@ -85,31 +102,38 @@ const transformDataIdsVisitor = (idMap, data2, opts) => {
85
102
  return;
86
103
  if (EXCLUDED_FIELDS.includes(key))
87
104
  return;
88
- const getId = (documentId, locale) => {
89
- const entryId = idMap.get({
90
- uid: target,
91
- documentId,
92
- locale: i18n.getRelationTargetLocale(
93
- { documentId, locale },
94
- {
95
- targetUid: target,
96
- sourceUid: opts.uid,
97
- sourceLocale: opts.locale
98
- }
99
- ),
100
- isDraft: opts.isDraft
101
- });
102
- if (entryId)
103
- return entryId;
104
- if (opts.allowMissingId)
105
- return null;
106
- throw new strapiUtils.errors.ValidationError(`Document with id "${documentId}" not found`);
105
+ const getIds = (documentId, locale, status) => {
106
+ const targetLocale = i18n.getRelationTargetLocale(
107
+ { documentId, locale },
108
+ { targetUid: target, sourceUid: opts.uid, sourceLocale: opts.locale }
109
+ );
110
+ const targetStatuses = dp.getRelationTargetStatus(
111
+ { documentId, status },
112
+ { targetUid: target, sourceUid: opts.uid, sourceStatus: opts.status }
113
+ );
114
+ const ids = [];
115
+ for (const targetStatus of targetStatuses) {
116
+ const entryId = idMap.get({
117
+ uid: target,
118
+ documentId,
119
+ locale: targetLocale,
120
+ status: targetStatus
121
+ });
122
+ if (entryId)
123
+ ids.push(entryId);
124
+ }
125
+ if (!ids.length && !opts.allowMissingId) {
126
+ throw new strapiUtils.errors.ValidationError(
127
+ `Document with id "${documentId}", locale "${targetLocale}" not found`
128
+ );
129
+ }
130
+ return ids;
107
131
  };
108
- const newRelation = transformRelationIdsVisitor(value, getId);
132
+ const newRelation = transformRelationIdsVisitor(value, getIds);
109
133
  set(key, newRelation);
110
134
  }
111
135
  },
112
- { schema: strapi.getModel(opts.uid) },
136
+ { schema: strapi.getModel(opts.uid), getModel: strapi.getModel.bind(strapi) },
113
137
  data2
114
138
  );
115
139
  };
@@ -1 +1 @@
1
- {"version":3,"file":"data-ids.js","sources":["../../../../../../src/services/document-service/transform/relations/transform/data-ids.ts"],"sourcesContent":["import { isObject, isNil } from 'lodash/fp';\n\nimport { EntityService, Attribute, Common } from '@strapi/types';\nimport { traverseEntity, errors } from '@strapi/utils';\n\nimport { ShortHand, LongHand, ID, GetId } from '../utils/types';\nimport { isShortHand, isLongHand } from '../utils/data';\nimport { IdMap } from '../../id-map';\nimport { getRelationTargetLocale } from '../utils/i18n';\n\nconst isNumeric = (value: any): value is number => {\n if (Array.isArray(value)) return false; // Handle [1, 'docId'] case\n const parsed = parseInt(value, 10);\n return !Number.isNaN(parsed);\n};\n\nconst transformPrimitive = <T extends ShortHand | LongHand>(\n relation: T | T[] | null | undefined,\n getId: GetId\n): T | T[] | undefined => {\n // TODO: Remove this, we should use the long hand version with 'id' for this case\n // If id value is a number, return it as is, it's already an entry id\n if (isNumeric(relation)) {\n return relation;\n }\n\n // null\n if (isNil(relation)) {\n return relation as T | undefined;\n }\n\n // id\n if (isShortHand(relation)) {\n return getId(relation) as T;\n }\n\n // { id }\n if (isLongHand(relation)) {\n // If the id is already an entry id, return it as is\n if (!('documentId' in relation)) return relation;\n\n // @ts-expect-error - TODO: Add relation type\n const entryId = getId(relation.documentId, relation.locale) as T;\n\n // If the id is not found, return undefined\n if (!entryId) return undefined;\n\n return { ...(relation as object), id: entryId } as T;\n }\n\n // id[]\n if (Array.isArray(relation)) {\n return relation.map((item) => transformPrimitive(item, getId)).filter(Boolean) as T[];\n }\n return undefined;\n};\n\nconst transformRelationIdsVisitor = <T extends Attribute.RelationKind.Any>(\n relation: EntityService.Params.Attribute.RelationInputValue<T>,\n getId: GetId\n): EntityService.Params.Attribute.RelationInputValue<T> => {\n const map = transformPrimitive(relation as any, getId);\n if (map) return map;\n\n if (!isObject(relation)) return relation;\n\n // set: id[]\n // what if result of mapPrimitive is undefined?\n if ('set' in relation) {\n relation.set = transformPrimitive(relation.set as any, getId);\n }\n if ('disconnect' in relation) {\n relation.disconnect = transformPrimitive(relation.disconnect as any, getId);\n }\n\n if ('connect' in relation) {\n // connect: id[] | { id } | ...\n relation.connect = transformPrimitive(relation.connect as any, getId);\n\n const mapPosition = (relation: any) => {\n if (isShortHand(relation) || !('position' in relation)) return relation;\n\n const { position } = relation;\n\n // { connect: { id: id, position: { before: id } } }\n if (position?.before) {\n const { id } = transformPrimitive({ ...position, documentId: position.before }, getId);\n position.before = id;\n }\n\n // { connect: { id: id, position: { after: id } } }\n if (position?.after) {\n const { id } = transformPrimitive({ ...position, documentId: position.after }, getId);\n position.after = id;\n }\n\n return relation;\n };\n\n if (Array.isArray(relation.connect)) {\n relation.connect = relation.connect.map(mapPosition);\n } else {\n relation.connect = mapPosition(relation.connect);\n }\n }\n\n return relation;\n};\n\nconst EXCLUDED_FIELDS = [\n 'createdBy',\n 'updatedBy',\n 'localizations',\n 'strapi_stage',\n 'strapi_assignee',\n];\n\nconst transformDataIdsVisitor = (\n idMap: IdMap,\n data: Record<string, any>,\n opts: {\n uid: Common.UID.Schema;\n locale?: string | null;\n isDraft?: boolean;\n allowMissingId?: boolean; // Whether to ignore missing ids and not throw any error\n }\n) => {\n return traverseEntity(\n ({ key, value, attribute }, { set }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n const target = attribute.target;\n // TODO: Handle polymorphic relations\n if (!target) return;\n // TODO: Handle this differently\n if (EXCLUDED_FIELDS.includes(key)) return;\n\n const getId = (documentId: ID, locale?: string): ID | null => {\n const entryId = idMap.get({\n uid: target,\n documentId,\n locale: getRelationTargetLocale(\n { documentId, locale },\n {\n targetUid: target as Common.UID.Schema,\n sourceUid: opts.uid,\n sourceLocale: opts.locale,\n }\n ),\n isDraft: opts.isDraft,\n });\n\n if (entryId) return entryId;\n if (opts.allowMissingId) return null;\n\n throw new errors.ValidationError(`Document with id \"${documentId}\" not found`);\n };\n\n const newRelation = transformRelationIdsVisitor(value as any, getId);\n set(key, newRelation as any);\n }\n },\n { schema: strapi.getModel(opts.uid) },\n data\n );\n};\n\nexport { transformDataIdsVisitor };\n"],"names":["isNil","isShortHand","isLongHand","isObject","relation","data","traverseEntity","getRelationTargetLocale","errors"],"mappings":"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"}
1
+ {"version":3,"file":"data-ids.js","sources":["../../../../../../src/services/document-service/transform/relations/transform/data-ids.ts"],"sourcesContent":["import { isObject, isNil, pick } from 'lodash/fp';\n\nimport type { Modules, Schema, UID } from '@strapi/types';\nimport { traverseEntity, errors } from '@strapi/utils';\n\nimport { ShortHand, LongHand, ID, GetIds } from '../utils/types';\nimport { isShortHand, isLongHand } from '../utils/data';\nimport { IdMap } from '../../id-map';\nimport { getRelationTargetLocale } from '../utils/i18n';\nimport { getRelationTargetStatus } from '../utils/dp';\n\nconst isNumeric = (value: any): value is number => {\n if (Array.isArray(value)) return false; // Handle [1, 'docId'] case\n const parsed = parseInt(value, 10);\n return !Number.isNaN(parsed);\n};\n\n/**\n * Transform primitive relation representation to entry ids\n *\n * docId -> id\n * [docId] -> [id]\n * { documentID, locale, status } -> { id }\n * [{ documentID, locale, status }] -> [{ id }]\n *\n * Note: There are scenarios where a single documentID can map to multiple ids.\n * By default the returned format will match the input format.\n * Only when the docID maps to multiple ids, an array will always be returned, regardless of the input format.\n */\nconst transformPrimitive = <T extends ShortHand | LongHand>(\n relation: T | T[] | null | undefined,\n getIds: GetIds\n): T | T[] | undefined => {\n // TODO: Remove this, we should use the long hand version with 'id' for this case\n // If id value is a number, return it as is, it's already an entry id\n if (isNumeric(relation)) {\n return relation;\n }\n\n // null\n if (isNil(relation)) {\n return relation as T | undefined;\n }\n\n // id\n if (isShortHand(relation)) {\n const ids = getIds(relation) as T[];\n\n // Return it with the same format for consistency\n if (ids?.length === 1) return ids[0];\n\n // Return an array if multiple ids are found\n return ids;\n }\n\n // { id }\n if (isLongHand(relation)) {\n // If the id is already an entry id, return it as is\n if (!('documentId' in relation)) return relation;\n\n // @ts-expect-error - TODO: Add relation type\n const ids = getIds(relation.documentId, relation.locale, relation.status);\n\n // No ids to connect\n if (!ids?.length) return undefined;\n\n // Return it with the same format for consistency\n if (ids.length === 1) return { id: ids[0], ...pick(['position'], relation) } as T;\n\n // Return an array if it multiple ids are found\n return ids.map((id: ID) => ({ id, ...pick(['position'], relation) })) as T[];\n }\n\n // id[]\n if (Array.isArray(relation)) {\n return relation.flatMap((item) => transformPrimitive(item, getIds)).filter(Boolean) as T[];\n }\n\n return undefined;\n};\n\n/**\n * Transform ids in any type of relation input value\n * - set: [docId]\n * - disconnect: [docId]\n * - connect: [docId]\n * Or using any of the other primitive representations\n */\nconst transformRelationIdsVisitor = <T extends Schema.Attribute.RelationKind.Any>(\n relation: Modules.EntityService.Params.Attribute.RelationInputValue<T>,\n getIds: GetIds\n): Modules.EntityService.Params.Attribute.RelationInputValue<T> | undefined => {\n const map = transformPrimitive(relation as any, getIds);\n if (map) return map;\n\n if (!isObject(relation)) return relation;\n\n if (!('set' in relation) && !('disconnect' in relation) && !('connect' in relation)) {\n // The entry id couldn't be found and there are no connection properties in\n // the relation, therefore we want to remove the relation\n return;\n }\n\n // set: id[]\n // what if result of mapPrimitive is undefined?\n if ('set' in relation) {\n relation.set = transformPrimitive(relation.set as any, getIds);\n }\n\n if ('disconnect' in relation) {\n relation.disconnect = transformPrimitive(relation.disconnect as any, getIds);\n }\n\n if ('connect' in relation) {\n // connect: id[] | { id } | ...\n relation.connect = transformPrimitive(relation.connect as any, getIds);\n\n const mapPosition = (relation: any) => {\n if (isShortHand(relation) || !('position' in relation)) return relation;\n\n const position = { ...relation?.position };\n\n // { connect: { id: id, position: { before: id } } }\n if (position?.before) {\n const result = transformPrimitive({ ...position, documentId: position.before }, getIds);\n\n if (Array.isArray(result)) {\n position.before = result[0]?.id;\n } else {\n position.before = result?.id;\n }\n }\n\n // { connect: { id: id, position: { after: id } } }\n if (position?.after) {\n const result = transformPrimitive({ ...position, documentId: position.after }, getIds);\n\n if (Array.isArray(result)) {\n position.after = result[0]?.id;\n } else {\n position.after = result?.id;\n }\n }\n\n return { ...relation, position };\n };\n\n if (Array.isArray(relation.connect)) {\n relation.connect = relation.connect.map(mapPosition);\n } else {\n relation.connect = mapPosition(relation.connect);\n }\n }\n\n return relation;\n};\n\nconst EXCLUDED_FIELDS = [\n 'createdBy',\n 'updatedBy',\n 'localizations',\n 'strapi_stage',\n 'strapi_assignee',\n];\n\nconst transformDataIdsVisitor = (\n idMap: IdMap,\n data: Record<string, any>,\n opts: {\n uid: UID.Schema;\n locale?: string | null;\n status?: 'draft' | 'published';\n allowMissingId?: boolean; // Whether to ignore missing ids and not throw any error\n }\n) => {\n return traverseEntity(\n ({ key, value, attribute }, { set }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n const target = attribute.target as UID.Schema | undefined;\n // TODO: Handle polymorphic relations\n if (!target) return;\n // TODO: V5 remove excluded fields and use { id: } syntax for those relations\n if (EXCLUDED_FIELDS.includes(key)) return;\n\n const getIds = (\n documentId: ID,\n locale?: string,\n status?: 'draft' | 'published'\n ): ID[] | null => {\n // locale to connect to\n const targetLocale = getRelationTargetLocale(\n { documentId, locale },\n { targetUid: target, sourceUid: opts.uid, sourceLocale: opts.locale }\n );\n\n // status(es) to connect to\n const targetStatuses = getRelationTargetStatus(\n { documentId, status },\n { targetUid: target, sourceUid: opts.uid, sourceStatus: opts.status }\n );\n\n const ids = [];\n\n // Find mapping between documentID -> id(s).\n // There are scenarios where a single documentID can map to multiple ids.\n // e.g when connecting Non DP -> DP and connecting to both the draft and publish version at the same time\n for (const targetStatus of targetStatuses) {\n const entryId = idMap.get({\n uid: target,\n documentId,\n locale: targetLocale,\n status: targetStatus,\n });\n\n if (entryId) ids.push(entryId);\n }\n\n if (!ids.length && !opts.allowMissingId) {\n throw new errors.ValidationError(\n `Document with id \"${documentId}\", locale \"${targetLocale}\" not found`\n );\n }\n\n return ids;\n };\n\n const newRelation = transformRelationIdsVisitor(value as any, getIds);\n set(key, newRelation as any);\n }\n },\n { schema: strapi.getModel(opts.uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n\nexport { transformDataIdsVisitor };\n"],"names":["isNil","isShortHand","isLongHand","pick","isObject","relation","data","traverseEntity","getRelationTargetLocale","getRelationTargetStatus","errors"],"mappings":"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"}
@@ -1,14 +1,15 @@
1
- import { isObject, isNil } from "lodash/fp";
1
+ import { isObject, isNil, pick } from "lodash/fp";
2
2
  import { traverseEntity, errors } from "@strapi/utils";
3
3
  import { isShortHand, isLongHand } from "../utils/data.mjs";
4
4
  import { getRelationTargetLocale } from "../utils/i18n.mjs";
5
+ import { getRelationTargetStatus } from "../utils/dp.mjs";
5
6
  const isNumeric = (value) => {
6
7
  if (Array.isArray(value))
7
8
  return false;
8
9
  const parsed = parseInt(value, 10);
9
10
  return !Number.isNaN(parsed);
10
11
  };
11
- const transformPrimitive = (relation, getId) => {
12
+ const transformPrimitive = (relation, getIds) => {
12
13
  if (isNumeric(relation)) {
13
14
  return relation;
14
15
  }
@@ -16,48 +17,64 @@ const transformPrimitive = (relation, getId) => {
16
17
  return relation;
17
18
  }
18
19
  if (isShortHand(relation)) {
19
- return getId(relation);
20
+ const ids = getIds(relation);
21
+ if (ids?.length === 1)
22
+ return ids[0];
23
+ return ids;
20
24
  }
21
25
  if (isLongHand(relation)) {
22
26
  if (!("documentId" in relation))
23
27
  return relation;
24
- const entryId = getId(relation.documentId, relation.locale);
25
- if (!entryId)
28
+ const ids = getIds(relation.documentId, relation.locale, relation.status);
29
+ if (!ids?.length)
26
30
  return void 0;
27
- return { ...relation, id: entryId };
31
+ if (ids.length === 1)
32
+ return { id: ids[0], ...pick(["position"], relation) };
33
+ return ids.map((id) => ({ id, ...pick(["position"], relation) }));
28
34
  }
29
35
  if (Array.isArray(relation)) {
30
- return relation.map((item) => transformPrimitive(item, getId)).filter(Boolean);
36
+ return relation.flatMap((item) => transformPrimitive(item, getIds)).filter(Boolean);
31
37
  }
32
38
  return void 0;
33
39
  };
34
- const transformRelationIdsVisitor = (relation, getId) => {
35
- const map = transformPrimitive(relation, getId);
40
+ const transformRelationIdsVisitor = (relation, getIds) => {
41
+ const map = transformPrimitive(relation, getIds);
36
42
  if (map)
37
43
  return map;
38
44
  if (!isObject(relation))
39
45
  return relation;
46
+ if (!("set" in relation) && !("disconnect" in relation) && !("connect" in relation)) {
47
+ return;
48
+ }
40
49
  if ("set" in relation) {
41
- relation.set = transformPrimitive(relation.set, getId);
50
+ relation.set = transformPrimitive(relation.set, getIds);
42
51
  }
43
52
  if ("disconnect" in relation) {
44
- relation.disconnect = transformPrimitive(relation.disconnect, getId);
53
+ relation.disconnect = transformPrimitive(relation.disconnect, getIds);
45
54
  }
46
55
  if ("connect" in relation) {
47
- relation.connect = transformPrimitive(relation.connect, getId);
56
+ relation.connect = transformPrimitive(relation.connect, getIds);
48
57
  const mapPosition = (relation2) => {
49
58
  if (isShortHand(relation2) || !("position" in relation2))
50
59
  return relation2;
51
- const { position } = relation2;
60
+ const position = { ...relation2?.position };
52
61
  if (position?.before) {
53
- const { id } = transformPrimitive({ ...position, documentId: position.before }, getId);
54
- position.before = id;
62
+ const result = transformPrimitive({ ...position, documentId: position.before }, getIds);
63
+ if (Array.isArray(result)) {
64
+ position.before = result[0]?.id;
65
+ } else {
66
+ position.before = result?.id;
67
+ }
55
68
  }
56
69
  if (position?.after) {
57
- const { id } = transformPrimitive({ ...position, documentId: position.after }, getId);
58
- position.after = id;
70
+ const result = transformPrimitive({ ...position, documentId: position.after }, getIds);
71
+ if (Array.isArray(result)) {
72
+ position.after = result[0]?.id;
73
+ } else {
74
+ position.after = result?.id;
75
+ }
59
76
  }
60
- return relation2;
77
+ return { ...relation2, position };
61
78
  };
62
79
  if (Array.isArray(relation.connect)) {
63
80
  relation.connect = relation.connect.map(mapPosition);
@@ -83,31 +100,38 @@ const transformDataIdsVisitor = (idMap, data, opts) => {
83
100
  return;
84
101
  if (EXCLUDED_FIELDS.includes(key))
85
102
  return;
86
- const getId = (documentId, locale) => {
87
- const entryId = idMap.get({
88
- uid: target,
89
- documentId,
90
- locale: getRelationTargetLocale(
91
- { documentId, locale },
92
- {
93
- targetUid: target,
94
- sourceUid: opts.uid,
95
- sourceLocale: opts.locale
96
- }
97
- ),
98
- isDraft: opts.isDraft
99
- });
100
- if (entryId)
101
- return entryId;
102
- if (opts.allowMissingId)
103
- return null;
104
- throw new errors.ValidationError(`Document with id "${documentId}" not found`);
103
+ const getIds = (documentId, locale, status) => {
104
+ const targetLocale = getRelationTargetLocale(
105
+ { documentId, locale },
106
+ { targetUid: target, sourceUid: opts.uid, sourceLocale: opts.locale }
107
+ );
108
+ const targetStatuses = getRelationTargetStatus(
109
+ { documentId, status },
110
+ { targetUid: target, sourceUid: opts.uid, sourceStatus: opts.status }
111
+ );
112
+ const ids = [];
113
+ for (const targetStatus of targetStatuses) {
114
+ const entryId = idMap.get({
115
+ uid: target,
116
+ documentId,
117
+ locale: targetLocale,
118
+ status: targetStatus
119
+ });
120
+ if (entryId)
121
+ ids.push(entryId);
122
+ }
123
+ if (!ids.length && !opts.allowMissingId) {
124
+ throw new errors.ValidationError(
125
+ `Document with id "${documentId}", locale "${targetLocale}" not found`
126
+ );
127
+ }
128
+ return ids;
105
129
  };
106
- const newRelation = transformRelationIdsVisitor(value, getId);
130
+ const newRelation = transformRelationIdsVisitor(value, getIds);
107
131
  set(key, newRelation);
108
132
  }
109
133
  },
110
- { schema: strapi.getModel(opts.uid) },
134
+ { schema: strapi.getModel(opts.uid), getModel: strapi.getModel.bind(strapi) },
111
135
  data
112
136
  );
113
137
  };
@@ -1 +1 @@
1
- {"version":3,"file":"data-ids.mjs","sources":["../../../../../../src/services/document-service/transform/relations/transform/data-ids.ts"],"sourcesContent":["import { isObject, isNil } from 'lodash/fp';\n\nimport { EntityService, Attribute, Common } from '@strapi/types';\nimport { traverseEntity, errors } from '@strapi/utils';\n\nimport { ShortHand, LongHand, ID, GetId } from '../utils/types';\nimport { isShortHand, isLongHand } from '../utils/data';\nimport { IdMap } from '../../id-map';\nimport { getRelationTargetLocale } from '../utils/i18n';\n\nconst isNumeric = (value: any): value is number => {\n if (Array.isArray(value)) return false; // Handle [1, 'docId'] case\n const parsed = parseInt(value, 10);\n return !Number.isNaN(parsed);\n};\n\nconst transformPrimitive = <T extends ShortHand | LongHand>(\n relation: T | T[] | null | undefined,\n getId: GetId\n): T | T[] | undefined => {\n // TODO: Remove this, we should use the long hand version with 'id' for this case\n // If id value is a number, return it as is, it's already an entry id\n if (isNumeric(relation)) {\n return relation;\n }\n\n // null\n if (isNil(relation)) {\n return relation as T | undefined;\n }\n\n // id\n if (isShortHand(relation)) {\n return getId(relation) as T;\n }\n\n // { id }\n if (isLongHand(relation)) {\n // If the id is already an entry id, return it as is\n if (!('documentId' in relation)) return relation;\n\n // @ts-expect-error - TODO: Add relation type\n const entryId = getId(relation.documentId, relation.locale) as T;\n\n // If the id is not found, return undefined\n if (!entryId) return undefined;\n\n return { ...(relation as object), id: entryId } as T;\n }\n\n // id[]\n if (Array.isArray(relation)) {\n return relation.map((item) => transformPrimitive(item, getId)).filter(Boolean) as T[];\n }\n return undefined;\n};\n\nconst transformRelationIdsVisitor = <T extends Attribute.RelationKind.Any>(\n relation: EntityService.Params.Attribute.RelationInputValue<T>,\n getId: GetId\n): EntityService.Params.Attribute.RelationInputValue<T> => {\n const map = transformPrimitive(relation as any, getId);\n if (map) return map;\n\n if (!isObject(relation)) return relation;\n\n // set: id[]\n // what if result of mapPrimitive is undefined?\n if ('set' in relation) {\n relation.set = transformPrimitive(relation.set as any, getId);\n }\n if ('disconnect' in relation) {\n relation.disconnect = transformPrimitive(relation.disconnect as any, getId);\n }\n\n if ('connect' in relation) {\n // connect: id[] | { id } | ...\n relation.connect = transformPrimitive(relation.connect as any, getId);\n\n const mapPosition = (relation: any) => {\n if (isShortHand(relation) || !('position' in relation)) return relation;\n\n const { position } = relation;\n\n // { connect: { id: id, position: { before: id } } }\n if (position?.before) {\n const { id } = transformPrimitive({ ...position, documentId: position.before }, getId);\n position.before = id;\n }\n\n // { connect: { id: id, position: { after: id } } }\n if (position?.after) {\n const { id } = transformPrimitive({ ...position, documentId: position.after }, getId);\n position.after = id;\n }\n\n return relation;\n };\n\n if (Array.isArray(relation.connect)) {\n relation.connect = relation.connect.map(mapPosition);\n } else {\n relation.connect = mapPosition(relation.connect);\n }\n }\n\n return relation;\n};\n\nconst EXCLUDED_FIELDS = [\n 'createdBy',\n 'updatedBy',\n 'localizations',\n 'strapi_stage',\n 'strapi_assignee',\n];\n\nconst transformDataIdsVisitor = (\n idMap: IdMap,\n data: Record<string, any>,\n opts: {\n uid: Common.UID.Schema;\n locale?: string | null;\n isDraft?: boolean;\n allowMissingId?: boolean; // Whether to ignore missing ids and not throw any error\n }\n) => {\n return traverseEntity(\n ({ key, value, attribute }, { set }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n const target = attribute.target;\n // TODO: Handle polymorphic relations\n if (!target) return;\n // TODO: Handle this differently\n if (EXCLUDED_FIELDS.includes(key)) return;\n\n const getId = (documentId: ID, locale?: string): ID | null => {\n const entryId = idMap.get({\n uid: target,\n documentId,\n locale: getRelationTargetLocale(\n { documentId, locale },\n {\n targetUid: target as Common.UID.Schema,\n sourceUid: opts.uid,\n sourceLocale: opts.locale,\n }\n ),\n isDraft: opts.isDraft,\n });\n\n if (entryId) return entryId;\n if (opts.allowMissingId) return null;\n\n throw new errors.ValidationError(`Document with id \"${documentId}\" not found`);\n };\n\n const newRelation = transformRelationIdsVisitor(value as any, getId);\n set(key, newRelation as any);\n }\n },\n { schema: strapi.getModel(opts.uid) },\n data\n );\n};\n\nexport { transformDataIdsVisitor };\n"],"names":["relation"],"mappings":"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"}
1
+ {"version":3,"file":"data-ids.mjs","sources":["../../../../../../src/services/document-service/transform/relations/transform/data-ids.ts"],"sourcesContent":["import { isObject, isNil, pick } from 'lodash/fp';\n\nimport type { Modules, Schema, UID } from '@strapi/types';\nimport { traverseEntity, errors } from '@strapi/utils';\n\nimport { ShortHand, LongHand, ID, GetIds } from '../utils/types';\nimport { isShortHand, isLongHand } from '../utils/data';\nimport { IdMap } from '../../id-map';\nimport { getRelationTargetLocale } from '../utils/i18n';\nimport { getRelationTargetStatus } from '../utils/dp';\n\nconst isNumeric = (value: any): value is number => {\n if (Array.isArray(value)) return false; // Handle [1, 'docId'] case\n const parsed = parseInt(value, 10);\n return !Number.isNaN(parsed);\n};\n\n/**\n * Transform primitive relation representation to entry ids\n *\n * docId -> id\n * [docId] -> [id]\n * { documentID, locale, status } -> { id }\n * [{ documentID, locale, status }] -> [{ id }]\n *\n * Note: There are scenarios where a single documentID can map to multiple ids.\n * By default the returned format will match the input format.\n * Only when the docID maps to multiple ids, an array will always be returned, regardless of the input format.\n */\nconst transformPrimitive = <T extends ShortHand | LongHand>(\n relation: T | T[] | null | undefined,\n getIds: GetIds\n): T | T[] | undefined => {\n // TODO: Remove this, we should use the long hand version with 'id' for this case\n // If id value is a number, return it as is, it's already an entry id\n if (isNumeric(relation)) {\n return relation;\n }\n\n // null\n if (isNil(relation)) {\n return relation as T | undefined;\n }\n\n // id\n if (isShortHand(relation)) {\n const ids = getIds(relation) as T[];\n\n // Return it with the same format for consistency\n if (ids?.length === 1) return ids[0];\n\n // Return an array if multiple ids are found\n return ids;\n }\n\n // { id }\n if (isLongHand(relation)) {\n // If the id is already an entry id, return it as is\n if (!('documentId' in relation)) return relation;\n\n // @ts-expect-error - TODO: Add relation type\n const ids = getIds(relation.documentId, relation.locale, relation.status);\n\n // No ids to connect\n if (!ids?.length) return undefined;\n\n // Return it with the same format for consistency\n if (ids.length === 1) return { id: ids[0], ...pick(['position'], relation) } as T;\n\n // Return an array if it multiple ids are found\n return ids.map((id: ID) => ({ id, ...pick(['position'], relation) })) as T[];\n }\n\n // id[]\n if (Array.isArray(relation)) {\n return relation.flatMap((item) => transformPrimitive(item, getIds)).filter(Boolean) as T[];\n }\n\n return undefined;\n};\n\n/**\n * Transform ids in any type of relation input value\n * - set: [docId]\n * - disconnect: [docId]\n * - connect: [docId]\n * Or using any of the other primitive representations\n */\nconst transformRelationIdsVisitor = <T extends Schema.Attribute.RelationKind.Any>(\n relation: Modules.EntityService.Params.Attribute.RelationInputValue<T>,\n getIds: GetIds\n): Modules.EntityService.Params.Attribute.RelationInputValue<T> | undefined => {\n const map = transformPrimitive(relation as any, getIds);\n if (map) return map;\n\n if (!isObject(relation)) return relation;\n\n if (!('set' in relation) && !('disconnect' in relation) && !('connect' in relation)) {\n // The entry id couldn't be found and there are no connection properties in\n // the relation, therefore we want to remove the relation\n return;\n }\n\n // set: id[]\n // what if result of mapPrimitive is undefined?\n if ('set' in relation) {\n relation.set = transformPrimitive(relation.set as any, getIds);\n }\n\n if ('disconnect' in relation) {\n relation.disconnect = transformPrimitive(relation.disconnect as any, getIds);\n }\n\n if ('connect' in relation) {\n // connect: id[] | { id } | ...\n relation.connect = transformPrimitive(relation.connect as any, getIds);\n\n const mapPosition = (relation: any) => {\n if (isShortHand(relation) || !('position' in relation)) return relation;\n\n const position = { ...relation?.position };\n\n // { connect: { id: id, position: { before: id } } }\n if (position?.before) {\n const result = transformPrimitive({ ...position, documentId: position.before }, getIds);\n\n if (Array.isArray(result)) {\n position.before = result[0]?.id;\n } else {\n position.before = result?.id;\n }\n }\n\n // { connect: { id: id, position: { after: id } } }\n if (position?.after) {\n const result = transformPrimitive({ ...position, documentId: position.after }, getIds);\n\n if (Array.isArray(result)) {\n position.after = result[0]?.id;\n } else {\n position.after = result?.id;\n }\n }\n\n return { ...relation, position };\n };\n\n if (Array.isArray(relation.connect)) {\n relation.connect = relation.connect.map(mapPosition);\n } else {\n relation.connect = mapPosition(relation.connect);\n }\n }\n\n return relation;\n};\n\nconst EXCLUDED_FIELDS = [\n 'createdBy',\n 'updatedBy',\n 'localizations',\n 'strapi_stage',\n 'strapi_assignee',\n];\n\nconst transformDataIdsVisitor = (\n idMap: IdMap,\n data: Record<string, any>,\n opts: {\n uid: UID.Schema;\n locale?: string | null;\n status?: 'draft' | 'published';\n allowMissingId?: boolean; // Whether to ignore missing ids and not throw any error\n }\n) => {\n return traverseEntity(\n ({ key, value, attribute }, { set }) => {\n // Find relational attributes, and return the document ids\n if (attribute.type === 'relation') {\n const target = attribute.target as UID.Schema | undefined;\n // TODO: Handle polymorphic relations\n if (!target) return;\n // TODO: V5 remove excluded fields and use { id: } syntax for those relations\n if (EXCLUDED_FIELDS.includes(key)) return;\n\n const getIds = (\n documentId: ID,\n locale?: string,\n status?: 'draft' | 'published'\n ): ID[] | null => {\n // locale to connect to\n const targetLocale = getRelationTargetLocale(\n { documentId, locale },\n { targetUid: target, sourceUid: opts.uid, sourceLocale: opts.locale }\n );\n\n // status(es) to connect to\n const targetStatuses = getRelationTargetStatus(\n { documentId, status },\n { targetUid: target, sourceUid: opts.uid, sourceStatus: opts.status }\n );\n\n const ids = [];\n\n // Find mapping between documentID -> id(s).\n // There are scenarios where a single documentID can map to multiple ids.\n // e.g when connecting Non DP -> DP and connecting to both the draft and publish version at the same time\n for (const targetStatus of targetStatuses) {\n const entryId = idMap.get({\n uid: target,\n documentId,\n locale: targetLocale,\n status: targetStatus,\n });\n\n if (entryId) ids.push(entryId);\n }\n\n if (!ids.length && !opts.allowMissingId) {\n throw new errors.ValidationError(\n `Document with id \"${documentId}\", locale \"${targetLocale}\" not found`\n );\n }\n\n return ids;\n };\n\n const newRelation = transformRelationIdsVisitor(value as any, getIds);\n set(key, newRelation as any);\n }\n },\n { schema: strapi.getModel(opts.uid), getModel: strapi.getModel.bind(strapi) },\n data\n );\n};\n\nexport { transformDataIdsVisitor };\n"],"names":["relation"],"mappings":"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"}
@@ -1,4 +1,2 @@
1
- import { Common } from '@strapi/types';
2
- declare const transformOutputIds: (uid: Common.UID.Schema, output: Record<string, any>) => Promise<import("@strapi/utils/dist/types").Data>;
3
- export { transformOutputIds };
1
+ export {};
4
2
  //# sourceMappingURL=output-ids.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"output-ids.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/transform/output-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAKvC,QAAA,MAAM,kBAAkB,QAAe,OAAO,GAAG,CAAC,MAAM,UAAU,OAAO,MAAM,EAAE,GAAG,CAAC,qDAuBpF,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"output-ids.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/transform/output-ids.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { UID } from '@strapi/types';
2
+ import { LongHandDocument } from './types';
3
+ type Status = 'draft' | 'published';
4
+ export declare const getRelationTargetStatus: (relation: Pick<LongHandDocument, 'documentId' | 'status'>, opts: {
5
+ targetUid: UID.Schema;
6
+ sourceUid: UID.Schema;
7
+ sourceStatus?: Status;
8
+ }) => Status[];
9
+ export {};
10
+ //# sourceMappingURL=dp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dp.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/dp.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,KAAK,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEpC,eAAO,MAAM,uBAAuB,aACxB,KAAK,gBAAgB,EAAE,YAAY,GAAG,QAAQ,CAAC,QACnD;IACJ,SAAS,EAAE,IAAI,MAAM,CAAC;IACtB,SAAS,EAAE,IAAI,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,KACA,MAAM,EA2CR,CAAC"}