@strapi/core 5.49.0 → 5.50.1

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 (272) 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/component.js +3 -3
  27. package/dist/core-api/routes/validation/component.js.map +1 -1
  28. package/dist/core-api/routes/validation/component.mjs +3 -3
  29. package/dist/core-api/routes/validation/component.mjs.map +1 -1
  30. package/dist/core-api/routes/validation/mappers.d.ts.map +1 -1
  31. package/dist/core-api/routes/validation/utils.d.ts.map +1 -1
  32. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  33. package/dist/core-api/service/pagination.d.ts.map +1 -1
  34. package/dist/core-api/service/single-type.d.ts.map +1 -1
  35. package/dist/domain/content-type/index.d.ts.map +1 -1
  36. package/dist/domain/content-type/validator.d.ts.map +1 -1
  37. package/dist/domain/module/index.d.ts.map +1 -1
  38. package/dist/domain/module/validation.d.ts.map +1 -1
  39. package/dist/ee/index.d.ts +2 -1
  40. package/dist/ee/index.d.ts.map +1 -1
  41. package/dist/ee/license.d.ts.map +1 -1
  42. package/dist/factories.d.ts.map +1 -1
  43. package/dist/index.d.ts +4 -1
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/index.mjs.map +1 -1
  47. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  48. package/dist/loaders/sanitizers.d.ts.map +1 -1
  49. package/dist/loaders/src-index.d.ts.map +1 -1
  50. package/dist/loaders/validators.d.ts.map +1 -1
  51. package/dist/middlewares/body.d.ts.map +1 -1
  52. package/dist/middlewares/body.js +1 -1
  53. package/dist/middlewares/body.js.map +1 -1
  54. package/dist/middlewares/body.mjs +1 -1
  55. package/dist/middlewares/body.mjs.map +1 -1
  56. package/dist/middlewares/cors.d.ts.map +1 -1
  57. package/dist/middlewares/errors.d.ts +5 -0
  58. package/dist/middlewares/errors.d.ts.map +1 -1
  59. package/dist/middlewares/errors.js.map +1 -1
  60. package/dist/middlewares/errors.mjs.map +1 -1
  61. package/dist/middlewares/favicon.d.ts +0 -1
  62. package/dist/middlewares/favicon.d.ts.map +1 -1
  63. package/dist/migrations/draft-publish.d.ts.map +1 -1
  64. package/dist/migrations/first-published-at.d.ts.map +1 -1
  65. package/dist/migrations/i18n.d.ts.map +1 -1
  66. package/dist/migrations/index.d.ts.map +1 -1
  67. package/dist/package.json.js +17 -20
  68. package/dist/package.json.js.map +1 -1
  69. package/dist/package.json.mjs +17 -20
  70. package/dist/package.json.mjs.map +1 -1
  71. package/dist/providers/provider.d.ts.map +1 -1
  72. package/dist/registries/apis.d.ts.map +1 -1
  73. package/dist/registries/components.d.ts +1 -1
  74. package/dist/registries/components.d.ts.map +1 -1
  75. package/dist/registries/content-types.d.ts +2 -3
  76. package/dist/registries/content-types.d.ts.map +1 -1
  77. package/dist/registries/controllers.d.ts +3 -3
  78. package/dist/registries/controllers.d.ts.map +1 -1
  79. package/dist/registries/custom-fields.d.ts.map +1 -1
  80. package/dist/registries/hooks.d.ts +3 -4
  81. package/dist/registries/hooks.d.ts.map +1 -1
  82. package/dist/registries/middlewares.d.ts +2 -3
  83. package/dist/registries/middlewares.d.ts.map +1 -1
  84. package/dist/registries/models.d.ts +1 -1
  85. package/dist/registries/modules.d.ts.map +1 -1
  86. package/dist/registries/namespace.d.ts.map +1 -1
  87. package/dist/registries/plugins.d.ts.map +1 -1
  88. package/dist/registries/policies.d.ts +1 -2
  89. package/dist/registries/policies.d.ts.map +1 -1
  90. package/dist/registries/sanitizers.d.ts +2 -2
  91. package/dist/registries/services.d.ts +3 -3
  92. package/dist/registries/services.d.ts.map +1 -1
  93. package/dist/registries/validators.d.ts +2 -2
  94. package/dist/services/ai.d.ts.map +1 -1
  95. package/dist/services/config.d.ts.map +1 -1
  96. package/dist/services/content-api/index.d.ts +4 -4
  97. package/dist/services/content-api/index.d.ts.map +1 -1
  98. package/dist/services/content-api/permissions/engine.d.ts.map +1 -1
  99. package/dist/services/content-api/permissions/index.d.ts +2 -2
  100. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  101. package/dist/services/content-api/permissions/providers/action.d.ts +1 -1
  102. package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
  103. package/dist/services/content-api/permissions/providers/condition.d.ts +1 -1
  104. package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
  105. package/dist/services/content-source-maps.d.ts.map +1 -1
  106. package/dist/services/core-store.d.ts.map +1 -1
  107. package/dist/services/core-store.js +1 -1
  108. package/dist/services/core-store.js.map +1 -1
  109. package/dist/services/core-store.mjs +1 -1
  110. package/dist/services/core-store.mjs.map +1 -1
  111. package/dist/services/cron.d.ts +5 -5
  112. package/dist/services/custom-fields.d.ts.map +1 -1
  113. package/dist/services/document-service/attributes/index.d.ts +0 -1
  114. package/dist/services/document-service/attributes/index.d.ts.map +1 -1
  115. package/dist/services/document-service/common.d.ts.map +1 -1
  116. package/dist/services/document-service/components.d.ts +2 -2
  117. package/dist/services/document-service/components.d.ts.map +1 -1
  118. package/dist/services/document-service/components.js +7 -7
  119. package/dist/services/document-service/components.js.map +1 -1
  120. package/dist/services/document-service/components.mjs +7 -7
  121. package/dist/services/document-service/components.mjs.map +1 -1
  122. package/dist/services/document-service/draft-and-publish.d.ts +0 -1
  123. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
  124. package/dist/services/document-service/entries.d.ts.map +1 -1
  125. package/dist/services/document-service/events.d.ts.map +1 -1
  126. package/dist/services/document-service/first-published-at.d.ts.map +1 -1
  127. package/dist/services/document-service/index.d.ts.map +1 -1
  128. package/dist/services/document-service/internationalization.d.ts +0 -1
  129. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  130. package/dist/services/document-service/middlewares/middleware-manager.d.ts.map +1 -1
  131. package/dist/services/document-service/params.d.ts +1 -1
  132. package/dist/services/document-service/params.d.ts.map +1 -1
  133. package/dist/services/document-service/publication-filter.d.ts +1 -1
  134. package/dist/services/document-service/publication-filter.d.ts.map +1 -1
  135. package/dist/services/document-service/repository.d.ts.map +1 -1
  136. package/dist/services/document-service/repository.js +12 -8
  137. package/dist/services/document-service/repository.js.map +1 -1
  138. package/dist/services/document-service/repository.mjs +12 -8
  139. package/dist/services/document-service/repository.mjs.map +1 -1
  140. package/dist/services/document-service/transform/data.d.ts.map +1 -1
  141. package/dist/services/document-service/transform/fields.d.ts.map +1 -1
  142. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  143. package/dist/services/document-service/transform/id-map.js +7 -4
  144. package/dist/services/document-service/transform/id-map.js.map +1 -1
  145. package/dist/services/document-service/transform/id-map.mjs +7 -4
  146. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  147. package/dist/services/document-service/transform/id-transform.d.ts +0 -1
  148. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
  149. package/dist/services/document-service/transform/populate.d.ts.map +1 -1
  150. package/dist/services/document-service/transform/query.d.ts +0 -1
  151. package/dist/services/document-service/transform/query.d.ts.map +1 -1
  152. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  153. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  154. package/dist/services/document-service/transform/relations/transform/default-locale.d.ts.map +1 -1
  155. package/dist/services/document-service/transform/relations/utils/data.d.ts.map +1 -1
  156. package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
  157. package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
  158. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
  159. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts +0 -1
  160. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  161. package/dist/services/document-service/transform/relations/utils/xto-one.d.ts.map +1 -1
  162. package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -1
  163. package/dist/services/document-service/utils/bidirectional-relations.js +7 -2
  164. package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -1
  165. package/dist/services/document-service/utils/bidirectional-relations.mjs +7 -2
  166. package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -1
  167. package/dist/services/document-service/utils/clean-component-join-table.d.ts.map +1 -1
  168. package/dist/services/document-service/utils/ordered-parallel.d.ts.map +1 -1
  169. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  170. package/dist/services/document-service/utils/self-referential-relations.d.ts +6 -1
  171. package/dist/services/document-service/utils/self-referential-relations.d.ts.map +1 -1
  172. package/dist/services/document-service/utils/self-referential-relations.js +120 -7
  173. package/dist/services/document-service/utils/self-referential-relations.js.map +1 -1
  174. package/dist/services/document-service/utils/self-referential-relations.mjs +120 -7
  175. package/dist/services/document-service/utils/self-referential-relations.mjs.map +1 -1
  176. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
  177. package/dist/services/entity-service/index.d.ts.map +1 -1
  178. package/dist/services/entity-service/index.js +1 -1
  179. package/dist/services/entity-service/index.js.map +1 -1
  180. package/dist/services/entity-service/index.mjs +1 -1
  181. package/dist/services/entity-service/index.mjs.map +1 -1
  182. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  183. package/dist/services/entity-validator/validators.js +4 -2
  184. package/dist/services/entity-validator/validators.js.map +1 -1
  185. package/dist/services/entity-validator/validators.mjs +4 -2
  186. package/dist/services/entity-validator/validators.mjs.map +1 -1
  187. package/dist/services/errors.d.ts.map +1 -1
  188. package/dist/services/features.d.ts.map +1 -1
  189. package/dist/services/fs.d.ts.map +1 -1
  190. package/dist/services/mcp/authentication.d.ts.map +1 -1
  191. package/dist/services/mcp/handlers/handlePost.d.ts.map +1 -1
  192. package/dist/services/mcp/index.d.ts.map +1 -1
  193. package/dist/services/mcp/internal/McpCapabilityRegistry.d.ts +2 -2
  194. package/dist/services/mcp/internal/McpServerFactory.d.ts.map +1 -1
  195. package/dist/services/mcp/internal/syncMcpSessionCapabilities.d.ts.map +1 -1
  196. package/dist/services/mcp/metrics/metrics.d.ts.map +1 -1
  197. package/dist/services/mcp/metrics/normalizeMcpCapability.d.ts.map +1 -1
  198. package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.d.ts.map +1 -1
  199. package/dist/services/mcp/middleware/oauthDiscoveryFallback.d.ts.map +1 -1
  200. package/dist/services/mcp/prompt-registry.d.ts.map +1 -1
  201. package/dist/services/mcp/resource-registry.d.ts.map +1 -1
  202. package/dist/services/mcp/routes.d.ts +1 -1
  203. package/dist/services/mcp/routes.d.ts.map +1 -1
  204. package/dist/services/mcp/tool-registry.d.ts.map +1 -1
  205. package/dist/services/mcp/utils/createSafeCapabilityRegistration.d.ts.map +1 -1
  206. package/dist/services/mcp/utils/safeHandlerWrapper.d.ts.map +1 -1
  207. package/dist/services/mcp/utils/sendJsonRpcError.d.ts +0 -1
  208. package/dist/services/mcp/utils/sendJsonRpcError.d.ts.map +1 -1
  209. package/dist/services/mcp/utils/withTimeout.d.ts.map +1 -1
  210. package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
  211. package/dist/services/metrics/index.d.ts.map +1 -1
  212. package/dist/services/metrics/is-truthy.d.ts.map +1 -1
  213. package/dist/services/metrics/middleware.d.ts.map +1 -1
  214. package/dist/services/metrics/rate-limiter.d.ts +2 -1
  215. package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
  216. package/dist/services/metrics/sender.d.ts.map +1 -1
  217. package/dist/services/query-params.d.ts.map +1 -1
  218. package/dist/services/reloader.d.ts.map +1 -1
  219. package/dist/services/request-context.d.ts.map +1 -1
  220. package/dist/services/server/admin-api.d.ts +3 -5
  221. package/dist/services/server/admin-api.d.ts.map +1 -1
  222. package/dist/services/server/api.d.ts +3 -4
  223. package/dist/services/server/api.d.ts.map +1 -1
  224. package/dist/services/server/compose-endpoint.d.ts.map +1 -1
  225. package/dist/services/server/content-api.d.ts +3 -5
  226. package/dist/services/server/content-api.d.ts.map +1 -1
  227. package/dist/services/server/http-server.d.ts +0 -1
  228. package/dist/services/server/http-server.d.ts.map +1 -1
  229. package/dist/services/server/index.d.ts.map +1 -1
  230. package/dist/services/server/koa-methods.d.ts +107 -0
  231. package/dist/services/server/koa-methods.d.ts.map +1 -0
  232. package/dist/services/server/koa-methods.js +24 -0
  233. package/dist/services/server/koa-methods.js.map +1 -0
  234. package/dist/services/server/koa-methods.mjs +22 -0
  235. package/dist/services/server/koa-methods.mjs.map +1 -0
  236. package/dist/services/server/koa.d.ts +0 -9
  237. package/dist/services/server/koa.d.ts.map +1 -1
  238. package/dist/services/server/koa.js +6 -9
  239. package/dist/services/server/koa.js.map +1 -1
  240. package/dist/services/server/koa.mjs +7 -9
  241. package/dist/services/server/koa.mjs.map +1 -1
  242. package/dist/services/server/middleware.d.ts.map +1 -1
  243. package/dist/services/server/openapi.d.ts.map +1 -1
  244. package/dist/services/server/policy.d.ts.map +1 -1
  245. package/dist/services/server/register-middlewares.d.ts.map +1 -1
  246. package/dist/services/server/register-routes.d.ts.map +1 -1
  247. package/dist/services/server/routing.d.ts +0 -2
  248. package/dist/services/server/routing.d.ts.map +1 -1
  249. package/dist/services/session-manager.d.ts +20 -0
  250. package/dist/services/session-manager.d.ts.map +1 -1
  251. package/dist/services/session-manager.js +57 -0
  252. package/dist/services/session-manager.js.map +1 -1
  253. package/dist/services/session-manager.mjs +57 -0
  254. package/dist/services/session-manager.mjs.map +1 -1
  255. package/dist/services/webhook-store.d.ts.map +1 -1
  256. package/dist/utils/convert-custom-field-type.d.ts.map +1 -1
  257. package/dist/utils/cron.d.ts.map +1 -1
  258. package/dist/utils/fetch.d.ts.map +1 -1
  259. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  260. package/dist/utils/is-initialized.d.ts.map +1 -1
  261. package/dist/utils/load-config-file.d.ts.map +1 -1
  262. package/dist/utils/load-files.d.ts +1 -1
  263. package/dist/utils/load-files.d.ts.map +1 -1
  264. package/dist/utils/open-browser.d.ts +0 -1
  265. package/dist/utils/open-browser.d.ts.map +1 -1
  266. package/dist/utils/resolve-working-dirs.d.ts.map +1 -1
  267. package/dist/utils/signals.d.ts.map +1 -1
  268. package/dist/utils/startup-logger.d.ts.map +1 -1
  269. package/dist/utils/transform-content-types-to-models.d.ts +3 -3
  270. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  271. package/dist/utils/update-notifier/index.d.ts.map +1 -1
  272. package/package.json +17 -20
