@strapi/core 5.49.0 → 5.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +2 -0
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +2 -0
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/configuration/config-loader.d.ts.map +1 -1
  7. package/dist/configuration/get-dirs.d.ts.map +1 -1
  8. package/dist/configuration/index.d.ts +0 -3
  9. package/dist/configuration/index.d.ts.map +1 -1
  10. package/dist/configuration/index.js +0 -3
  11. package/dist/configuration/index.js.map +1 -1
  12. package/dist/configuration/index.mjs +0 -3
  13. package/dist/configuration/index.mjs.map +1 -1
  14. package/dist/configuration/server-config.d.ts +11 -0
  15. package/dist/configuration/server-config.d.ts.map +1 -0
  16. package/dist/configuration/server-config.js +16 -0
  17. package/dist/configuration/server-config.js.map +1 -0
  18. package/dist/configuration/server-config.mjs +14 -0
  19. package/dist/configuration/server-config.mjs.map +1 -0
  20. package/dist/configuration/urls.d.ts.map +1 -1
  21. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  22. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  23. package/dist/core-api/controller/transform.d.ts.map +1 -1
  24. package/dist/core-api/routes/index.d.ts.map +1 -1
  25. package/dist/core-api/routes/validation/attributes.d.ts.map +1 -1
  26. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -1
  27. package/dist/core-api/routes/validation/utils.d.ts.map +1 -1
  28. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  29. package/dist/core-api/service/pagination.d.ts.map +1 -1
  30. package/dist/core-api/service/single-type.d.ts.map +1 -1
  31. package/dist/domain/content-type/index.d.ts.map +1 -1
  32. package/dist/domain/content-type/validator.d.ts.map +1 -1
  33. package/dist/domain/module/index.d.ts.map +1 -1
  34. package/dist/domain/module/validation.d.ts.map +1 -1
  35. package/dist/ee/index.d.ts +2 -1
  36. package/dist/ee/index.d.ts.map +1 -1
  37. package/dist/ee/license.d.ts.map +1 -1
  38. package/dist/factories.d.ts.map +1 -1
  39. package/dist/index.d.ts +4 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/index.mjs.map +1 -1
  43. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  44. package/dist/loaders/sanitizers.d.ts.map +1 -1
  45. package/dist/loaders/src-index.d.ts.map +1 -1
  46. package/dist/loaders/validators.d.ts.map +1 -1
  47. package/dist/middlewares/body.d.ts.map +1 -1
  48. package/dist/middlewares/body.js +1 -1
  49. package/dist/middlewares/body.js.map +1 -1
  50. package/dist/middlewares/body.mjs +1 -1
  51. package/dist/middlewares/body.mjs.map +1 -1
  52. package/dist/middlewares/cors.d.ts.map +1 -1
  53. package/dist/middlewares/errors.d.ts +5 -0
  54. package/dist/middlewares/errors.d.ts.map +1 -1
  55. package/dist/middlewares/errors.js.map +1 -1
  56. package/dist/middlewares/errors.mjs.map +1 -1
  57. package/dist/middlewares/favicon.d.ts +0 -1
  58. package/dist/middlewares/favicon.d.ts.map +1 -1
  59. package/dist/migrations/draft-publish.d.ts.map +1 -1
  60. package/dist/migrations/first-published-at.d.ts.map +1 -1
  61. package/dist/migrations/i18n.d.ts.map +1 -1
  62. package/dist/migrations/index.d.ts.map +1 -1
  63. package/dist/package.json.js +16 -19
  64. package/dist/package.json.js.map +1 -1
  65. package/dist/package.json.mjs +16 -19
  66. package/dist/package.json.mjs.map +1 -1
  67. package/dist/providers/provider.d.ts.map +1 -1
  68. package/dist/registries/apis.d.ts.map +1 -1
  69. package/dist/registries/components.d.ts +1 -1
  70. package/dist/registries/components.d.ts.map +1 -1
  71. package/dist/registries/content-types.d.ts +2 -3
  72. package/dist/registries/content-types.d.ts.map +1 -1
  73. package/dist/registries/controllers.d.ts +3 -3
  74. package/dist/registries/controllers.d.ts.map +1 -1
  75. package/dist/registries/custom-fields.d.ts.map +1 -1
  76. package/dist/registries/hooks.d.ts +3 -4
  77. package/dist/registries/hooks.d.ts.map +1 -1
  78. package/dist/registries/middlewares.d.ts +2 -3
  79. package/dist/registries/middlewares.d.ts.map +1 -1
  80. package/dist/registries/models.d.ts +1 -1
  81. package/dist/registries/modules.d.ts.map +1 -1
  82. package/dist/registries/namespace.d.ts.map +1 -1
  83. package/dist/registries/plugins.d.ts.map +1 -1
  84. package/dist/registries/policies.d.ts +1 -2
  85. package/dist/registries/policies.d.ts.map +1 -1
  86. package/dist/registries/sanitizers.d.ts +2 -2
  87. package/dist/registries/services.d.ts +3 -3
  88. package/dist/registries/services.d.ts.map +1 -1
  89. package/dist/registries/validators.d.ts +2 -2
  90. package/dist/services/ai.d.ts.map +1 -1
  91. package/dist/services/config.d.ts.map +1 -1
  92. package/dist/services/content-api/index.d.ts +4 -4
  93. package/dist/services/content-api/index.d.ts.map +1 -1
  94. package/dist/services/content-api/permissions/engine.d.ts.map +1 -1
  95. package/dist/services/content-api/permissions/index.d.ts +2 -2
  96. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  97. package/dist/services/content-api/permissions/providers/action.d.ts +1 -1
  98. package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
  99. package/dist/services/content-api/permissions/providers/condition.d.ts +1 -1
  100. package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
  101. package/dist/services/content-source-maps.d.ts.map +1 -1
  102. package/dist/services/core-store.d.ts.map +1 -1
  103. package/dist/services/cron.d.ts +5 -5
  104. package/dist/services/custom-fields.d.ts.map +1 -1
  105. package/dist/services/document-service/attributes/index.d.ts +0 -1
  106. package/dist/services/document-service/attributes/index.d.ts.map +1 -1
  107. package/dist/services/document-service/common.d.ts.map +1 -1
  108. package/dist/services/document-service/components.d.ts +2 -2
  109. package/dist/services/document-service/components.d.ts.map +1 -1
  110. package/dist/services/document-service/draft-and-publish.d.ts +0 -1
  111. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  112. package/dist/services/document-service/entries.d.ts.map +1 -1
  113. package/dist/services/document-service/events.d.ts.map +1 -1
  114. package/dist/services/document-service/first-published-at.d.ts.map +1 -1
  115. package/dist/services/document-service/index.d.ts.map +1 -1
  116. package/dist/services/document-service/internationalization.d.ts +0 -1
  117. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  118. package/dist/services/document-service/middlewares/middleware-manager.d.ts.map +1 -1
  119. package/dist/services/document-service/params.d.ts +1 -1
  120. package/dist/services/document-service/params.d.ts.map +1 -1
  121. package/dist/services/document-service/publication-filter.d.ts +1 -1
  122. package/dist/services/document-service/publication-filter.d.ts.map +1 -1
  123. package/dist/services/document-service/transform/data.d.ts.map +1 -1
  124. package/dist/services/document-service/transform/fields.d.ts.map +1 -1
  125. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  126. package/dist/services/document-service/transform/id-map.js +7 -4
  127. package/dist/services/document-service/transform/id-map.js.map +1 -1
  128. package/dist/services/document-service/transform/id-map.mjs +7 -4
  129. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  130. package/dist/services/document-service/transform/id-transform.d.ts +0 -1
  131. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  132. package/dist/services/document-service/transform/populate.d.ts.map +1 -1
  133. package/dist/services/document-service/transform/query.d.ts +0 -1
  134. package/dist/services/document-service/transform/query.d.ts.map +1 -1
  135. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  136. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  137. package/dist/services/document-service/transform/relations/transform/default-locale.d.ts.map +1 -1
  138. package/dist/services/document-service/transform/relations/utils/data.d.ts.map +1 -1
  139. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  140. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  141. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  142. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts +0 -1
  143. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  144. package/dist/services/document-service/transform/relations/utils/xto-one.d.ts.map +1 -1
  145. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -1
  146. package/dist/services/document-service/utils/bidirectional-relations.js +7 -2
  147. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -1
  148. package/dist/services/document-service/utils/bidirectional-relations.mjs +7 -2
  149. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -1
  150. package/dist/services/document-service/utils/clean-component-join-table.d.ts.map +1 -1
  151. package/dist/services/document-service/utils/ordered-parallel.d.ts.map +1 -1
  152. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  153. package/dist/services/document-service/utils/self-referential-relations.d.ts.map +1 -1
  154. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  155. package/dist/services/entity-service/index.d.ts.map +1 -1
  156. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  157. package/dist/services/errors.d.ts.map +1 -1
  158. package/dist/services/features.d.ts.map +1 -1
  159. package/dist/services/fs.d.ts.map +1 -1
  160. package/dist/services/mcp/authentication.d.ts.map +1 -1
  161. package/dist/services/mcp/handlers/handlePost.d.ts.map +1 -1
  162. package/dist/services/mcp/index.d.ts.map +1 -1
  163. package/dist/services/mcp/internal/McpCapabilityRegistry.d.ts +2 -2
  164. package/dist/services/mcp/internal/McpServerFactory.d.ts.map +1 -1
  165. package/dist/services/mcp/internal/syncMcpSessionCapabilities.d.ts.map +1 -1
  166. package/dist/services/mcp/metrics/metrics.d.ts.map +1 -1
  167. package/dist/services/mcp/metrics/normalizeMcpCapability.d.ts.map +1 -1
  168. package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.d.ts.map +1 -1
  169. package/dist/services/mcp/middleware/oauthDiscoveryFallback.d.ts.map +1 -1
  170. package/dist/services/mcp/prompt-registry.d.ts.map +1 -1
  171. package/dist/services/mcp/resource-registry.d.ts.map +1 -1
  172. package/dist/services/mcp/routes.d.ts +1 -1
  173. package/dist/services/mcp/routes.d.ts.map +1 -1
  174. package/dist/services/mcp/tool-registry.d.ts.map +1 -1
  175. package/dist/services/mcp/utils/createSafeCapabilityRegistration.d.ts.map +1 -1
  176. package/dist/services/mcp/utils/safeHandlerWrapper.d.ts.map +1 -1
  177. package/dist/services/mcp/utils/sendJsonRpcError.d.ts +0 -1
  178. package/dist/services/mcp/utils/sendJsonRpcError.d.ts.map +1 -1
  179. package/dist/services/mcp/utils/withTimeout.d.ts.map +1 -1
  180. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  181. package/dist/services/metrics/index.d.ts.map +1 -1
  182. package/dist/services/metrics/is-truthy.d.ts.map +1 -1
  183. package/dist/services/metrics/middleware.d.ts.map +1 -1
  184. package/dist/services/metrics/rate-limiter.d.ts +2 -1
  185. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  186. package/dist/services/metrics/sender.d.ts.map +1 -1
  187. package/dist/services/query-params.d.ts.map +1 -1
  188. package/dist/services/reloader.d.ts.map +1 -1
  189. package/dist/services/request-context.d.ts.map +1 -1
  190. package/dist/services/server/admin-api.d.ts +3 -5
  191. package/dist/services/server/admin-api.d.ts.map +1 -1
  192. package/dist/services/server/api.d.ts +3 -4
  193. package/dist/services/server/api.d.ts.map +1 -1
  194. package/dist/services/server/compose-endpoint.d.ts.map +1 -1
  195. package/dist/services/server/content-api.d.ts +3 -5
  196. package/dist/services/server/content-api.d.ts.map +1 -1
  197. package/dist/services/server/http-server.d.ts +0 -1
  198. package/dist/services/server/http-server.d.ts.map +1 -1
  199. package/dist/services/server/index.d.ts.map +1 -1
  200. package/dist/services/server/koa-methods.d.ts +107 -0
  201. package/dist/services/server/koa-methods.d.ts.map +1 -0
  202. package/dist/services/server/koa-methods.js +24 -0
  203. package/dist/services/server/koa-methods.js.map +1 -0
  204. package/dist/services/server/koa-methods.mjs +22 -0
  205. package/dist/services/server/koa-methods.mjs.map +1 -0
  206. package/dist/services/server/koa.d.ts +0 -9
  207. package/dist/services/server/koa.d.ts.map +1 -1
  208. package/dist/services/server/koa.js +6 -9
  209. package/dist/services/server/koa.js.map +1 -1
  210. package/dist/services/server/koa.mjs +7 -9
  211. package/dist/services/server/koa.mjs.map +1 -1
  212. package/dist/services/server/middleware.d.ts.map +1 -1
  213. package/dist/services/server/openapi.d.ts.map +1 -1
  214. package/dist/services/server/policy.d.ts.map +1 -1
  215. package/dist/services/server/register-middlewares.d.ts.map +1 -1
  216. package/dist/services/server/register-routes.d.ts.map +1 -1
  217. package/dist/services/server/routing.d.ts +0 -2
  218. package/dist/services/server/routing.d.ts.map +1 -1
  219. package/dist/services/session-manager.d.ts +20 -0
  220. package/dist/services/session-manager.d.ts.map +1 -1
  221. package/dist/services/session-manager.js +57 -0
  222. package/dist/services/session-manager.js.map +1 -1
  223. package/dist/services/session-manager.mjs +57 -0
  224. package/dist/services/session-manager.mjs.map +1 -1
  225. package/dist/services/webhook-store.d.ts.map +1 -1
  226. package/dist/utils/convert-custom-field-type.d.ts.map +1 -1
  227. package/dist/utils/cron.d.ts.map +1 -1
  228. package/dist/utils/fetch.d.ts.map +1 -1
  229. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  230. package/dist/utils/is-initialized.d.ts.map +1 -1
  231. package/dist/utils/load-config-file.d.ts.map +1 -1
  232. package/dist/utils/load-files.d.ts +1 -1
  233. package/dist/utils/load-files.d.ts.map +1 -1
  234. package/dist/utils/open-browser.d.ts +0 -1
  235. package/dist/utils/open-browser.d.ts.map +1 -1
  236. package/dist/utils/resolve-working-dirs.d.ts.map +1 -1
  237. package/dist/utils/signals.d.ts.map +1 -1
  238. package/dist/utils/startup-logger.d.ts.map +1 -1
  239. package/dist/utils/transform-content-types-to-models.d.ts +3 -3
  240. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  241. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  242. package/package.json +16 -19
