@strapi/core 0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e → 0.0.0-experimental.90ca9123352ed07e0a9cedaf4bcad1475e74137f

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

Potentially problematic release.


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

Files changed (262) hide show
  1. package/dist/Strapi.d.ts.map +1 -1
  2. package/dist/Strapi.js +7 -3
  3. package/dist/Strapi.js.map +1 -1
  4. package/dist/Strapi.mjs +6 -2
  5. package/dist/Strapi.mjs.map +1 -1
  6. package/dist/core-api/controller/collection-type.d.ts +1 -1
  7. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  8. package/dist/core-api/controller/collection-type.js +9 -20
  9. package/dist/core-api/controller/collection-type.js.map +1 -1
  10. package/dist/core-api/controller/collection-type.mjs +8 -20
  11. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  12. package/dist/core-api/controller/index.d.ts.map +1 -1
  13. package/dist/core-api/controller/index.js +2 -2
  14. package/dist/core-api/controller/index.js.map +1 -1
  15. package/dist/core-api/controller/index.mjs +2 -2
  16. package/dist/core-api/controller/index.mjs.map +1 -1
  17. package/dist/core-api/controller/single-type.d.ts +1 -1
  18. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  19. package/dist/core-api/controller/single-type.js +6 -11
  20. package/dist/core-api/controller/single-type.js.map +1 -1
  21. package/dist/core-api/controller/single-type.mjs +5 -11
  22. package/dist/core-api/controller/single-type.mjs.map +1 -1
  23. package/dist/core-api/controller/transform.d.ts +2 -11
  24. package/dist/core-api/controller/transform.d.ts.map +1 -1
  25. package/dist/core-api/controller/transform.js +2 -16
  26. package/dist/core-api/controller/transform.js.map +1 -1
  27. package/dist/core-api/controller/transform.mjs +2 -16
  28. package/dist/core-api/controller/transform.mjs.map +1 -1
  29. package/dist/core-api/service/collection-type.d.ts +28 -5
  30. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  31. package/dist/core-api/service/collection-type.js +47 -49
  32. package/dist/core-api/service/collection-type.js.map +1 -1
  33. package/dist/core-api/service/collection-type.mjs +47 -50
  34. package/dist/core-api/service/collection-type.mjs.map +1 -1
  35. package/dist/core-api/service/core-service.d.ts +4 -0
  36. package/dist/core-api/service/core-service.d.ts.map +1 -0
  37. package/dist/core-api/service/core-service.js +12 -0
  38. package/dist/core-api/service/core-service.js.map +1 -0
  39. package/dist/core-api/service/core-service.mjs +12 -0
  40. package/dist/core-api/service/core-service.mjs.map +1 -0
  41. package/dist/core-api/service/index.js +2 -2
  42. package/dist/core-api/service/index.js.map +1 -1
  43. package/dist/core-api/service/index.mjs +4 -4
  44. package/dist/core-api/service/index.mjs.map +1 -1
  45. package/dist/core-api/service/pagination.d.ts +1 -5
  46. package/dist/core-api/service/pagination.d.ts.map +1 -1
  47. package/dist/core-api/service/pagination.js +0 -11
  48. package/dist/core-api/service/pagination.js.map +1 -1
  49. package/dist/core-api/service/pagination.mjs +0 -11
  50. package/dist/core-api/service/pagination.mjs.map +1 -1
  51. package/dist/core-api/service/single-type.d.ts +13 -8
  52. package/dist/core-api/service/single-type.d.ts.map +1 -1
  53. package/dist/core-api/service/single-type.js +25 -51
  54. package/dist/core-api/service/single-type.js.map +1 -1
  55. package/dist/core-api/service/single-type.mjs +24 -51
  56. package/dist/core-api/service/single-type.mjs.map +1 -1
  57. package/dist/factories.d.ts.map +1 -1
  58. package/dist/factories.js +2 -12
  59. package/dist/factories.js.map +1 -1
  60. package/dist/factories.mjs +2 -12
  61. package/dist/factories.mjs.map +1 -1
  62. package/dist/registries/content-types.d.ts.map +1 -1
  63. package/dist/registries/content-types.js +1 -2
  64. package/dist/registries/content-types.js.map +1 -1
  65. package/dist/registries/content-types.mjs +1 -2
  66. package/dist/registries/content-types.mjs.map +1 -1
  67. package/dist/services/document-service/collection-type.d.ts +4 -0
  68. package/dist/services/document-service/collection-type.d.ts.map +1 -0
  69. package/dist/services/document-service/collection-type.js +145 -0
  70. package/dist/services/document-service/collection-type.js.map +1 -0
  71. package/dist/services/document-service/collection-type.mjs +145 -0
  72. package/dist/services/document-service/collection-type.mjs.map +1 -0
  73. package/dist/services/document-service/common.d.ts +4 -0
  74. package/dist/services/document-service/common.d.ts.map +1 -0
  75. package/dist/services/document-service/common.js +7 -0
  76. package/dist/services/document-service/common.js.map +1 -0
  77. package/dist/services/document-service/common.mjs +7 -0
  78. package/dist/services/document-service/common.mjs.map +1 -0
  79. package/dist/services/document-service/document-engine.d.ts.map +1 -1
  80. package/dist/services/document-service/document-engine.js +130 -81
  81. package/dist/services/document-service/document-engine.js.map +1 -1
  82. package/dist/services/document-service/document-engine.mjs +125 -76
  83. package/dist/services/document-service/document-engine.mjs.map +1 -1
  84. package/dist/services/document-service/draft-and-publish.d.ts +24 -0
  85. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -0
  86. package/dist/services/document-service/draft-and-publish.js +41 -0
  87. package/dist/services/document-service/draft-and-publish.js.map +1 -0
  88. package/dist/services/document-service/draft-and-publish.mjs +41 -0
  89. package/dist/services/document-service/draft-and-publish.mjs.map +1 -0
  90. package/dist/services/document-service/{document-service.d.ts → index.d.ts} +2 -4
  91. package/dist/services/document-service/index.d.ts.map +1 -0
  92. package/dist/services/document-service/index.js +22 -0
  93. package/dist/services/document-service/index.js.map +1 -0
  94. package/dist/services/document-service/index.mjs +22 -0
  95. package/dist/services/document-service/index.mjs.map +1 -0
  96. package/dist/services/document-service/internationalization.d.ts +7 -0
  97. package/dist/services/document-service/internationalization.d.ts.map +1 -0
  98. package/dist/services/document-service/internationalization.js +40 -0
  99. package/dist/services/document-service/internationalization.js.map +1 -0
  100. package/dist/services/document-service/internationalization.mjs +40 -0
  101. package/dist/services/document-service/internationalization.mjs.map +1 -0
  102. package/dist/services/document-service/middlewares.d.ts +8 -0
  103. package/dist/services/document-service/middlewares.d.ts.map +1 -0
  104. package/dist/services/document-service/middlewares.js +46 -0
  105. package/dist/services/document-service/middlewares.js.map +1 -0
  106. package/dist/services/document-service/middlewares.mjs +46 -0
  107. package/dist/services/document-service/middlewares.mjs.map +1 -0
  108. package/dist/services/document-service/repository-factory.d.ts +3 -0
  109. package/dist/services/document-service/repository-factory.d.ts.map +1 -0
  110. package/dist/services/document-service/repository-factory.js +12 -0
  111. package/dist/services/document-service/repository-factory.js.map +1 -0
  112. package/dist/services/document-service/repository-factory.mjs +12 -0
  113. package/dist/services/document-service/repository-factory.mjs.map +1 -0
  114. package/dist/services/document-service/single-type.d.ts +4 -0
  115. package/dist/services/document-service/single-type.d.ts.map +1 -0
  116. package/dist/services/document-service/single-type.js +92 -0
  117. package/dist/services/document-service/single-type.js.map +1 -0
  118. package/dist/services/document-service/single-type.mjs +92 -0
  119. package/dist/services/document-service/single-type.mjs.map +1 -0
  120. package/dist/services/document-service/transform/data.d.ts +5 -0
  121. package/dist/services/document-service/transform/data.d.ts.map +1 -0
  122. package/dist/services/document-service/transform/data.js +13 -0
  123. package/dist/services/document-service/transform/data.js.map +1 -0
  124. package/dist/services/document-service/transform/data.mjs +13 -0
  125. package/dist/services/document-service/transform/data.mjs.map +1 -0
  126. package/dist/services/document-service/transform/fields.d.ts +5 -0
  127. package/dist/services/document-service/transform/fields.d.ts.map +1 -0
  128. package/dist/services/document-service/transform/fields.js +23 -0
  129. package/dist/services/document-service/transform/fields.js.map +1 -0
  130. package/dist/services/document-service/transform/fields.mjs +23 -0
  131. package/dist/services/document-service/transform/fields.mjs.map +1 -0
  132. package/dist/services/document-service/transform/filters.d.ts +3 -0
  133. package/dist/services/document-service/transform/filters.d.ts.map +1 -0
  134. package/dist/services/document-service/transform/filters.js +49 -0
  135. package/dist/services/document-service/transform/filters.js.map +1 -0
  136. package/dist/services/document-service/transform/filters.mjs +49 -0
  137. package/dist/services/document-service/transform/filters.mjs.map +1 -0
  138. package/dist/services/document-service/transform/id-map.d.ts +23 -0
  139. package/dist/services/document-service/transform/id-map.d.ts.map +1 -0
  140. package/dist/services/document-service/transform/id-map.js +72 -0
  141. package/dist/services/document-service/transform/id-map.js.map +1 -0
  142. package/dist/services/document-service/transform/id-map.mjs +72 -0
  143. package/dist/services/document-service/transform/id-map.mjs.map +1 -0
  144. package/dist/services/document-service/transform/id-transform.d.ts +26 -0
  145. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -0
  146. package/dist/services/document-service/transform/id-transform.js +57 -0
  147. package/dist/services/document-service/transform/id-transform.js.map +1 -0
  148. package/dist/services/document-service/transform/id-transform.mjs +57 -0
  149. package/dist/services/document-service/transform/id-transform.mjs.map +1 -0
  150. package/dist/services/document-service/transform/populate.d.ts +3 -0
  151. package/dist/services/document-service/transform/populate.d.ts.map +1 -0
  152. package/dist/services/document-service/transform/populate.js +31 -0
  153. package/dist/services/document-service/transform/populate.js.map +1 -0
  154. package/dist/services/document-service/transform/populate.mjs +31 -0
  155. package/dist/services/document-service/transform/populate.mjs.map +1 -0
  156. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +13 -0
  157. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -0
  158. package/dist/services/document-service/transform/relations/extract/data-ids.js +76 -0
  159. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -0
  160. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +76 -0
  161. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -0
  162. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts +10 -0
  163. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -0
  164. package/dist/services/document-service/transform/relations/transform/data-ids.js +115 -0
  165. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -0
  166. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +115 -0
  167. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -0
  168. package/dist/services/document-service/transform/relations/transform/output-ids.d.ts +4 -0
  169. package/dist/services/document-service/transform/relations/transform/output-ids.d.ts.map +1 -0
  170. package/dist/services/document-service/transform/relations/transform/output-ids.js +26 -0
  171. package/dist/services/document-service/transform/relations/transform/output-ids.js.map +1 -0
  172. package/dist/services/document-service/transform/relations/transform/output-ids.mjs +26 -0
  173. package/dist/services/document-service/transform/relations/transform/output-ids.mjs.map +1 -0
  174. package/dist/services/document-service/transform/relations/utils/data.d.ts +6 -0
  175. package/dist/services/document-service/transform/relations/utils/data.d.ts.map +1 -0
  176. package/dist/services/document-service/transform/relations/utils/data.js +12 -0
  177. package/dist/services/document-service/transform/relations/utils/data.js.map +1 -0
  178. package/dist/services/document-service/transform/relations/utils/data.mjs +12 -0
  179. package/dist/services/document-service/transform/relations/utils/data.mjs.map +1 -0
  180. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +10 -0
  181. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -0
  182. package/dist/services/document-service/transform/relations/utils/i18n.js +31 -0
  183. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -0
  184. package/dist/services/document-service/transform/relations/utils/i18n.mjs +31 -0
  185. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -0
  186. package/dist/services/document-service/transform/relations/utils/types.d.ts +8 -0
  187. package/dist/services/document-service/transform/relations/utils/types.d.ts.map +1 -0
  188. package/dist/services/document-service/transform/sort.d.ts +5 -0
  189. package/dist/services/document-service/transform/sort.d.ts.map +1 -0
  190. package/dist/services/document-service/transform/sort.js +44 -0
  191. package/dist/services/document-service/transform/sort.js.map +1 -0
  192. package/dist/services/document-service/transform/sort.mjs +44 -0
  193. package/dist/services/document-service/transform/sort.mjs.map +1 -0
  194. package/dist/services/document-service/transform/types.d.ts +13 -0
  195. package/dist/services/document-service/transform/types.d.ts.map +1 -0
  196. package/dist/services/document-service/transform/utils.d.ts +9 -0
  197. package/dist/services/document-service/transform/utils.d.ts.map +1 -0
  198. package/dist/services/document-service/transform/utils.js +23 -0
  199. package/dist/services/document-service/transform/utils.js.map +1 -0
  200. package/dist/services/document-service/transform/utils.mjs +23 -0
  201. package/dist/services/document-service/transform/utils.mjs.map +1 -0
  202. package/dist/services/document-service/utils/populate.d.ts +3 -0
  203. package/dist/services/document-service/utils/populate.d.ts.map +1 -0
  204. package/dist/services/document-service/utils/populate.js +41 -0
  205. package/dist/services/document-service/utils/populate.js.map +1 -0
  206. package/dist/services/document-service/utils/populate.mjs +41 -0
  207. package/dist/services/document-service/utils/populate.mjs.map +1 -0
  208. package/dist/services/entity-validator/blocks-validator.d.ts.map +1 -1
  209. package/dist/services/entity-validator/blocks-validator.js +22 -2
  210. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  211. package/dist/services/entity-validator/blocks-validator.mjs +22 -2
  212. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  213. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  214. package/dist/services/entity-validator/validators.js +7 -8
  215. package/dist/services/entity-validator/validators.js.map +1 -1
  216. package/dist/services/entity-validator/validators.mjs +7 -8
  217. package/dist/services/entity-validator/validators.mjs.map +1 -1
  218. package/dist/services/server/compose-endpoint.d.ts.map +1 -1
  219. package/dist/services/server/compose-endpoint.js +3 -0
  220. package/dist/services/server/compose-endpoint.js.map +1 -1
  221. package/dist/services/server/compose-endpoint.mjs +3 -0
  222. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  223. package/dist/services/webhook-store.js +2 -2
  224. package/dist/services/webhook-store.js.map +1 -1
  225. package/dist/services/webhook-store.mjs +2 -2
  226. package/dist/services/webhook-store.mjs.map +1 -1
  227. package/package.json +14 -14
  228. package/dist/core-api/service/get-fetch-params.d.ts +0 -7
  229. package/dist/core-api/service/get-fetch-params.d.ts.map +0 -1
  230. package/dist/core-api/service/get-fetch-params.js +0 -14
  231. package/dist/core-api/service/get-fetch-params.js.map +0 -1
  232. package/dist/core-api/service/get-fetch-params.mjs +0 -14
  233. package/dist/core-api/service/get-fetch-params.mjs.map +0 -1
  234. package/dist/services/document-service/document-service.d.ts.map +0 -1
  235. package/dist/services/document-service/document-service.js +0 -132
  236. package/dist/services/document-service/document-service.js.map +0 -1
  237. package/dist/services/document-service/document-service.mjs +0 -132
  238. package/dist/services/document-service/document-service.mjs.map +0 -1
  239. package/dist/services/document-service/middlewares/defaults/draft-and-publish.d.ts +0 -26
  240. package/dist/services/document-service/middlewares/defaults/draft-and-publish.d.ts.map +0 -1
  241. package/dist/services/document-service/middlewares/defaults/draft-and-publish.js +0 -58
  242. package/dist/services/document-service/middlewares/defaults/draft-and-publish.js.map +0 -1
  243. package/dist/services/document-service/middlewares/defaults/draft-and-publish.mjs +0 -58
  244. package/dist/services/document-service/middlewares/defaults/draft-and-publish.mjs.map +0 -1
  245. package/dist/services/document-service/middlewares/defaults/index.d.ts +0 -3
  246. package/dist/services/document-service/middlewares/defaults/index.d.ts.map +0 -1
  247. package/dist/services/document-service/middlewares/defaults/index.js +0 -82
  248. package/dist/services/document-service/middlewares/defaults/index.js.map +0 -1
  249. package/dist/services/document-service/middlewares/defaults/index.mjs +0 -82
  250. package/dist/services/document-service/middlewares/defaults/index.mjs.map +0 -1
  251. package/dist/services/document-service/middlewares/defaults/locales.d.ts +0 -18
  252. package/dist/services/document-service/middlewares/defaults/locales.d.ts.map +0 -1
  253. package/dist/services/document-service/middlewares/defaults/locales.js +0 -50
  254. package/dist/services/document-service/middlewares/defaults/locales.js.map +0 -1
  255. package/dist/services/document-service/middlewares/defaults/locales.mjs +0 -50
  256. package/dist/services/document-service/middlewares/defaults/locales.mjs.map +0 -1
  257. package/dist/services/document-service/middlewares/index.d.ts +0 -11
  258. package/dist/services/document-service/middlewares/index.d.ts.map +0 -1
  259. package/dist/services/document-service/middlewares/index.js +0 -59
  260. package/dist/services/document-service/middlewares/index.js.map +0 -1
  261. package/dist/services/document-service/middlewares/index.mjs +0 -59
  262. package/dist/services/document-service/middlewares/index.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/filters.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAyBlD,eAAO,MAAM,gBAAgB,SAAgB,IAAI,QAAQ,OAAO,qBAqC/D,CAAC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const strapiUtils = require("@strapi/utils");