@@ -1,5 +1,31 @@
1
1
  import { keyBy, omit } from 'lodash/fp';
2
2
 
3
+ const entryKey = (entry)=>`${String(entry.document_id)}:${String(entry.locale)}`;
4
+ const getCounterparts = async (trx, tableName, idsToResolve, status)=>{
5
+ const ids = [
6
+ ...new Set(idsToResolve.map((id)=>String(id)))
7
+ ];
8
+ if (ids.length === 0) {
9
+ return {};
10
+ }
11
+ const drafts = await strapi.db.getConnection().select('id', 'document_id', 'locale').from(tableName).whereIn('id', ids).transacting(trx);
12
+ if (drafts.length === 0) {
13
+ return {};
14
+ }
15
+ const documentIds = [
16
+ ...new Set(drafts.map((entry)=>entry.document_id))
17
+ ];
18
+ const counterpartsQuery = strapi.db.getConnection().select('id', 'document_id', 'locale').from(tableName).whereIn('document_id', documentIds).transacting(trx);
19
+ const counterparts = status === 'published' ? await counterpartsQuery.whereNotNull('published_at') : await counterpartsQuery.whereNull('published_at');
20
+ const counterpartByDocument = keyBy(entryKey, counterparts);
21
+ return drafts.reduce((acc, draft)=>{
22
+ const counterpart = counterpartByDocument[entryKey(draft)];
23
+ if (counterpart) {
24
+ acc[String(draft.id)] = counterpart.id;
25
+ }
26
+ return acc;
27
+ }, {});
28
+ };
3
29
  /**
4
30
  * Preserves self-referential relations during publish/discard operations.
5
31
  *
@@ -17,7 +43,7 @@ import { keyBy, omit } from 'lodash/fp';
17
43
  * 3. Inserts the remapped relations
18
44
  */ /**
19
45
  * Loads self-referential relations from source entries before they are deleted/recreated.
20
- */ const load = async (uid, sourceEntries)=>{
46
+ */ const load = async (uid, sourceEntries, targetStatus)=>{
21
47
  const updates = [];
22
48
  const dbModel = strapi.db.metadata.get(uid);
23
49
  await strapi.db.transaction(async ({ trx })=>{
@@ -44,9 +70,72 @@ import { keyBy, omit } from 'lodash/fp';
44
70
  if (selfRelations.length > 0) {
45
71
  updates.push({
46
72
  joinTable,
47
- relations: selfRelations
73
+ relations: selfRelations,
74
+ remap: {
75
+ source: true,
76
+ target: true
77
+ }
48
78
  });
49
79
  }
80
+ // Use rows from the state being copied as the source of truth for one-sided
81
+ // self-relations. Publishing maps untouched targets to published counterparts and drops
82
+ // draft-only targets; discarding maps untouched targets to draft counterparts. This avoids
83
+ // restoring stale old rows that were removed from the copied state.
84
+ const [sourceDraftRelations, targetDraftRelations] = await Promise.all([
85
+ strapi.db.getConnection().select('*').from(joinTable.name).whereIn(sourceColumnName, sourceIds).whereNotIn(targetColumnName, sourceIds).transacting(trx),
86
+ strapi.db.getConnection().select('*').from(joinTable.name).whereIn(targetColumnName, sourceIds).whereNotIn(sourceColumnName, sourceIds).transacting(trx)
87
+ ]);
88
+ const [targetCounterparts, sourceCounterparts] = await Promise.all([
89
+ getCounterparts(trx, dbModel.tableName, sourceDraftRelations.map((relation)=>relation[targetColumnName]), targetStatus),
90
+ getCounterparts(trx, dbModel.tableName, targetDraftRelations.map((relation)=>relation[sourceColumnName]), targetStatus)
91
+ ]);
92
+ if (sourceDraftRelations.length > 0) {
93
+ const relations = sourceDraftRelations.map((relation)=>{
94
+ const targetCounterpart = targetCounterparts[String(relation[targetColumnName])];
95
+ if (targetCounterpart == null) {
96
+ return null;
97
+ }
98
+ return {
99
+ ...relation,
100
+ [targetColumnName]: targetCounterpart
101
+ };
102
+ }).filter(Boolean);
103
+ if (relations.length > 0) {
104
+ updates.push({
105
+ joinTable,
106
+ relations,
107
+ remap: {
108
+ source: true,
109
+ target: false
110
+ }
111
+ });
112
+ }
113
+ }
114
+ if (targetDraftRelations.length > 0) {
115
+ const relations = targetDraftRelations.map((relation)=>{
116
+ const sourceCounterpart = sourceCounterparts[String(relation[sourceColumnName])];
117
+ if (sourceCounterpart == null) {
118
+ return null;
119
+ }
120
+ return {
121
+ ...relation,
122
+ [sourceColumnName]: sourceCounterpart
123
+ };
124
+ }).filter(Boolean);
125
+ if (relations.length > 0) {
126
+ updates.push({
127
+ joinTable,
128
+ relations,
129
+ remap: {
130
+ source: false,
131
+ target: true
132
+ }
133
+ });
134
+ }
135
+ }
136
+ // One-sided rows from the replaced state are intentionally not restored here. The rows
137
+ // captured above represent the current logical relation set; restoring stale old rows can
138
+ // resurrect relations that were removed before publishing or discarding.
50
139
  }
51
140
  });
52
141
  return updates;
@@ -66,16 +155,19 @@ import { keyBy, omit } from 'lodash/fp';
66
155
  }, {});