@@ -1 +1 @@
1
- {"version":3,"file":"internationalization.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/internationalization.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;AAyJ7D;;;GAGG;AACH,QAAA,MAAM,sBAAsB,gBACb,OAAO,gBAAgB,GAAG,OAAO,oBAAoB,cACtD,MAAM,gBACJ,OAAO,MAAM,EAAE,GAAG,CAAC,KAChC,QAAQ,OAAO,MAAM,EAAE,GAAG,CAAC,CA4B7B,CAAC;AAEF,QAAA,MAAM,kBAAkB,+JAAuB,CAAC;AAChD,QAAA,MAAM,mBAAmB,sJAAwB,CAAC;AAClD,QAAA,MAAM,wBAAwB,sJAA6B,CAAC;AAC5D,QAAA,MAAM,iBAAiB,sJAAsB,CAAC;AAE9C,OAAO,EACL,kBAAkB,IAAI,aAAa,EACnC,mBAAmB,IAAI,cAAc,EACrC,iBAAiB,IAAI,YAAY,EACjC,wBAAwB,IAAI,mBAAmB,EAC/C,sBAAsB,GACvB,CAAC"}
1
+ {"version":3,"file":"internationalization.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/internationalization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;AAyJ7D;;;GAGG;AACH,QAAA,MAAM,sBAAsB,GAC1B,aAAa,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,EAClE,YAAY,MAAM,EAClB,cAAc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAChC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA4B7B,CAAC;AAEF,QAAA,MAAM,kBAAkB,+JAAuB,CAAC;AAChD,QAAA,MAAM,mBAAmB,sJAAwB,CAAC;AAClD,QAAA,MAAM,wBAAwB,sJAA6B,CAAC;AAC5D,QAAA,MAAM,iBAAiB,sJAAsB,CAAC;AAE9C,OAAO,EACL,kBAAkB,IAAI,aAAa,EACnC,mBAAmB,IAAI,cAAc,EACrC,iBAAiB,IAAI,YAAY,EACjC,wBAAwB,IAAI,mBAAmB,EAC/C,sBAAsB,GACvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware-manager.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/middlewares/middleware-manager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEvF,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,uBAAuB;oBAIhB,UAAU;aAMX,GAAG,MAAM,MAAM,IAAI;gCAcN,OAAO,2BAA0B,OAAO,GAAQ,OAAO;CAiCtF,CAAC"}
1
+ {"version":3,"file":"middleware-manager.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/middlewares/middleware-manager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEvF,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,uBAAuB;oBAIhB,UAAU;aAMX,GAAG,MAAM,MAAM,IAAI;eAcvB,OAAO,UAAU,OAAO,2BAA0B,OAAO,GAAQ,OAAO;CAiCtF,CAAC"}
@@ -23,6 +23,6 @@ export declare const ALLOWED_DOCUMENT_PARAM_KEYS: readonly ["filters", "sort", "
23
23
  export declare const ALLOWED_DOCUMENT_ROOT_PARAM_KEYS: readonly ["filters", "sort", "fields", "populate", "status", "locale", "page", "pageSize", "start", "limit", "_q", "publicationFilter", "hasPublishedVersion", "withCount", "data", "pagination", "count", "ordering"];
24
24
  /** Restrict to allowed query keys so only these reach the query-params transformer (security). */
25
25
  export declare const pickAllowedQueryParams: (params: Record<string, unknown>) => Record<(typeof ALLOWED_DOCUMENT_PARAM_KEYS)[number], unknown>;
26
- declare const pickSelectionParams: <TUID extends UID.ContentType>(data: unknown) => Modules.Documents.Params.Pick<TUID, 'fields' | 'populate' | 'status'>;
26
+ declare const pickSelectionParams: <TUID extends UID.ContentType>(data: unknown) => Modules.Documents.Params.Pick<TUID, "fields" | "populate" | "status">;
27
27
  export { pickSelectionParams };
28
28
  //# sourceMappingURL=params.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/params.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGlD;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,eAAO,MAAM,2BAA2B,6KAAqD,CAAC;AAE9F;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,wNAMnC,CAAC;AAEX,kGAAkG;AAClG,eAAO,MAAM,sBAAsB,WACzB,OAAO,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,kCAAkC,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,CAI5D,CAAC;AAEJ,QAAA,MAAM,mBAAmB,uCACjB,OAAO,KACZ,QAAQ,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAEtE,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/params.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGlD;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,eAAO,MAAM,2BAA2B,6KAAqD,CAAC;AAE9F;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,wNAMnC,CAAC;AAEX,kGAAkG;AAClG,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,MAAM,CAAC,CAAC,OAAO,2BAA2B,EAAE,MAAM,CAAC,EAAE,OAAO,CAI5D,CAAC;AAEJ,QAAA,MAAM,mBAAmB,GAAI,IAAI,SAAS,GAAG,CAAC,WAAW,EACvD,MAAM,OAAO,KACZ,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAEtE,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -2,5 +2,5 @@ import type { UID } from '@strapi/types';
2
2
  import { parsePublicationFilter, type PublicationFilterMode } from '@strapi/utils';
3
3
  export { parsePublicationFilter };
4
4
  export type { PublicationFilterMode };
5
- export declare const getPublicationFilterCondition: (uid: UID.Schema, mode: PublicationFilterMode, status: 'draft' | 'published') => Record<string, unknown> | null;
5
+ export declare const getPublicationFilterCondition: (uid: UID.Schema, mode: PublicationFilterMode, status: "draft" | "published") => Record<string, unknown> | null;
6
6
  //# sourceMappingURL=publication-filter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"publication-filter.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/publication-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAGL,sBAAsB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAClC,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,eAAO,MAAM,6BAA6B,QACnC,IAAI,MAAM,QACT,qBAAqB,UACnB,OAAO,GAAG,WAAW,KAC5B,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,IAW5B,CAAC"}
1
+ {"version":3,"file":"publication-filter.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/publication-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAGL,sBAAsB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAClC,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,eAAO,MAAM,6BAA6B,GACxC,KAAK,GAAG,CAAC,MAAM,EACf,MAAM,qBAAqB,EAC3B,QAAQ,OAAO,GAAG,WAAW,KAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAW5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/data.ts"],"names":[],"mappings":"AAcA,QAAA,MAAM,8BAA8B,YAEnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,SAAgB,GAAG,QAAQ,GAAG,qDAuBvD,CAAC;AAEF,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/data.ts"],"names":[],"mappings":"AAcA,QAAA,MAAM,8BAA8B,YAEnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAU,MAAM,GAAG,EAAE,MAAM,GAAG,qDAuBvD,CAAC;AAEF,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAElD,KAAK,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE5E,eAAO,MAAM,eAAe,WAAY,MAAM,KAAG,MAgChD,CAAC"}
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAElD,KAAK,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE5E,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,MAgChD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"id-map.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/id-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;AA6BrD,UAAU,SAAS;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;CAChC;AAED,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAElC,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,QAAA,MAAM,WAAW,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,KAAG,KAyF1D,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"id-map.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/id-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;AA+BrD,UAAU,SAAS;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;CAChC;AAED,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAElC,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,QAAA,MAAM,WAAW,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE,KAAG,KA4F1D,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var strapiUtils = require('@strapi/utils');
4
+ var i18n = require('./relations/utils/i18n.js');
4
5
 
