@strapi/core 0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e → 0.0.0-experimental.45c1b845d32b56e7c14f4155ec0d4a2d2774c77e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @strapi/core might be problematic. Click here for more details.

Files changed (306) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +8 -4
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +7 -3
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/configuration/index.d.ts.map +1 -1
  7. package/dist/configuration/index.js +4 -4
  8. package/dist/configuration/index.js.map +1 -1
  9. package/dist/configuration/index.mjs +1 -1
  10. package/dist/configuration/index.mjs.map +1 -1
  11. package/dist/configuration/urls.d.ts +8 -0
  12. package/dist/configuration/urls.d.ts.map +1 -0
  13. package/dist/configuration/urls.js +68 -0
  14. package/dist/configuration/urls.js.map +1 -0
  15. package/dist/configuration/urls.mjs +66 -0
  16. package/dist/configuration/urls.mjs.map +1 -0
  17. package/dist/core-api/controller/collection-type.d.ts +1 -1
  18. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  19. package/dist/core-api/controller/collection-type.js +9 -20
  20. package/dist/core-api/controller/collection-type.js.map +1 -1
  21. package/dist/core-api/controller/collection-type.mjs +8 -20
  22. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  23. package/dist/core-api/controller/index.d.ts.map +1 -1
  24. package/dist/core-api/controller/index.js +8 -3
  25. package/dist/core-api/controller/index.js.map +1 -1
  26. package/dist/core-api/controller/index.mjs +8 -3
  27. package/dist/core-api/controller/index.mjs.map +1 -1
  28. package/dist/core-api/controller/single-type.d.ts +1 -1
  29. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  30. package/dist/core-api/controller/single-type.js +6 -11
  31. package/dist/core-api/controller/single-type.js.map +1 -1
  32. package/dist/core-api/controller/single-type.mjs +5 -11
  33. package/dist/core-api/controller/single-type.mjs.map +1 -1
  34. package/dist/core-api/controller/transform.d.ts +9 -17
  35. package/dist/core-api/controller/transform.d.ts.map +1 -1
  36. package/dist/core-api/controller/transform.js +9 -14
  37. package/dist/core-api/controller/transform.js.map +1 -1
  38. package/dist/core-api/controller/transform.mjs +9 -14
  39. package/dist/core-api/controller/transform.mjs.map +1 -1
  40. package/dist/core-api/service/collection-type.d.ts +28 -5
  41. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  42. package/dist/core-api/service/collection-type.js +47 -49
  43. package/dist/core-api/service/collection-type.js.map +1 -1
  44. package/dist/core-api/service/collection-type.mjs +47 -50
  45. package/dist/core-api/service/collection-type.mjs.map +1 -1
  46. package/dist/core-api/service/core-service.d.ts +4 -0
  47. package/dist/core-api/service/core-service.d.ts.map +1 -0
  48. package/dist/core-api/service/core-service.js +12 -0
  49. package/dist/core-api/service/core-service.js.map +1 -0
  50. package/dist/core-api/service/core-service.mjs +12 -0
  51. package/dist/core-api/service/core-service.mjs.map +1 -0
  52. package/dist/core-api/service/index.js +2 -2
  53. package/dist/core-api/service/index.js.map +1 -1
  54. package/dist/core-api/service/index.mjs +4 -4
  55. package/dist/core-api/service/index.mjs.map +1 -1
  56. package/dist/core-api/service/pagination.d.ts +1 -5
  57. package/dist/core-api/service/pagination.d.ts.map +1 -1
  58. package/dist/core-api/service/pagination.js +0 -11
  59. package/dist/core-api/service/pagination.js.map +1 -1
  60. package/dist/core-api/service/pagination.mjs +0 -11
  61. package/dist/core-api/service/pagination.mjs.map +1 -1
  62. package/dist/core-api/service/single-type.d.ts +14 -8
  63. package/dist/core-api/service/single-type.d.ts.map +1 -1
  64. package/dist/core-api/service/single-type.js +35 -50
  65. package/dist/core-api/service/single-type.js.map +1 -1
  66. package/dist/core-api/service/single-type.mjs +34 -50
  67. package/dist/core-api/service/single-type.mjs.map +1 -1
  68. package/dist/domain/content-type/index.d.ts.map +1 -1
  69. package/dist/domain/content-type/index.js +3 -0
  70. package/dist/domain/content-type/index.js.map +1 -1
  71. package/dist/domain/content-type/index.mjs +3 -0
  72. package/dist/domain/content-type/index.mjs.map +1 -1
  73. package/dist/domain/content-type/validator.d.ts.map +1 -1
  74. package/dist/domain/content-type/validator.js +1 -1
  75. package/dist/domain/content-type/validator.js.map +1 -1
  76. package/dist/domain/content-type/validator.mjs +2 -2
  77. package/dist/domain/content-type/validator.mjs.map +1 -1
  78. package/dist/domain/module/index.d.ts.map +1 -1
  79. package/dist/domain/module/index.js +2 -3
  80. package/dist/domain/module/index.js.map +1 -1
  81. package/dist/domain/module/index.mjs +2 -3
  82. package/dist/domain/module/index.mjs.map +1 -1
  83. package/dist/factories.d.ts.map +1 -1
  84. package/dist/factories.js +2 -12
  85. package/dist/factories.js.map +1 -1
  86. package/dist/factories.mjs +2 -12
  87. package/dist/factories.mjs.map +1 -1
  88. package/dist/loaders/apis.js +1 -1
  89. package/dist/loaders/apis.js.map +1 -1
  90. package/dist/loaders/apis.mjs +2 -2
  91. package/dist/loaders/apis.mjs.map +1 -1
  92. package/dist/loaders/plugins/get-enabled-plugins.js +1 -1
  93. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  94. package/dist/loaders/plugins/get-enabled-plugins.mjs +2 -2
  95. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  96. package/dist/registries/config.d.ts +2 -2
  97. package/dist/registries/config.d.ts.map +1 -1
  98. package/dist/registries/config.js +14 -6
  99. package/dist/registries/config.js.map +1 -1
  100. package/dist/registries/config.mjs +15 -5
  101. package/dist/registries/config.mjs.map +1 -1
  102. package/dist/registries/content-types.d.ts.map +1 -1
  103. package/dist/registries/content-types.js +1 -2
  104. package/dist/registries/content-types.js.map +1 -1
  105. package/dist/registries/content-types.mjs +1 -2
  106. package/dist/registries/content-types.mjs.map +1 -1
  107. package/dist/services/document-service/common.d.ts +4 -0
  108. package/dist/services/document-service/common.d.ts.map +1 -0
  109. package/dist/services/document-service/common.js +7 -0
  110. package/dist/services/document-service/common.js.map +1 -0
  111. package/dist/services/document-service/common.mjs +7 -0
  112. package/dist/services/document-service/common.mjs.map +1 -0
  113. package/dist/services/document-service/draft-and-publish.d.ts +10 -0
  114. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -0
  115. package/dist/services/document-service/draft-and-publish.js +69 -0
  116. package/dist/services/document-service/draft-and-publish.js.map +1 -0
  117. package/dist/services/document-service/draft-and-publish.mjs +69 -0
  118. package/dist/services/document-service/draft-and-publish.mjs.map +1 -0
  119. package/dist/services/document-service/{document-service.d.ts → index.d.ts} +2 -4
  120. package/dist/services/document-service/index.d.ts.map +1 -0
  121. package/dist/services/document-service/index.js +22 -0
  122. package/dist/services/document-service/index.js.map +1 -0
  123. package/dist/services/document-service/index.mjs +22 -0
  124. package/dist/services/document-service/index.mjs.map +1 -0
  125. package/dist/services/document-service/internationalization.d.ts +8 -0
  126. package/dist/services/document-service/internationalization.d.ts.map +1 -0
  127. package/dist/services/document-service/internationalization.js +54 -0
  128. package/dist/services/document-service/internationalization.js.map +1 -0
  129. package/dist/services/document-service/internationalization.mjs +54 -0
  130. package/dist/services/document-service/internationalization.mjs.map +1 -0
  131. package/dist/services/document-service/middlewares.d.ts +8 -0
  132. package/dist/services/document-service/middlewares.d.ts.map +1 -0
  133. package/dist/services/document-service/middlewares.js +46 -0
  134. package/dist/services/document-service/middlewares.js.map +1 -0
  135. package/dist/services/document-service/middlewares.mjs +46 -0
  136. package/dist/services/document-service/middlewares.mjs.map +1 -0
  137. package/dist/services/document-service/repository.d.ts +3 -0
  138. package/dist/services/document-service/repository.d.ts.map +1 -0
  139. package/dist/services/document-service/repository.js +304 -0
  140. package/dist/services/document-service/repository.js.map +1 -0
  141. package/dist/services/document-service/repository.mjs +304 -0
  142. package/dist/services/document-service/repository.mjs.map +1 -0
  143. package/dist/services/document-service/transform/data.d.ts +5 -0
  144. package/dist/services/document-service/transform/data.d.ts.map +1 -0
  145. package/dist/services/document-service/transform/data.js +13 -0
  146. package/dist/services/document-service/transform/data.js.map +1 -0
  147. package/dist/services/document-service/transform/data.mjs +13 -0
  148. package/dist/services/document-service/transform/data.mjs.map +1 -0
  149. package/dist/services/document-service/transform/fields.d.ts +5 -0
  150. package/dist/services/document-service/transform/fields.d.ts.map +1 -0
  151. package/dist/services/document-service/transform/fields.js +24 -0
  152. package/dist/services/document-service/transform/fields.js.map +1 -0
  153. package/dist/services/document-service/transform/fields.mjs +24 -0
  154. package/dist/services/document-service/transform/fields.mjs.map +1 -0
  155. package/dist/services/document-service/transform/filters.d.ts +3 -0
  156. package/dist/services/document-service/transform/filters.d.ts.map +1 -0
  157. package/dist/services/document-service/transform/id-map.d.ts +23 -0
  158. package/dist/services/document-service/transform/id-map.d.ts.map +1 -0
  159. package/dist/services/document-service/transform/id-map.js +78 -0
  160. package/dist/services/document-service/transform/id-map.js.map +1 -0
  161. package/dist/services/document-service/transform/id-map.mjs +78 -0
  162. package/dist/services/document-service/transform/id-map.mjs.map +1 -0
  163. package/dist/services/document-service/transform/id-transform.d.ts +5 -0
  164. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -0
  165. package/dist/services/document-service/transform/id-transform.js +33 -0
  166. package/dist/services/document-service/transform/id-transform.js.map +1 -0
  167. package/dist/services/document-service/transform/id-transform.mjs +33 -0
  168. package/dist/services/document-service/transform/id-transform.mjs.map +1 -0
  169. package/dist/services/document-service/transform/populate.d.ts +6 -0
  170. package/dist/services/document-service/transform/populate.d.ts.map +1 -0
  171. package/dist/services/document-service/transform/populate.js +21 -0
  172. package/dist/services/document-service/transform/populate.js.map +1 -0
  173. package/dist/services/document-service/transform/populate.mjs +21 -0
  174. package/dist/services/document-service/transform/populate.mjs.map +1 -0
  175. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +13 -0
  176. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -0
  177. package/dist/services/document-service/transform/relations/extract/data-ids.js +90 -0
  178. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -0
  179. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +90 -0
  180. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -0
  181. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts +10 -0
  182. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -0
  183. package/dist/services/document-service/transform/relations/transform/data-ids.js +141 -0
  184. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -0
  185. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +141 -0
  186. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -0
  187. package/dist/services/document-service/transform/relations/transform/output-ids.d.ts +4 -0
  188. package/dist/services/document-service/transform/relations/transform/output-ids.d.ts.map +1 -0
  189. package/dist/services/document-service/transform/relations/utils/data.d.ts +4 -0
  190. package/dist/services/document-service/transform/relations/utils/data.d.ts.map +1 -0
  191. package/dist/services/document-service/transform/relations/utils/data.js +12 -0
  192. package/dist/services/document-service/transform/relations/utils/data.js.map +1 -0
  193. package/dist/services/document-service/transform/relations/utils/data.mjs +12 -0
  194. package/dist/services/document-service/transform/relations/utils/data.mjs.map +1 -0
  195. package/dist/services/document-service/transform/relations/utils/dp.d.ts +10 -0
  196. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -0
  197. package/dist/services/document-service/transform/relations/utils/dp.js +25 -0
  198. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -0
  199. package/dist/services/document-service/transform/relations/utils/dp.mjs +25 -0
  200. package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -0
  201. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +10 -0
  202. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -0
  203. package/dist/services/document-service/transform/relations/utils/i18n.js +31 -0
  204. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -0
  205. package/dist/services/document-service/transform/relations/utils/i18n.mjs +31 -0
  206. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -0
  207. package/dist/services/document-service/transform/relations/utils/types.d.ts +15 -0
  208. package/dist/services/document-service/transform/relations/utils/types.d.ts.map +1 -0
  209. package/dist/services/document-service/transform/sort.d.ts +5 -0
  210. package/dist/services/document-service/transform/sort.d.ts.map +1 -0
  211. package/dist/services/document-service/transform/types.d.ts +13 -0
  212. package/dist/services/document-service/transform/types.d.ts.map +1 -0
  213. package/dist/services/document-service/transform/utils.d.ts +9 -0
  214. package/dist/services/document-service/transform/utils.d.ts.map +1 -0
  215. package/dist/services/document-service/utils/populate.d.ts +3 -0
  216. package/dist/services/document-service/utils/populate.d.ts.map +1 -0
  217. package/dist/services/document-service/utils/populate.js +41 -0
  218. package/dist/services/document-service/utils/populate.js.map +1 -0
  219. package/dist/services/document-service/utils/populate.mjs +41 -0
  220. package/dist/services/document-service/utils/populate.mjs.map +1 -0
  221. package/dist/services/entity-service/components.js +8 -8
  222. package/dist/services/entity-service/components.js.map +1 -1
  223. package/dist/services/entity-service/components.mjs +9 -9
  224. package/dist/services/entity-service/components.mjs.map +1 -1
  225. package/dist/services/entity-service/index.d.ts.map +1 -1
  226. package/dist/services/entity-service/index.js +3 -3
  227. package/dist/services/entity-service/index.js.map +1 -1
  228. package/dist/services/entity-service/index.mjs +3 -3
  229. package/dist/services/entity-service/index.mjs.map +1 -1
  230. package/dist/services/entity-service/params.d.ts +4 -4
  231. package/dist/services/entity-service/params.d.ts.map +1 -1
  232. package/dist/services/entity-service/params.js +1 -1
  233. package/dist/services/entity-service/params.js.map +1 -1
  234. package/dist/services/entity-service/params.mjs +1 -1
  235. package/dist/services/entity-service/params.mjs.map +1 -1
  236. package/dist/services/entity-validator/blocks-validator.d.ts.map +1 -1
  237. package/dist/services/entity-validator/blocks-validator.js +22 -2
  238. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  239. package/dist/services/entity-validator/blocks-validator.mjs +22 -2
  240. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  241. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  242. package/dist/services/entity-validator/validators.js +7 -8
  243. package/dist/services/entity-validator/validators.js.map +1 -1
  244. package/dist/services/entity-validator/validators.mjs +7 -8
  245. package/dist/services/entity-validator/validators.mjs.map +1 -1
  246. package/dist/services/server/compose-endpoint.d.ts.map +1 -1
  247. package/dist/services/server/compose-endpoint.js +3 -0
  248. package/dist/services/server/compose-endpoint.js.map +1 -1
  249. package/dist/services/server/compose-endpoint.mjs +3 -0
  250. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  251. package/dist/services/webhook-store.js +2 -2
  252. package/dist/services/webhook-store.js.map +1 -1
  253. package/dist/services/webhook-store.mjs +2 -2
  254. package/dist/services/webhook-store.mjs.map +1 -1
  255. package/dist/utils/load-config-file.js +1 -1
  256. package/dist/utils/load-config-file.js.map +1 -1
  257. package/dist/utils/load-config-file.mjs +2 -2
  258. package/dist/utils/load-config-file.mjs.map +1 -1
  259. package/dist/utils/transform-content-types-to-models.d.ts +174 -3
  260. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  261. package/dist/utils/transform-content-types-to-models.js +80 -41
  262. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  263. package/dist/utils/transform-content-types-to-models.mjs +79 -41
  264. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  265. package/package.json +14 -14
  266. package/dist/core-api/service/get-fetch-params.d.ts +0 -7
  267. package/dist/core-api/service/get-fetch-params.d.ts.map +0 -1
  268. package/dist/core-api/service/get-fetch-params.js +0 -14
  269. package/dist/core-api/service/get-fetch-params.js.map +0 -1
  270. package/dist/core-api/service/get-fetch-params.mjs +0 -14
  271. package/dist/core-api/service/get-fetch-params.mjs.map +0 -1
  272. package/dist/services/document-service/document-engine.d.ts +0 -8
  273. package/dist/services/document-service/document-engine.d.ts.map +0 -1
  274. package/dist/services/document-service/document-engine.js +0 -200
  275. package/dist/services/document-service/document-engine.js.map +0 -1
  276. package/dist/services/document-service/document-engine.mjs +0 -201
  277. package/dist/services/document-service/document-engine.mjs.map +0 -1
  278. package/dist/services/document-service/document-service.d.ts.map +0 -1
  279. package/dist/services/document-service/document-service.js +0 -132
  280. package/dist/services/document-service/document-service.js.map +0 -1
  281. package/dist/services/document-service/document-service.mjs +0 -132
  282. package/dist/services/document-service/document-service.mjs.map +0 -1
  283. package/dist/services/document-service/middlewares/defaults/draft-and-publish.d.ts +0 -26
  284. package/dist/services/document-service/middlewares/defaults/draft-and-publish.d.ts.map +0 -1
  285. package/dist/services/document-service/middlewares/defaults/draft-and-publish.js +0 -58
  286. package/dist/services/document-service/middlewares/defaults/draft-and-publish.js.map +0 -1
  287. package/dist/services/document-service/middlewares/defaults/draft-and-publish.mjs +0 -58
  288. package/dist/services/document-service/middlewares/defaults/draft-and-publish.mjs.map +0 -1
  289. package/dist/services/document-service/middlewares/defaults/index.d.ts +0 -3
  290. package/dist/services/document-service/middlewares/defaults/index.d.ts.map +0 -1
  291. package/dist/services/document-service/middlewares/defaults/index.js +0 -82
  292. package/dist/services/document-service/middlewares/defaults/index.js.map +0 -1
  293. package/dist/services/document-service/middlewares/defaults/index.mjs +0 -82
  294. package/dist/services/document-service/middlewares/defaults/index.mjs.map +0 -1
  295. package/dist/services/document-service/middlewares/defaults/locales.d.ts +0 -18
  296. package/dist/services/document-service/middlewares/defaults/locales.d.ts.map +0 -1
  297. package/dist/services/document-service/middlewares/defaults/locales.js +0 -50
  298. package/dist/services/document-service/middlewares/defaults/locales.js.map +0 -1
  299. package/dist/services/document-service/middlewares/defaults/locales.mjs +0 -50
  300. package/dist/services/document-service/middlewares/defaults/locales.mjs.map +0 -1
  301. package/dist/services/document-service/middlewares/index.d.ts +0 -11
  302. package/dist/services/document-service/middlewares/index.d.ts.map +0 -1
  303. package/dist/services/document-service/middlewares/index.js +0 -59
  304. package/dist/services/document-service/middlewares/index.js.map +0 -1
  305. package/dist/services/document-service/middlewares/index.mjs +0 -59
  306. package/dist/services/document-service/middlewares/index.mjs.map +0 -1
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const _ = require("lodash/fp");
4
+ const strapiUtils = require("@strapi/utils");
5
+ const data = require("../utils/data.js");
6
+ const i18n = require("../utils/i18n.js");
7
+ const dp = require("../utils/dp.js");
8
+ const handlePrimitive = (relation) => {
9
+ if (!relation) {
10
+ return [];
11
+ }
12
+ if (data.isShortHand(relation)) {
13
+ return [{ documentId: relation }];
14
+ }
15
+ if (data.isLongHand(relation)) {
16
+ if ("documentId" in relation) {
17
+ return [
18
+ { documentId: relation.documentId, locale: relation.locale, status: relation.status }
19
+ ];
20
+ }
21
+ return [];
22
+ }
23
+ if (Array.isArray(relation)) {
24
+ return relation.map((item) => data.isShortHand(item) ? { documentId: item } : item);
25
+ }
26
+ return [];
27
+ };
28
+ const extractRelationIds = (relation) => {
29
+ const ids = handlePrimitive(relation);
30
+ if (!_.isObject(relation))
31
+ return ids;
32
+ if ("set" in relation)
33
+ ids.push(...handlePrimitive(relation.set));
34
+ if ("disconnect" in relation)
35
+ ids.push(...handlePrimitive(relation.disconnect));
36
+ if ("connect" in relation) {
37
+ if (!relation.connect)
38
+ return [];
39
+ ids.push(...handlePrimitive(relation.connect));
40
+ const connect = Array.isArray(relation.connect) ? relation.connect : [relation.connect];
41
+ connect.forEach((relation2) => {
42
+ if (data.isShortHand(relation2) || !("position" in relation2))
43
+ return;
44
+ const { position } = relation2;
45
+ if (position?.before) {
46
+ ids.push(...handlePrimitive({ ...position, documentId: position.before }));
47
+ }
48
+ if (position?.after) {
49
+ ids.push(...handlePrimitive({ ...position, documentId: position.after }));
50
+ }
51
+ });
52
+ }
53
+ return ids;
54
+ };
55
+ const extractDataIds = (idMap, data2, opts) => {
56
+ return strapiUtils.traverseEntity(
57
+ ({ value, attribute }) => {
58
+ if (attribute.type === "relation") {
59
+ const extractedIds = extractRelationIds(value);
60
+ const target = attribute.target;
61
+ if (!target)
62
+ return;
63
+ extractedIds.forEach((relation) => {
64
+ const targetLocale = i18n.getRelationTargetLocale(relation, {
65
+ targetUid: target,
66
+ sourceUid: opts.uid,
67
+ sourceLocale: opts.locale
68
+ });
69
+ const targetStatus = dp.getRelationTargetStatus(relation, {
70
+ targetUid: target,
71
+ sourceUid: opts.uid,
72
+ sourceStatus: opts.status
73
+ });
74
+ targetStatus.forEach((status) => {
75
+ idMap.add({
76
+ uid: target,
77
+ documentId: relation.documentId,
78
+ locale: targetLocale,
79
+ status
80
+ });
81
+ });
82
+ });
83
+ }
84
+ },
85
+ { schema: strapi.getModel(opts.uid) },
86
+ data2
87
+ );
88
+ };
89
+ exports.extractDataIds = extractDataIds;
90
+ //# sourceMappingURL=data-ids.js.map
@@ -0,0 +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';\nimport { getRelationTargetStatus } from '../utils/dp';\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 [\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 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, 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: Common.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 Common.UID.Schema,\n sourceUid: opts.uid,\n sourceLocale: opts.locale,\n });\n\n const targetStatus = getRelationTargetStatus(relation, {\n targetUid: target as Common.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) },\n data\n );\n};\n\nexport { extractDataIds };\n"],"names":["isShortHand","isLongHand","isObject","relation","data","traverseEntity","getRelationTargetLocale","getRelationTargetStatus"],"mappings":";;;;;;;AAYA,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,EAAE;AAAA,IACpCH;AAAA,EAAA;AAEJ;;"}
@@ -0,0 +1,90 @@
1
+ import { isObject } from "lodash/fp";
2
+ import { traverseEntity } from "@strapi/utils";
3
+ import { isShortHand, isLongHand } from "../utils/data.mjs";
4
+ import { getRelationTargetLocale } from "../utils/i18n.mjs";
5
+ import { getRelationTargetStatus } from "../utils/dp.mjs";
6
+ const handlePrimitive = (relation) => {
7
+ if (!relation) {
8
+ return [];
9
+ }
10
+ if (isShortHand(relation)) {
11
+ return [{ documentId: relation }];
12
+ }
13
+ if (isLongHand(relation)) {
14
+ if ("documentId" in relation) {
15
+ return [
16
+ { documentId: relation.documentId, locale: relation.locale, status: relation.status }
17
+ ];
18
+ }
19
+ return [];
20
+ }
21
+ if (Array.isArray(relation)) {
22
+ return relation.map((item) => isShortHand(item) ? { documentId: item } : item);
23
+ }
24
+ return [];
25
+ };
26
+ const extractRelationIds = (relation) => {
27
+ const ids = handlePrimitive(relation);
28
+ if (!isObject(relation))
29
+ return ids;
30
+ if ("set" in relation)
31
+ ids.push(...handlePrimitive(relation.set));
32
+ if ("disconnect" in relation)
33
+ ids.push(...handlePrimitive(relation.disconnect));
34
+ if ("connect" in relation) {
35
+ if (!relation.connect)
36
+ return [];
37
+ ids.push(...handlePrimitive(relation.connect));
38
+ const connect = Array.isArray(relation.connect) ? relation.connect : [relation.connect];
39
+ connect.forEach((relation2) => {
40
+ if (isShortHand(relation2) || !("position" in relation2))
41
+ return;
42
+ const { position } = relation2;
43
+ if (position?.before) {
44
+ ids.push(...handlePrimitive({ ...position, documentId: position.before }));
45
+ }
46
+ if (position?.after) {
47
+ ids.push(...handlePrimitive({ ...position, documentId: position.after }));
48
+ }
49
+ });
50
+ }
51
+ return ids;
52
+ };
53
+ const extractDataIds = (idMap, data, opts) => {
54
+ return traverseEntity(
55
+ ({ value, attribute }) => {
56
+ if (attribute.type === "relation") {
57
+ const extractedIds = extractRelationIds(value);
58
+ const target = attribute.target;
59
+ if (!target)
60
+ return;
61
+ extractedIds.forEach((relation) => {
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
+ });
79
+ });
80
+ });
81
+ }
82
+ },
83
+ { schema: strapi.getModel(opts.uid) },
84
+ data
85
+ );
86
+ };
87
+ export {
88
+ extractDataIds
89
+ };
90
+ //# sourceMappingURL=data-ids.mjs.map
@@ -0,0 +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';\nimport { getRelationTargetStatus } from '../utils/dp';\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 [\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 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, 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: Common.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 Common.UID.Schema,\n sourceUid: opts.uid,\n sourceLocale: opts.locale,\n });\n\n const targetStatus = getRelationTargetStatus(relation, {\n targetUid: target as Common.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) },\n data\n );\n};\n\nexport { extractDataIds };\n"],"names":["relation"],"mappings":";;;;;AAYA,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,EAAE;AAAA,IACpC;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,10 @@
1
+ import { Common } from '@strapi/types';
2
+ import { IdMap } from '../../id-map';
3
+ declare const transformDataIdsVisitor: (idMap: IdMap, data: Record<string, any>, opts: {
4
+ uid: Common.UID.Schema;
5
+ locale?: string | null;
6
+ status?: 'draft' | 'published';
7
+ allowMissingId?: boolean;
8
+ }) => Promise<import("@strapi/utils/dist/types").Data>;
9
+ export { transformDataIdsVisitor };
10
+ //# sourceMappingURL=data-ids.d.ts.map
@@ -0,0 +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;AA8JrC,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,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,qDA6DF,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const _ = require("lodash/fp");
4
+ const strapiUtils = require("@strapi/utils");
5
+ const data = require("../utils/data.js");
6
+ const i18n = require("../utils/i18n.js");
7
+ const dp = require("../utils/dp.js");
8
+ const isNumeric = (value) => {
9
+ if (Array.isArray(value))
10
+ return false;
11
+ const parsed = parseInt(value, 10);
12
+ return !Number.isNaN(parsed);
13
+ };
14
+ const transformPrimitive = (relation, getIds) => {
15
+ if (isNumeric(relation)) {
16
+ return relation;
17
+ }
18
+ if (_.isNil(relation)) {
19
+ return relation;
20
+ }
21
+ if (data.isShortHand(relation)) {
22
+ const ids = getIds(relation);
23
+ if (ids?.length === 1)
24
+ return ids[0];
25
+ return ids;
26
+ }
27
+ if (data.isLongHand(relation)) {
28
+ if (!("documentId" in relation))
29
+ return relation;
30
+ const ids = getIds(relation.documentId, relation.locale, relation.status);
31
+ if (!ids?.length)
32
+ return void 0;
33
+ if (ids.length === 1)
34
+ return { id: ids[0], ..._.pick(["position"], relation) };
35
+ return ids.map((id) => ({ id, ..._.pick(["position"], relation) }));
36
+ }
37
+ if (Array.isArray(relation)) {
38
+ return relation.flatMap((item) => transformPrimitive(item, getIds)).filter(Boolean);
39
+ }
40
+ return void 0;
41
+ };
42
+ const transformRelationIdsVisitor = (relation, getIds) => {
43
+ const map = transformPrimitive(relation, getIds);
44
+ if (map)
45
+ return map;
46
+ if (!_.isObject(relation))
47
+ return relation;
48
+ if (!("set" in relation) && !("disconnect" in relation) && !("connect" in relation)) {
49
+ return;
50
+ }
51
+ if ("set" in relation) {
52
+ relation.set = transformPrimitive(relation.set, getIds);
53
+ }
54
+ if ("disconnect" in relation) {
55
+ relation.disconnect = transformPrimitive(relation.disconnect, getIds);
56
+ }
57
+ if ("connect" in relation) {
58
+ relation.connect = transformPrimitive(relation.connect, getIds);
59
+ const mapPosition = (relation2) => {
60
+ if (data.isShortHand(relation2) || !("position" in relation2))
61
+ return relation2;
62
+ const position = { ...relation2?.position };
63
+ if (position?.before) {
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
+ }
70
+ }
71
+ if (position?.after) {
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
+ }
78
+ }
79
+ return { ...relation2, position };
80
+ };
81
+ if (Array.isArray(relation.connect)) {
82
+ relation.connect = relation.connect.map(mapPosition);
83
+ } else {
84
+ relation.connect = mapPosition(relation.connect);
85
+ }
86
+ }
87
+ return relation;
88
+ };
89
+ const EXCLUDED_FIELDS = [
90
+ "createdBy",
91
+ "updatedBy",
92
+ "localizations",
93
+ "strapi_stage",
94
+ "strapi_assignee"
95
+ ];
96
+ const transformDataIdsVisitor = (idMap, data2, opts) => {
97
+ return strapiUtils.traverseEntity(
98
+ ({ key, value, attribute }, { set }) => {
99
+ if (attribute.type === "relation") {
100
+ const target = attribute.target;
101
+ if (!target)
102
+ return;
103
+ if (EXCLUDED_FIELDS.includes(key))
104
+ return;
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;
131
+ };
132
+ const newRelation = transformRelationIdsVisitor(value, getIds);
133
+ set(key, newRelation);
134
+ }
135
+ },
136
+ { schema: strapi.getModel(opts.uid) },
137
+ data2
138
+ );
139
+ };
140
+ exports.transformDataIdsVisitor = transformDataIdsVisitor;
141
+ //# sourceMappingURL=data-ids.js.map
@@ -0,0 +1 @@
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 { EntityService, Attribute, Common } 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 Attribute.RelationKind.Any>(\n relation: EntityService.Params.Attribute.RelationInputValue<T>,\n getIds: GetIds\n): 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: Common.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 Common.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) },\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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"}
@@ -0,0 +1,141 @@
1
+ import { isObject, isNil, pick } from "lodash/fp";
2
+ import { traverseEntity, errors } from "@strapi/utils";
3
+ import { isShortHand, isLongHand } from "../utils/data.mjs";
4
+ import { getRelationTargetLocale } from "../utils/i18n.mjs";
5
+ import { getRelationTargetStatus } from "../utils/dp.mjs";
6
+ const isNumeric = (value) => {
7
+ if (Array.isArray(value))
8
+ return false;
9
+ const parsed = parseInt(value, 10);
10
+ return !Number.isNaN(parsed);
11
+ };
12
+ const transformPrimitive = (relation, getIds) => {
13
+ if (isNumeric(relation)) {
14
+ return relation;
15
+ }
16
+ if (isNil(relation)) {
17
+ return relation;
18
+ }
19
+ if (isShortHand(relation)) {
20
+ const ids = getIds(relation);
21
+ if (ids?.length === 1)
22
+ return ids[0];
23
+ return ids;
24
+ }
25
+ if (isLongHand(relation)) {
26
+ if (!("documentId" in relation))
27
+ return relation;
28
+ const ids = getIds(relation.documentId, relation.locale, relation.status);
29
+ if (!ids?.length)
30
+ return void 0;
31
+ if (ids.length === 1)
32
+ return { id: ids[0], ...pick(["position"], relation) };
33
+ return ids.map((id) => ({ id, ...pick(["position"], relation) }));
34
+ }
35
+ if (Array.isArray(relation)) {
36
+ return relation.flatMap((item) => transformPrimitive(item, getIds)).filter(Boolean);
37
+ }
38
+ return void 0;
39
+ };
40
+ const transformRelationIdsVisitor = (relation, getIds) => {
41
+ const map = transformPrimitive(relation, getIds);
42
+ if (map)
43
+ return map;
44
+ if (!isObject(relation))
45
+ return relation;
46
+ if (!("set" in relation) && !("disconnect" in relation) && !("connect" in relation)) {
47
+ return;
48
+ }
49
+ if ("set" in relation) {
50
+ relation.set = transformPrimitive(relation.set, getIds);
51
+ }
52
+ if ("disconnect" in relation) {
53
+ relation.disconnect = transformPrimitive(relation.disconnect, getIds);
54
+ }
55
+ if ("connect" in relation) {
56
+ relation.connect = transformPrimitive(relation.connect, getIds);
57
+ const mapPosition = (relation2) => {
58
+ if (isShortHand(relation2) || !("position" in relation2))
59
+ return relation2;
60
+ const position = { ...relation2?.position };
61
+ if (position?.before) {
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
+ }
68
+ }
69
+ if (position?.after) {
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
+ }
76
+ }
77
+ return { ...relation2, position };
78
+ };
79
+ if (Array.isArray(relation.connect)) {
80
+ relation.connect = relation.connect.map(mapPosition);
81
+ } else {
82
+ relation.connect = mapPosition(relation.connect);
83
+ }
84
+ }
85
+ return relation;
86
+ };
87
+ const EXCLUDED_FIELDS = [
88
+ "createdBy",
89
+ "updatedBy",
90
+ "localizations",
91
+ "strapi_stage",
92
+ "strapi_assignee"
93
+ ];
94
+ const transformDataIdsVisitor = (idMap, data, opts) => {
95
+ return traverseEntity(
96
+ ({ key, value, attribute }, { set }) => {
97
+ if (attribute.type === "relation") {
98
+ const target = attribute.target;
99
+ if (!target)
100
+ return;
101
+ if (EXCLUDED_FIELDS.includes(key))
102
+ return;
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;
129
+ };
130
+ const newRelation = transformRelationIdsVisitor(value, getIds);
131
+ set(key, newRelation);
132
+ }
133
+ },
134
+ { schema: strapi.getModel(opts.uid) },
135
+ data
136
+ );
137
+ };
138
+ export {
139
+ transformDataIdsVisitor
140
+ };
141
+ //# sourceMappingURL=data-ids.mjs.map
@@ -0,0 +1 @@
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 { EntityService, Attribute, Common } 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 Attribute.RelationKind.Any>(\n relation: EntityService.Params.Attribute.RelationInputValue<T>,\n getIds: GetIds\n): 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: Common.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 Common.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) },\n data\n );\n};\n\nexport { transformDataIdsVisitor };\n"],"names":["relation"],"mappings":"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"}
@@ -0,0 +1,4 @@
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 };
4
+ //# sourceMappingURL=output-ids.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,4 @@
1
+ import { ID, LongHand } from './types';
2
+ export declare const isShortHand: (relation: any) => relation is ID;
3
+ export declare const isLongHand: (relation: any) => relation is LongHand;
4
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEvC,eAAO,MAAM,WAAW,aAAc,GAAG,mBAExC,CAAC;AAEF,eAAO,MAAM,UAAU,aAAc,GAAG,yBAEvC,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const _ = require("lodash/fp");
4
+ const isShortHand = (relation) => {
5
+ return typeof relation === "string" || typeof relation === "number";
6
+ };
7
+ const isLongHand = (relation) => {
8
+ return _.isObject(relation) && ("id" in relation || "documentId" in relation);
9
+ };
10
+ exports.isLongHand = isLongHand;
11
+ exports.isShortHand = isShortHand;
12
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sources":["../../../../../../src/services/document-service/transform/relations/utils/data.ts"],"sourcesContent":["import { isObject } from 'lodash/fp';\nimport { ID, LongHand } from './types';\n\nexport const isShortHand = (relation: any): relation is ID => {\n return typeof relation === 'string' || typeof relation === 'number';\n};\n\nexport const isLongHand = (relation: any): relation is LongHand => {\n return isObject(relation) && ('id' in relation || 'documentId' in relation);\n};\n"],"names":["isObject"],"mappings":";;;AAGa,MAAA,cAAc,CAAC,aAAkC;AAC5D,SAAO,OAAO,aAAa,YAAY,OAAO,aAAa;AAC7D;AAEa,MAAA,aAAa,CAAC,aAAwC;AACjE,SAAOA,EAAAA,SAAS,QAAQ,MAAM,QAAQ,YAAY,gBAAgB;AACpE;;;"}
@@ -0,0 +1,12 @@
1
+ import { isObject } from "lodash/fp";
2
+ const isShortHand = (relation) => {
3
+ return typeof relation === "string" || typeof relation === "number";
4
+ };
5
+ const isLongHand = (relation) => {
6
+ return isObject(relation) && ("id" in relation || "documentId" in relation);
7
+ };
8
+ export {
9
+ isLongHand,
10
+ isShortHand
11
+ };
12
+ //# sourceMappingURL=data.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.mjs","sources":["../../../../../../src/services/document-service/transform/relations/utils/data.ts"],"sourcesContent":["import { isObject } from 'lodash/fp';\nimport { ID, LongHand } from './types';\n\nexport const isShortHand = (relation: any): relation is ID => {\n return typeof relation === 'string' || typeof relation === 'number';\n};\n\nexport const isLongHand = (relation: any): relation is LongHand => {\n return isObject(relation) && ('id' in relation || 'documentId' in relation);\n};\n"],"names":[],"mappings":";AAGa,MAAA,cAAc,CAAC,aAAkC;AAC5D,SAAO,OAAO,aAAa,YAAY,OAAO,aAAa;AAC7D;AAEa,MAAA,aAAa,CAAC,aAAwC;AACjE,SAAO,SAAS,QAAQ,MAAM,QAAQ,YAAY,gBAAgB;AACpE;"}
@@ -0,0 +1,10 @@
1
+ import { Common } 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: Common.UID.Schema;
6
+ sourceUid: Common.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,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,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,OAAO,GAAG,CAAC,MAAM,CAAC;IAC7B,SAAS,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,KACA,MAAM,EA6BR,CAAC"}