67
156
  const batchSize = strapi.db.dialect.getBatchInsertSize();
68
157
  await strapi.db.transaction(async ({ trx })=>{
69
- for (const { joinTable, relations } of relationData){
158
+ for (const { joinTable, relations, remap = {
159
+ source: true,
160
+ target: true
161
+ } } of relationData){
70
162
  const sourceColumn = joinTable.joinColumn.name;
71
163
  const targetColumn = joinTable.inverseJoinColumn.name;
72
164
  const newRelations = relations.map((relation)=>{
73
165
  const oldSourceId = String(relation[sourceColumn]);
74
166
  const oldTargetId = String(relation[targetColumn]);
75
- const newSourceId = idMapping[oldSourceId];
76
- const newTargetId = idMapping[oldTargetId];
77
- // Both sides must map to new entries
78
- if (!newSourceId || !newTargetId) return null;
167
+ const newSourceId = remap.source ? idMapping[oldSourceId] : relation[sourceColumn];
168
+ const newTargetId = remap.target ? idMapping[oldTargetId] : relation[targetColumn];
169
+ // Any side being remapped must resolve to a new entry.
170
+ if (newSourceId == null || newTargetId == null) return null;
79
171
  return {
80
172
  ...omit(strapi.db.metadata.identifiers.ID_COLUMN, relation),
81
173
  [sourceColumn]: newSourceId,
@@ -91,12 +183,33 @@ import { keyBy, omit } from 'lodash/fp';
91
183
  return true;
92
184
  });
93
185
  if (deduped.length === 0) continue;
186
+ // Relation writes may have already recreated the remapped pair. In that case restore
187
+ // the saved join-row metadata (notably order columns) instead of inserting a duplicate.
94
188
  const newSourceIds = [
95
189
  ...new Set(deduped.map((r)=>String(r[sourceColumn])))
96
190
  ];
97
191
  const existingRows = await trx(joinTable.name).whereIn(sourceColumn, newSourceIds).select(sourceColumn, targetColumn);
98
192
  const existingSet = new Set(existingRows.map((r)=>pairKey(r)));
193
+ const toUpdate = deduped.filter((r)=>existingSet.has(pairKey(r)));
99
194
  const toInsert = deduped.filter((r)=>!existingSet.has(pairKey(r)));
195
+ await Promise.all(toUpdate.map((relation)=>{
196
+ const sourceId = relation[sourceColumn];
197
+ const targetId = relation[targetColumn];
198
+ const dataToRestore = Object.fromEntries([
199
+ joinTable.orderColumnName,
200
+ joinTable.inverseOrderColumnName
201
+ ].filter((columnName)=>columnName != null).filter((columnName)=>columnName in relation).map((columnName)=>[
202
+ columnName,
203
+ relation[columnName]
204
+ ]));
205
+ if (Object.keys(dataToRestore).length === 0) {
206
+ return Promise.resolve();
207
+ }
208
+ return trx(joinTable.name).where({
209
+ [sourceColumn]: sourceId,
210
+ [targetColumn]: targetId
211
+ }).update(dataToRestore);
212
+ }));
100
213
  if (toInsert.length > 0) {
101
214
  await trx.batchInsert(joinTable.name, toInsert, batchSize);
102
215
  }
@@ -1 +1 @@
1
- {"version":3,"file":"self-referential-relations.mjs","sources":["../../../../src/services/document-service/utils/self-referential-relations.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport { keyBy, omit } from 'lodash/fp';\nimport type { Data, UID } from '@strapi/types';\nimport type { JoinTable } from '@strapi/database';\n\ninterface VersionEntry {\n id: Data.ID;\n locale: string;\n}\n\ninterface RelationData {\n joinTable: JoinTable;\n relations: Record<string, unknown>[];\n}\n\n/**\n * Preserves self-referential relations during publish/discard operations.\n *\n * When publishing or discarding a draft, self-referential relations (where both sides\n * of the relation belong to the same content type) are lost because:\n *\n * 1. The old entry is deleted\n * 2. A new entry is created with relations resolved via documentId → entity ID mapping\n * 3. At mapping time, the old entity is already deleted and the new one doesn't exist yet\n * 4. The relation is silently dropped\n *\n * This utility:\n * 1. Captures self-referential join table rows before deletion\n * 2. Remaps old entity IDs to new entity IDs after creation\n * 3. Inserts the remapped relations\n */\n\n/**\n * Loads self-referential relations from source entries before they are deleted/recreated.\n */\nconst load = async (\n uid: UID.ContentType,\n sourceEntries: VersionEntry[]\n): Promise<RelationData[]> => {\n const updates: RelationData[] = [];\n const dbModel = strapi.db.metadata.get(uid);\n\n await strapi.db.transaction(async ({ trx }) => {\n for (const attribute of Object.values(dbModel.attributes) as any) {\n if (attribute.type !== 'relation' || attribute.target !== uid) {\n continue;\n }\n\n // Bidirectional inverse side (e.g. `children` mappedBy `parent`) shares the same physical\n // join table as the owning attribute; processing both would duplicate rows and inserts.\n if (attribute.mappedBy) {\n continue;\n }\n\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: sourceColumnName } = joinTable.joinColumn;\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n const sourceIds = sourceEntries.map((entry) => String(entry.id));\n\n // Load relations where both source and target are among the entries being processed.\n // These are the self-referential relations that would be lost during the\n // delete-and-recreate cycle.\n const selfRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(sourceColumnName, sourceIds)\n .whereIn(targetColumnName, sourceIds)\n .transacting(trx);\n\n if (selfRelations.length > 0) {\n updates.push({ joinTable, relations: selfRelations });\n }\n }\n });\n\n return updates;\n};\n\n/**\n * Syncs self-referential relations by remapping old entry IDs to new entry IDs\n * and inserting the remapped relations into the join table.\n */\nconst sync = async (\n sourceEntries: VersionEntry[],\n targetEntries: VersionEntry[],\n relationData: RelationData[]\n) => {\n if (relationData.length === 0) return;\n\n const targetEntriesByLocale = keyBy('locale', targetEntries);\n\n // Keys stringified for object lookup; values keep the original DB type so PostgreSQL integer columns receive integers, not strings\n const idMapping = sourceEntries.reduce(\n (acc, sourceEntry) => {\n const targetEntry = targetEntriesByLocale[sourceEntry.locale];\n if (!targetEntry) return acc;\n acc[String(sourceEntry.id)] = targetEntry.id;\n return acc;\n },\n {} as Record<string, Data.ID>\n );\n\n const batchSize = strapi.db.dialect.getBatchInsertSize();\n\n await strapi.db.transaction(async ({ trx }) => {\n for (const { joinTable, relations } of relationData) {\n const sourceColumn = joinTable.joinColumn.name;\n const targetColumn = joinTable.inverseJoinColumn.name;\n\n const newRelations = relations\n .map((relation) => {\n const oldSourceId = String(relation[sourceColumn]);\n const oldTargetId = String(relation[targetColumn]);\n const newSourceId = idMapping[oldSourceId];\n const newTargetId = idMapping[oldTargetId];\n\n // Both sides must map to new entries\n if (!newSourceId || !newTargetId) return null;\n\n return {\n ...omit(strapi.db.metadata.identifiers.ID_COLUMN, relation),\n [sourceColumn]: newSourceId,\n [targetColumn]: newTargetId,\n };\n })\n .filter(Boolean) as Record<string, unknown>[];\n\n const pairKey = (r: Record<string, unknown>) =>\n `${String(r[sourceColumn])}:${String(r[targetColumn])}`;\n const seenPairs = new Set<string>();\n const deduped = newRelations.filter((r) => {\n const key = pairKey(r);\n if (seenPairs.has(key)) return false;\n seenPairs.add(key);\n return true;\n });\n\n if (deduped.length === 0) continue;\n\n const newSourceIds = [...new Set(deduped.map((r) => String(r[sourceColumn])))];\n const existingRows = await trx(joinTable.name)\n .whereIn(sourceColumn, newSourceIds)\n .select(sourceColumn, targetColumn);\n\n const existingSet = new Set(existingRows.map((r: Record<string, unknown>) => pairKey(r)));\n const toInsert = deduped.filter((r) => !existingSet.has(pairKey(r)));\n\n if (toInsert.length > 0) {\n await trx.batchInsert(joinTable.name, toInsert as any[], batchSize);\n }\n }\n });\n};\n\nexport { load, sync };\n"],"names":["load","uid","sourceEntries","updates","dbModel","strapi","db","metadata","get","transaction","trx","attribute","Object","values","attributes","type","target","mappedBy","joinTable","name","sourceColumnName","joinColumn","targetColumnName","inverseJoinColumn","sourceIds","map","entry","String","id","selfRelations","getConnection","select","from","whereIn","transacting","length","push","relations","sync","targetEntries","relationData","targetEntriesByLocale","keyBy","idMapping","reduce","acc","sourceEntry","targetEntry","locale","batchSize","dialect","getBatchInsertSize","sourceColumn","targetColumn","newRelations","relation","oldSourceId","oldTargetId","newSourceId","newTargetId","omit","identifiers","ID_COLUMN","filter","Boolean","pairKey","r","seenPairs","Set","deduped","key","has","add","newSourceIds","existingRows","existingSet","toInsert","batchInsert"],"mappings":"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"}
1
+ {"version":3,"file":"self-referential-relations.mjs","sources":["../../../../src/services/document-service/utils/self-referential-relations.ts"],"sourcesContent":["/* eslint-disable no-continue */\nimport { keyBy, omit } from 'lodash/fp';\nimport type { Data, UID } from '@strapi/types';\nimport type { Database, JoinTable } from '@strapi/database';\n\ninterface VersionEntry {\n id: Data.ID;\n locale: string;\n}\n\ninterface RelationData {\n joinTable: JoinTable;\n relations: Record<string, unknown>[];\n remap?: {\n source: boolean;\n target: boolean;\n };\n}\n\ntype TargetStatus = 'draft' | 'published';\ntype DatabaseQueryBuilder = ReturnType<Database['getConnection']>;\ntype DatabaseTransaction = Parameters<DatabaseQueryBuilder['transacting']>[0];\n\nconst entryKey = (entry: { document_id: unknown; locale: unknown }) =>\n `${String(entry.document_id)}:${String(entry.locale)}`;\n\nconst getCounterparts = async (\n trx: DatabaseTransaction,\n tableName: string,\n idsToResolve: unknown[],\n status: TargetStatus\n): Promise<Record<string, Data.ID>> => {\n const ids = [...new Set(idsToResolve.map((id) => String(id)))];\n\n if (ids.length === 0) {\n return {};\n }\n\n const drafts = await strapi.db\n .getConnection()\n .select('id', 'document_id', 'locale')\n .from(tableName)\n .whereIn('id', ids)\n .transacting(trx);\n\n if (drafts.length === 0) {\n return {};\n }\n\n const documentIds = [\n ...new Set(drafts.map((entry: { document_id: Data.ID }) => entry.document_id)),\n ];\n\n const counterpartsQuery = strapi.db\n .getConnection()\n .select('id', 'document_id', 'locale')\n .from(tableName)\n .whereIn('document_id', documentIds)\n .transacting(trx);\n\n const counterparts =\n status === 'published'\n ? await counterpartsQuery.whereNotNull('published_at')\n : await counterpartsQuery.whereNull('published_at');\n\n const counterpartByDocument = keyBy(entryKey, counterparts);\n\n return drafts.reduce(\n (\n acc: Record<string, Data.ID>,\n draft: { id: Data.ID; document_id: unknown; locale: unknown }\n ) => {\n const counterpart = counterpartByDocument[entryKey(draft)];\n\n if (counterpart) {\n acc[String(draft.id)] = counterpart.id;\n }\n\n return acc;\n },\n {}\n );\n};\n\n/**\n * Preserves self-referential relations during publish/discard operations.\n *\n * When publishing or discarding a draft, self-referential relations (where both sides\n * of the relation belong to the same content type) are lost because:\n *\n * 1. The old entry is deleted\n * 2. A new entry is created with relations resolved via documentId → entity ID mapping\n * 3. At mapping time, the old entity is already deleted and the new one doesn't exist yet\n * 4. The relation is silently dropped\n *\n * This utility:\n * 1. Captures self-referential join table rows before deletion\n * 2. Remaps old entity IDs to new entity IDs after creation\n * 3. Inserts the remapped relations\n */\n\n/**\n * Loads self-referential relations from source entries before they are deleted/recreated.\n */\nconst load = async (\n uid: UID.ContentType,\n sourceEntries: VersionEntry[],\n targetStatus: TargetStatus\n): Promise<RelationData[]> => {\n const updates: RelationData[] = [];\n const dbModel = strapi.db.metadata.get(uid);\n\n await strapi.db.transaction(async ({ trx }) => {\n for (const attribute of Object.values(dbModel.attributes) as any) {\n if (attribute.type !== 'relation' || attribute.target !== uid) {\n continue;\n }\n\n // Bidirectional inverse side (e.g. `children` mappedBy `parent`) shares the same physical\n // join table as the owning attribute; processing both would duplicate rows and inserts.\n if (attribute.mappedBy) {\n continue;\n }\n\n const joinTable = attribute.joinTable;\n if (!joinTable) {\n continue;\n }\n\n const { name: sourceColumnName } = joinTable.joinColumn;\n const { name: targetColumnName } = joinTable.inverseJoinColumn;\n\n const sourceIds = sourceEntries.map((entry) => String(entry.id));\n\n // Load relations where both source and target are among the entries being processed.\n // These are the self-referential relations that would be lost during the\n // delete-and-recreate cycle.\n const selfRelations = await strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(sourceColumnName, sourceIds)\n .whereIn(targetColumnName, sourceIds)\n .transacting(trx);\n\n if (selfRelations.length > 0) {\n updates.push({\n joinTable,\n relations: selfRelations,\n remap: { source: true, target: true },\n });\n }\n\n // Use rows from the state being copied as the source of truth for one-sided\n // self-relations. Publishing maps untouched targets to published counterparts and drops\n // draft-only targets; discarding maps untouched targets to draft counterparts. This avoids\n // restoring stale old rows that were removed from the copied state.\n const [sourceDraftRelations, targetDraftRelations] = await Promise.all([\n strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(sourceColumnName, sourceIds)\n .whereNotIn(targetColumnName, sourceIds)\n .transacting(trx),\n strapi.db\n .getConnection()\n .select('*')\n .from(joinTable.name)\n .whereIn(targetColumnName, sourceIds)\n .whereNotIn(sourceColumnName, sourceIds)\n .transacting(trx),\n ]);\n\n const [targetCounterparts, sourceCounterparts] = await Promise.all([\n getCounterparts(\n trx,\n dbModel.tableName,\n sourceDraftRelations.map((relation) => relation[targetColumnName]),\n targetStatus\n ),\n getCounterparts(\n trx,\n dbModel.tableName,\n targetDraftRelations.map((relation) => relation[sourceColumnName]),\n targetStatus\n ),\n ]);\n\n if (sourceDraftRelations.length > 0) {\n const relations = sourceDraftRelations\n .map((relation) => {\n const targetCounterpart = targetCounterparts[String(relation[targetColumnName])];\n\n if (targetCounterpart == null) {\n return null;\n }\n\n return { ...relation, [targetColumnName]: targetCounterpart };\n })\n .filter(Boolean) as Record<string, unknown>[];\n\n if (relations.length > 0) {\n updates.push({\n joinTable,\n relations,\n remap: { source: true, target: false },\n });\n }\n }\n\n if (targetDraftRelations.length > 0) {\n const relations = targetDraftRelations\n .map((relation) => {\n const sourceCounterpart = sourceCounterparts[String(relation[sourceColumnName])];\n\n if (sourceCounterpart == null) {\n return null;\n }\n\n return { ...relation, [sourceColumnName]: sourceCounterpart };\n })\n .filter(Boolean) as Record<string, unknown>[];\n\n if (relations.length > 0) {\n updates.push({\n joinTable,\n relations,\n remap: { source: false, target: true },\n });\n }\n }\n\n // One-sided rows from the replaced state are intentionally not restored here. The rows\n // captured above represent the current logical relation set; restoring stale old rows can\n // resurrect relations that were removed before publishing or discarding.\n }\n });\n\n return updates;\n};\n\n/**\n * Syncs self-referential relations by remapping old entry IDs to new entry IDs\n * and inserting the remapped relations into the join table.\n */\nconst sync = async (\n sourceEntries: VersionEntry[],\n targetEntries: VersionEntry[],\n relationData: RelationData[]\n) => {\n if (relationData.length === 0) return;\n\n const targetEntriesByLocale = keyBy('locale', targetEntries);\n\n // Keys stringified for object lookup; values keep the original DB type so PostgreSQL integer columns receive integers, not strings\n const idMapping = sourceEntries.reduce(\n (acc, sourceEntry) => {\n const targetEntry = targetEntriesByLocale[sourceEntry.locale];\n if (!targetEntry) return acc;\n acc[String(sourceEntry.id)] = targetEntry.id;\n return acc;\n },\n {} as Record<string, Data.ID>\n );\n\n const batchSize = strapi.db.dialect.getBatchInsertSize();\n\n await strapi.db.transaction(async ({ trx }) => {\n for (const { joinTable, relations, remap = { source: true, target: true } } of relationData) {\n const sourceColumn = joinTable.joinColumn.name;\n const targetColumn = joinTable.inverseJoinColumn.name;\n\n const newRelations = relations\n .map((relation) => {\n const oldSourceId = String(relation[sourceColumn]);\n const oldTargetId = String(relation[targetColumn]);\n const newSourceId = remap.source ? idMapping[oldSourceId] : relation[sourceColumn];\n const newTargetId = remap.target ? idMapping[oldTargetId] : relation[targetColumn];\n\n // Any side being remapped must resolve to a new entry.\n if (newSourceId == null || newTargetId == null) return null;\n\n return {\n ...omit(strapi.db.metadata.identifiers.ID_COLUMN, relation),\n [sourceColumn]: newSourceId,\n [targetColumn]: newTargetId,\n };\n })\n .filter(Boolean) as Record<string, unknown>[];\n\n const pairKey = (r: Record<string, unknown>) =>\n `${String(r[sourceColumn])}:${String(r[targetColumn])}`;\n const seenPairs = new Set<string>();\n const deduped = newRelations.filter((r) => {\n const key = pairKey(r);\n if (seenPairs.has(key)) return false;\n seenPairs.add(key);\n return true;\n });\n\n if (deduped.length === 0) continue;\n\n // Relation writes may have already recreated the remapped pair. In that case restore\n // the saved join-row metadata (notably order columns) instead of inserting a duplicate.\n const newSourceIds = [...new Set(deduped.map((r) => String(r[sourceColumn])))];\n const existingRows = await trx(joinTable.name)\n .whereIn(sourceColumn, newSourceIds)\n .select(sourceColumn, targetColumn);\n\n const existingSet = new Set(existingRows.map((r: Record<string, unknown>) => pairKey(r)));\n const toUpdate = deduped.filter((r) => existingSet.has(pairKey(r)));\n const toInsert = deduped.filter((r) => !existingSet.has(pairKey(r)));\n\n await Promise.all(\n toUpdate.map((relation) => {\n const sourceId = relation[sourceColumn];\n const targetId = relation[targetColumn];\n const dataToRestore = Object.fromEntries(\n [joinTable.orderColumnName, joinTable.inverseOrderColumnName]\n .filter((columnName): columnName is string => columnName != null)\n .filter((columnName) => columnName in relation)\n .map((columnName) => [columnName, relation[columnName]])\n );\n\n if (Object.keys(dataToRestore).length === 0) {\n return Promise.resolve();\n }\n\n return trx(joinTable.name)\n .where({ [sourceColumn]: sourceId, [targetColumn]: targetId })\n .update(dataToRestore);\n })\n );\n\n if (toInsert.length > 0) {\n await trx.batchInsert(joinTable.name, toInsert as any[], batchSize);\n }\n }\n });\n};\n\nexport { load, sync };\n"],"names":["entryKey","entry","String","document_id","locale","getCounterparts","trx","tableName","idsToResolve","status","ids","Set","map","id","length","drafts","strapi","db","getConnection","select","from","whereIn","transacting","documentIds","counterpartsQuery","counterparts","whereNotNull","whereNull","counterpartByDocument","keyBy","reduce","acc","draft","counterpart","load","uid","sourceEntries","targetStatus","updates","dbModel","metadata","get","transaction","attribute","Object","values","attributes","type","target","mappedBy","joinTable","name","sourceColumnName","joinColumn","targetColumnName","inverseJoinColumn","sourceIds","selfRelations","push","relations","remap","source","sourceDraftRelations","targetDraftRelations","Promise","all","whereNotIn","targetCounterparts","sourceCounterparts","relation","targetCounterpart","filter","Boolean","sourceCounterpart","sync","targetEntries","relationData","targetEntriesByLocale","idMapping","sourceEntry","targetEntry","batchSize","dialect","getBatchInsertSize","sourceColumn","targetColumn","newRelations","oldSourceId","oldTargetId","newSourceId","newTargetId","omit","identifiers","ID_COLUMN","pairKey","r","seenPairs","deduped","key","has","add","newSourceIds","existingRows","existingSet","toUpdate","toInsert","sourceId","targetId","dataToRestore","fromEntries","orderColumnName","inverseOrderColumnName","columnName","keys","resolve","where","update","batchInsert"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"unidirectional-relations.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,UAAU,WAAW;IACnB,WAAW,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,WAAW,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChD;AAED,UAAU,cAAc;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAClC;AAED,UAAU,qBAAqB;IAC7B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,CACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,KAAK,EAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,EAC5C,GAAG,EAAE,GAAG,KACL,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED;;;;GAIG;AACH,QAAA,MAAM,IAAI,QACH,IAAI,WAAW,gCACU,WAAW,YAChC,qBAAqB,KAC7B,QAAQ,cAAc,EAAE,CA0H1B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,IAAI,eACI;IAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,cACjC;IAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,gBAC/B;IAAE,SAAS,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,EAAE,CAAA;CAAE,EAAE,kBAiCrD,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"unidirectional-relations.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/utils/unidirectional-relations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,UAAU,WAAW;IACnB,WAAW,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,WAAW,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChD;AAED,UAAU,cAAc;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAClC;AAED,UAAU,qBAAqB;IAC7B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,CACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,KAAK,EAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,EAC5C,GAAG,EAAE,GAAG,KACL,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED;;;;GAIG;AACH,QAAA,MAAM,IAAI,GACR,KAAK,GAAG,CAAC,WAAW,EACpB,8BAA8B,WAAW,EACzC,UAAS,qBAA0B,KAClC,OAAO,CAAC,cAAc,EAAE,CA0H1B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,IAAI,GACR,YAAY;IAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,EAC7C,YAAY;IAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,EAC7C,cAAc;IAAE,SAAS,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,EAAE,CAAA;CAAE,EAAE,kBAiCrD,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/entity-service/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAS,MAAM,eAAe,CAAC;AAE1D,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG;IACxB,QAAQ,CACN,SAAS,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,aAAa,GAAG;QAC7F,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GACA,IAAI,CAAC;CACT,CAAC;8BAuLmB;IACnB,MAAM,EAAE,KAAK,MAAM,CAAC;IACpB,EAAE,EAAE,QAAQ,CAAC;CACd,KAAG,YAAY,QAAQ,aAAa,CAAC,aAAa,CAAC;AAHpD,wBAoDE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/entity-service/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAS,MAAM,eAAe,CAAC;AAE1D,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG;IACxB,QAAQ,CACN,SAAS,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,aAAa,GAAG;QAC7F,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,GACA,IAAI,CAAC;CACT,CAAC;yBAuLc,KAAK;IACnB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,EAAE,EAAE,QAAQ,CAAC;CACd,KAAG,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC;AAHpD,wBAuDE"}
@@ -221,7 +221,7 @@ var createEntityService = ((ctx)=>{
221
221
  Object.keys(service.implementation).forEach((key)=>delegator.method(key));
222
222
  // wrap methods to handle Database Errors
223
223
  service.decorate((oldService)=>{
224
- const newService = ___default.default.mapValues(oldService, (method, methodName)=>async function(...args) {
224
+ const newService = ___default.default.mapValues(oldService, (method, methodName)=>async function transformDatabaseErrors(...args) {
225
225
  try {
226
226
  return await oldService[methodName].call(this, ...args);
227
227
  } catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/services/entity-service/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport delegate from 'delegates';\nimport { errors as databaseErrors } from '@strapi/database';\nimport {\n contentTypes as contentTypesUtils,\n errors,\n relations as relationUtils,\n} from '@strapi/utils';\nimport type { Database } from '@strapi/database';\nimport type { Core, Modules, Utils } from '@strapi/types';\n\ntype Decoratable<T> = T & {\n decorate(\n decorator: (old: Modules.EntityService.EntityService) => Modules.EntityService.EntityService & {\n [key: string]: unknown;\n }\n ): void;\n};\n\nconst transformLoadParamsToQuery = (\n uid: string,\n field: string,\n params: Record<string, unknown>,\n pagination = {}\n) => {\n const query = strapi\n .get('query-params')\n .transform(uid, { populate: { [field]: params } as any }) as any;\n\n const res = {\n ...query.populate[field],\n ...pagination,\n };\n\n return res;\n};\n\nconst databaseErrorsToTransform = [\n databaseErrors.InvalidTimeError,\n databaseErrors.InvalidDateTimeError,\n databaseErrors.InvalidDateError,\n databaseErrors.InvalidRelationError,\n];\n\nconst createDefaultImplementation = ({\n strapi,\n db,\n}: {\n strapi: Core.Strapi;\n db: Database;\n}): Modules.EntityService.EntityService => ({\n async wrapParams(options: any = {}) {\n return options;\n },\n\n async wrapResult(result: any = {}) {\n return result;\n },\n\n async findMany(uid, opts) {\n const { kind } = strapi.getModel(uid);\n\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findMany' });\n\n if (kind === 'singleType') {\n const entity = strapi.documents!(uid).findFirst(wrappedParams);\n return this.wrapResult(entity, { uid, action: 'findOne' });\n }\n\n const entities = await strapi.documents!(uid).findMany(wrappedParams);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findPage(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findPage' });\n\n const query = strapi.get('query-params').transform(uid, wrappedParams);\n\n const entities = await db.query(uid).findPage(query);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findOne(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findOne' });\n\n const res = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!res) {\n return this.wrapResult(null, { uid, action: 'findOne' });\n }\n\n const entity = await strapi.documents!(uid).findOne({\n ...wrappedParams,\n documentId: res.documentId,\n });\n return this.wrapResult(entity, { uid, action: 'findOne' });\n },\n\n async count(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'count' });\n\n return strapi.documents!(uid).count(wrappedParams);\n },\n\n async create(uid, params) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data' | 'fields' | 'populate'>\n >(params, { uid, action: 'create' });\n const { data } = wrappedParams;\n\n if (!data) {\n throw new Error('cannot create');\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(data, strapi.getModel(uid));\n\n const entity = await strapi.documents!(uid).create({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n });\n\n return this.wrapResult(entity, { uid, action: 'create' });\n },\n\n async update(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data:partial' | 'fields' | 'populate'>\n >(opts, {\n uid,\n action: 'update',\n });\n const entityToUpdate = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToUpdate) {\n return this.wrapResult(null, { uid, action: 'update' });\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(entityToUpdate, strapi.getModel(uid));\n\n const entity = strapi.documents!(uid).update({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n documentId: entityToUpdate.documentId,\n });\n\n return this.wrapResult(entity, { uid, action: 'update' });\n },\n\n async delete(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'delete' });\n\n const entityToDelete = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToDelete) {\n return this.wrapResult(null, { uid, action: 'delete' });\n }\n\n await strapi.documents!(uid).delete({\n ...wrappedParams,\n documentId: entityToDelete.documentId,\n });\n\n return this.wrapResult(entityToDelete, { uid, action: 'delete' });\n },\n\n async load(uid, entity, field, params) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const loadedEntity = await db\n .query(uid)\n .load(entity, field, transformLoadParamsToQuery(uid, field, params ?? {}));\n\n return this.wrapResult(loadedEntity, { uid, field, action: 'load' });\n },\n\n async loadPages(uid, entity, field, params, pagination = {}) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const { attributes } = strapi.getModel(uid);\n const attribute = attributes[field];\n\n if (!relationUtils.isAnyToMany(attribute)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be an anyToMany relational attribute`);\n }\n\n const query = transformLoadParamsToQuery(uid, field, params ?? {}, pagination);\n\n const loadedPage = await db.query(uid).loadPages(entity, field, query);\n\n return {\n ...loadedPage,\n results: await this.wrapResult(loadedPage.results, { uid, field, action: 'load' }),\n };\n },\n});\n\nexport default (ctx: {\n strapi: Core.Strapi;\n db: Database;\n}): Decoratable<Modules.EntityService.EntityService> => {\n const implementation = createDefaultImplementation(ctx);\n\n const service = {\n implementation,\n decorate<T extends object>(decorator: (current: typeof implementation) => T) {\n if (typeof decorator !== 'function') {\n throw new Error(`Decorator must be a function, received ${typeof decorator}`);\n }\n\n this.implementation = { ...this.implementation, ...decorator(this.implementation) };\n return this;\n },\n };\n\n const delegator = delegate(service, 'implementation');\n\n // delegate every method in implementation\n Object.keys(service.implementation).forEach((key) => delegator.method(key));\n\n // wrap methods to handle Database Errors\n service.decorate((oldService: Modules.EntityService.EntityService) => {\n const newService = _.mapValues(\n oldService,\n (method, methodName: keyof Modules.EntityService.EntityService) =>\n async function (this: Modules.EntityService.EntityService, ...args: []) {\n try {\n return await (oldService[methodName] as Utils.Function.AnyPromise).call(this, ...args);\n } catch (error) {\n if (\n databaseErrorsToTransform.some(\n (errorToTransform) => error instanceof errorToTransform\n )\n ) {\n if (error instanceof Error) {\n throw new errors.ValidationError(error.message);\n }\n\n throw error;\n }\n throw error;\n }\n }\n );\n\n return newService;\n });\n\n return service as unknown as Decoratable<Modules.EntityService.EntityService>;\n};\n"],"names":["transformLoadParamsToQuery","uid","field","params","pagination","query","strapi","get","transform","populate","res","databaseErrorsToTransform","databaseErrors","InvalidTimeError","InvalidDateTimeError","InvalidDateError","InvalidRelationError","createDefaultImplementation","db","wrapParams","options","wrapResult","result","findMany","opts","kind","getModel","wrappedParams","action","entity","documents","findFirst","entities","findPage","findOne","entityId","where","id","documentId","count","create","data","Error","shouldPublish","contentTypesUtils","isDraft","status","update","entityToUpdate","delete","entityToDelete","load","_","isString","loadedEntity","loadPages","attributes","attribute","relationUtils","isAnyToMany","loadedPage","results","ctx","implementation","service","decorate","decorator","delegator","delegate","Object","keys","forEach","key","method","oldService","newService","mapValues","methodName","args","call","error","some","errorToTransform","errors","ValidationError","message"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/services/entity-service/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport delegate from 'delegates';\nimport { errors as databaseErrors } from '@strapi/database';\nimport {\n contentTypes as contentTypesUtils,\n errors,\n relations as relationUtils,\n} from '@strapi/utils';\nimport type { Database } from '@strapi/database';\nimport type { Core, Modules, Utils } from '@strapi/types';\n\ntype Decoratable<T> = T & {\n decorate(\n decorator: (old: Modules.EntityService.EntityService) => Modules.EntityService.EntityService & {\n [key: string]: unknown;\n }\n ): void;\n};\n\nconst transformLoadParamsToQuery = (\n uid: string,\n field: string,\n params: Record<string, unknown>,\n pagination = {}\n) => {\n const query = strapi\n .get('query-params')\n .transform(uid, { populate: { [field]: params } as any }) as any;\n\n const res = {\n ...query.populate[field],\n ...pagination,\n };\n\n return res;\n};\n\nconst databaseErrorsToTransform = [\n databaseErrors.InvalidTimeError,\n databaseErrors.InvalidDateTimeError,\n databaseErrors.InvalidDateError,\n databaseErrors.InvalidRelationError,\n];\n\nconst createDefaultImplementation = ({\n strapi,\n db,\n}: {\n strapi: Core.Strapi;\n db: Database;\n}): Modules.EntityService.EntityService => ({\n async wrapParams(options: any = {}) {\n return options;\n },\n\n async wrapResult(result: any = {}) {\n return result;\n },\n\n async findMany(uid, opts) {\n const { kind } = strapi.getModel(uid);\n\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findMany' });\n\n if (kind === 'singleType') {\n const entity = strapi.documents!(uid).findFirst(wrappedParams);\n return this.wrapResult(entity, { uid, action: 'findOne' });\n }\n\n const entities = await strapi.documents!(uid).findMany(wrappedParams);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findPage(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findPage' });\n\n const query = strapi.get('query-params').transform(uid, wrappedParams);\n\n const entities = await db.query(uid).findPage(query);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findOne(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findOne' });\n\n const res = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!res) {\n return this.wrapResult(null, { uid, action: 'findOne' });\n }\n\n const entity = await strapi.documents!(uid).findOne({\n ...wrappedParams,\n documentId: res.documentId,\n });\n return this.wrapResult(entity, { uid, action: 'findOne' });\n },\n\n async count(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'count' });\n\n return strapi.documents!(uid).count(wrappedParams);\n },\n\n async create(uid, params) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data' | 'fields' | 'populate'>\n >(params, { uid, action: 'create' });\n const { data } = wrappedParams;\n\n if (!data) {\n throw new Error('cannot create');\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(data, strapi.getModel(uid));\n\n const entity = await strapi.documents!(uid).create({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n });\n\n return this.wrapResult(entity, { uid, action: 'create' });\n },\n\n async update(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data:partial' | 'fields' | 'populate'>\n >(opts, {\n uid,\n action: 'update',\n });\n const entityToUpdate = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToUpdate) {\n return this.wrapResult(null, { uid, action: 'update' });\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(entityToUpdate, strapi.getModel(uid));\n\n const entity = strapi.documents!(uid).update({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n documentId: entityToUpdate.documentId,\n });\n\n return this.wrapResult(entity, { uid, action: 'update' });\n },\n\n async delete(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'delete' });\n\n const entityToDelete = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToDelete) {\n return this.wrapResult(null, { uid, action: 'delete' });\n }\n\n await strapi.documents!(uid).delete({\n ...wrappedParams,\n documentId: entityToDelete.documentId,\n });\n\n return this.wrapResult(entityToDelete, { uid, action: 'delete' });\n },\n\n async load(uid, entity, field, params) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const loadedEntity = await db\n .query(uid)\n .load(entity, field, transformLoadParamsToQuery(uid, field, params ?? {}));\n\n return this.wrapResult(loadedEntity, { uid, field, action: 'load' });\n },\n\n async loadPages(uid, entity, field, params, pagination = {}) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const { attributes } = strapi.getModel(uid);\n const attribute = attributes[field];\n\n if (!relationUtils.isAnyToMany(attribute)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be an anyToMany relational attribute`);\n }\n\n const query = transformLoadParamsToQuery(uid, field, params ?? {}, pagination);\n\n const loadedPage = await db.query(uid).loadPages(entity, field, query);\n\n return {\n ...loadedPage,\n results: await this.wrapResult(loadedPage.results, { uid, field, action: 'load' }),\n };\n },\n});\n\nexport default (ctx: {\n strapi: Core.Strapi;\n db: Database;\n}): Decoratable<Modules.EntityService.EntityService> => {\n const implementation = createDefaultImplementation(ctx);\n\n const service = {\n implementation,\n decorate<T extends object>(decorator: (current: typeof implementation) => T) {\n if (typeof decorator !== 'function') {\n throw new Error(`Decorator must be a function, received ${typeof decorator}`);\n }\n\n this.implementation = { ...this.implementation, ...decorator(this.implementation) };\n return this;\n },\n };\n\n const delegator = delegate(service, 'implementation');\n\n // delegate every method in implementation\n Object.keys(service.implementation).forEach((key) => delegator.method(key));\n\n // wrap methods to handle Database Errors\n service.decorate((oldService: Modules.EntityService.EntityService) => {\n const newService = _.mapValues(\n oldService,\n (method, methodName: keyof Modules.EntityService.EntityService) =>\n async function transformDatabaseErrors(\n this: Modules.EntityService.EntityService,\n ...args: []\n ) {\n try {\n return await (oldService[methodName] as Utils.Function.AnyPromise).call(this, ...args);\n } catch (error) {\n if (\n databaseErrorsToTransform.some(\n (errorToTransform) => error instanceof errorToTransform\n )\n ) {\n if (error instanceof Error) {\n throw new errors.ValidationError(error.message);\n }\n\n throw error;\n }\n throw error;\n }\n }\n );\n\n return newService;\n });\n\n return service as unknown as Decoratable<Modules.EntityService.EntityService>;\n};\n"],"names":["transformLoadParamsToQuery","uid","field","params","pagination","query","strapi","get","transform","populate","res","databaseErrorsToTransform","databaseErrors","InvalidTimeError","InvalidDateTimeError","InvalidDateError","InvalidRelationError","createDefaultImplementation","db","wrapParams","options","wrapResult","result","findMany","opts","kind","getModel","wrappedParams","action","entity","documents","findFirst","entities","findPage","findOne","entityId","where","id","documentId","count","create","data","Error","shouldPublish","contentTypesUtils","isDraft","status","update","entityToUpdate","delete","entityToDelete","load","_","isString","loadedEntity","loadPages","attributes","attribute","relationUtils","isAnyToMany","loadedPage","results","ctx","implementation","service","decorate","decorator","delegator","delegate","Object","keys","forEach","key","method","oldService","newService","mapValues","methodName","transformDatabaseErrors","args","call","error","some","errorToTransform","errors","ValidationError","message"],"mappings":"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"}
@@ -214,7 +214,7 @@ var createEntityService = ((ctx)=>{
214
214
  Object.keys(service.implementation).forEach((key)=>delegator.method(key));
215
215
  // wrap methods to handle Database Errors
216
216
  service.decorate((oldService)=>{
217
- const newService = _.mapValues(oldService, (method, methodName)=>async function(...args) {
217
+ const newService = _.mapValues(oldService, (method, methodName)=>async function transformDatabaseErrors(...args) {
218
218
  try {
219
219
  return await oldService[methodName].call(this, ...args);
220
220
  } catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/services/entity-service/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport delegate from 'delegates';\nimport { errors as databaseErrors } from '@strapi/database';\nimport {\n contentTypes as contentTypesUtils,\n errors,\n relations as relationUtils,\n} from '@strapi/utils';\nimport type { Database } from '@strapi/database';\nimport type { Core, Modules, Utils } from '@strapi/types';\n\ntype Decoratable<T> = T & {\n decorate(\n decorator: (old: Modules.EntityService.EntityService) => Modules.EntityService.EntityService & {\n [key: string]: unknown;\n }\n ): void;\n};\n\nconst transformLoadParamsToQuery = (\n uid: string,\n field: string,\n params: Record<string, unknown>,\n pagination = {}\n) => {\n const query = strapi\n .get('query-params')\n .transform(uid, { populate: { [field]: params } as any }) as any;\n\n const res = {\n ...query.populate[field],\n ...pagination,\n };\n\n return res;\n};\n\nconst databaseErrorsToTransform = [\n databaseErrors.InvalidTimeError,\n databaseErrors.InvalidDateTimeError,\n databaseErrors.InvalidDateError,\n databaseErrors.InvalidRelationError,\n];\n\nconst createDefaultImplementation = ({\n strapi,\n db,\n}: {\n strapi: Core.Strapi;\n db: Database;\n}): Modules.EntityService.EntityService => ({\n async wrapParams(options: any = {}) {\n return options;\n },\n\n async wrapResult(result: any = {}) {\n return result;\n },\n\n async findMany(uid, opts) {\n const { kind } = strapi.getModel(uid);\n\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findMany' });\n\n if (kind === 'singleType') {\n const entity = strapi.documents!(uid).findFirst(wrappedParams);\n return this.wrapResult(entity, { uid, action: 'findOne' });\n }\n\n const entities = await strapi.documents!(uid).findMany(wrappedParams);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findPage(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findPage' });\n\n const query = strapi.get('query-params').transform(uid, wrappedParams);\n\n const entities = await db.query(uid).findPage(query);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findOne(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findOne' });\n\n const res = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!res) {\n return this.wrapResult(null, { uid, action: 'findOne' });\n }\n\n const entity = await strapi.documents!(uid).findOne({\n ...wrappedParams,\n documentId: res.documentId,\n });\n return this.wrapResult(entity, { uid, action: 'findOne' });\n },\n\n async count(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'count' });\n\n return strapi.documents!(uid).count(wrappedParams);\n },\n\n async create(uid, params) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data' | 'fields' | 'populate'>\n >(params, { uid, action: 'create' });\n const { data } = wrappedParams;\n\n if (!data) {\n throw new Error('cannot create');\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(data, strapi.getModel(uid));\n\n const entity = await strapi.documents!(uid).create({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n });\n\n return this.wrapResult(entity, { uid, action: 'create' });\n },\n\n async update(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data:partial' | 'fields' | 'populate'>\n >(opts, {\n uid,\n action: 'update',\n });\n const entityToUpdate = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToUpdate) {\n return this.wrapResult(null, { uid, action: 'update' });\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(entityToUpdate, strapi.getModel(uid));\n\n const entity = strapi.documents!(uid).update({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n documentId: entityToUpdate.documentId,\n });\n\n return this.wrapResult(entity, { uid, action: 'update' });\n },\n\n async delete(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'delete' });\n\n const entityToDelete = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToDelete) {\n return this.wrapResult(null, { uid, action: 'delete' });\n }\n\n await strapi.documents!(uid).delete({\n ...wrappedParams,\n documentId: entityToDelete.documentId,\n });\n\n return this.wrapResult(entityToDelete, { uid, action: 'delete' });\n },\n\n async load(uid, entity, field, params) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const loadedEntity = await db\n .query(uid)\n .load(entity, field, transformLoadParamsToQuery(uid, field, params ?? {}));\n\n return this.wrapResult(loadedEntity, { uid, field, action: 'load' });\n },\n\n async loadPages(uid, entity, field, params, pagination = {}) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const { attributes } = strapi.getModel(uid);\n const attribute = attributes[field];\n\n if (!relationUtils.isAnyToMany(attribute)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be an anyToMany relational attribute`);\n }\n\n const query = transformLoadParamsToQuery(uid, field, params ?? {}, pagination);\n\n const loadedPage = await db.query(uid).loadPages(entity, field, query);\n\n return {\n ...loadedPage,\n results: await this.wrapResult(loadedPage.results, { uid, field, action: 'load' }),\n };\n },\n});\n\nexport default (ctx: {\n strapi: Core.Strapi;\n db: Database;\n}): Decoratable<Modules.EntityService.EntityService> => {\n const implementation = createDefaultImplementation(ctx);\n\n const service = {\n implementation,\n decorate<T extends object>(decorator: (current: typeof implementation) => T) {\n if (typeof decorator !== 'function') {\n throw new Error(`Decorator must be a function, received ${typeof decorator}`);\n }\n\n this.implementation = { ...this.implementation, ...decorator(this.implementation) };\n return this;\n },\n };\n\n const delegator = delegate(service, 'implementation');\n\n // delegate every method in implementation\n Object.keys(service.implementation).forEach((key) => delegator.method(key));\n\n // wrap methods to handle Database Errors\n service.decorate((oldService: Modules.EntityService.EntityService) => {\n const newService = _.mapValues(\n oldService,\n (method, methodName: keyof Modules.EntityService.EntityService) =>\n async function (this: Modules.EntityService.EntityService, ...args: []) {\n try {\n return await (oldService[methodName] as Utils.Function.AnyPromise).call(this, ...args);\n } catch (error) {\n if (\n databaseErrorsToTransform.some(\n (errorToTransform) => error instanceof errorToTransform\n )\n ) {\n if (error instanceof Error) {\n throw new errors.ValidationError(error.message);\n }\n\n throw error;\n }\n throw error;\n }\n }\n );\n\n return newService;\n });\n\n return service as unknown as Decoratable<Modules.EntityService.EntityService>;\n};\n"],"names":["transformLoadParamsToQuery","uid","field","params","pagination","query","strapi","get","transform","populate","res","databaseErrorsToTransform","databaseErrors","InvalidTimeError","InvalidDateTimeError","InvalidDateError","InvalidRelationError","createDefaultImplementation","db","wrapParams","options","wrapResult","result","findMany","opts","kind","getModel","wrappedParams","action","entity","documents","findFirst","entities","findPage","findOne","entityId","where","id","documentId","count","create","data","Error","shouldPublish","contentTypesUtils","isDraft","status","update","entityToUpdate","delete","entityToDelete","load","_","isString","loadedEntity","loadPages","attributes","attribute","relationUtils","isAnyToMany","loadedPage","results","ctx","implementation","service","decorate","decorator","delegator","delegate","Object","keys","forEach","key","method","oldService","newService","mapValues","methodName","args","call","error","some","errorToTransform","errors","ValidationError","message"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/services/entity-service/index.ts"],"sourcesContent":["import _ from 'lodash';\nimport delegate from 'delegates';\nimport { errors as databaseErrors } from '@strapi/database';\nimport {\n contentTypes as contentTypesUtils,\n errors,\n relations as relationUtils,\n} from '@strapi/utils';\nimport type { Database } from '@strapi/database';\nimport type { Core, Modules, Utils } from '@strapi/types';\n\ntype Decoratable<T> = T & {\n decorate(\n decorator: (old: Modules.EntityService.EntityService) => Modules.EntityService.EntityService & {\n [key: string]: unknown;\n }\n ): void;\n};\n\nconst transformLoadParamsToQuery = (\n uid: string,\n field: string,\n params: Record<string, unknown>,\n pagination = {}\n) => {\n const query = strapi\n .get('query-params')\n .transform(uid, { populate: { [field]: params } as any }) as any;\n\n const res = {\n ...query.populate[field],\n ...pagination,\n };\n\n return res;\n};\n\nconst databaseErrorsToTransform = [\n databaseErrors.InvalidTimeError,\n databaseErrors.InvalidDateTimeError,\n databaseErrors.InvalidDateError,\n databaseErrors.InvalidRelationError,\n];\n\nconst createDefaultImplementation = ({\n strapi,\n db,\n}: {\n strapi: Core.Strapi;\n db: Database;\n}): Modules.EntityService.EntityService => ({\n async wrapParams(options: any = {}) {\n return options;\n },\n\n async wrapResult(result: any = {}) {\n return result;\n },\n\n async findMany(uid, opts) {\n const { kind } = strapi.getModel(uid);\n\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findMany' });\n\n if (kind === 'singleType') {\n const entity = strapi.documents!(uid).findFirst(wrappedParams);\n return this.wrapResult(entity, { uid, action: 'findOne' });\n }\n\n const entities = await strapi.documents!(uid).findMany(wrappedParams);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findPage(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findPage' });\n\n const query = strapi.get('query-params').transform(uid, wrappedParams);\n\n const entities = await db.query(uid).findPage(query);\n return this.wrapResult(entities, { uid, action: 'findMany' });\n },\n\n async findOne(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'findOne' });\n\n const res = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!res) {\n return this.wrapResult(null, { uid, action: 'findOne' });\n }\n\n const entity = await strapi.documents!(uid).findOne({\n ...wrappedParams,\n documentId: res.documentId,\n });\n return this.wrapResult(entity, { uid, action: 'findOne' });\n },\n\n async count(uid, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'count' });\n\n return strapi.documents!(uid).count(wrappedParams);\n },\n\n async create(uid, params) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data' | 'fields' | 'populate'>\n >(params, { uid, action: 'create' });\n const { data } = wrappedParams;\n\n if (!data) {\n throw new Error('cannot create');\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(data, strapi.getModel(uid));\n\n const entity = await strapi.documents!(uid).create({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n });\n\n return this.wrapResult(entity, { uid, action: 'create' });\n },\n\n async update(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams<\n Modules.EntityService.Params.Pick<typeof uid, 'data:partial' | 'fields' | 'populate'>\n >(opts, {\n uid,\n action: 'update',\n });\n const entityToUpdate = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToUpdate) {\n return this.wrapResult(null, { uid, action: 'update' });\n }\n\n const shouldPublish = !contentTypesUtils.isDraft(entityToUpdate, strapi.getModel(uid));\n\n const entity = strapi.documents!(uid).update({\n ...(wrappedParams as any),\n status: shouldPublish ? 'published' : 'draft',\n documentId: entityToUpdate.documentId,\n });\n\n return this.wrapResult(entity, { uid, action: 'update' });\n },\n\n async delete(uid, entityId, opts) {\n const wrappedParams = await this.wrapParams(opts, { uid, action: 'delete' });\n\n const entityToDelete = await db.query(uid).findOne({ where: { id: entityId } });\n\n if (!entityToDelete) {\n return this.wrapResult(null, { uid, action: 'delete' });\n }\n\n await strapi.documents!(uid).delete({\n ...wrappedParams,\n documentId: entityToDelete.documentId,\n });\n\n return this.wrapResult(entityToDelete, { uid, action: 'delete' });\n },\n\n async load(uid, entity, field, params) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const loadedEntity = await db\n .query(uid)\n .load(entity, field, transformLoadParamsToQuery(uid, field, params ?? {}));\n\n return this.wrapResult(loadedEntity, { uid, field, action: 'load' });\n },\n\n async loadPages(uid, entity, field, params, pagination = {}) {\n if (!_.isString(field)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be a string`);\n }\n\n const { attributes } = strapi.getModel(uid);\n const attribute = attributes[field];\n\n if (!relationUtils.isAnyToMany(attribute)) {\n throw new Error(`Invalid load. Expected \"${field}\" to be an anyToMany relational attribute`);\n }\n\n const query = transformLoadParamsToQuery(uid, field, params ?? {}, pagination);\n\n const loadedPage = await db.query(uid).loadPages(entity, field, query);\n\n return {\n ...loadedPage,\n results: await this.wrapResult(loadedPage.results, { uid, field, action: 'load' }),\n };\n },\n});\n\nexport default (ctx: {\n strapi: Core.Strapi;\n db: Database;\n}): Decoratable<Modules.EntityService.EntityService> => {\n const implementation = createDefaultImplementation(ctx);\n\n const service = {\n implementation,\n decorate<T extends object>(decorator: (current: typeof implementation) => T) {\n if (typeof decorator !== 'function') {\n throw new Error(`Decorator must be a function, received ${typeof decorator}`);\n }\n\n this.implementation = { ...this.implementation, ...decorator(this.implementation) };\n return this;\n },\n };\n\n const delegator = delegate(service, 'implementation');\n\n // delegate every method in implementation\n Object.keys(service.implementation).forEach((key) => delegator.method(key));\n\n // wrap methods to handle Database Errors\n service.decorate((oldService: Modules.EntityService.EntityService) => {\n const newService = _.mapValues(\n oldService,\n (method, methodName: keyof Modules.EntityService.EntityService) =>\n async function transformDatabaseErrors(\n this: Modules.EntityService.EntityService,\n ...args: []\n ) {\n try {\n return await (oldService[methodName] as Utils.Function.AnyPromise).call(this, ...args);\n } catch (error) {\n if (\n databaseErrorsToTransform.some(\n (errorToTransform) => error instanceof errorToTransform\n )\n ) {\n if (error instanceof Error) {\n throw new errors.ValidationError(error.message);\n }\n\n throw error;\n }\n throw error;\n }\n }\n );\n\n return newService;\n });\n\n return service as unknown as Decoratable<Modules.EntityService.EntityService>;\n};\n"],"names":["transformLoadParamsToQuery","uid","field","params","pagination","query","strapi","get","transform","populate","res","databaseErrorsToTransform","databaseErrors","InvalidTimeError","InvalidDateTimeError","InvalidDateError","InvalidRelationError","createDefaultImplementation","db","wrapParams","options","wrapResult","result","findMany","opts","kind","getModel","wrappedParams","action","entity","documents","findFirst","entities","findPage","findOne","entityId","where","id","documentId","count","create","data","Error","shouldPublish","contentTypesUtils","isDraft","status","update","entityToUpdate","delete","entityToDelete","load","_","isString","loadedEntity","loadPages","attributes","attribute","relationUtils","isAnyToMany","loadedPage","results","ctx","implementation","service","decorate","decorator","delegator","delegate","Object","keys","forEach","key","method","oldService","newService","mapValues","methodName","transformDatabaseErrors","args","call","error","some","errorToTransform","errors","ValidationError","message"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../src/services/entity-validator/validators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../src/services/entity-validator/validators.ts"],"names":[],"mappings":"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"}
@@ -321,14 +321,16 @@ const integerValidator = (metas, options)=>{
321
321
  return schema;
322
322
  };
323
323
  const floatValidator = (metas, options)=>{
324
- let schema = strapiUtils.yup.number().test('is-finite-number', '${path} must be a finite number', (value)=>value == null || isValidFiniteNumber(value));
324
+ let schema = strapiUtils.yup.number().test('is-finite-number', // eslint-disable-next-line no-template-curly-in-string -- Yup interpolates validation path placeholders.
325
+ '${path} must be a finite number', (value)=>value == null || isValidFiniteNumber(value));
325
326
  schema = addMinFloatValidator(schema, metas, options);
326
327
  schema = addMaxFloatValidator(schema, metas);
327
328
  schema = addUniqueValidator(schema, metas, options);
328
329
  return schema;
329
330
  };
330
331
  const bigintegerValidator = (metas, options)=>{
331
- const schema = strapiUtils.yup.mixed().transform((value, originalValue)=>toBigIntegerString(originalValue) ?? value).test('is-biginteger', '${path} must be a valid integer', (value)=>{
332
+ const schema = strapiUtils.yup.mixed().transform((value, originalValue)=>toBigIntegerString(originalValue) ?? value)// eslint-disable-next-line no-template-curly-in-string -- Yup interpolates validation path placeholders.
333
+ .test('is-biginteger', '${path} must be a valid integer', (value)=>{
332
334
  if (value == null) {
333
335
  return true;
334
336
  }