5
6
  const hasDraftAndPublish = (uid)=>{
6
7
  const model = strapi.getModel(uid);
@@ -78,10 +79,12 @@ const hasDraftAndPublish = (uid)=>{
78
79
  where: {
79
80
  documentId: {
80
81
  $in: documentIds
81
- },
82
- locale: locale || null
82
+ }
83
83
  }
84
84
  };
85
+ if (i18n.isLocalizedContentType(uid)) {
86
+ findParams.where.locale = locale || null;
87
+ }
85
88
  if (hasDraftAndPublish(uid)) {
86
89
  findParams.where.publishedAt = status === 'draft' ? null : {
87
90
  $ne: null
@@ -89,11 +92,11 @@ const hasDraftAndPublish = (uid)=>{
89
92
  }
90
93
  const result = await strapi1?.db?.query(uid).findMany(findParams);
91
94
  // 3. Store result in loadedIds
92
- result?.forEach(({ documentId, id, locale, publishedAt })=>{
95
+ result?.forEach(({ documentId, id, locale: entryLocale, publishedAt })=>{
93
96
  const key = encodeKey({
94
97
  documentId,
95
98
  uid,
96
- locale,
99
+ locale: i18n.isLocalizedContentType(uid) ? entryLocale : null,
97
100
  status: publishedAt ? 'published' : 'draft'
98
101
  });
99
102
  loadedIds.set(key, id);
@@ -1 +1 @@
1
- {"version":3,"file":"id-map.js","sources":["../../../../src/services/document-service/transform/id-map.ts"],"sourcesContent":["import type { Core, Data, UID } from '@strapi/types';\nimport { async, contentTypes } from '@strapi/utils';\n\nconst hasDraftAndPublish = (uid: UID.CollectionType) => {\n const model = strapi.getModel(uid);\n return contentTypes.hasDraftAndPublish(model);\n};\n\n/**\n * TODO: Find a better way to encode keys than this\n * This converts an object into a string by joining its keys and values,\n * so it can be used as a key in a Map.\n *\n * @example\n * const obj = { a: 1, b: 2 };\n * const key = encodeKey(obj);\n * ^ \"a:::1&&b:::2\"\n */\nconst encodeKey = (obj: any) => {\n // Ignore status field for models without draft and publish\n if (!hasDraftAndPublish(obj.uid)) {\n delete obj.status;\n }\n\n // Sort keys to always keep the same order when encoding\n const keys = Object.keys(obj).sort();\n return keys.map((key) => `${key}:::${obj[key]}`).join('&&');\n};\n\ninterface KeyFields {\n uid: string;\n documentId: Data.ID;\n locale?: string | null;\n status?: 'draft' | 'published';\n}\n\nexport interface IdMap {\n loadedIds: Map<string, string>;\n toLoadIds: Map<string, KeyFields>;\n // Make the Keys type to be the params of add\n add(keys: KeyFields): void;\n load(): Promise<void>;\n get(keys: KeyFields): string | undefined;\n clear(): void;\n}\n\n/**\n * Holds a registry of document ids and their corresponding entity ids.\n */\nconst createIdMap = ({ strapi }: { strapi: Core.Strapi }): IdMap => {\n const loadedIds = new Map();\n const toLoadIds = new Map();\n\n return {\n loadedIds,\n toLoadIds,\n /**\n * Register a new document id and its corresponding entity id.\n */\n add(keyFields: KeyFields) {\n const key = encodeKey({ status: 'published', locale: null, ...keyFields });\n\n // If the id is already loaded, do nothing\n if (loadedIds.has(key)) return;\n // If the id is already in the toLoadIds, do nothing\n if (toLoadIds.has(key)) return;\n\n // Add the id to the toLoadIds\n toLoadIds.set(key, keyFields);\n },\n\n /**\n * Load all ids from the registry.\n */\n async load() {\n // Document Id to Entry Id queries are batched by its uid and locale\n // TODO: Add publication state too\n const loadIdValues = Array.from(toLoadIds.values());\n\n // 1. Group ids to query together\n const idsByUidAndLocale = loadIdValues.reduce((acc, { documentId, ...rest }) => {\n const key = encodeKey(rest);\n const ids = acc[key] || { ...rest, documentIds: [] };\n ids.documentIds.push(documentId);\n return { ...acc, [key]: ids };\n }, {});\n\n // 2. Query ids\n await async.map(\n Object.values(idsByUidAndLocale),\n async ({ uid, locale, documentIds, status }: any) => {\n const findParams = {\n select: ['id', 'documentId', 'locale', 'publishedAt'],\n where: {\n documentId: { $in: documentIds },\n locale: locale || null,\n },\n } as any;\n\n if (hasDraftAndPublish(uid)) {\n findParams.where.publishedAt = status === 'draft' ? null : { $ne: null };\n }\n\n const result = await strapi?.db?.query(uid).findMany(findParams);\n\n // 3. Store result in loadedIds\n result?.forEach(({ documentId, id, locale, publishedAt }: any) => {\n const key = encodeKey({\n documentId,\n uid,\n locale,\n status: publishedAt ? 'published' : 'draft',\n });\n loadedIds.set(key, id);\n });\n }\n );\n\n // 4. Clear toLoadIds\n toLoadIds.clear();\n },\n\n /**\n * Get the entity id for a given document id.\n */\n get(keys: KeyFields) {\n const key = encodeKey({ status: 'published', locale: null, ...keys });\n return loadedIds.get(key);\n },\n\n /**\n * Clear the registry.\n */\n clear() {\n loadedIds.clear();\n toLoadIds.clear();\n },\n };\n};\n\nexport { createIdMap };\n"],"names":["hasDraftAndPublish","uid","model","strapi","getModel","contentTypes","encodeKey","obj","status","keys","Object","sort","map","key","join","createIdMap","loadedIds","Map","toLoadIds","add","keyFields","locale","has","set","load","loadIdValues","Array","from","values","idsByUidAndLocale","reduce","acc","documentId","rest","ids","documentIds","push","async","findParams","select","where","$in","publishedAt","$ne","result","db","query","findMany","forEach","id","clear","get"],"mappings":"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"}
1
+ {"version":3,"file":"id-map.js","sources":["../../../../src/services/document-service/transform/id-map.ts"],"sourcesContent":["import type { Core, Data, UID } from '@strapi/types';\nimport { async, contentTypes } from '@strapi/utils';\n\nimport { isLocalizedContentType } from './relations/utils/i18n';\n\nconst hasDraftAndPublish = (uid: UID.CollectionType) => {\n const model = strapi.getModel(uid);\n return contentTypes.hasDraftAndPublish(model);\n};\n\n/**\n * TODO: Find a better way to encode keys than this\n * This converts an object into a string by joining its keys and values,\n * so it can be used as a key in a Map.\n *\n * @example\n * const obj = { a: 1, b: 2 };\n * const key = encodeKey(obj);\n * ^ \"a:::1&&b:::2\"\n */\nconst encodeKey = (obj: any) => {\n // Ignore status field for models without draft and publish\n if (!hasDraftAndPublish(obj.uid)) {\n delete obj.status;\n }\n\n // Sort keys to always keep the same order when encoding\n const keys = Object.keys(obj).sort();\n return keys.map((key) => `${key}:::${obj[key]}`).join('&&');\n};\n\ninterface KeyFields {\n uid: string;\n documentId: Data.ID;\n locale?: string | null;\n status?: 'draft' | 'published';\n}\n\nexport interface IdMap {\n loadedIds: Map<string, string>;\n toLoadIds: Map<string, KeyFields>;\n // Make the Keys type to be the params of add\n add(keys: KeyFields): void;\n load(): Promise<void>;\n get(keys: KeyFields): string | undefined;\n clear(): void;\n}\n\n/**\n * Holds a registry of document ids and their corresponding entity ids.\n */\nconst createIdMap = ({ strapi }: { strapi: Core.Strapi }): IdMap => {\n const loadedIds = new Map();\n const toLoadIds = new Map();\n\n return {\n loadedIds,\n toLoadIds,\n /**\n * Register a new document id and its corresponding entity id.\n */\n add(keyFields: KeyFields) {\n const key = encodeKey({ status: 'published', locale: null, ...keyFields });\n\n // If the id is already loaded, do nothing\n if (loadedIds.has(key)) return;\n // If the id is already in the toLoadIds, do nothing\n if (toLoadIds.has(key)) return;\n\n // Add the id to the toLoadIds\n toLoadIds.set(key, keyFields);\n },\n\n /**\n * Load all ids from the registry.\n */\n async load() {\n // Document Id to Entry Id queries are batched by its uid and locale\n // TODO: Add publication state too\n const loadIdValues = Array.from(toLoadIds.values());\n\n // 1. Group ids to query together\n const idsByUidAndLocale = loadIdValues.reduce((acc, { documentId, ...rest }) => {\n const key = encodeKey(rest);\n const ids = acc[key] || { ...rest, documentIds: [] };\n ids.documentIds.push(documentId);\n return { ...acc, [key]: ids };\n }, {});\n\n // 2. Query ids\n await async.map(\n Object.values(idsByUidAndLocale),\n async ({ uid, locale, documentIds, status }: any) => {\n const findParams = {\n select: ['id', 'documentId', 'locale', 'publishedAt'],\n where: {\n documentId: { $in: documentIds },\n },\n } as any;\n\n if (isLocalizedContentType(uid)) {\n findParams.where.locale = locale || null;\n }\n\n if (hasDraftAndPublish(uid)) {\n findParams.where.publishedAt = status === 'draft' ? null : { $ne: null };\n }\n\n const result = await strapi?.db?.query(uid).findMany(findParams);\n\n // 3. Store result in loadedIds\n result?.forEach(({ documentId, id, locale: entryLocale, publishedAt }: any) => {\n const key = encodeKey({\n documentId,\n uid,\n locale: isLocalizedContentType(uid) ? entryLocale : null,\n status: publishedAt ? 'published' : 'draft',\n });\n loadedIds.set(key, id);\n });\n }\n );\n\n // 4. Clear toLoadIds\n toLoadIds.clear();\n },\n\n /**\n * Get the entity id for a given document id.\n */\n get(keys: KeyFields) {\n const key = encodeKey({ status: 'published', locale: null, ...keys });\n return loadedIds.get(key);\n },\n\n /**\n * Clear the registry.\n */\n clear() {\n loadedIds.clear();\n toLoadIds.clear();\n },\n };\n};\n\nexport { createIdMap };\n"],"names":["hasDraftAndPublish","uid","model","strapi","getModel","contentTypes","encodeKey","obj","status","keys","Object","sort","map","key","join","createIdMap","loadedIds","Map","toLoadIds","add","keyFields","locale","has","set","load","loadIdValues","Array","from","values","idsByUidAndLocale","reduce","acc","documentId","rest","ids","documentIds","push","async","findParams","select","where","$in","isLocalizedContentType","publishedAt","$ne","result","db","query","findMany","forEach","id","entryLocale","clear","get"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { async, contentTypes } from '@strapi/utils';
2
+ import { isLocalizedContentType } from './relations/utils/i18n.mjs';
2
3
 
3
4
  const hasDraftAndPublish = (uid)=>{
4
5
  const model = strapi.getModel(uid);
@@ -76,10 +77,12 @@ const hasDraftAndPublish = (uid)=>{
76
77
  where: {
77
78
  documentId: {
78
79
  $in: documentIds
79
- },
80
- locale: locale || null
80
+ }
81
81
  }
82
82
  };
83
+ if (isLocalizedContentType(uid)) {
84
+ findParams.where.locale = locale || null;
85
+ }
83
86
  if (hasDraftAndPublish(uid)) {
84
87
  findParams.where.publishedAt = status === 'draft' ? null : {
85
88
  $ne: null
@@ -87,11 +90,11 @@ const hasDraftAndPublish = (uid)=>{
87
90
  }
88
91
  const result = await strapi1?.db?.query(uid).findMany(findParams);
89
92
  // 3. Store result in loadedIds
90
- result?.forEach(({ documentId, id, locale, publishedAt })=>{
93
+ result?.forEach(({ documentId, id, locale: entryLocale, publishedAt })=>{
91
94
  const key = encodeKey({
92
95
  documentId,
93
96
  uid,
94
- locale,
97
+ locale: isLocalizedContentType(uid) ? entryLocale : null,
95
98
  status: publishedAt ? 'published' : 'draft'
96
99
  });
97
100
  loadedIds.set(key, id);
@@ -1 +1 @@
1
- {"version":3,"file":"id-map.mjs","sources":["../../../../src/services/document-service/transform/id-map.ts"],"sourcesContent":["import type { Core, Data, UID } from '@strapi/types';\nimport { async, contentTypes } from '@strapi/utils';\n\nconst hasDraftAndPublish = (uid: UID.CollectionType) => {\n const model = strapi.getModel(uid);\n return contentTypes.hasDraftAndPublish(model);\n};\n\n/**\n * TODO: Find a better way to encode keys than this\n * This converts an object into a string by joining its keys and values,\n * so it can be used as a key in a Map.\n *\n * @example\n * const obj = { a: 1, b: 2 };\n * const key = encodeKey(obj);\n * ^ \"a:::1&&b:::2\"\n */\nconst encodeKey = (obj: any) => {\n // Ignore status field for models without draft and publish\n if (!hasDraftAndPublish(obj.uid)) {\n delete obj.status;\n }\n\n // Sort keys to always keep the same order when encoding\n const keys = Object.keys(obj).sort();\n return keys.map((key) => `${key}:::${obj[key]}`).join('&&');\n};\n\ninterface KeyFields {\n uid: string;\n documentId: Data.ID;\n locale?: string | null;\n status?: 'draft' | 'published';\n}\n\nexport interface IdMap {\n loadedIds: Map<string, string>;\n toLoadIds: Map<string, KeyFields>;\n // Make the Keys type to be the params of add\n add(keys: KeyFields): void;\n load(): Promise<void>;\n get(keys: KeyFields): string | undefined;\n clear(): void;\n}\n\n/**\n * Holds a registry of document ids and their corresponding entity ids.\n */\nconst createIdMap = ({ strapi }: { strapi: Core.Strapi }): IdMap => {\n const loadedIds = new Map();\n const toLoadIds = new Map();\n\n return {\n loadedIds,\n toLoadIds,\n /**\n * Register a new document id and its corresponding entity id.\n */\n add(keyFields: KeyFields) {\n const key = encodeKey({ status: 'published', locale: null, ...keyFields });\n\n // If the id is already loaded, do nothing\n if (loadedIds.has(key)) return;\n // If the id is already in the toLoadIds, do nothing\n if (toLoadIds.has(key)) return;\n\n // Add the id to the toLoadIds\n toLoadIds.set(key, keyFields);\n },\n\n /**\n * Load all ids from the registry.\n */\n async load() {\n // Document Id to Entry Id queries are batched by its uid and locale\n // TODO: Add publication state too\n const loadIdValues = Array.from(toLoadIds.values());\n\n // 1. Group ids to query together\n const idsByUidAndLocale = loadIdValues.reduce((acc, { documentId, ...rest }) => {\n const key = encodeKey(rest);\n const ids = acc[key] || { ...rest, documentIds: [] };\n ids.documentIds.push(documentId);\n return { ...acc, [key]: ids };\n }, {});\n\n // 2. Query ids\n await async.map(\n Object.values(idsByUidAndLocale),\n async ({ uid, locale, documentIds, status }: any) => {\n const findParams = {\n select: ['id', 'documentId', 'locale', 'publishedAt'],\n where: {\n documentId: { $in: documentIds },\n locale: locale || null,\n },\n } as any;\n\n if (hasDraftAndPublish(uid)) {\n findParams.where.publishedAt = status === 'draft' ? null : { $ne: null };\n }\n\n const result = await strapi?.db?.query(uid).findMany(findParams);\n\n // 3. Store result in loadedIds\n result?.forEach(({ documentId, id, locale, publishedAt }: any) => {\n const key = encodeKey({\n documentId,\n uid,\n locale,\n status: publishedAt ? 'published' : 'draft',\n });\n loadedIds.set(key, id);\n });\n }\n );\n\n // 4. Clear toLoadIds\n toLoadIds.clear();\n },\n\n /**\n * Get the entity id for a given document id.\n */\n get(keys: KeyFields) {\n const key = encodeKey({ status: 'published', locale: null, ...keys });\n return loadedIds.get(key);\n },\n\n /**\n * Clear the registry.\n */\n clear() {\n loadedIds.clear();\n toLoadIds.clear();\n },\n };\n};\n\nexport { createIdMap };\n"],"names":["hasDraftAndPublish","uid","model","strapi","getModel","contentTypes","encodeKey","obj","status","keys","Object","sort","map","key","join","createIdMap","loadedIds","Map","toLoadIds","add","keyFields","locale","has","set","load","loadIdValues","Array","from","values","idsByUidAndLocale","reduce","acc","documentId","rest","ids","documentIds","push","async","findParams","select","where","$in","publishedAt","$ne","result","db","query","findMany","forEach","id","clear","get"],"mappings":"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"}
1
+ {"version":3,"file":"id-map.mjs","sources":["../../../../src/services/document-service/transform/id-map.ts"],"sourcesContent":["import type { Core, Data, UID } from '@strapi/types';\nimport { async, contentTypes } from '@strapi/utils';\n\nimport { isLocalizedContentType } from './relations/utils/i18n';\n\nconst hasDraftAndPublish = (uid: UID.CollectionType) => {\n const model = strapi.getModel(uid);\n return contentTypes.hasDraftAndPublish(model);\n};\n\n/**\n * TODO: Find a better way to encode keys than this\n * This converts an object into a string by joining its keys and values,\n * so it can be used as a key in a Map.\n *\n * @example\n * const obj = { a: 1, b: 2 };\n * const key = encodeKey(obj);\n * ^ \"a:::1&&b:::2\"\n */\nconst encodeKey = (obj: any) => {\n // Ignore status field for models without draft and publish\n if (!hasDraftAndPublish(obj.uid)) {\n delete obj.status;\n }\n\n // Sort keys to always keep the same order when encoding\n const keys = Object.keys(obj).sort();\n return keys.map((key) => `${key}:::${obj[key]}`).join('&&');\n};\n\ninterface KeyFields {\n uid: string;\n documentId: Data.ID;\n locale?: string | null;\n status?: 'draft' | 'published';\n}\n\nexport interface IdMap {\n loadedIds: Map<string, string>;\n toLoadIds: Map<string, KeyFields>;\n // Make the Keys type to be the params of add\n add(keys: KeyFields): void;\n load(): Promise<void>;\n get(keys: KeyFields): string | undefined;\n clear(): void;\n}\n\n/**\n * Holds a registry of document ids and their corresponding entity ids.\n */\nconst createIdMap = ({ strapi }: { strapi: Core.Strapi }): IdMap => {\n const loadedIds = new Map();\n const toLoadIds = new Map();\n\n return {\n loadedIds,\n toLoadIds,\n /**\n * Register a new document id and its corresponding entity id.\n */\n add(keyFields: KeyFields) {\n const key = encodeKey({ status: 'published', locale: null, ...keyFields });\n\n // If the id is already loaded, do nothing\n if (loadedIds.has(key)) return;\n // If the id is already in the toLoadIds, do nothing\n if (toLoadIds.has(key)) return;\n\n // Add the id to the toLoadIds\n toLoadIds.set(key, keyFields);\n },\n\n /**\n * Load all ids from the registry.\n */\n async load() {\n // Document Id to Entry Id queries are batched by its uid and locale\n // TODO: Add publication state too\n const loadIdValues = Array.from(toLoadIds.values());\n\n // 1. Group ids to query together\n const idsByUidAndLocale = loadIdValues.reduce((acc, { documentId, ...rest }) => {\n const key = encodeKey(rest);\n const ids = acc[key] || { ...rest, documentIds: [] };\n ids.documentIds.push(documentId);\n return { ...acc, [key]: ids };\n }, {});\n\n // 2. Query ids\n await async.map(\n Object.values(idsByUidAndLocale),\n async ({ uid, locale, documentIds, status }: any) => {\n const findParams = {\n select: ['id', 'documentId', 'locale', 'publishedAt'],\n where: {\n documentId: { $in: documentIds },\n },\n } as any;\n\n if (isLocalizedContentType(uid)) {\n findParams.where.locale = locale || null;\n }\n\n if (hasDraftAndPublish(uid)) {\n findParams.where.publishedAt = status === 'draft' ? null : { $ne: null };\n }\n\n const result = await strapi?.db?.query(uid).findMany(findParams);\n\n // 3. Store result in loadedIds\n result?.forEach(({ documentId, id, locale: entryLocale, publishedAt }: any) => {\n const key = encodeKey({\n documentId,\n uid,\n locale: isLocalizedContentType(uid) ? entryLocale : null,\n status: publishedAt ? 'published' : 'draft',\n });\n loadedIds.set(key, id);\n });\n }\n );\n\n // 4. Clear toLoadIds\n toLoadIds.clear();\n },\n\n /**\n * Get the entity id for a given document id.\n */\n get(keys: KeyFields) {\n const key = encodeKey({ status: 'published', locale: null, ...keys });\n return loadedIds.get(key);\n },\n\n /**\n * Clear the registry.\n */\n clear() {\n loadedIds.clear();\n toLoadIds.clear();\n },\n };\n};\n\nexport { createIdMap };\n"],"names":["hasDraftAndPublish","uid","model","strapi","getModel","contentTypes","encodeKey","obj","status","keys","Object","sort","map","key","join","createIdMap","loadedIds","Map","toLoadIds","add","keyFields","locale","has","set","load","loadIdValues","Array","from","values","idsByUidAndLocale","reduce","acc","documentId","rest","ids","documentIds","push","async","findParams","select","where","$in","isLocalizedContentType","publishedAt","$ne","result","db","query","findMany","forEach","id","entryLocale","clear","get"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- /// <reference types="lodash" />
2
1
  import type { UID, Modules } from '@strapi/types';
3
2
  declare const curriedTransformParamsDocumentId: import("lodash").CurriedFunction2<UID.Schema, Modules.Documents.Params.All, Promise<Modules.Documents.Params.All>>;
4
3
  export { curriedTransformParamsDocumentId as transformParamsDocumentId };
@@ -1 +1 @@
1
- {"version":3,"file":"id-transform.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/id-transform.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA0ClD,QAAA,MAAM,gCAAgC,oHAAmC,CAAC;AAE1E,OAAO,EAAE,gCAAgC,IAAI,yBAAyB,EAAE,CAAC"}
1
+ {"version":3,"file":"id-transform.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/id-transform.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA0ClD,QAAA,MAAM,gCAAgC,oHAAmC,CAAC;AAE1E,OAAO,EAAE,gCAAgC,IAAI,yBAAyB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/populate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAGpC,eAAO,MAAM,iBAAiB,SAAgB,IAAI,QAAQ;IAAE,GAAG,EAAE,IAAI,MAAM,CAAA;CAAE,qBAqB5E,CAAC"}
1
+ {"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/populate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAGpC,eAAO,MAAM,iBAAiB,GAAU,MAAM,IAAI,EAAE,MAAM;IAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAA;CAAE,qBAqB5E,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="lodash" />
2
1
  import type { UID } from '@strapi/types';
3
2
  declare const transformParamsToQuery: import("lodash").CurriedFunction2<UID.Schema, any, Partial<any>>;
4
3
  export { transformParamsToQuery };
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/query.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAazC,QAAA,MAAM,sBAAsB,kEAmE1B,CAAC;AAEH,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAazC,QAAA,MAAM,sBAAsB,kEAmE1B,CAAC;AAEH,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-ids.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/extract/data-ids.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AASrC,UAAU,OAAO;IACf,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;CAChC;AA8BD;;;GAGG;AACH,QAAA,MAAM,cAAc,UAAW,KAAK,QAAQ,OAAO,MAAM,EAAE,GAAG,CAAC,UAAU,OAAO,qDA8C/E,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"data-ids.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/extract/data-ids.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AASrC,UAAU,OAAO;IACf,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;CAChC;AA8BD;;;GAGG;AACH,QAAA,MAAM,cAAc,GAAI,OAAO,KAAK,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,OAAO,qDA8C/E,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -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,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAIzC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAQrC,UAAU,OAAO;IACf,GAAG,EAAE,GAAG,CAAC,MAAM,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;AA+CD;;GAEG;AACH,QAAA,MAAM,uBAAuB,UAAW,KAAK,QAAQ,OAAO,MAAM,EAAE,GAAG,CAAC,UAAU,OAAO,qDAiExF,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,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAIzC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAQrC,UAAU,OAAO;IACf,GAAG,EAAE,GAAG,CAAC,MAAM,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;AA+CD;;GAEG;AACH,QAAA,MAAM,uBAAuB,GAAI,OAAO,KAAK,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,OAAO,qDAiExF,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"default-locale.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/transform/default-locale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAKzC;;;;GAIG;AACH,QAAA,MAAM,2BAA2B,SAAU,OAAO,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,2EA2C9E,CAAC;AAEF,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
1
+ {"version":3,"file":"default-locale.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/transform/default-locale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAKzC;;;;GAIG;AACH,QAAA,MAAM,2BAA2B,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,2EA2C9E,CAAC;AAEF,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
@@ -1 +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"}
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,GAAI,UAAU,GAAG,KAAG,QAAQ,IAAI,EAEvD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,UAAU,GAAG,KAAG,QAAQ,IAAI,QAEtD,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { UID } from '@strapi/types';
2
2
  import { LongHandDocument } from './types';
3
3
  type Status = 'draft' | 'published';
4
- export declare const getRelationTargetStatus: (relation: Pick<LongHandDocument, 'documentId' | 'status'>, opts: {
4
+ export declare const getRelationTargetStatus: (relation: Pick<LongHandDocument, "documentId" | "status">, opts: {
5
5
  targetUid: UID.Schema;
6
6
  sourceUid: UID.Schema;
7
7
  sourceStatus?: Status;
@@ -1 +1 @@
1
- {"version":3,"file":"dp.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/dp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,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"}
1
+ {"version":3,"file":"dp.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/dp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,KAAK,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEpC,eAAO,MAAM,uBAAuB,GAClC,UAAU,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,QAAQ,CAAC,EACzD,MAAM;IACJ,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC;IACtB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,KACA,MAAM,EA2CR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,sBAAsB,QAAS,IAAI,MAAM,QAGrD,CAAC;AAEF,eAAO,MAAM,gBAAgB,WAE5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,aACxB,gBAAgB,QACpB;IACJ,SAAS,EAAE,IAAI,MAAM,CAAC;IACtB,SAAS,EAAE,IAAI,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,8BAiBF,CAAC"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,sBAAsB,GAAI,KAAK,GAAG,CAAC,MAAM,QAGrD,CAAC;AAEF,eAAO,MAAM,gBAAgB,WAE5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,UAAU,gBAAgB,EAC1B,MAAM;IACJ,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC;IACtB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,8BAiBF,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="lodash" />
2
1
  import { Relation } from './types';
3
2
  declare const mapRelationCurried: import("lodash").CurriedFunction2<(relation: any) => any, Relation, Promise<Relation>>;
4
3
  declare const traverseEntityRelationsCurried: import("lodash").CurriedFunction3<import("@strapi/utils/dist/traverse-entity").Visitor, import("@strapi/utils/dist/traverse-entity").TraverseOptions, import("@strapi/utils/dist/types").Data, Promise<import("@strapi/utils/dist/types").Data>>;
@@ -1 +1 @@
1
- {"version":3,"file":"map-relation.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/map-relation.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAqJnC,QAAA,MAAM,kBAAkB,+CApHD,GAAG,KAAK,GAAG,8BAoHW,CAAC;AAC9C,QAAA,MAAM,8BAA8B,kPAAiC,CAAC;AAEtE,OAAO,EACL,kBAAkB,IAAI,WAAW,EACjC,8BAA8B,IAAI,uBAAuB,GAC1D,CAAC"}
1
+ {"version":3,"file":"map-relation.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/map-relation.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAqJnC,QAAA,MAAM,kBAAkB,+CApHD,GAAG,KAAK,GAAG,8BAoHW,CAAC;AAC9C,QAAA,MAAM,8BAA8B,kPAAiC,CAAC;AAEtE,OAAO,EACL,kBAAkB,IAAI,WAAW,EACjC,8BAA8B,IAAI,uBAAuB,GAC1D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"xto-one.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/xto-one.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAInC;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,cAAe,GAAG,SAAS,QAAQ,KAAG,QA2B9E,CAAC"}
1
+ {"version":3,"file":"xto-one.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/utils/xto-one.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAInC;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,GAAI,WAAW,GAAG,EAAE,OAAO,QAAQ,KAAG,QA2B9E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bidirectional-relations.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/utils/bidirectional-relations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAU,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,UAAU,WAAW;IACnB,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9C,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C;AAED,UAAU,aAAa;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACrC,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC;CACvB;AA2ID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,QAAA,MAAM,IAAI,QAAe,IAAI,WAAW,gCAAgC,WAAW,6BAiElF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,QAAA,MAAM,IAAI,eACI;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,cAChC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,qBACzB,aAAa,EAAE,kBA6FnC,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"bidirectional-relations.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/utils/bidirectional-relations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAU,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,UAAU,WAAW;IACnB,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9C,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C;AAED,UAAU,aAAa;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACrC,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC;CACvB;AAyJD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,QAAA,MAAM,IAAI,GAAU,KAAK,GAAG,CAAC,WAAW,EAAE,8BAA8B,WAAW,6BAkElF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,QAAA,MAAM,IAAI,GACR,YAAY;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,EAC5C,YAAY;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,EAC5C,mBAAmB,aAAa,EAAE,kBA6FnC,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC"}
@@ -39,10 +39,14 @@ const remapRelatedIds = (rows, relatedCol, idMap)=>rows.map((row)=>{
39
39
  * batches for `sync()`. When the FK in `relatedCol` points at a D&P type, maps known draft ids to
40
40
  * published ids; otherwise keeps draft ids so sync can still run after both sides exist.
41
41
  */ const captureJoinBatches = async (trx, opts)=>{
42
- const { joinTable, publishedCol, relatedCol, relatedUid, relatedHasDraftAndPublish, schemaUid, oldVersions, newVersions } = opts;
42
+ const { joinTable, publishedCol, relatedCol, relatedUid, relatedHasDraftAndPublish, schemaUid, isOwningSide, oldVersions, newVersions } = opts;
43
43
  const batches = [];
44
44
  const { name: table } = joinTable;
45
- const oldIds = oldVersions.map((e)=>e.id);
45
+ // Skip the old-published capture for the owning side: those rows are recreated in draft order
46
+ // by `entries.publish`, so restoring their order from the old published version is at best a
47
+ // no-op and at worst reverts a draft reorder. The draftsOnly capture below is still needed
48
+ // (e.g. when a related entry is published after this one) and is not affected by this guard.
49
+ const oldIds = isOwningSide ? [] : oldVersions.map((e)=>e.id);
46
50
  if (oldIds.length > 0) {
47
51
  const existing = await strapi.db.getConnection().select('*').from(table).whereIn(publishedCol, oldIds).transacting(trx);
48
52
  if (existing.length > 0) {
@@ -161,6 +165,7 @@ const remapRelatedIds = (rows, relatedCol, idMap)=>rows.map((row)=>{
161
165
  relatedUid,
162
166
  relatedHasDraftAndPublish: isOwningSide ? !!strapi.contentTypes[relatedUid]?.options?.draftAndPublish : !!model.options?.draftAndPublish,
163
167
  schemaUid: model.uid,
168
+ isOwningSide,
164
169
  oldVersions,
165
170
  newVersions
166
171
  });
@@ -1 +1 @@
1
- {"version":3,"file":"bidirectional-relations.js","sources":["../../../../src/services/document-service/utils/bidirectional-relations.ts"],"sourcesContent":["import { keyBy, omit } from 'lodash/fp';\nimport type { UID, Schema } from '@strapi/types';\nimport type { JoinTable } from '@strapi/database';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\ninterface RelationEntry {\n joinTable: JoinTable;\n relations: Record<string, unknown>[];\n /** FK column for the entity being published */\n entityColumn: string;\n /** FK column for the related entity */\n relatedColumn: string;\n}\n\n/** Draft id → published id for rows that already have a published counterpart (same document_id + locale). */\nconst draftToPublishedMap = async (trx: any, tableName: string, rowIds: unknown[]) => {\n const uniqueIds = [...new Set(rowIds)];\n if (uniqueIds.length === 0) {\n return new Map<string, string>();\n }\n\n const draftEntries = await strapi.db\n .getConnection()\n .select('id', 'document_id', 'locale')\n .from(tableName)\n .whereIn('id', uniqueIds as any)\n .transacting(trx);\n\n if (draftEntries.length === 0) {\n return new Map<string, string>();\n }\n\n const pubEntries = await strapi.db\n .getConnection()\n .select('id', 'document_id', 'locale')\n .from(tableName)\n .whereNotNull('published_at')\n .whereIn(\n 'document_id',\n draftEntries.map((e: any) => e.document_id)\n )\n .transacting(trx);\n\n const pubByDocLocale = new Map(\n pubEntries.map((e: any) => [`${e.document_id}_${e.locale}`, e.id])\n );\n\n const map = new Map<string, string>();\n for (const d of draftEntries) {\n const pubId = pubByDocLocale.get(`${d.document_id}_${d.locale}`);\n if (pubId) {\n map.set(String(d.id), String(pubId));\n }\n }\n return map;\n};\n\nconst remapRelatedIds = (rows: any[], relatedCol: string, idMap: Map<string, string>) =>\n rows.map((row) => {\n const next = idMap.get(String(row[relatedCol]));\n return next ? { ...row, [relatedCol]: next } : row;\n });\n\n/**\n * Reads join rows tied to the entry being published (`publishedCol` IN draft/old ids) and returns\n * batches for `sync()`. When the FK in `relatedCol` points at a D&P type, maps known draft ids to\n * published ids; otherwise keeps draft ids so sync can still run after both sides exist.\n */\nconst captureJoinBatches = async (\n trx: any,\n opts: {\n joinTable: any;\n /** Column holding ids of the document being published (the `uid` passed to load). */\n publishedCol: string;\n /** The other FK; may be remapped via draftToPublishedMap. */\n relatedCol: string;\n /** Content type behind `relatedCol` (used for D&P + table name). */\n relatedUid: UID.ContentType;\n relatedHasDraftAndPublish: boolean;\n /** Model that owns this attribute; draft capture is skipped for components. */\n schemaUid: UID.ContentType;\n oldVersions: LoadContext['oldVersions'];\n newVersions: LoadContext['newVersions'];\n }\n): Promise<RelationEntry[]> => {\n const {\n joinTable,\n publishedCol,\n relatedCol,\n relatedUid,\n relatedHasDraftAndPublish,\n schemaUid,\n oldVersions,\n newVersions,\n } = opts;\n\n const batches: RelationEntry[] = [];\n const { name: table } = joinTable;\n\n const oldIds = oldVersions.map((e) => e.id);\n if (oldIds.length > 0) {\n const existing = await strapi.db\n .getConnection()\n .select('*')\n .from(table)\n .whereIn(publishedCol, oldIds)\n .transacting(trx);\n if (existing.length > 0) {\n batches.push({\n joinTable,\n relations: existing,\n entityColumn: publishedCol,\n relatedColumn: relatedCol,\n });\n }\n }\n\n if (!strapi.contentTypes[schemaUid]) {\n return batches;\n }\n\n const oldLocales = new Set(oldVersions.map((e) => e.locale));\n const draftsOnly = newVersions.filter((v) => !oldLocales.has(v.locale));\n if (draftsOnly.length === 0) {\n return batches;\n }\n\n const draftIds = draftsOnly.map((e) => e.id);\n const draftRows = await strapi.db\n .getConnection()\n .select('*')\n .from(table)\n .whereIn(publishedCol, draftIds)\n .transacting(trx);\n\n if (draftRows.length === 0) {\n return batches;\n }\n\n let relations = draftRows;\n if (relatedHasDraftAndPublish) {\n const meta = strapi.db.metadata.get(relatedUid);\n const relatedIds = draftRows.map((r: any) => r[relatedCol]);\n const map = await draftToPublishedMap(trx, meta.tableName, relatedIds);\n relations = remapRelatedIds(draftRows, relatedCol, map);\n }\n\n batches.push({ joinTable, relations, entityColumn: publishedCol, relatedColumn: relatedCol });\n return batches;\n};\n\n/**\n * Loads all bidirectional relations that need to be synchronized when content entries change state\n * (e.g., during publish/unpublish operations).\n *\n * In Strapi, bidirectional relations allow maintaining order from both sides of the relation.\n * When an entry is published, the following occurs:\n *\n * 1. The old published entry is deleted\n * 2. A new entry is created with all its relations\n *\n * This process affects relation ordering in the following way:\n *\n * Initial state (Entry A related to X, Y, Z):\n * ```\n * Entry A (draft) Entry A (published)\n * │ │\n * ├──(1)→ X ├──(1)→ X\n * ├──(2)→ Y ├──(2)→ Y\n * └──(3)→ Z └──(3)→ Z\n *\n * X's perspective: Y's perspective: Z's perspective:\n * └──(2)→ Entry A └──(1)→ Entry A └──(3)→ Entry A\n * ```\n *\n * After publishing Entry A (without relation order sync):\n * ```\n * Entry A (draft) Entry A (new published)\n * │ │\n * ├──(1)→ X ├──(1)→ X\n * ├──(2)→ Y ├──(2)→ Y\n * └──(3)→ Z └──(3)→ Z\n *\n * X's perspective: Y's perspective: Z's perspective:\n * └──(3)→ Entry A └──(3)→ Entry A └──(3)→ Entry A\n * (all relations appear last in order)\n * ```\n *\n * This module preserves the original ordering from both perspectives by:\n * 1. Capturing the relation order before the entry state changes\n * 2. Restoring this order after the new relations are created\n *\n * @param uid - The unique identifier of the content type being processed\n * @param context - Object containing arrays of old and new entry versions\n * @returns Array of objects containing join table metadata and relations to be updated\n */\nconst load = async (uid: UID.ContentType, { oldVersions, newVersions }: LoadContext) => {\n const relationsToUpdate: RelationEntry[] = [];\n\n await strapi.db.transaction(async ({ trx }) => {\n const models = [\n ...(Object.values(strapi.contentTypes) as Schema.ContentType[]),\n ...Object.values(strapi.components),\n ];\n\n for (const model of models) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as Record<string, any>[]) {\n const joinTable = attribute.joinTable;\n\n if (attribute.type !== 'relation' || !joinTable) {\n continue;\n }\n\n if (!(attribute.inversedBy || attribute.mappedBy)) {\n continue;\n }\n\n // Owning side: e.g. Author.articles when publishing an Author.\n const isOwningSide =\n !!attribute.inversedBy &&\n model.uid === uid &&\n attribute.relation === 'manyToMany' &&\n model.uid !== attribute.target;\n\n // Inverse side: e.g. Article.authors when publishing an Article.\n const isInverseSide = attribute.target === uid && model.uid !== uid;\n\n if (!isOwningSide && !isInverseSide) {\n continue;\n }\n\n // Direction determines which join column belongs to the entity being published\n const publishedCol = isOwningSide\n ? joinTable.joinColumn.name\n : joinTable.inverseJoinColumn.name;\n const relatedCol = isOwningSide\n ? joinTable.inverseJoinColumn.name\n : joinTable.joinColumn.name;\n\n const relatedUid = (isOwningSide ? attribute.target : model.uid) as UID.ContentType;\n\n const batches = await captureJoinBatches(trx, {\n joinTable,\n publishedCol,\n relatedCol,\n relatedUid,\n relatedHasDraftAndPublish: isOwningSide\n ? !!strapi.contentTypes[relatedUid]?.options?.draftAndPublish\n : !!model.options?.draftAndPublish,\n schemaUid: model.uid as UID.ContentType,\n oldVersions,\n newVersions,\n });\n relationsToUpdate.push(...batches);\n }\n }\n });\n\n return relationsToUpdate;\n};\n\n/**\n * Synchronizes the order of bidirectional relations after content entries have changed state.\n *\n * When entries change state (e.g., draft → published), their IDs change and all relations are recreated.\n * While the order of relations from the entry's perspective is maintained (as they're created in order),\n * the inverse relations (from related entries' perspective) would all appear last in order since they're new.\n *\n * Example:\n * ```\n * Before publish:\n * Article(id:1) →(order:1)→ Category(id:5)\n * Category(id:5) →(order:3)→ Article(id:1)\n *\n * After publish (without sync):\n * Article(id:2) →(order:1)→ Category(id:5) [order preserved]\n * Category(id:5) →(order:99)→ Article(id:2) [order lost - appears last]\n *\n * After sync:\n * Article(id:2) →(order:1)→ Category(id:5) [order preserved]\n * Category(id:5) →(order:3)→ Article(id:2) [order restored]\n * ```\n *\n * @param oldEntries - Array of previous entry versions with their IDs and locales\n * @param newEntries - Array of new entry versions with their IDs and locales\n * @param existingRelations - Array of join table data containing the relations to be updated\n */\nconst sync = async (\n oldEntries: { id: string; locale: string }[],\n newEntries: { id: string; locale: string }[],\n existingRelations: RelationEntry[]\n) => {\n const newEntriesByLocale = keyBy('locale', newEntries);\n\n const entryIdMapping = oldEntries.reduce(\n (acc, oldEntry) => {\n const newEntry = newEntriesByLocale[oldEntry.locale];\n if (!newEntry) {\n return acc;\n }\n acc[oldEntry.id] = newEntry.id;\n return acc;\n },\n {} as Record<string, string>\n );\n\n const republishedEntryIds = new Set(newEntries.map((e) => String(e.id)));\n const isRepublishedEntry = (id: string | number) => republishedEntryIds.has(String(id));\n\n await strapi.db.transaction(async ({ trx }) => {\n for (const {\n joinTable,\n relations,\n entityColumn: sourceColumn,\n relatedColumn: targetColumn,\n } of existingRelations) {\n const orderColumn = joinTable.orderColumnName;\n\n // Failsafe in case those don't exist\n if (!sourceColumn || !targetColumn || !orderColumn) {\n continue;\n }\n\n const mappedRelations = relations\n .map((relation) => ({\n relation,\n oldSourceId: relation[sourceColumn] as string,\n targetId: relation[targetColumn] as string,\n originalOrder: relation[orderColumn],\n newSourceId: entryIdMapping[relation[sourceColumn] as string],\n }))\n .filter((r): r is typeof r & { newSourceId: string } => Boolean(r.newSourceId));\n\n if (!mappedRelations.length) continue;\n\n const newSourceIds = mappedRelations.map((r) => r.newSourceId);\n\n // Batch UPDATE: set each row's order in a single statement using CASE\n const caseFragments = mappedRelations.map(() => `WHEN ?? = ? AND ?? = ? THEN ?`);\n const caseBindings = mappedRelations.flatMap(({ newSourceId, targetId, originalOrder }) => [\n sourceColumn,\n newSourceId,\n targetColumn,\n targetId,\n originalOrder,\n ]);\n\n await trx(joinTable.name)\n .whereIn(sourceColumn, newSourceIds)\n .update({\n [orderColumn]: trx.raw(`CASE ${caseFragments.join(' ')} ELSE ?? END`, [\n ...caseBindings,\n orderColumn,\n ]),\n });\n\n // Batch SELECT: find which rows exist so we know what to insert\n const existingRows = await trx(joinTable.name)\n .whereIn(sourceColumn, newSourceIds)\n .select(sourceColumn, targetColumn);\n\n const existingSet = new Set(\n existingRows.map((r: Record<string, unknown>) => `${r[sourceColumn]}:${r[targetColumn]}`)\n );\n\n // Batch INSERT: insert cascade-deleted rows that aren't from republished sources\n const toInsert = mappedRelations\n .filter(\n ({ newSourceId, targetId }) =>\n !existingSet.has(`${newSourceId}:${targetId}`) && !isRepublishedEntry(newSourceId)\n )\n .map(({ relation, newSourceId, originalOrder }) => ({\n ...omit(strapi.db.metadata.identifiers.ID_COLUMN, relation),\n [sourceColumn]: newSourceId,\n [orderColumn]: originalOrder,\n }));\n\n if (toInsert.length) {\n const batchSize = strapi.db.dialect.getBatchInsertSize();\n await trx.batchInsert(joinTable.name, toInsert, batchSize);\n }\n }\n });\n};\n\nexport { load, sync };\n"],"names":["draftToPublishedMap","trx","tableName","rowIds","uniqueIds","Set","length","Map","draftEntries","strapi","db","getConnection","select","from","whereIn","transacting","pubEntries","whereNotNull","map","e","document_id","pubByDocLocale","locale","id","d","pubId","get","set","String","remapRelatedIds","rows","relatedCol","idMap","row","next","captureJoinBatches","opts","joinTable","publishedCol","relatedUid","relatedHasDraftAndPublish","schemaUid","oldVersions","newVersions","batches","name","table","oldIds","existing","push","relations","entityColumn","relatedColumn","contentTypes","oldLocales","draftsOnly","filter","v","has","draftIds","draftRows","meta","metadata","relatedIds","r","load","uid","relationsToUpdate","transaction","models","Object","values","components","model","dbModel","attribute","attributes","type","inversedBy","mappedBy","isOwningSide","relation","target","isInverseSide","joinColumn","inverseJoinColumn","options","draftAndPublish","sync","oldEntries","newEntries","existingRelations","newEntriesByLocale","keyBy","entryIdMapping","reduce","acc","oldEntry","newEntry","republishedEntryIds","isRepublishedEntry","sourceColumn","targetColumn","orderColumn","orderColumnName","mappedRelations","oldSourceId","targetId","originalOrder","newSourceId","Boolean","newSourceIds","caseFragments","caseBindings","flatMap","update","raw","join","existingRows","existingSet","toInsert","omit","identifiers","ID_COLUMN","batchSize","dialect","getBatchInsertSize","batchInsert"],"mappings":"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"}
1
+ {"version":3,"file":"bidirectional-relations.js","sources":["../../../../src/services/document-service/utils/bidirectional-relations.ts"],"sourcesContent":["import { keyBy, omit } from 'lodash/fp';\nimport type { UID, Schema } from '@strapi/types';\nimport type { JoinTable } from '@strapi/database';\n\ninterface LoadContext {\n oldVersions: { id: string; locale: string }[];\n newVersions: { id: string; locale: string }[];\n}\n\ninterface RelationEntry {\n joinTable: JoinTable;\n relations: Record<string, unknown>[];\n /** FK column for the entity being published */\n entityColumn: string;\n /** FK column for the related entity */\n relatedColumn: string;\n}\n\n/** Draft id → published id for rows that already have a published counterpart (same document_id + locale). */\nconst draftToPublishedMap = async (trx: any, tableName: string, rowIds: unknown[]) => {\n const uniqueIds = [...new Set(rowIds)];\n if (uniqueIds.length === 0) {\n return new Map<string, string>();\n }\n\n const draftEntries = await strapi.db\n .getConnection()\n .select('id', 'document_id', 'locale')\n .from(tableName)\n .whereIn('id', uniqueIds as any)\n .transacting(trx);\n\n if (draftEntries.length === 0) {\n return new Map<string, string>();\n }\n\n const pubEntries = await strapi.db\n .getConnection()\n .select('id', 'document_id', 'locale')\n .from(tableName)\n .whereNotNull('published_at')\n .whereIn(\n 'document_id',\n draftEntries.map((e: any) => e.document_id)\n )\n .transacting(trx);\n\n const pubByDocLocale = new Map(\n pubEntries.map((e: any) => [`${e.document_id}_${e.locale}`, e.id])\n );\n\n const map = new Map<string, string>();\n for (const d of draftEntries) {\n const pubId = pubByDocLocale.get(`${d.document_id}_${d.locale}`);\n if (pubId) {\n map.set(String(d.id), String(pubId));\n }\n }\n return map;\n};\n\nconst remapRelatedIds = (rows: any[], relatedCol: string, idMap: Map<string, string>) =>\n rows.map((row) => {\n const next = idMap.get(String(row[relatedCol]));\n return next ? { ...row, [relatedCol]: next } : row;\n });\n\n/**\n * Reads join rows tied to the entry being published (`publishedCol` IN draft/old ids) and returns\n * batches for `sync()`. When the FK in `relatedCol` points at a D&P type, maps known draft ids to\n * published ids; otherwise keeps draft ids so sync can still run after both sides exist.\n */\nconst captureJoinBatches = async (\n trx: any,\n opts: {\n joinTable: any;\n /** Column holding ids of the document being published (the `uid` passed to load). */\n publishedCol: string;\n /** The other FK; may be remapped via draftToPublishedMap. */\n relatedCol: string;\n /** Content type behind `relatedCol` (used for D&P + table name). */\n relatedUid: UID.ContentType;\n relatedHasDraftAndPublish: boolean;\n /** Model that owns this attribute; draft capture is skipped for components. */\n schemaUid: UID.ContentType;\n /**\n * True when the attribute being captured is the owning side of the relation and the entity\n * being published owns it (e.g. publishing an Article for `Article.categories`). In that case\n * the owning-side order is rebuilt from the draft by `entries.publish`, so capturing the old\n * published rows would only let `sync()` overwrite the freshly published order with a stale\n * one — silently reverting a reorder made in the draft. The inverse-side order still needs the\n * old-published capture to be restored, so this only suppresses the owning-side capture.\n */\n isOwningSide: boolean;\n oldVersions: LoadContext['oldVersions'];\n newVersions: LoadContext['newVersions'];\n }\n): Promise<RelationEntry[]> => {\n const {\n joinTable,\n publishedCol,\n relatedCol,\n relatedUid,\n relatedHasDraftAndPublish,\n schemaUid,\n isOwningSide,\n oldVersions,\n newVersions,\n } = opts;\n\n const batches: RelationEntry[] = [];\n const { name: table } = joinTable;\n\n // Skip the old-published capture for the owning side: those rows are recreated in draft order\n // by `entries.publish`, so restoring their order from the old published version is at best a\n // no-op and at worst reverts a draft reorder. The draftsOnly capture below is still needed\n // (e.g. when a related entry is published after this one) and is not affected by this guard.\n const oldIds = isOwningSide ? [] : oldVersions.map((e) => e.id);\n if (oldIds.length > 0) {\n const existing = await strapi.db\n .getConnection()\n .select('*')\n .from(table)\n .whereIn(publishedCol, oldIds)\n .transacting(trx);\n if (existing.length > 0) {\n batches.push({\n joinTable,\n relations: existing,\n entityColumn: publishedCol,\n relatedColumn: relatedCol,\n });\n }\n }\n\n if (!strapi.contentTypes[schemaUid]) {\n return batches;\n }\n\n const oldLocales = new Set(oldVersions.map((e) => e.locale));\n const draftsOnly = newVersions.filter((v) => !oldLocales.has(v.locale));\n if (draftsOnly.length === 0) {\n return batches;\n }\n\n const draftIds = draftsOnly.map((e) => e.id);\n const draftRows = await strapi.db\n .getConnection()\n .select('*')\n .from(table)\n .whereIn(publishedCol, draftIds)\n .transacting(trx);\n\n if (draftRows.length === 0) {\n return batches;\n }\n\n let relations = draftRows;\n if (relatedHasDraftAndPublish) {\n const meta = strapi.db.metadata.get(relatedUid);\n const relatedIds = draftRows.map((r: any) => r[relatedCol]);\n const map = await draftToPublishedMap(trx, meta.tableName, relatedIds);\n relations = remapRelatedIds(draftRows, relatedCol, map);\n }\n\n batches.push({ joinTable, relations, entityColumn: publishedCol, relatedColumn: relatedCol });\n return batches;\n};\n\n/**\n * Loads all bidirectional relations that need to be synchronized when content entries change state\n * (e.g., during publish/unpublish operations).\n *\n * In Strapi, bidirectional relations allow maintaining order from both sides of the relation.\n * When an entry is published, the following occurs:\n *\n * 1. The old published entry is deleted\n * 2. A new entry is created with all its relations\n *\n * This process affects relation ordering in the following way:\n *\n * Initial state (Entry A related to X, Y, Z):\n * ```\n * Entry A (draft) Entry A (published)\n * │ │\n * ├──(1)→ X ├──(1)→ X\n * ├──(2)→ Y ├──(2)→ Y\n * └──(3)→ Z └──(3)→ Z\n *\n * X's perspective: Y's perspective: Z's perspective:\n * └──(2)→ Entry A └──(1)→ Entry A └──(3)→ Entry A\n * ```\n *\n * After publishing Entry A (without relation order sync):\n * ```\n * Entry A (draft) Entry A (new published)\n * │ │\n * ├──(1)→ X ├──(1)→ X\n * ├──(2)→ Y ├──(2)→ Y\n * └──(3)→ Z └──(3)→ Z\n *\n * X's perspective: Y's perspective: Z's perspective:\n * └──(3)→ Entry A └──(3)→ Entry A └──(3)→ Entry A\n * (all relations appear last in order)\n * ```\n *\n * This module preserves the original ordering from both perspectives by:\n * 1. Capturing the relation order before the entry state changes\n * 2. Restoring this order after the new relations are created\n *\n * @param uid - The unique identifier of the content type being processed\n * @param context - Object containing arrays of old and new entry versions\n * @returns Array of objects containing join table metadata and relations to be updated\n */\nconst load = async (uid: UID.ContentType, { oldVersions, newVersions }: LoadContext) => {\n const relationsToUpdate: RelationEntry[] = [];\n\n await strapi.db.transaction(async ({ trx }) => {\n const models = [\n ...(Object.values(strapi.contentTypes) as Schema.ContentType[]),\n ...Object.values(strapi.components),\n ];\n\n for (const model of models) {\n const dbModel = strapi.db.metadata.get(model.uid);\n\n for (const attribute of Object.values(dbModel.attributes) as Record<string, any>[]) {\n const joinTable = attribute.joinTable;\n\n if (attribute.type !== 'relation' || !joinTable) {\n continue;\n }\n\n if (!(attribute.inversedBy || attribute.mappedBy)) {\n continue;\n }\n\n // Owning side: e.g. Author.articles when publishing an Author.\n const isOwningSide =\n !!attribute.inversedBy &&\n model.uid === uid &&\n attribute.relation === 'manyToMany' &&\n model.uid !== attribute.target;\n\n // Inverse side: e.g. Article.authors when publishing an Article.\n const isInverseSide = attribute.target === uid && model.uid !== uid;\n\n if (!isOwningSide && !isInverseSide) {\n continue;\n }\n\n // Direction determines which join column belongs to the entity being published\n const publishedCol = isOwningSide\n ? joinTable.joinColumn.name\n : joinTable.inverseJoinColumn.name;\n const relatedCol = isOwningSide\n ? joinTable.inverseJoinColumn.name\n : joinTable.joinColumn.name;\n\n const relatedUid = (isOwningSide ? attribute.target : model.uid) as UID.ContentType;\n\n const batches = await captureJoinBatches(trx, {\n joinTable,\n publishedCol,\n relatedCol,\n relatedUid,\n relatedHasDraftAndPublish: isOwningSide\n ? !!strapi.contentTypes[relatedUid]?.options?.draftAndPublish\n : !!model.options?.draftAndPublish,\n schemaUid: model.uid as UID.ContentType,\n isOwningSide,\n oldVersions,\n newVersions,\n });\n relationsToUpdate.push(...batches);\n }\n }\n });\n\n return relationsToUpdate;\n};\n\n/**\n * Synchronizes the order of bidirectional relations after content entries have changed state.\n *\n * When entries change state (e.g., draft → published), their IDs change and all relations are recreated.\n * While the order of relations from the entry's perspective is maintained (as they're created in order),\n * the inverse relations (from related entries' perspective) would all appear last in order since they're new.\n *\n * Example:\n * ```\n * Before publish:\n * Article(id:1) →(order:1)→ Category(id:5)\n * Category(id:5) →(order:3)→ Article(id:1)\n *\n * After publish (without sync):\n * Article(id:2) →(order:1)→ Category(id:5) [order preserved]\n * Category(id:5) →(order:99)→ Article(id:2) [order lost - appears last]\n *\n * After sync:\n * Article(id:2) →(order:1)→ Category(id:5) [order preserved]\n * Category(id:5) →(order:3)→ Article(id:2) [order restored]\n * ```\n *\n * @param oldEntries - Array of previous entry versions with their IDs and locales\n * @param newEntries - Array of new entry versions with their IDs and locales\n * @param existingRelations - Array of join table data containing the relations to be updated\n */\nconst sync = async (\n oldEntries: { id: string; locale: string }[],\n newEntries: { id: string; locale: string }[],\n existingRelations: RelationEntry[]\n) => {\n const newEntriesByLocale = keyBy('locale', newEntries);\n\n const entryIdMapping = oldEntries.reduce(\n (acc, oldEntry) => {\n const newEntry = newEntriesByLocale[oldEntry.locale];\n if (!newEntry) {\n return acc;\n }\n acc[oldEntry.id] = newEntry.id;\n return acc;\n },\n {} as Record<string, string>\n );\n\n const republishedEntryIds = new Set(newEntries.map((e) => String(e.id)));\n const isRepublishedEntry = (id: string | number) => republishedEntryIds.has(String(id));\n\n await strapi.db.transaction(async ({ trx }) => {\n for (const {\n joinTable,\n relations,\n entityColumn: sourceColumn,\n relatedColumn: targetColumn,\n } of existingRelations) {\n const orderColumn = joinTable.orderColumnName;\n\n // Failsafe in case those don't exist\n if (!sourceColumn || !targetColumn || !orderColumn) {\n continue;\n }\n\n const mappedRelations = relations\n .map((relation) => ({\n relation,\n oldSourceId: relation[sourceColumn] as string,\n targetId: relation[targetColumn] as string,\n originalOrder: relation[orderColumn],\n newSourceId: entryIdMapping[relation[sourceColumn] as string],\n }))\n .filter((r): r is typeof r & { newSourceId: string } => Boolean(r.newSourceId));\n\n if (!mappedRelations.length) continue;\n\n const newSourceIds = mappedRelations.map((r) => r.newSourceId);\n\n // Batch UPDATE: set each row's order in a single statement using CASE\n const caseFragments = mappedRelations.map(() => `WHEN ?? = ? AND ?? = ? THEN ?`);\n const caseBindings = mappedRelations.flatMap(({ newSourceId, targetId, originalOrder }) => [\n sourceColumn,\n newSourceId,\n targetColumn,\n targetId,\n originalOrder,\n ]);\n\n await trx(joinTable.name)\n .whereIn(sourceColumn, newSourceIds)\n .update({\n [orderColumn]: trx.raw(`CASE ${caseFragments.join(' ')} ELSE ?? END`, [\n ...caseBindings,\n orderColumn,\n ]),\n });\n\n // Batch SELECT: find which rows exist so we know what to insert\n const existingRows = await trx(joinTable.name)\n .whereIn(sourceColumn, newSourceIds)\n .select(sourceColumn, targetColumn);\n\n const existingSet = new Set(\n existingRows.map((r: Record<string, unknown>) => `${r[sourceColumn]}:${r[targetColumn]}`)\n );\n\n // Batch INSERT: insert cascade-deleted rows that aren't from republished sources\n const toInsert = mappedRelations\n .filter(\n ({ newSourceId, targetId }) =>\n !existingSet.has(`${newSourceId}:${targetId}`) && !isRepublishedEntry(newSourceId)\n )\n .map(({ relation, newSourceId, originalOrder }) => ({\n ...omit(strapi.db.metadata.identifiers.ID_COLUMN, relation),\n [sourceColumn]: newSourceId,\n [orderColumn]: originalOrder,\n }));\n\n if (toInsert.length) {\n const batchSize = strapi.db.dialect.getBatchInsertSize();\n await trx.batchInsert(joinTable.name, toInsert, batchSize);\n }\n }\n });\n};\n\nexport { load, sync };\n"],"names":["draftToPublishedMap","trx","tableName","rowIds","uniqueIds","Set","length","Map","draftEntries","strapi","db","getConnection","select","from","whereIn","transacting","pubEntries","whereNotNull","map","e","document_id","pubByDocLocale","locale","id","d","pubId","get","set","String","remapRelatedIds","rows","relatedCol","idMap","row","next","captureJoinBatches","opts","joinTable","publishedCol","relatedUid","relatedHasDraftAndPublish","schemaUid","isOwningSide","oldVersions","newVersions","batches","name","table","oldIds","existing","push","relations","entityColumn","relatedColumn","contentTypes","oldLocales","draftsOnly","filter","v","has","draftIds","draftRows","meta","metadata","relatedIds","r","load","uid","relationsToUpdate","transaction","models","Object","values","components","model","dbModel","attribute","attributes","type","inversedBy","mappedBy","relation","target","isInverseSide","joinColumn","inverseJoinColumn","options","draftAndPublish","sync","oldEntries","newEntries","existingRelations","newEntriesByLocale","keyBy","entryIdMapping","reduce","acc","oldEntry","newEntry","republishedEntryIds","isRepublishedEntry","sourceColumn","targetColumn","orderColumn","orderColumnName","mappedRelations","oldSourceId","targetId","originalOrder","newSourceId","Boolean","newSourceIds","caseFragments","caseBindings","flatMap","update","raw","join","existingRows","existingSet","toInsert","omit","identifiers","ID_COLUMN","batchSize","dialect","getBatchInsertSize","batchInsert"],"mappings":"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"}
@@ -37,10 +37,14 @@ const remapRelatedIds = (rows, relatedCol, idMap)=>rows.map((row)=>{
37
37
  * batches for `sync()`. When the FK in `relatedCol` points at a D&P type, maps known draft ids to
38
38
  * published ids; otherwise keeps draft ids so sync can still run after both sides exist.
39
39
  */ const captureJoinBatches = async (trx, opts)=>{
40
- const { joinTable, publishedCol, relatedCol, relatedUid, relatedHasDraftAndPublish, schemaUid, oldVersions, newVersions } = opts;
40
+ const { joinTable, publishedCol, relatedCol, relatedUid, relatedHasDraftAndPublish, schemaUid, isOwningSide, oldVersions, newVersions } = opts;
41
41
  const batches = [];
42
42
  const { name: table } = joinTable;
43
- const oldIds = oldVersions.map((e)=>e.id);
43
+ // Skip the old-published capture for the owning side: those rows are recreated in draft order
44
+ // by `entries.publish`, so restoring their order from the old published version is at best a
45
+ // no-op and at worst reverts a draft reorder. The draftsOnly capture below is still needed
46
+ // (e.g. when a related entry is published after this one) and is not affected by this guard.
47
+ const oldIds = isOwningSide ? [] : oldVersions.map((e)=>e.id);
44
48
  if (oldIds.length > 0) {
45
49
  const existing = await strapi.db.getConnection().select('*').from(table).whereIn(publishedCol, oldIds).transacting(trx);
46
50
  if (existing.length > 0) {
@@ -159,6 +163,7 @@ const remapRelatedIds = (rows, relatedCol, idMap)=>rows.map((row)=>{
159
163
  relatedUid,
160
164
  relatedHasDraftAndPublish: isOwningSide ? !!strapi.contentTypes[relatedUid]?.options?.draftAndPublish : !!model.options?.draftAndPublish,
161
165
  schemaUid: model.uid,
166
+ isOwningSide,
162
167
  oldVersions,
163
168
  newVersions
164
169
  });