4
+ const fields = require("./fields.js");
5
+ const utils = require("./utils.js");
6
+ const logicalOperatorIdReplacement = (filter) => {
7
+ return Object.keys(filter).forEach((key) => {
8
+ if (key.startsWith("$")) {
9
+ if (Array.isArray(filter[key])) {
10
+ filter[key].forEach((item) => {
11
+ if (typeof item === "object") {
12
+ logicalOperatorIdReplacement(item);
13
+ }
14
+ });
15
+ } else if (typeof filter[key] === "object") {
16
+ logicalOperatorIdReplacement(filter[key]);
17
+ }
18
+ } else if (key === "id") {
19
+ utils.switchDocumentIdForId(filter);
20
+ }
21
+ });
22
+ };
23
+ const transformFilters = async (data, opts) => {
24
+ utils.switchDocumentIdForId(data);
25
+ logicalOperatorIdReplacement(data);
26
+ return strapiUtils.traverse.traverseQueryFilters(
27
+ async ({ attribute, key, value }, { set }) => {
28
+ if (!attribute || !value) {
29
+ return;
30
+ }
31
+ if (attribute.type === "relation") {
32
+ (Array.isArray(value) ? value : [value]).forEach((item) => {
33
+ if (typeof item === "object") {
34
+ logicalOperatorIdReplacement(item);
35
+ }
36
+ });
37
+ set(key, value);
38
+ } else if (key === "filters") {
39
+ set(key, await transformFilters(value, opts));
40
+ } else if (key === "fields") {
41
+ set(key, fields.transformFields(value));
42
+ }
43
+ },
44
+ { schema: strapi.getModel(opts.uid) },
45
+ data
46
+ );
47
+ };
48
+ exports.transformFilters = transformFilters;
49
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sources":["../../../../src/services/document-service/transform/filters.ts"],"sourcesContent":["import { traverse } from '@strapi/utils';\nimport { transformFields } from './fields';\n\nimport { type Data, type Options } from './types';\nimport { switchDocumentIdForId } from './utils';\n\nconst logicalOperatorIdReplacement = (filter: Data) => {\n return Object.keys(filter).forEach((key) => {\n // If the key is a logical operator ($and, $or, $nor)\n // recursively call this function on the value of the key\n // To find any nested ids that need to be replaced\n if (key.startsWith('$')) {\n if (Array.isArray(filter[key])) {\n filter[key].forEach((item: Data) => {\n if (typeof item === 'object') {\n logicalOperatorIdReplacement(item);\n }\n });\n } else if (typeof filter[key] === 'object') {\n logicalOperatorIdReplacement(filter[key]);\n }\n } else if (key === 'id') {\n // If the key is 'id', replace it with 'documentId'\n switchDocumentIdForId(filter);\n }\n });\n};\n\nexport const transformFilters = async (data: Data, opts: Options) => {\n // Before doing the filters traversal change any top level 'id' properties to 'documentId'\n switchDocumentIdForId(data);\n logicalOperatorIdReplacement(data);\n\n return traverse.traverseQueryFilters(\n async ({ attribute, key, value }, { set }) => {\n if (!attribute || !value) {\n return;\n }\n\n if (attribute.type === 'relation') {\n /*\n If the attribute is a relation\n and the value is an object\n and the object contains an id field\n then we replace the value with the documentId\n \n If the value is an array of objects\n we apply the same logic to each object in the array\n */\n (Array.isArray(value) ? value : [value]).forEach((item) => {\n if (typeof item === 'object') {\n logicalOperatorIdReplacement(item as Data);\n }\n });\n\n set(key, value);\n } else if (key === 'filters') {\n set(key, await transformFilters(value as any, opts));\n } else if (key === 'fields') {\n set(key, transformFields(value as any) as any);\n }\n },\n { schema: strapi.getModel(opts.uid) },\n data\n );\n};\n"],"names":["switchDocumentIdForId","traverse","transformFields"],"mappings":";;;;;AAMA,MAAM,+BAA+B,CAAC,WAAiB;AACrD,SAAO,OAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,QAAQ;AAItC,QAAA,IAAI,WAAW,GAAG,GAAG;AACvB,UAAI,MAAM,QAAQ,OAAO,GAAG,CAAC,GAAG;AAC9B,eAAO,GAAG,EAAE,QAAQ,CAAC,SAAe;AAC9B,cAAA,OAAO,SAAS,UAAU;AAC5B,yCAA6B,IAAI;AAAA,UACnC;AAAA,QAAA,CACD;AAAA,MACQ,WAAA,OAAO,OAAO,GAAG,MAAM,UAAU;AACb,qCAAA,OAAO,GAAG,CAAC;AAAA,MAC1C;AAAA,IAAA,WACS,QAAQ,MAAM;AAEvBA,YAAA,sBAAsB,MAAM;AAAA,IAC9B;AAAA,EAAA,CACD;AACH;AAEa,MAAA,mBAAmB,OAAO,MAAY,SAAkB;AAEnEA,QAAA,sBAAsB,IAAI;AAC1B,+BAA6B,IAAI;AAEjC,SAAOC,YAAS,SAAA;AAAA,IACd,OAAO,EAAE,WAAW,KAAK,SAAS,EAAE,UAAU;AACxC,UAAA,CAAC,aAAa,CAAC,OAAO;AACxB;AAAA,MACF;AAEI,UAAA,UAAU,SAAS,YAAY;AAUhC,SAAA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,SAAS;AACrD,cAAA,OAAO,SAAS,UAAU;AAC5B,yCAA6B,IAAY;AAAA,UAC3C;AAAA,QAAA,CACD;AAED,YAAI,KAAK,KAAK;AAAA,MAAA,WACL,QAAQ,WAAW;AAC5B,YAAI,KAAK,MAAM,iBAAiB,OAAc,IAAI,CAAC;AAAA,MAAA,WAC1C,QAAQ,UAAU;AACvB,YAAA,KAAKC,uBAAgB,KAAY,CAAQ;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,EAAE,QAAQ,OAAO,SAAS,KAAK,GAAG,EAAE;AAAA,IACpC;AAAA,EAAA;AAEJ;;"}
@@ -0,0 +1,49 @@
1
+ import { traverse } from "@strapi/utils";
2
+ import { transformFields } from "./fields.mjs";
3
+ import { switchDocumentIdForId } from "./utils.mjs";
4
+ const logicalOperatorIdReplacement = (filter) => {
5
+ return Object.keys(filter).forEach((key) => {
6
+ if (key.startsWith("$")) {
7
+ if (Array.isArray(filter[key])) {
8
+ filter[key].forEach((item) => {
9
+ if (typeof item === "object") {
10
+ logicalOperatorIdReplacement(item);
11
+ }
12
+ });
13
+ } else if (typeof filter[key] === "object") {
14
+ logicalOperatorIdReplacement(filter[key]);
15
+ }
16
+ } else if (key === "id") {
17
+ switchDocumentIdForId(filter);
18
+ }
19
+ });
20
+ };
21
+ const transformFilters = async (data, opts) => {
22
+ switchDocumentIdForId(data);
23
+ logicalOperatorIdReplacement(data);
24
+ return traverse.traverseQueryFilters(
25
+ async ({ attribute, key, value }, { set }) => {
26
+ if (!attribute || !value) {
27
+ return;
28
+ }
29
+ if (attribute.type === "relation") {
30
+ (Array.isArray(value) ? value : [value]).forEach((item) => {
31
+ if (typeof item === "object") {
32
+ logicalOperatorIdReplacement(item);
33
+ }
34
+ });
35
+ set(key, value);
36
+ } else if (key === "filters") {
37
+ set(key, await transformFilters(value, opts));
38
+ } else if (key === "fields") {
39
+ set(key, transformFields(value));
40
+ }
41
+ },
42
+ { schema: strapi.getModel(opts.uid) },
43
+ data
44
+ );
45
+ };
46
+ export {
47
+ transformFilters
48
+ };
49
+ //# sourceMappingURL=filters.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.mjs","sources":["../../../../src/services/document-service/transform/filters.ts"],"sourcesContent":["import { traverse } from '@strapi/utils';\nimport { transformFields } from './fields';\n\nimport { type Data, type Options } from './types';\nimport { switchDocumentIdForId } from './utils';\n\nconst logicalOperatorIdReplacement = (filter: Data) => {\n return Object.keys(filter).forEach((key) => {\n // If the key is a logical operator ($and, $or, $nor)\n // recursively call this function on the value of the key\n // To find any nested ids that need to be replaced\n if (key.startsWith('$')) {\n if (Array.isArray(filter[key])) {\n filter[key].forEach((item: Data) => {\n if (typeof item === 'object') {\n logicalOperatorIdReplacement(item);\n }\n });\n } else if (typeof filter[key] === 'object') {\n logicalOperatorIdReplacement(filter[key]);\n }\n } else if (key === 'id') {\n // If the key is 'id', replace it with 'documentId'\n switchDocumentIdForId(filter);\n }\n });\n};\n\nexport const transformFilters = async (data: Data, opts: Options) => {\n // Before doing the filters traversal change any top level 'id' properties to 'documentId'\n switchDocumentIdForId(data);\n logicalOperatorIdReplacement(data);\n\n return traverse.traverseQueryFilters(\n async ({ attribute, key, value }, { set }) => {\n if (!attribute || !value) {\n return;\n }\n\n if (attribute.type === 'relation') {\n /*\n If the attribute is a relation\n and the value is an object\n and the object contains an id field\n then we replace the value with the documentId\n \n If the value is an array of objects\n we apply the same logic to each object in the array\n */\n (Array.isArray(value) ? value : [value]).forEach((item) => {\n if (typeof item === 'object') {\n logicalOperatorIdReplacement(item as Data);\n }\n });\n\n set(key, value);\n } else if (key === 'filters') {\n set(key, await transformFilters(value as any, opts));\n } else if (key === 'fields') {\n set(key, transformFields(value as any) as any);\n }\n },\n { schema: strapi.getModel(opts.uid) },\n data\n );\n};\n"],"names":[],"mappings":";;;AAMA,MAAM,+BAA+B,CAAC,WAAiB;AACrD,SAAO,OAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,QAAQ;AAItC,QAAA,IAAI,WAAW,GAAG,GAAG;AACvB,UAAI,MAAM,QAAQ,OAAO,GAAG,CAAC,GAAG;AAC9B,eAAO,GAAG,EAAE,QAAQ,CAAC,SAAe;AAC9B,cAAA,OAAO,SAAS,UAAU;AAC5B,yCAA6B,IAAI;AAAA,UACnC;AAAA,QAAA,CACD;AAAA,MACQ,WAAA,OAAO,OAAO,GAAG,MAAM,UAAU;AACb,qCAAA,OAAO,GAAG,CAAC;AAAA,MAC1C;AAAA,IAAA,WACS,QAAQ,MAAM;AAEvB,4BAAsB,MAAM;AAAA,IAC9B;AAAA,EAAA,CACD;AACH;AAEa,MAAA,mBAAmB,OAAO,MAAY,SAAkB;AAEnE,wBAAsB,IAAI;AAC1B,+BAA6B,IAAI;AAEjC,SAAO,SAAS;AAAA,IACd,OAAO,EAAE,WAAW,KAAK,SAAS,EAAE,UAAU;AACxC,UAAA,CAAC,aAAa,CAAC,OAAO;AACxB;AAAA,MACF;AAEI,UAAA,UAAU,SAAS,YAAY;AAUhC,SAAA,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,SAAS;AACrD,cAAA,OAAO,SAAS,UAAU;AAC5B,yCAA6B,IAAY;AAAA,UAC3C;AAAA,QAAA,CACD;AAED,YAAI,KAAK,KAAK;AAAA,MAAA,WACL,QAAQ,WAAW;AAC5B,YAAI,KAAK,MAAM,iBAAiB,OAAc,IAAI,CAAC;AAAA,MAAA,WAC1C,QAAQ,UAAU;AACvB,YAAA,KAAK,gBAAgB,KAAY,CAAQ;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,EAAE,QAAQ,OAAO,SAAS,KAAK,GAAG,EAAE;AAAA,IACpC;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,23 @@
1
+ import { Strapi, Entity } from '@strapi/types';
2
+ interface KeyFields {
3
+ uid: string;
4
+ documentId: Entity.ID;
5
+ locale?: string | null;
6
+ isDraft?: boolean;
7
+ }
8
+ export interface IdMap {
9
+ loadedIds: Map<string, string>;
10
+ toLoadIds: Map<string, KeyFields>;
11
+ add(keys: KeyFields): void;
12
+ load(): Promise<void>;
13
+ get(keys: KeyFields): string | undefined;
14
+ clear(): void;
15
+ }
16
+ /**
17
+ * Holds a registry of document ids and their corresponding entity ids.
18
+ */
19
+ declare const createIdMap: ({ strapi }: {
20
+ strapi: Strapi;
21
+ }) => IdMap;
22
+ export { createIdMap };
23
+ //# sourceMappingURL=id-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-map.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/id-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAmB/C,UAAU,SAAS;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;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;YAA0B,MAAM;MAAK,KA+ErD,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const strapiUtils = require("@strapi/utils");
4
+ const encodeKey = (obj) => {
5
+ const keys = Object.keys(obj).sort();
6
+ return keys.map((key) => `${key}:::${obj[key]}`).join("&&");
7
+ };
8
+ const createIdMap = ({ strapi }) => {
9
+ const loadedIds = /* @__PURE__ */ new Map();
10
+ const toLoadIds = /* @__PURE__ */ new Map();
11
+ return {
12
+ loadedIds,
13
+ toLoadIds,
14
+ /**
15
+ * Register a new document id and its corresponding entity id.
16
+ */
17
+ add(keyFields) {
18
+ const key = encodeKey({ isDraft: false, locale: null, ...keyFields });
19
+ if (loadedIds.has(key))
20
+ return;
21
+ if (toLoadIds.has(key))
22
+ return;
23
+ toLoadIds.set(key, keyFields);
24
+ },
25
+ /**
26
+ * Load all ids from the registry.
27
+ */
28
+ async load() {
29
+ const loadIdValues = Array.from(toLoadIds.values());
30
+ const idsByUidAndLocale = loadIdValues.reduce((acc, { documentId, ...rest }) => {
31
+ const key = encodeKey(rest);
32
+ const ids = acc[key] || { ...rest, documentIds: [] };
33
+ ids.documentIds.push(documentId);
34
+ return { ...acc, [key]: ids };
35
+ }, {});
36
+ await strapiUtils.mapAsync(
37
+ Object.values(idsByUidAndLocale),
38
+ async ({ uid, locale, documentIds, isDraft }) => {
39
+ const result = await strapi?.db?.query(uid).findMany({
40
+ select: ["id", "documentId", "locale", "publishedAt"],
41
+ where: {
42
+ documentId: { $in: documentIds },
43
+ locale,
44
+ publishedAt: isDraft ? null : { $ne: null }
45
+ }
46
+ });
47
+ result?.forEach(({ documentId, id, locale: locale2, publishedAt }) => {
48
+ const key = encodeKey({ documentId, uid, locale: locale2, isDraft: !publishedAt });
49
+ loadedIds.set(key, id);
50
+ });
51
+ }
52
+ );
53
+ toLoadIds.clear();
54
+ },
55
+ /**
56
+ * Get the entity id for a given document id.
57
+ */
58
+ get(keys) {
59
+ const key = encodeKey({ isDraft: false, locale: null, ...keys });
60
+ return loadedIds.get(key);
61
+ },
62
+ /**
63
+ * Clear the registry.
64
+ */
65
+ clear() {
66
+ loadedIds.clear();
67
+ toLoadIds.clear();
68
+ }
69
+ };
70
+ };
71
+ exports.createIdMap = createIdMap;
72
+ //# sourceMappingURL=id-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-map.js","sources":["../../../../src/services/document-service/transform/id-map.ts"],"sourcesContent":["import { Strapi, Entity } from '@strapi/types';\nimport { mapAsync } from '@strapi/utils';\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 // 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: Entity.ID;\n locale?: string | null;\n isDraft?: boolean;\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: 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({ isDraft: false, 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 mapAsync(\n Object.values(idsByUidAndLocale),\n async ({ uid, locale, documentIds, isDraft }: any) => {\n const result = await strapi?.db?.query(uid).findMany({\n select: ['id', 'documentId', 'locale', 'publishedAt'],\n where: {\n documentId: { $in: documentIds },\n locale,\n publishedAt: isDraft ? null : { $ne: null },\n },\n });\n\n // 3. Store result in loadedIds\n result?.forEach(({ documentId, id, locale, publishedAt }: any) => {\n const key = encodeKey({ documentId, uid, locale, isDraft: !publishedAt });\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({ isDraft: false, 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":["mapAsync","locale"],"mappings":";;;AAaA,MAAM,YAAY,CAAC,QAAa;AAE9B,QAAM,OAAO,OAAO,KAAK,GAAG,EAAE,KAAK;AACnC,SAAO,KAAK,IAAI,CAAC,QAAQ,GAAG,GAAG,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,KAAK,IAAI;AAC5D;AAsBA,MAAM,cAAc,CAAC,EAAE,aAAwC;AACvD,QAAA,gCAAgB;AAChB,QAAA,gCAAgB;AAEf,SAAA;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAIA,IAAI,WAAsB;AAClB,YAAA,MAAM,UAAU,EAAE,SAAS,OAAO,QAAQ,MAAM,GAAG,UAAA,CAAW;AAGhE,UAAA,UAAU,IAAI,GAAG;AAAG;AAEpB,UAAA,UAAU,IAAI,GAAG;AAAG;AAGd,gBAAA,IAAI,KAAK,SAAS;AAAA,IAC9B;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,OAAO;AAGX,YAAM,eAAe,MAAM,KAAK,UAAU,OAAQ,CAAA;AAG5C,YAAA,oBAAoB,aAAa,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW;AACxE,cAAA,MAAM,UAAU,IAAI;AACpB,cAAA,MAAM,IAAI,GAAG,KAAK,EAAE,GAAG,MAAM,aAAa,CAAA;AAC5C,YAAA,YAAY,KAAK,UAAU;AAC/B,eAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI;AAAA,MAC9B,GAAG,CAAE,CAAA;AAGC,YAAAA,YAAA;AAAA,QACJ,OAAO,OAAO,iBAAiB;AAAA,QAC/B,OAAO,EAAE,KAAK,QAAQ,aAAa,cAAmB;AACpD,gBAAM,SAAS,MAAM,QAAQ,IAAI,MAAM,GAAG,EAAE,SAAS;AAAA,YACnD,QAAQ,CAAC,MAAM,cAAc,UAAU,aAAa;AAAA,YACpD,OAAO;AAAA,cACL,YAAY,EAAE,KAAK,YAAY;AAAA,cAC/B;AAAA,cACA,aAAa,UAAU,OAAO,EAAE,KAAK,KAAK;AAAA,YAC5C;AAAA,UAAA,CACD;AAGO,kBAAA,QAAQ,CAAC,EAAE,YAAY,IAAI,QAAAC,SAAQ,kBAAuB;AAC1D,kBAAA,MAAM,UAAU,EAAE,YAAY,KAAK,QAAAA,SAAQ,SAAS,CAAC,YAAA,CAAa;AAC9D,sBAAA,IAAI,KAAK,EAAE;AAAA,UAAA,CACtB;AAAA,QACH;AAAA,MAAA;AAIF,gBAAU,MAAM;AAAA,IAClB;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,MAAiB;AACb,YAAA,MAAM,UAAU,EAAE,SAAS,OAAO,QAAQ,MAAM,GAAG,KAAA,CAAM;AACxD,aAAA,UAAU,IAAI,GAAG;AAAA,IAC1B;AAAA;AAAA;AAAA;AAAA,IAKA,QAAQ;AACN,gBAAU,MAAM;AAChB,gBAAU,MAAM;AAAA,IAClB;AAAA,EAAA;AAEJ;;"}
@@ -0,0 +1,72 @@
1
+ import { mapAsync } from "@strapi/utils";
2
+ const encodeKey = (obj) => {
3
+ const keys = Object.keys(obj).sort();
4
+ return keys.map((key) => `${key}:::${obj[key]}`).join("&&");
5
+ };
6
+ const createIdMap = ({ strapi }) => {
7
+ const loadedIds = /* @__PURE__ */ new Map();
8
+ const toLoadIds = /* @__PURE__ */ new Map();
9
+ return {
10
+ loadedIds,
11
+ toLoadIds,
12
+ /**
13
+ * Register a new document id and its corresponding entity id.
14
+ */
15
+ add(keyFields) {
16
+ const key = encodeKey({ isDraft: false, locale: null, ...keyFields });
17
+ if (loadedIds.has(key))
18
+ return;
19
+ if (toLoadIds.has(key))
20
+ return;
21
+ toLoadIds.set(key, keyFields);
22
+ },
23
+ /**
24
+ * Load all ids from the registry.
25
+ */
26
+ async load() {
27
+ const loadIdValues = Array.from(toLoadIds.values());
28
+ const idsByUidAndLocale = loadIdValues.reduce((acc, { documentId, ...rest }) => {
29
+ const key = encodeKey(rest);
30
+ const ids = acc[key] || { ...rest, documentIds: [] };
31
+ ids.documentIds.push(documentId);
32
+ return { ...acc, [key]: ids };
33
+ }, {});
34
+ await mapAsync(
35
+ Object.values(idsByUidAndLocale),
36
+ async ({ uid, locale, documentIds, isDraft }) => {
37
+ const result = await strapi?.db?.query(uid).findMany({
38
+ select: ["id", "documentId", "locale", "publishedAt"],
39
+ where: {
40
+ documentId: { $in: documentIds },
41
+ locale,
42
+ publishedAt: isDraft ? null : { $ne: null }
43
+ }
44
+ });
45
+ result?.forEach(({ documentId, id, locale: locale2, publishedAt }) => {
46
+ const key = encodeKey({ documentId, uid, locale: locale2, isDraft: !publishedAt });
47
+ loadedIds.set(key, id);
48
+ });
49
+ }
50
+ );
51
+ toLoadIds.clear();
52
+ },
53
+ /**
54
+ * Get the entity id for a given document id.
55
+ */
56
+ get(keys) {
57
+ const key = encodeKey({ isDraft: false, locale: null, ...keys });
58
+ return loadedIds.get(key);
59
+ },
60
+ /**
61
+ * Clear the registry.
62
+ */
63
+ clear() {
64
+ loadedIds.clear();
65
+ toLoadIds.clear();
66
+ }
67
+ };
68
+ };
69
+ export {
70
+ createIdMap
71
+ };
72
+ //# sourceMappingURL=id-map.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-map.mjs","sources":["../../../../src/services/document-service/transform/id-map.ts"],"sourcesContent":["import { Strapi, Entity } from '@strapi/types';\nimport { mapAsync } from '@strapi/utils';\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 // 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: Entity.ID;\n locale?: string | null;\n isDraft?: boolean;\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: 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({ isDraft: false, 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 mapAsync(\n Object.values(idsByUidAndLocale),\n async ({ uid, locale, documentIds, isDraft }: any) => {\n const result = await strapi?.db?.query(uid).findMany({\n select: ['id', 'documentId', 'locale', 'publishedAt'],\n where: {\n documentId: { $in: documentIds },\n locale,\n publishedAt: isDraft ? null : { $ne: null },\n },\n });\n\n // 3. Store result in loadedIds\n result?.forEach(({ documentId, id, locale, publishedAt }: any) => {\n const key = encodeKey({ documentId, uid, locale, isDraft: !publishedAt });\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({ isDraft: false, 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":["locale"],"mappings":";AAaA,MAAM,YAAY,CAAC,QAAa;AAE9B,QAAM,OAAO,OAAO,KAAK,GAAG,EAAE,KAAK;AACnC,SAAO,KAAK,IAAI,CAAC,QAAQ,GAAG,GAAG,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,KAAK,IAAI;AAC5D;AAsBA,MAAM,cAAc,CAAC,EAAE,aAAwC;AACvD,QAAA,gCAAgB;AAChB,QAAA,gCAAgB;AAEf,SAAA;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAIA,IAAI,WAAsB;AAClB,YAAA,MAAM,UAAU,EAAE,SAAS,OAAO,QAAQ,MAAM,GAAG,UAAA,CAAW;AAGhE,UAAA,UAAU,IAAI,GAAG;AAAG;AAEpB,UAAA,UAAU,IAAI,GAAG;AAAG;AAGd,gBAAA,IAAI,KAAK,SAAS;AAAA,IAC9B;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,OAAO;AAGX,YAAM,eAAe,MAAM,KAAK,UAAU,OAAQ,CAAA;AAG5C,YAAA,oBAAoB,aAAa,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW;AACxE,cAAA,MAAM,UAAU,IAAI;AACpB,cAAA,MAAM,IAAI,GAAG,KAAK,EAAE,GAAG,MAAM,aAAa,CAAA;AAC5C,YAAA,YAAY,KAAK,UAAU;AAC/B,eAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI;AAAA,MAC9B,GAAG,CAAE,CAAA;AAGC,YAAA;AAAA,QACJ,OAAO,OAAO,iBAAiB;AAAA,QAC/B,OAAO,EAAE,KAAK,QAAQ,aAAa,cAAmB;AACpD,gBAAM,SAAS,MAAM,QAAQ,IAAI,MAAM,GAAG,EAAE,SAAS;AAAA,YACnD,QAAQ,CAAC,MAAM,cAAc,UAAU,aAAa;AAAA,YACpD,OAAO;AAAA,cACL,YAAY,EAAE,KAAK,YAAY;AAAA,cAC/B;AAAA,cACA,aAAa,UAAU,OAAO,EAAE,KAAK,KAAK;AAAA,YAC5C;AAAA,UAAA,CACD;AAGO,kBAAA,QAAQ,CAAC,EAAE,YAAY,IAAI,QAAAA,SAAQ,kBAAuB;AAC1D,kBAAA,MAAM,UAAU,EAAE,YAAY,KAAK,QAAAA,SAAQ,SAAS,CAAC,YAAA,CAAa;AAC9D,sBAAA,IAAI,KAAK,EAAE;AAAA,UAAA,CACtB;AAAA,QACH;AAAA,MAAA;AAIF,gBAAU,MAAM;AAAA,IAClB;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,MAAiB;AACb,YAAA,MAAM,UAAU,EAAE,SAAS,OAAO,QAAQ,MAAM,GAAG,KAAA,CAAM;AACxD,aAAA,UAAU,IAAI,GAAG;AAAA,IAC1B;AAAA;AAAA;AAAA;AAAA,IAKA,QAAQ;AACN,gBAAU,MAAM;AAChB,gBAAU,MAAM;AAAA,IAClB;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,26 @@
1
+ import { Common } from '@strapi/types';
2
+ /**
3
+ * Transform input of a query to map document ids to entity ids.
4
+ */
5
+ declare function transformParamsDocumentId(uid: Common.UID.Schema, input: {
6
+ data?: any;
7
+ fields?: any;
8
+ filters?: any;
9
+ populate?: any;
10
+ sort?: any;
11
+ }, opts: {
12
+ locale?: string | null;
13
+ isDraft: boolean;
14
+ }): Promise<{
15
+ data: any;
16
+ fields: any;
17
+ filters: any;
18
+ populate: any;
19
+ sort: any;
20
+ }>;
21
+ /**
22
+ * Transform response of a query to map entity ids to document ids.
23
+ */
24
+ declare function transformOutputDocumentId(uid: Common.UID.Schema, output: Record<string, any> | Record<string, any>[]): Promise<any>;
25
+ export { transformParamsDocumentId, transformOutputDocumentId };
26
+ //# sourceMappingURL=id-transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-transform.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/id-transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAWvC;;GAEG;AACH,iBAAe,yBAAyB,CACtC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EACtB,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,CAAC;IAAC,OAAO,CAAC,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,EAC9E,IAAI,EAAE;IACJ,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;;;;;;GAoCF;AAED;;GAEG;AACH,iBAAe,yBAAyB,CACtC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,gBAepD;AAED,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const strapiUtils = require("@strapi/utils");
4
+ const _ = require("lodash/fp");
5
+ const outputIds = require("./relations/transform/output-ids.js");
6
+ const utils = require("./utils.js");
7
+ const filters = require("./filters.js");
8
+ const sort = require("./sort.js");
9
+ const fields = require("./fields.js");
10
+ const populate = require("./populate.js");
11
+ const data = require("./data.js");
12
+ async function transformParamsDocumentId(uid, input, opts) {
13
+ let data$1 = input.data;
14
+ if (input.data) {
15
+ data$1 = await data.transformData(input.data, { ...opts, uid });
16
+ }
17
+ let fields$1 = input.fields;
18
+ if (input.fields) {
19
+ fields$1 = fields.transformFields(input.fields);
20
+ }
21
+ let filters$1 = input.filters;
22
+ if (input.filters) {
23
+ filters$1 = await filters.transformFilters(input.filters, { ...opts, uid });
24
+ }
25
+ let populate$1 = input.populate;
26
+ if (input.populate) {
27
+ populate$1 = await populate.transformPopulate(input.populate, { ...opts, uid });
28
+ }
29
+ let sort$1 = input.sort;
30
+ if (input.sort) {
31
+ sort$1 = await sort.transformSort(input.sort, { ...opts, uid });
32
+ }
33
+ return {
34
+ ...input,
35
+ data: data$1,
36
+ fields: fields$1,
37
+ filters: filters$1,
38
+ populate: populate$1,
39
+ sort: sort$1
40
+ };
41
+ }
42
+ async function transformOutputDocumentId(uid, output) {
43
+ if (Array.isArray(output)) {
44
+ return strapiUtils.mapAsync(output, (o) => transformOutputDocumentId(uid, o));
45
+ }
46
+ if (!_.isObject(output) || !output?.documentId)
47
+ return output;
48
+ return strapiUtils.pipeAsync(
49
+ // Switch top level id -> documentId
50
+ utils.switchIdForDocumentId,
51
+ // Switch relations id -> documentId
52
+ (output2) => outputIds.transformOutputIds(uid, output2)
53
+ )(output);
54
+ }
55
+ exports.transformOutputDocumentId = transformOutputDocumentId;
56
+ exports.transformParamsDocumentId = transformParamsDocumentId;
57
+ //# sourceMappingURL=id-transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-transform.js","sources":["../../../../src/services/document-service/transform/id-transform.ts"],"sourcesContent":["import { Common } from '@strapi/types';\nimport { mapAsync, pipeAsync } from '@strapi/utils';\nimport { isObject } from 'lodash/fp';\nimport { transformOutputIds as transformRelationOutputIds } from './relations/transform/output-ids';\nimport { switchIdForDocumentId } from './utils';\nimport { transformFilters } from './filters';\nimport { transformSort } from './sort';\nimport { transformFields } from './fields';\nimport { transformPopulate } from './populate';\nimport { transformData } from './data';\n\n/**\n * Transform input of a query to map document ids to entity ids.\n */\nasync function transformParamsDocumentId(\n uid: Common.UID.Schema,\n input: { data?: any; fields?: any; filters?: any; populate?: any; sort?: any },\n opts: {\n locale?: string | null;\n isDraft: boolean;\n }\n) {\n let data = input.data;\n if (input.data) {\n data = await transformData(input.data, { ...opts, uid });\n }\n\n // Transform any relation ids to entity ids\n let fields = input.fields;\n if (input.fields) {\n fields = transformFields(input.fields);\n }\n\n let filters = input.filters;\n if (input.filters) {\n filters = await transformFilters(input.filters, { ...opts, uid });\n }\n\n let populate = input.populate;\n if (input.populate) {\n populate = await transformPopulate(input.populate, { ...opts, uid });\n }\n\n let sort = input.sort;\n if (input.sort) {\n sort = await transformSort(input.sort, { ...opts, uid });\n }\n\n return {\n ...input,\n data,\n fields,\n filters,\n populate,\n sort,\n };\n}\n\n/**\n * Transform response of a query to map entity ids to document ids.\n */\nasync function transformOutputDocumentId(\n uid: Common.UID.Schema,\n output: Record<string, any> | Record<string, any>[]\n) {\n if (Array.isArray(output)) {\n return mapAsync(output, (o: Record<string, any>) => transformOutputDocumentId(uid, o));\n }\n\n // TODO: Ensure we always have documentId on output\n if (!isObject(output) || !output?.documentId) return output;\n\n return pipeAsync(\n // Switch top level id -> documentId\n switchIdForDocumentId,\n // Switch relations id -> documentId\n (output) => transformRelationOutputIds(uid, output)\n )(output);\n}\n\nexport { transformParamsDocumentId, transformOutputDocumentId };\n"],"names":["data","transformData","fields","transformFields","filters","transformFilters","populate","transformPopulate","sort","transformSort","mapAsync","isObject","pipeAsync","switchIdForDocumentId","output","transformRelationOutputIds"],"mappings":";;;;;;;;;;;AAcA,eAAe,0BACb,KACA,OACA,MAIA;AACA,MAAIA,SAAO,MAAM;AACjB,MAAI,MAAM,MAAM;AACPA,aAAA,MAAMC,mBAAc,MAAM,MAAM,EAAE,GAAG,MAAM,KAAK;AAAA,EACzD;AAGA,MAAIC,WAAS,MAAM;AACnB,MAAI,MAAM,QAAQ;AACPA,eAAAC,OAAA,gBAAgB,MAAM,MAAM;AAAA,EACvC;AAEA,MAAIC,YAAU,MAAM;AACpB,MAAI,MAAM,SAAS;AACPA,gBAAA,MAAMC,yBAAiB,MAAM,SAAS,EAAE,GAAG,MAAM,KAAK;AAAA,EAClE;AAEA,MAAIC,aAAW,MAAM;AACrB,MAAI,MAAM,UAAU;AACPA,iBAAA,MAAMC,2BAAkB,MAAM,UAAU,EAAE,GAAG,MAAM,KAAK;AAAA,EACrE;AAEA,MAAIC,SAAO,MAAM;AACjB,MAAI,MAAM,MAAM;AACPA,aAAA,MAAMC,mBAAc,MAAM,MAAM,EAAE,GAAG,MAAM,KAAK;AAAA,EACzD;AAEO,SAAA;AAAA,IACL,GAAG;AAAA,IAAA,MACHT;AAAAA,IAAA,QACAE;AAAAA,IAAA,SACAE;AAAAA,IAAA,UACAE;AAAAA,IAAA,MACAE;AAAAA,EAAA;AAEJ;AAKA,eAAe,0BACb,KACA,QACA;AACI,MAAA,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAOE,YAAAA,SAAS,QAAQ,CAAC,MAA2B,0BAA0B,KAAK,CAAC,CAAC;AAAA,EACvF;AAGA,MAAI,CAACC,EAAAA,SAAS,MAAM,KAAK,CAAC,QAAQ;AAAmB,WAAA;AAE9C,SAAAC,YAAA;AAAA;AAAA,IAELC,MAAA;AAAA;AAAA,IAEA,CAACC,YAAWC,UAAAA,mBAA2B,KAAKD,OAAM;AAAA,IAClD,MAAM;AACV;;;"}
@@ -0,0 +1,57 @@
1
+ import { mapAsync, pipeAsync } from "@strapi/utils";
2
+ import { isObject } from "lodash/fp";
3
+ import { transformOutputIds } from "./relations/transform/output-ids.mjs";
4
+ import { switchIdForDocumentId } from "./utils.mjs";
5
+ import { transformFilters } from "./filters.mjs";
6
+ import { transformSort } from "./sort.mjs";
7
+ import { transformFields } from "./fields.mjs";
8
+ import { transformPopulate } from "./populate.mjs";
9
+ import { transformData } from "./data.mjs";
10
+ async function transformParamsDocumentId(uid, input, opts) {
11
+ let data = input.data;
12
+ if (input.data) {
13
+ data = await transformData(input.data, { ...opts, uid });
14
+ }
15
+ let fields = input.fields;
16
+ if (input.fields) {
17
+ fields = transformFields(input.fields);
18
+ }
19
+ let filters = input.filters;
20
+ if (input.filters) {
21
+ filters = await transformFilters(input.filters, { ...opts, uid });
22
+ }
23
+ let populate = input.populate;
24
+ if (input.populate) {
25
+ populate = await transformPopulate(input.populate, { ...opts, uid });
26
+ }
27
+ let sort = input.sort;
28
+ if (input.sort) {
29
+ sort = await transformSort(input.sort, { ...opts, uid });
30
+ }
31
+ return {
32
+ ...input,
33
+ data,
34
+ fields,
35
+ filters,
36
+ populate,
37
+ sort
38
+ };
39
+ }
40
+ async function transformOutputDocumentId(uid, output) {
41
+ if (Array.isArray(output)) {
42
+ return mapAsync(output, (o) => transformOutputDocumentId(uid, o));
43
+ }
44
+ if (!isObject(output) || !output?.documentId)
45
+ return output;
46
+ return pipeAsync(
47
+ // Switch top level id -> documentId
48
+ switchIdForDocumentId,
49
+ // Switch relations id -> documentId
50
+ (output2) => transformOutputIds(uid, output2)
51
+ )(output);
52
+ }
53
+ export {
54
+ transformOutputDocumentId,
55
+ transformParamsDocumentId
56
+ };
57
+ //# sourceMappingURL=id-transform.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-transform.mjs","sources":["../../../../src/services/document-service/transform/id-transform.ts"],"sourcesContent":["import { Common } from '@strapi/types';\nimport { mapAsync, pipeAsync } from '@strapi/utils';\nimport { isObject } from 'lodash/fp';\nimport { transformOutputIds as transformRelationOutputIds } from './relations/transform/output-ids';\nimport { switchIdForDocumentId } from './utils';\nimport { transformFilters } from './filters';\nimport { transformSort } from './sort';\nimport { transformFields } from './fields';\nimport { transformPopulate } from './populate';\nimport { transformData } from './data';\n\n/**\n * Transform input of a query to map document ids to entity ids.\n */\nasync function transformParamsDocumentId(\n uid: Common.UID.Schema,\n input: { data?: any; fields?: any; filters?: any; populate?: any; sort?: any },\n opts: {\n locale?: string | null;\n isDraft: boolean;\n }\n) {\n let data = input.data;\n if (input.data) {\n data = await transformData(input.data, { ...opts, uid });\n }\n\n // Transform any relation ids to entity ids\n let fields = input.fields;\n if (input.fields) {\n fields = transformFields(input.fields);\n }\n\n let filters = input.filters;\n if (input.filters) {\n filters = await transformFilters(input.filters, { ...opts, uid });\n }\n\n let populate = input.populate;\n if (input.populate) {\n populate = await transformPopulate(input.populate, { ...opts, uid });\n }\n\n let sort = input.sort;\n if (input.sort) {\n sort = await transformSort(input.sort, { ...opts, uid });\n }\n\n return {\n ...input,\n data,\n fields,\n filters,\n populate,\n sort,\n };\n}\n\n/**\n * Transform response of a query to map entity ids to document ids.\n */\nasync function transformOutputDocumentId(\n uid: Common.UID.Schema,\n output: Record<string, any> | Record<string, any>[]\n) {\n if (Array.isArray(output)) {\n return mapAsync(output, (o: Record<string, any>) => transformOutputDocumentId(uid, o));\n }\n\n // TODO: Ensure we always have documentId on output\n if (!isObject(output) || !output?.documentId) return output;\n\n return pipeAsync(\n // Switch top level id -> documentId\n switchIdForDocumentId,\n // Switch relations id -> documentId\n (output) => transformRelationOutputIds(uid, output)\n )(output);\n}\n\nexport { transformParamsDocumentId, transformOutputDocumentId };\n"],"names":["output","transformRelationOutputIds"],"mappings":";;;;;;;;;AAcA,eAAe,0BACb,KACA,OACA,MAIA;AACA,MAAI,OAAO,MAAM;AACjB,MAAI,MAAM,MAAM;AACP,WAAA,MAAM,cAAc,MAAM,MAAM,EAAE,GAAG,MAAM,KAAK;AAAA,EACzD;AAGA,MAAI,SAAS,MAAM;AACnB,MAAI,MAAM,QAAQ;AACP,aAAA,gBAAgB,MAAM,MAAM;AAAA,EACvC;AAEA,MAAI,UAAU,MAAM;AACpB,MAAI,MAAM,SAAS;AACP,cAAA,MAAM,iBAAiB,MAAM,SAAS,EAAE,GAAG,MAAM,KAAK;AAAA,EAClE;AAEA,MAAI,WAAW,MAAM;AACrB,MAAI,MAAM,UAAU;AACP,eAAA,MAAM,kBAAkB,MAAM,UAAU,EAAE,GAAG,MAAM,KAAK;AAAA,EACrE;AAEA,MAAI,OAAO,MAAM;AACjB,MAAI,MAAM,MAAM;AACP,WAAA,MAAM,cAAc,MAAM,MAAM,EAAE,GAAG,MAAM,KAAK;AAAA,EACzD;AAEO,SAAA;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAKA,eAAe,0BACb,KACA,QACA;AACI,MAAA,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAO,SAAS,QAAQ,CAAC,MAA2B,0BAA0B,KAAK,CAAC,CAAC;AAAA,EACvF;AAGA,MAAI,CAAC,SAAS,MAAM,KAAK,CAAC,QAAQ;AAAmB,WAAA;AAE9C,SAAA;AAAA;AAAA,IAEL;AAAA;AAAA,IAEA,CAACA,YAAWC,mBAA2B,KAAKD,OAAM;AAAA,IAClD,MAAM;AACV;"}
@@ -0,0 +1,3 @@
1
+ import { type Data, type Options } from './types';
2
+ export declare const transformPopulate: (data: Data, opts: Options) => Promise<unknown>;
3
+ //# sourceMappingURL=populate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../../../src/services/document-service/transform/populate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAKlD,eAAO,MAAM,iBAAiB,SAAgB,IAAI,QAAQ,OAAO,qBAkChE,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const strapiUtils = require("@strapi/utils");
4
+ const utils = require("./utils.js");
5
+ const filters = require("./filters.js");
6
+ const fields = require("./fields.js");
7
+ const transformPopulate = async (data, opts) => {
8
+ utils.switchDocumentIdForId(data);
9
+ const allKeysAreDocumentId = Object.keys(data).every((key) => key === "documentId");
10
+ if (allKeysAreDocumentId) {
11
+ return data;
12
+ }
13
+ return strapiUtils.traverse.traverseQueryPopulate(
14
+ async ({ attribute, key, value }, { set }) => {
15
+ if (!value || typeof value !== "object" || attribute?.type !== "relation") {
16
+ return;
17
+ }
18
+ if ("filters" in value) {
19
+ value.filters = await filters.transformFilters(value.filters, opts);
20
+ }
21
+ if ("fields" in value && Array.isArray(value.fields)) {
22
+ value.fields = fields.transformFields(value.fields);
23
+ }
24
+ set(key, value);
25
+ },
26
+ { schema: strapi.getModel(opts.uid) },
27
+ data
28
+ );
29
+ };
30
+ exports.transformPopulate = transformPopulate;
31
+ //# sourceMappingURL=populate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"populate.js","sources":["../../../../src/services/document-service/transform/populate.ts"],"sourcesContent":["import { traverse } from '@strapi/utils';\nimport { type Data, type Options } from './types';\nimport { switchDocumentIdForId } from './utils';\nimport { transformFilters } from './filters';\nimport { transformFields } from './fields';\n\nexport const transformPopulate = async (data: Data, opts: Options) => {\n // Before doing the filters traversal change any top level 'id' properties to 'documentId'\n switchDocumentIdForId(data);\n\n const allKeysAreDocumentId = Object.keys(data).every((key) => key === 'documentId');\n if (allKeysAreDocumentId) {\n // If every key is a documentId, skip the traversal\n return data;\n }\n\n return traverse.traverseQueryPopulate(\n async ({ attribute, key, value }, { set }) => {\n if (!value || typeof value !== 'object' || attribute?.type !== 'relation') {\n return;\n }\n\n /*\n If the attribute is a relation\n Look for filters or fields in the value \n and apply the relevant transformation to these objects\n */\n if ('filters' in value) {\n value.filters = await transformFilters(value.filters as Data, opts);\n }\n\n if ('fields' in value && Array.isArray(value.fields)) {\n value.fields = transformFields(value.fields);\n }\n\n set(key, value);\n },\n { schema: strapi.getModel(opts.uid) },\n data\n );\n};\n"],"names":["switchDocumentIdForId","traverse","transformFilters","transformFields"],"mappings":";;;;;;AAMa,MAAA,oBAAoB,OAAO,MAAY,SAAkB;AAEpEA,QAAA,sBAAsB,IAAI;AAEpB,QAAA,uBAAuB,OAAO,KAAK,IAAI,EAAE,MAAM,CAAC,QAAQ,QAAQ,YAAY;AAClF,MAAI,sBAAsB;AAEjB,WAAA;AAAA,EACT;AAEA,SAAOC,YAAS,SAAA;AAAA,IACd,OAAO,EAAE,WAAW,KAAK,SAAS,EAAE,UAAU;AAC5C,UAAI,CAAC,SAAS,OAAO,UAAU,YAAY,WAAW,SAAS,YAAY;AACzE;AAAA,MACF;AAOA,UAAI,aAAa,OAAO;AACtB,cAAM,UAAU,MAAMC,QAAAA,iBAAiB,MAAM,SAAiB,IAAI;AAAA,MACpE;AAEA,UAAI,YAAY,SAAS,MAAM,QAAQ,MAAM,MAAM,GAAG;AAC9C,cAAA,SAASC,OAAAA,gBAAgB,MAAM,MAAM;AAAA,MAC7C;AAEA,UAAI,KAAK,KAAK;AAAA,IAChB;AAAA,IACA,EAAE,QAAQ,OAAO,SAAS,KAAK,GAAG,EAAE;AAAA,IACpC;AAAA,EAAA;AAEJ;;"}
@@ -0,0 +1,31 @@
1
+ import { traverse } from "@strapi/utils";
2
+ import { switchDocumentIdForId } from "./utils.mjs";
3
+ import { transformFilters } from "./filters.mjs";
4
+ import { transformFields } from "./fields.mjs";
5
+ const transformPopulate = async (data, opts) => {
6
+ switchDocumentIdForId(data);
7
+ const allKeysAreDocumentId = Object.keys(data).every((key) => key === "documentId");
8
+ if (allKeysAreDocumentId) {
9
+ return data;
10
+ }
11
+ return traverse.traverseQueryPopulate(
12
+ async ({ attribute, key, value }, { set }) => {
13
+ if (!value || typeof value !== "object" || attribute?.type !== "relation") {
14
+ return;
15
+ }
16
+ if ("filters" in value) {
17
+ value.filters = await transformFilters(value.filters, opts);
18
+ }
19
+ if ("fields" in value && Array.isArray(value.fields)) {
20
+ value.fields = transformFields(value.fields);
21
+ }
22
+ set(key, value);
23
+ },
24
+ { schema: strapi.getModel(opts.uid) },
25
+ data
26
+ );
27
+ };
28
+ export {
29
+ transformPopulate
30
+ };
31
+ //# sourceMappingURL=populate.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"populate.mjs","sources":["../../../../src/services/document-service/transform/populate.ts"],"sourcesContent":["import { traverse } from '@strapi/utils';\nimport { type Data, type Options } from './types';\nimport { switchDocumentIdForId } from './utils';\nimport { transformFilters } from './filters';\nimport { transformFields } from './fields';\n\nexport const transformPopulate = async (data: Data, opts: Options) => {\n // Before doing the filters traversal change any top level 'id' properties to 'documentId'\n switchDocumentIdForId(data);\n\n const allKeysAreDocumentId = Object.keys(data).every((key) => key === 'documentId');\n if (allKeysAreDocumentId) {\n // If every key is a documentId, skip the traversal\n return data;\n }\n\n return traverse.traverseQueryPopulate(\n async ({ attribute, key, value }, { set }) => {\n if (!value || typeof value !== 'object' || attribute?.type !== 'relation') {\n return;\n }\n\n /*\n If the attribute is a relation\n Look for filters or fields in the value \n and apply the relevant transformation to these objects\n */\n if ('filters' in value) {\n value.filters = await transformFilters(value.filters as Data, opts);\n }\n\n if ('fields' in value && Array.isArray(value.fields)) {\n value.fields = transformFields(value.fields);\n }\n\n set(key, value);\n },\n { schema: strapi.getModel(opts.uid) },\n data\n );\n};\n"],"names":[],"mappings":";;;;AAMa,MAAA,oBAAoB,OAAO,MAAY,SAAkB;AAEpE,wBAAsB,IAAI;AAEpB,QAAA,uBAAuB,OAAO,KAAK,IAAI,EAAE,MAAM,CAAC,QAAQ,QAAQ,YAAY;AAClF,MAAI,sBAAsB;AAEjB,WAAA;AAAA,EACT;AAEA,SAAO,SAAS;AAAA,IACd,OAAO,EAAE,WAAW,KAAK,SAAS,EAAE,UAAU;AAC5C,UAAI,CAAC,SAAS,OAAO,UAAU,YAAY,WAAW,SAAS,YAAY;AACzE;AAAA,MACF;AAOA,UAAI,aAAa,OAAO;AACtB,cAAM,UAAU,MAAM,iBAAiB,MAAM,SAAiB,IAAI;AAAA,MACpE;AAEA,UAAI,YAAY,SAAS,MAAM,QAAQ,MAAM,MAAM,GAAG;AAC9C,cAAA,SAAS,gBAAgB,MAAM,MAAM;AAAA,MAC7C;AAEA,UAAI,KAAK,KAAK;AAAA,IAChB;AAAA,IACA,EAAE,QAAQ,OAAO,SAAS,KAAK,GAAG,EAAE;AAAA,IACpC;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,13 @@
1
+ import { Common } from '@strapi/types';
2
+ import { IdMap } from '../../id-map';
3
+ /**
4
+ * Iterate over all attributes of a Data object and extract all relational document ids.
5
+ * Those will later be transformed to entity ids.
6
+ */
7
+ declare const extractDataIds: (idMap: IdMap, data: Record<string, any>, opts: {
8
+ uid: Common.UID.Schema;
9
+ locale?: string | null;
10
+ isDraft?: boolean;
11
+ }) => Promise<import("@strapi/utils/dist/types").Data>;
12
+ export { extractDataIds };
13
+ //# sourceMappingURL=data-ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-ids.d.ts","sourceRoot":"","sources":["../../../../../../src/services/document-service/transform/relations/extract/data-ids.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,MAAM,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAoErC;;;GAGG;AACH,QAAA,MAAM,cAAc,UACX,KAAK,QACN,OAAO,MAAM,EAAE,GAAG,CAAC,QACnB;IAAE,GAAG,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,qDA6B5E,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}