@strapi/core 0.0.0-experimental.18019758d6ccd252f2f00bcc32c191402af2e60a → 0.0.0-experimental.1bca8e0e074de8b0775bcddc7656fbc9e9f1393b

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 (264) hide show
  1. package/LICENSE +18 -3
  2. package/dist/Strapi.d.ts +3 -1
  3. package/dist/Strapi.d.ts.map +1 -1
  4. package/dist/Strapi.js +59 -15
  5. package/dist/Strapi.js.map +1 -1
  6. package/dist/Strapi.mjs +38 -13
  7. package/dist/Strapi.mjs.map +1 -1
  8. package/dist/configuration/get-dirs.js +2 -2
  9. package/dist/configuration/get-dirs.js.map +1 -1
  10. package/dist/configuration/index.js +2 -2
  11. package/dist/configuration/index.js.map +1 -1
  12. package/dist/core-api/controller/collection-type.d.ts.map +1 -1
  13. package/dist/core-api/controller/collection-type.js +5 -3
  14. package/dist/core-api/controller/collection-type.js.map +1 -1
  15. package/dist/core-api/controller/collection-type.mjs +2 -0
  16. package/dist/core-api/controller/collection-type.mjs.map +1 -1
  17. package/dist/core-api/controller/index.js +2 -2
  18. package/dist/core-api/controller/index.js.map +1 -1
  19. package/dist/core-api/controller/single-type.d.ts.map +1 -1
  20. package/dist/core-api/controller/single-type.js +3 -2
  21. package/dist/core-api/controller/single-type.js.map +1 -1
  22. package/dist/core-api/controller/single-type.mjs +1 -0
  23. package/dist/core-api/controller/single-type.mjs.map +1 -1
  24. package/dist/core-api/controller/transform.js +8 -8
  25. package/dist/core-api/controller/transform.js.map +1 -1
  26. package/dist/core-api/service/collection-type.d.ts +1 -7
  27. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  28. package/dist/core-api/service/collection-type.js +5 -3
  29. package/dist/core-api/service/collection-type.js.map +1 -1
  30. package/dist/core-api/service/collection-type.mjs +6 -4
  31. package/dist/core-api/service/collection-type.mjs.map +1 -1
  32. package/dist/core-api/service/pagination.d.ts +4 -11
  33. package/dist/core-api/service/pagination.d.ts.map +1 -1
  34. package/dist/core-api/service/pagination.js +18 -44
  35. package/dist/core-api/service/pagination.js.map +1 -1
  36. package/dist/core-api/service/pagination.mjs +16 -42
  37. package/dist/core-api/service/pagination.mjs.map +1 -1
  38. package/dist/core-api/service/single-type.d.ts.map +1 -1
  39. package/dist/core-api/service/single-type.js +2 -1
  40. package/dist/core-api/service/single-type.js.map +1 -1
  41. package/dist/core-api/service/single-type.mjs +2 -1
  42. package/dist/core-api/service/single-type.mjs.map +1 -1
  43. package/dist/domain/content-type/index.js +4 -4
  44. package/dist/domain/content-type/index.js.map +1 -1
  45. package/dist/ee/index.js +3 -3
  46. package/dist/ee/index.js.map +1 -1
  47. package/dist/factories.js +4 -4
  48. package/dist/factories.js.map +1 -1
  49. package/dist/index.d.ts +14 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/index.mjs.map +1 -1
  53. package/dist/loaders/apis.d.ts.map +1 -1
  54. package/dist/loaders/apis.js +12 -12
  55. package/dist/loaders/apis.js.map +1 -1
  56. package/dist/loaders/apis.mjs +10 -10
  57. package/dist/loaders/apis.mjs.map +1 -1
  58. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  59. package/dist/loaders/plugins/get-enabled-plugins.js +13 -13
  60. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  61. package/dist/loaders/plugins/get-enabled-plugins.mjs +5 -5
  62. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  63. package/dist/loaders/plugins/get-user-plugins-config.js +2 -2
  64. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  65. package/dist/loaders/plugins/index.js +6 -6
  66. package/dist/loaders/plugins/index.js.map +1 -1
  67. package/dist/middlewares/body.js +2 -2
  68. package/dist/middlewares/body.js.map +1 -1
  69. package/dist/middlewares/cors.d.ts.map +1 -1
  70. package/dist/middlewares/cors.js +9 -7
  71. package/dist/middlewares/cors.js.map +1 -1
  72. package/dist/middlewares/cors.mjs +9 -7
  73. package/dist/middlewares/cors.mjs.map +1 -1
  74. package/dist/middlewares/public.js +2 -2
  75. package/dist/middlewares/public.js.map +1 -1
  76. package/dist/middlewares/query.d.ts.map +1 -1
  77. package/dist/middlewares/query.js.map +1 -1
  78. package/dist/middlewares/query.mjs.map +1 -1
  79. package/dist/middlewares/responses.js +2 -2
  80. package/dist/middlewares/responses.js.map +1 -1
  81. package/dist/middlewares/security.d.ts.map +1 -1
  82. package/dist/middlewares/security.js +12 -5
  83. package/dist/middlewares/security.js.map +1 -1
  84. package/dist/middlewares/security.mjs +11 -4
  85. package/dist/middlewares/security.mjs.map +1 -1
  86. package/dist/middlewares/session.js +2 -2
  87. package/dist/middlewares/session.js.map +1 -1
  88. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +30 -0
  89. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -0
  90. package/dist/migrations/database/5.0.0-discard-drafts.js +50 -0
  91. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -0
  92. package/dist/migrations/database/5.0.0-discard-drafts.mjs +50 -0
  93. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -0
  94. package/dist/migrations/draft-publish.d.ts.map +1 -1
  95. package/dist/migrations/draft-publish.js +14 -31
  96. package/dist/migrations/draft-publish.js.map +1 -1
  97. package/dist/migrations/draft-publish.mjs +15 -32
  98. package/dist/migrations/draft-publish.mjs.map +1 -1
  99. package/dist/providers/registries.d.ts.map +1 -1
  100. package/dist/providers/registries.js +2 -0
  101. package/dist/providers/registries.js.map +1 -1
  102. package/dist/providers/registries.mjs +2 -0
  103. package/dist/providers/registries.mjs.map +1 -1
  104. package/dist/registries/apis.js +2 -2
  105. package/dist/registries/apis.js.map +1 -1
  106. package/dist/registries/components.js +2 -2
  107. package/dist/registries/components.js.map +1 -1
  108. package/dist/registries/content-types.js +3 -3
  109. package/dist/registries/content-types.js.map +1 -1
  110. package/dist/registries/controllers.js +3 -3
  111. package/dist/registries/controllers.js.map +1 -1
  112. package/dist/registries/custom-fields.js +4 -4
  113. package/dist/registries/custom-fields.js.map +1 -1
  114. package/dist/registries/hooks.js +2 -2
  115. package/dist/registries/hooks.js.map +1 -1
  116. package/dist/registries/middlewares.js +3 -3
  117. package/dist/registries/middlewares.js.map +1 -1
  118. package/dist/registries/modules.js +3 -3
  119. package/dist/registries/modules.js.map +1 -1
  120. package/dist/registries/plugins.js +2 -2
  121. package/dist/registries/plugins.js.map +1 -1
  122. package/dist/registries/policies.js +4 -4
  123. package/dist/registries/policies.js.map +1 -1
  124. package/dist/registries/services.js +3 -3
  125. package/dist/registries/services.js.map +1 -1
  126. package/dist/services/auth/index.js +3 -3
  127. package/dist/services/auth/index.js.map +1 -1
  128. package/dist/services/core-store.js +3 -3
  129. package/dist/services/core-store.js.map +1 -1
  130. package/dist/services/cron.js +3 -3
  131. package/dist/services/cron.js.map +1 -1
  132. package/dist/services/document-service/attributes/index.js +2 -2
  133. package/dist/services/document-service/attributes/index.js.map +1 -1
  134. package/dist/services/document-service/attributes/transforms.js +3 -3
  135. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  136. package/dist/services/document-service/components.js +15 -15
  137. package/dist/services/document-service/components.js.map +1 -1
  138. package/dist/services/document-service/draft-and-publish.js +16 -16
  139. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  140. package/dist/services/document-service/entries.d.ts +1 -1
  141. package/dist/services/document-service/entries.d.ts.map +1 -1
  142. package/dist/services/document-service/entries.js +7 -6
  143. package/dist/services/document-service/entries.js.map +1 -1
  144. package/dist/services/document-service/entries.mjs +2 -1
  145. package/dist/services/document-service/entries.mjs.map +1 -1
  146. package/dist/services/document-service/events.d.ts +25 -0
  147. package/dist/services/document-service/events.d.ts.map +1 -0
  148. package/dist/services/document-service/events.js +47 -0
  149. package/dist/services/document-service/events.js.map +1 -0
  150. package/dist/services/document-service/events.mjs +47 -0
  151. package/dist/services/document-service/events.mjs.map +1 -0
  152. package/dist/services/document-service/index.d.ts.map +1 -1
  153. package/dist/services/document-service/index.js.map +1 -1
  154. package/dist/services/document-service/index.mjs.map +1 -1
  155. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  156. package/dist/services/document-service/internationalization.js +21 -12
  157. package/dist/services/document-service/internationalization.js.map +1 -1
  158. package/dist/services/document-service/internationalization.mjs +14 -5
  159. package/dist/services/document-service/internationalization.mjs.map +1 -1
  160. package/dist/services/document-service/params.js +2 -2
  161. package/dist/services/document-service/params.js.map +1 -1
  162. package/dist/services/document-service/repository.d.ts.map +1 -1
  163. package/dist/services/document-service/repository.js +80 -52
  164. package/dist/services/document-service/repository.js.map +1 -1
  165. package/dist/services/document-service/repository.mjs +75 -47
  166. package/dist/services/document-service/repository.mjs.map +1 -1
  167. package/dist/services/document-service/transform/id-transform.js +2 -2
  168. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  169. package/dist/services/document-service/transform/query.js +3 -3
  170. package/dist/services/document-service/transform/query.js.map +1 -1
  171. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  172. package/dist/services/document-service/transform/relations/extract/data-ids.js +5 -2
  173. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  174. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +3 -0
  175. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  176. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  177. package/dist/services/document-service/transform/relations/transform/data-ids.js +5 -2
  178. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  179. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +3 -0
  180. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  181. package/dist/services/document-service/transform/relations/utils/dp.js +2 -2
  182. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  183. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  184. package/dist/services/document-service/transform/relations/utils/map-relation.js +13 -9
  185. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  186. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +7 -3
  187. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  188. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  189. package/dist/services/document-service/utils/populate.js +4 -0
  190. package/dist/services/document-service/utils/populate.js.map +1 -1
  191. package/dist/services/document-service/utils/populate.mjs +4 -0
  192. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  193. package/dist/services/entity-validator/index.d.ts +14 -1
  194. package/dist/services/entity-validator/index.d.ts.map +1 -1
  195. package/dist/services/entity-validator/index.js +106 -49
  196. package/dist/services/entity-validator/index.js.map +1 -1
  197. package/dist/services/entity-validator/index.mjs +87 -30
  198. package/dist/services/entity-validator/index.mjs.map +1 -1
  199. package/dist/services/entity-validator/validators.d.ts +10 -8
  200. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  201. package/dist/services/entity-validator/validators.js +61 -19
  202. package/dist/services/entity-validator/validators.js.map +1 -1
  203. package/dist/services/entity-validator/validators.mjs +54 -11
  204. package/dist/services/entity-validator/validators.mjs.map +1 -1
  205. package/dist/services/event-hub.d.ts +1 -0
  206. package/dist/services/event-hub.d.ts.map +1 -1
  207. package/dist/services/event-hub.js +9 -4
  208. package/dist/services/event-hub.js.map +1 -1
  209. package/dist/services/event-hub.mjs +9 -4
  210. package/dist/services/event-hub.mjs.map +1 -1
  211. package/dist/services/server/compose-endpoint.js +7 -7
  212. package/dist/services/server/compose-endpoint.js.map +1 -1
  213. package/dist/services/server/index.js +1 -1
  214. package/dist/services/server/index.js.map +1 -1
  215. package/dist/services/server/index.mjs +1 -1
  216. package/dist/services/server/index.mjs.map +1 -1
  217. package/dist/services/server/koa.d.ts.map +1 -1
  218. package/dist/services/server/koa.js +4 -4
  219. package/dist/services/server/koa.js.map +1 -1
  220. package/dist/services/server/koa.mjs +1 -1
  221. package/dist/services/server/koa.mjs.map +1 -1
  222. package/dist/services/server/middleware.js +3 -3
  223. package/dist/services/server/middleware.js.map +1 -1
  224. package/dist/services/server/routing.js +2 -2
  225. package/dist/services/server/routing.js.map +1 -1
  226. package/dist/services/utils/dynamic-zones.js +5 -5
  227. package/dist/services/utils/dynamic-zones.js.map +1 -1
  228. package/dist/services/webhook-runner.d.ts +2 -1
  229. package/dist/services/webhook-runner.d.ts.map +1 -1
  230. package/dist/services/webhook-runner.js.map +1 -1
  231. package/dist/services/webhook-runner.mjs.map +1 -1
  232. package/dist/services/webhook-store.d.ts +2 -8
  233. package/dist/services/webhook-store.d.ts.map +1 -1
  234. package/dist/services/webhook-store.js +9 -2
  235. package/dist/services/webhook-store.js.map +1 -1
  236. package/dist/services/webhook-store.mjs +9 -2
  237. package/dist/services/webhook-store.mjs.map +1 -1
  238. package/dist/utils/cron.js +3 -3
  239. package/dist/utils/cron.js.map +1 -1
  240. package/dist/utils/fetch.d.ts.map +1 -1
  241. package/dist/utils/fetch.js +4 -3
  242. package/dist/utils/fetch.js.map +1 -1
  243. package/dist/utils/fetch.mjs +4 -3
  244. package/dist/utils/fetch.mjs.map +1 -1
  245. package/dist/utils/filepath-to-prop-path.d.ts +1 -1
  246. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  247. package/dist/utils/filepath-to-prop-path.js +27 -6
  248. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  249. package/dist/utils/filepath-to-prop-path.mjs +25 -5
  250. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  251. package/dist/utils/is-initialized.js +3 -3
  252. package/dist/utils/is-initialized.js.map +1 -1
  253. package/dist/utils/startup-logger.js +4 -4
  254. package/dist/utils/startup-logger.js.map +1 -1
  255. package/dist/utils/startup-logger.mjs +3 -3
  256. package/dist/utils/startup-logger.mjs.map +1 -1
  257. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  258. package/dist/utils/transform-content-types-to-models.js +16 -4
  259. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  260. package/dist/utils/transform-content-types-to-models.mjs +15 -3
  261. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  262. package/package.json +22 -18
  263. package/dist/services/document-service/document-engine.d.ts +0 -1
  264. package/dist/services/document-service/document-engine.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sources":["../../../src/services/document-service/events.ts"],"sourcesContent":["import { UID, Utils, Modules, Core } from '@strapi/types';\nimport { sanitize } from '@strapi/utils';\n\nimport { getDeepPopulate } from './utils/populate';\n\nconst EVENTS = {\n ENTRY_CREATE: 'entry.create',\n ENTRY_UPDATE: 'entry.update',\n ENTRY_DELETE: 'entry.delete',\n ENTRY_PUBLISH: 'entry.publish',\n ENTRY_UNPUBLISH: 'entry.unpublish',\n ENTRY_DRAFT_DISCARD: 'entry.draft-discard',\n};\n\ntype EventName = Utils.Object.Values<typeof EVENTS>;\n\n/**\n * Manager to trigger entry related events\n *\n * It will populate the entry if it is not a delete event.\n * So the event payload will contain the full entry.\n */\nconst createEventManager = (strapi: Core.Strapi, uid: UID.Schema) => {\n const populate = getDeepPopulate(uid, {});\n const model = strapi.getModel(uid);\n\n const emitEvent = async (eventName: EventName, entry: Modules.Documents.AnyDocument) => {\n // There is no need to populate the entry if it has been deleted\n let populatedEntry = entry;\n if (![EVENTS.ENTRY_DELETE, EVENTS.ENTRY_UNPUBLISH].includes(eventName)) {\n populatedEntry = await strapi.db.query(uid).findOne({ where: { id: entry.id }, populate });\n }\n\n const sanitizedEntry = await sanitize.sanitizers.defaultSanitizeOutput(\n {\n schema: model,\n getModel: (uid) => strapi.getModel(uid as UID.Schema),\n },\n populatedEntry\n );\n\n await strapi.eventHub.emit(eventName, {\n model: model.modelName,\n uid: model.uid,\n entry: sanitizedEntry,\n });\n };\n\n return {\n /**\n * strapi.db.query might reuse the transaction used in the doc service request,\n * so this is executed after that transaction is committed.\n */\n emitEvent(eventName: EventName, entry: Modules.Documents.AnyDocument) {\n strapi.db.transaction(({ onCommit }) => {\n onCommit(() => emitEvent(eventName, entry));\n });\n },\n };\n};\n\nexport { createEventManager };\n"],"names":["populate","getDeepPopulate","sanitize","uid"],"mappings":";;;;AAKA,MAAM,SAAS;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,qBAAqB;AACvB;AAUM,MAAA,qBAAqB,CAAC,QAAqB,QAAoB;AACnE,QAAMA,aAAWC,SAAAA,gBAAgB,KAAK,CAAE,CAAA;AAClC,QAAA,QAAQ,OAAO,SAAS,GAAG;AAE3B,QAAA,YAAY,OAAO,WAAsB,UAAyC;AAEtF,QAAI,iBAAiB;AACjB,QAAA,CAAC,CAAC,OAAO,cAAc,OAAO,eAAe,EAAE,SAAS,SAAS,GAAG;AACtE,uBAAiB,MAAM,OAAO,GAAG,MAAM,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,MAAM,GAAG,GAAGD,UAAAA,WAAU,CAAA;AAAA,IAC3F;AAEM,UAAA,iBAAiB,MAAME,qBAAS,WAAW;AAAA,MAC/C;AAAA,QACE,QAAQ;AAAA,QACR,UAAU,CAACC,SAAQ,OAAO,SAASA,IAAiB;AAAA,MACtD;AAAA,MACA;AAAA,IAAA;AAGI,UAAA,OAAO,SAAS,KAAK,WAAW;AAAA,MACpC,OAAO,MAAM;AAAA,MACb,KAAK,MAAM;AAAA,MACX,OAAO;AAAA,IAAA,CACR;AAAA,EAAA;AAGI,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL,UAAU,WAAsB,OAAsC;AACpE,aAAO,GAAG,YAAY,CAAC,EAAE,eAAe;AACtC,iBAAS,MAAM,UAAU,WAAW,KAAK,CAAC;AAAA,MAAA,CAC3C;AAAA,IACH;AAAA,EAAA;AAEJ;;"}
@@ -0,0 +1,47 @@
1
+ import { sanitize } from "@strapi/utils";
2
+ import { getDeepPopulate } from "./utils/populate.mjs";
3
+ const EVENTS = {
4
+ ENTRY_CREATE: "entry.create",
5
+ ENTRY_UPDATE: "entry.update",
6
+ ENTRY_DELETE: "entry.delete",
7
+ ENTRY_PUBLISH: "entry.publish",
8
+ ENTRY_UNPUBLISH: "entry.unpublish",
9
+ ENTRY_DRAFT_DISCARD: "entry.draft-discard"
10
+ };
11
+ const createEventManager = (strapi, uid) => {
12
+ const populate = getDeepPopulate(uid, {});
13
+ const model = strapi.getModel(uid);
14
+ const emitEvent = async (eventName, entry) => {
15
+ let populatedEntry = entry;
16
+ if (![EVENTS.ENTRY_DELETE, EVENTS.ENTRY_UNPUBLISH].includes(eventName)) {
17
+ populatedEntry = await strapi.db.query(uid).findOne({ where: { id: entry.id }, populate });
18
+ }
19
+ const sanitizedEntry = await sanitize.sanitizers.defaultSanitizeOutput(
20
+ {
21
+ schema: model,
22
+ getModel: (uid2) => strapi.getModel(uid2)
23
+ },
24
+ populatedEntry
25
+ );
26
+ await strapi.eventHub.emit(eventName, {
27
+ model: model.modelName,
28
+ uid: model.uid,
29
+ entry: sanitizedEntry
30
+ });
31
+ };
32
+ return {
33
+ /**
34
+ * strapi.db.query might reuse the transaction used in the doc service request,
35
+ * so this is executed after that transaction is committed.
36
+ */
37
+ emitEvent(eventName, entry) {
38
+ strapi.db.transaction(({ onCommit }) => {
39
+ onCommit(() => emitEvent(eventName, entry));
40
+ });
41
+ }
42
+ };
43
+ };
44
+ export {
45
+ createEventManager
46
+ };
47
+ //# sourceMappingURL=events.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.mjs","sources":["../../../src/services/document-service/events.ts"],"sourcesContent":["import { UID, Utils, Modules, Core } from '@strapi/types';\nimport { sanitize } from '@strapi/utils';\n\nimport { getDeepPopulate } from './utils/populate';\n\nconst EVENTS = {\n ENTRY_CREATE: 'entry.create',\n ENTRY_UPDATE: 'entry.update',\n ENTRY_DELETE: 'entry.delete',\n ENTRY_PUBLISH: 'entry.publish',\n ENTRY_UNPUBLISH: 'entry.unpublish',\n ENTRY_DRAFT_DISCARD: 'entry.draft-discard',\n};\n\ntype EventName = Utils.Object.Values<typeof EVENTS>;\n\n/**\n * Manager to trigger entry related events\n *\n * It will populate the entry if it is not a delete event.\n * So the event payload will contain the full entry.\n */\nconst createEventManager = (strapi: Core.Strapi, uid: UID.Schema) => {\n const populate = getDeepPopulate(uid, {});\n const model = strapi.getModel(uid);\n\n const emitEvent = async (eventName: EventName, entry: Modules.Documents.AnyDocument) => {\n // There is no need to populate the entry if it has been deleted\n let populatedEntry = entry;\n if (![EVENTS.ENTRY_DELETE, EVENTS.ENTRY_UNPUBLISH].includes(eventName)) {\n populatedEntry = await strapi.db.query(uid).findOne({ where: { id: entry.id }, populate });\n }\n\n const sanitizedEntry = await sanitize.sanitizers.defaultSanitizeOutput(\n {\n schema: model,\n getModel: (uid) => strapi.getModel(uid as UID.Schema),\n },\n populatedEntry\n );\n\n await strapi.eventHub.emit(eventName, {\n model: model.modelName,\n uid: model.uid,\n entry: sanitizedEntry,\n });\n };\n\n return {\n /**\n * strapi.db.query might reuse the transaction used in the doc service request,\n * so this is executed after that transaction is committed.\n */\n emitEvent(eventName: EventName, entry: Modules.Documents.AnyDocument) {\n strapi.db.transaction(({ onCommit }) => {\n onCommit(() => emitEvent(eventName, entry));\n });\n },\n };\n};\n\nexport { createEventManager };\n"],"names":["uid"],"mappings":";;AAKA,MAAM,SAAS;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,qBAAqB;AACvB;AAUM,MAAA,qBAAqB,CAAC,QAAqB,QAAoB;AACnE,QAAM,WAAW,gBAAgB,KAAK,CAAE,CAAA;AAClC,QAAA,QAAQ,OAAO,SAAS,GAAG;AAE3B,QAAA,YAAY,OAAO,WAAsB,UAAyC;AAEtF,QAAI,iBAAiB;AACjB,QAAA,CAAC,CAAC,OAAO,cAAc,OAAO,eAAe,EAAE,SAAS,SAAS,GAAG;AACtE,uBAAiB,MAAM,OAAO,GAAG,MAAM,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,MAAM,GAAG,GAAG,SAAU,CAAA;AAAA,IAC3F;AAEM,UAAA,iBAAiB,MAAM,SAAS,WAAW;AAAA,MAC/C;AAAA,QACE,QAAQ;AAAA,QACR,UAAU,CAACA,SAAQ,OAAO,SAASA,IAAiB;AAAA,MACtD;AAAA,MACA;AAAA,IAAA;AAGI,UAAA,OAAO,SAAS,KAAK,WAAW;AAAA,MACpC,OAAO,MAAM;AAAA,MACb,KAAK,MAAM;AAAA,MACX,OAAO;AAAA,IAAA,CACR;AAAA,EAAA;AAGI,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL,UAAU,WAAsB,OAAsC;AACpE,aAAO,GAAG,YAAY,CAAC,EAAE,eAAe;AACtC,iBAAS,MAAM,UAAU,WAAW,KAAK,CAAC;AAAA,MAAA,CAC3C;AAAA,IACH;AAAA,EAAA;AAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAO,MAAM,eAAe,CAAC;AAMxD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,WAAY,KAAK,MAAM,KAAG,QAAQ,SAAS,CAAC,OAiC7E,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAO,MAAM,eAAe,CAAC;AAMxD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,WAAY,KAAK,MAAM,KAAG,QAAQ,SAAS,CAAC,OAmC7E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/services/document-service/index.ts"],"sourcesContent":["import type { Core, Modules, UID } from '@strapi/types';\n\nimport { createMiddlewareManager, databaseErrorsMiddleware } from './middlewares';\nimport { createContentTypeRepository } from './repository';\nimport { transformData } from './transform/data';\n\n/**\n * Repository to :\n * - Access documents via actions (findMany, findOne, create, update, delete, ...)\n * - Execute middlewares on document actions\n * - Apply default parameters to document actions\n *\n * @param strapi\n * @returns DocumentService\n *\n * @example Access documents\n * const article = strapi.documents('api::article.article').create(params)\n * const allArticles = strapi.documents('api::article.article').findMany(params)\n *\n */\nexport const createDocumentService = (strapi: Core.Strapi): Modules.Documents.Service => {\n const repositories = new Map<string, Modules.Documents.ServiceInstance>();\n const middlewares = createMiddlewareManager();\n\n middlewares.use(databaseErrorsMiddleware);\n\n const factory = function factory(uid: UID.ContentType) {\n if (repositories.has(uid)) {\n return repositories.get(uid)!;\n }\n\n const contentType = strapi.contentType(uid);\n const repository = createContentTypeRepository(uid);\n\n const instance = middlewares.wrapObject(\n repository,\n { uid, contentType },\n {\n exclude: ['updateComponents', 'omitComponentData'],\n }\n );\n\n repositories.set(uid, instance);\n\n return instance;\n } as Modules.Documents.Service;\n\n return Object.assign(factory, {\n utils: {\n transformData,\n },\n use: middlewares.use.bind(middlewares),\n });\n};\n"],"names":["createMiddlewareManager","databaseErrorsMiddleware","factory","repository","createContentTypeRepository","transformData"],"mappings":";;;;;;AAoBa,MAAA,wBAAwB,CAAC,WAAmD;AACjF,QAAA,mCAAmB;AACzB,QAAM,cAAcA,kBAAAA;AAEpB,cAAY,IAAIC,OAAAA,wBAAwB;AAElC,QAAA,UAAU,SAASC,SAAQ,KAAsB;AACjD,QAAA,aAAa,IAAI,GAAG,GAAG;AAClB,aAAA,aAAa,IAAI,GAAG;AAAA,IAC7B;AAEM,UAAA,cAAc,OAAO,YAAY,GAAG;AACpC,UAAAC,eAAaC,uCAA4B,GAAG;AAElD,UAAM,WAAW,YAAY;AAAA,MAC3BD;AAAAA,MACA,EAAE,KAAK,YAAY;AAAA,MACnB;AAAA,QACE,SAAS,CAAC,oBAAoB,mBAAmB;AAAA,MACnD;AAAA,IAAA;AAGW,iBAAA,IAAI,KAAK,QAAQ;AAEvB,WAAA;AAAA,EAAA;AAGF,SAAA,OAAO,OAAO,SAAS;AAAA,IAC5B,OAAO;AAAA,MAAA,eACLE,KAAA;AAAA,IACF;AAAA,IACA,KAAK,YAAY,IAAI,KAAK,WAAW;AAAA,EAAA,CACtC;AACH;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/services/document-service/index.ts"],"sourcesContent":["import type { Core, Modules, UID } from '@strapi/types';\n\nimport { createMiddlewareManager, databaseErrorsMiddleware } from './middlewares';\nimport { createContentTypeRepository } from './repository';\nimport { transformData } from './transform/data';\n\n/**\n * Repository to :\n * - Access documents via actions (findMany, findOne, create, update, delete, ...)\n * - Execute middlewares on document actions\n * - Apply default parameters to document actions\n *\n * @param strapi\n * @returns DocumentService\n *\n * @example Access documents\n * const article = strapi.documents('api::article.article').create(params)\n * const allArticles = strapi.documents('api::article.article').findMany(params)\n *\n */\nexport const createDocumentService = (strapi: Core.Strapi): Modules.Documents.Service => {\n // Cache the repositories (one per content type)\n const repositories = new Map<string, Modules.Documents.ServiceInstance>();\n\n // Manager to handle document service middlewares\n const middlewares = createMiddlewareManager();\n middlewares.use(databaseErrorsMiddleware);\n\n const factory = function factory(uid: UID.ContentType) {\n if (repositories.has(uid)) {\n return repositories.get(uid)!;\n }\n\n const contentType = strapi.contentType(uid);\n const repository = createContentTypeRepository(uid);\n\n const instance = middlewares.wrapObject(\n repository,\n { uid, contentType },\n {\n exclude: ['updateComponents', 'omitComponentData'],\n }\n );\n\n repositories.set(uid, instance);\n\n return instance;\n } as Modules.Documents.Service;\n\n return Object.assign(factory, {\n utils: {\n transformData,\n },\n use: middlewares.use.bind(middlewares),\n });\n};\n"],"names":["createMiddlewareManager","databaseErrorsMiddleware","factory","repository","createContentTypeRepository","transformData"],"mappings":";;;;;;AAoBa,MAAA,wBAAwB,CAAC,WAAmD;AAEjF,QAAA,mCAAmB;AAGzB,QAAM,cAAcA,kBAAAA;AACpB,cAAY,IAAIC,OAAAA,wBAAwB;AAElC,QAAA,UAAU,SAASC,SAAQ,KAAsB;AACjD,QAAA,aAAa,IAAI,GAAG,GAAG;AAClB,aAAA,aAAa,IAAI,GAAG;AAAA,IAC7B;AAEM,UAAA,cAAc,OAAO,YAAY,GAAG;AACpC,UAAAC,eAAaC,uCAA4B,GAAG;AAElD,UAAM,WAAW,YAAY;AAAA,MAC3BD;AAAAA,MACA,EAAE,KAAK,YAAY;AAAA,MACnB;AAAA,QACE,SAAS,CAAC,oBAAoB,mBAAmB;AAAA,MACnD;AAAA,IAAA;AAGW,iBAAA,IAAI,KAAK,QAAQ;AAEvB,WAAA;AAAA,EAAA;AAGF,SAAA,OAAO,OAAO,SAAS;AAAA,IAC5B,OAAO;AAAA,MAAA,eACLE,KAAA;AAAA,IACF;AAAA,IACA,KAAK,YAAY,IAAI,KAAK,WAAW;AAAA,EAAA,CACtC;AACH;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/services/document-service/index.ts"],"sourcesContent":["import type { Core, Modules, UID } from '@strapi/types';\n\nimport { createMiddlewareManager, databaseErrorsMiddleware } from './middlewares';\nimport { createContentTypeRepository } from './repository';\nimport { transformData } from './transform/data';\n\n/**\n * Repository to :\n * - Access documents via actions (findMany, findOne, create, update, delete, ...)\n * - Execute middlewares on document actions\n * - Apply default parameters to document actions\n *\n * @param strapi\n * @returns DocumentService\n *\n * @example Access documents\n * const article = strapi.documents('api::article.article').create(params)\n * const allArticles = strapi.documents('api::article.article').findMany(params)\n *\n */\nexport const createDocumentService = (strapi: Core.Strapi): Modules.Documents.Service => {\n const repositories = new Map<string, Modules.Documents.ServiceInstance>();\n const middlewares = createMiddlewareManager();\n\n middlewares.use(databaseErrorsMiddleware);\n\n const factory = function factory(uid: UID.ContentType) {\n if (repositories.has(uid)) {\n return repositories.get(uid)!;\n }\n\n const contentType = strapi.contentType(uid);\n const repository = createContentTypeRepository(uid);\n\n const instance = middlewares.wrapObject(\n repository,\n { uid, contentType },\n {\n exclude: ['updateComponents', 'omitComponentData'],\n }\n );\n\n repositories.set(uid, instance);\n\n return instance;\n } as Modules.Documents.Service;\n\n return Object.assign(factory, {\n utils: {\n transformData,\n },\n use: middlewares.use.bind(middlewares),\n });\n};\n"],"names":["factory"],"mappings":";;;;AAoBa,MAAA,wBAAwB,CAAC,WAAmD;AACjF,QAAA,mCAAmB;AACzB,QAAM,cAAc;AAEpB,cAAY,IAAI,wBAAwB;AAElC,QAAA,UAAU,SAASA,SAAQ,KAAsB;AACjD,QAAA,aAAa,IAAI,GAAG,GAAG;AAClB,aAAA,aAAa,IAAI,GAAG;AAAA,IAC7B;AAEM,UAAA,cAAc,OAAO,YAAY,GAAG;AACpC,UAAA,aAAa,4BAA4B,GAAG;AAElD,UAAM,WAAW,YAAY;AAAA,MAC3B;AAAA,MACA,EAAE,KAAK,YAAY;AAAA,MACnB;AAAA,QACE,SAAS,CAAC,oBAAoB,mBAAmB;AAAA,MACnD;AAAA,IAAA;AAGW,iBAAA,IAAI,KAAK,QAAQ;AAEvB,WAAA;AAAA,EAAA;AAGF,SAAA,OAAO,OAAO,SAAS;AAAA,IAC5B,OAAO;AAAA,MACL;AAAA,IACF;AAAA,IACA,KAAK,YAAY,IAAI,KAAK,WAAW;AAAA,EAAA,CACtC;AACH;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/services/document-service/index.ts"],"sourcesContent":["import type { Core, Modules, UID } from '@strapi/types';\n\nimport { createMiddlewareManager, databaseErrorsMiddleware } from './middlewares';\nimport { createContentTypeRepository } from './repository';\nimport { transformData } from './transform/data';\n\n/**\n * Repository to :\n * - Access documents via actions (findMany, findOne, create, update, delete, ...)\n * - Execute middlewares on document actions\n * - Apply default parameters to document actions\n *\n * @param strapi\n * @returns DocumentService\n *\n * @example Access documents\n * const article = strapi.documents('api::article.article').create(params)\n * const allArticles = strapi.documents('api::article.article').findMany(params)\n *\n */\nexport const createDocumentService = (strapi: Core.Strapi): Modules.Documents.Service => {\n // Cache the repositories (one per content type)\n const repositories = new Map<string, Modules.Documents.ServiceInstance>();\n\n // Manager to handle document service middlewares\n const middlewares = createMiddlewareManager();\n middlewares.use(databaseErrorsMiddleware);\n\n const factory = function factory(uid: UID.ContentType) {\n if (repositories.has(uid)) {\n return repositories.get(uid)!;\n }\n\n const contentType = strapi.contentType(uid);\n const repository = createContentTypeRepository(uid);\n\n const instance = middlewares.wrapObject(\n repository,\n { uid, contentType },\n {\n exclude: ['updateComponents', 'omitComponentData'],\n }\n );\n\n repositories.set(uid, instance);\n\n return instance;\n } as Modules.Documents.Service;\n\n return Object.assign(factory, {\n utils: {\n transformData,\n },\n use: middlewares.use.bind(middlewares),\n });\n};\n"],"names":["factory"],"mappings":";;;;AAoBa,MAAA,wBAAwB,CAAC,WAAmD;AAEjF,QAAA,mCAAmB;AAGzB,QAAM,cAAc;AACpB,cAAY,IAAI,wBAAwB;AAElC,QAAA,UAAU,SAASA,SAAQ,KAAsB;AACjD,QAAA,aAAa,IAAI,GAAG,GAAG;AAClB,aAAA,aAAa,IAAI,GAAG;AAAA,IAC7B;AAEM,UAAA,cAAc,OAAO,YAAY,GAAG;AACpC,UAAA,aAAa,4BAA4B,GAAG;AAElD,UAAM,WAAW,YAAY;AAAA,MAC3B;AAAA,MACA,EAAE,KAAK,YAAY;AAAA,MACnB;AAAA,QACE,SAAS,CAAC,oBAAoB,mBAAmB;AAAA,MACnD;AAAA,IAAA;AAGW,iBAAA,IAAI,KAAK,QAAQ;AAEvB,WAAA;AAAA,EAAA;AAGF,SAAA,OAAO,OAAO,SAAS;AAAA,IAC5B,OAAO;AAAA,MACL;AAAA,IACF;AAAA,IACA,KAAK,YAAY,IAAI,KAAK,WAAW;AAAA,EAAA,CACtC;AACH;"}
@@ -1 +1 @@
1
- {"version":3,"file":"internationalization.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/internationalization.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA8ErD,QAAA,MAAM,kBAAkB,+JAAuB,CAAC;AAChD,QAAA,MAAM,mBAAmB,sJAAwB,CAAC;AAClD,QAAA,MAAM,wBAAwB,sJAA6B,CAAC;AAC5D,QAAA,MAAM,iBAAiB,sJAAsB,CAAC;AAE9C,OAAO,EACL,kBAAkB,IAAI,aAAa,EACnC,mBAAmB,IAAI,cAAc,EACrC,iBAAiB,IAAI,YAAY,EACjC,wBAAwB,IAAI,mBAAmB,GAChD,CAAC"}
1
+ {"version":3,"file":"internationalization.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/internationalization.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA8FrD,QAAA,MAAM,kBAAkB,+JAAuB,CAAC;AAChD,QAAA,MAAM,mBAAmB,sJAAwB,CAAC;AAClD,QAAA,MAAM,wBAAwB,sJAA6B,CAAC;AAC5D,QAAA,MAAM,iBAAiB,sJAAsB,CAAC;AAE9C,OAAO,EACL,kBAAkB,IAAI,aAAa,EACnC,mBAAmB,IAAI,cAAc,EACrC,iBAAiB,IAAI,YAAY,EACjC,wBAAwB,IAAI,mBAAmB,GAChD,CAAC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const _ = require("lodash/fp");
3
+ const strapiUtils = require("@strapi/utils");
4
+ const fp = require("lodash/fp");
4
5
  const getDefaultLocale = async () => {
5
6
  return strapi.plugin("i18n").service("locales").getDefaultLocale();
6
7
  };
@@ -9,18 +10,20 @@ const defaultLocale = async (contentType, params) => {
9
10
  return params;
10
11
  }
11
12
  if (!params.locale) {
12
- return _.assoc("locale", await getDefaultLocale(), params);
13
+ return fp.assoc("locale", await getDefaultLocale(), params);
13
14
  }
14
15
  return params;
15
16
  };
16
17
  const localeToLookup = (contentType, params) => {
17
- if (!strapi.plugin("i18n").service("content-types").isLocalizedContentType(contentType)) {
18
+ if (!params.locale || !strapi.plugin("i18n").service("content-types").isLocalizedContentType(contentType)) {
18
19
  return params;
19
20
  }
20
- if (params.locale) {
21
- return _.assoc(["lookup", "locale"], params.locale, params);
21
+ if (typeof params.locale !== "string") {
22
+ throw new strapiUtils.errors.ValidationError(
23
+ `Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`
24
+ );
22
25
  }
23
- return params;
26
+ return fp.assoc(["lookup", "locale"], params.locale, params);
24
27
  };
25
28
  const multiLocaleToLookup = (contentType, params) => {
26
29
  if (!strapi.plugin("i18n").service("content-types").isLocalizedContentType(contentType)) {
@@ -30,7 +33,7 @@ const multiLocaleToLookup = (contentType, params) => {
30
33
  if (params.locale === "*") {
31
34
  return params;
32
35
  }
33
- return _.assoc(["lookup", "locale"], params.locale, params);
36
+ return fp.assoc(["lookup", "locale"], params.locale, params);
34
37
  }
35
38
  return params;
36
39
  };
@@ -39,14 +42,20 @@ const localeToData = (contentType, params) => {
39
42
  return params;
40
43
  }
41
44
  if (params.locale) {
42
- return _.assoc(["data", "locale"], params.locale, params);
45
+ const isValidLocale = typeof params.locale === "string" && params.locale !== "*";
46
+ if (isValidLocale) {
47
+ return fp.assoc(["data", "locale"], params.locale, params);
48
+ }
49
+ throw new strapiUtils.errors.ValidationError(
50
+ `Invalid locale param ${params.locale} provided. Document locales must be strings.`
51
+ );
43
52
  }
44
53
  return params;
45
54
  };
46
- const defaultLocaleCurry = _.curry(defaultLocale);
47
- const localeToLookupCurry = _.curry(localeToLookup);
48
- const multiLocaleToLookupCurry = _.curry(multiLocaleToLookup);
49
- const localeToDataCurry = _.curry(localeToData);
55
+ const defaultLocaleCurry = fp.curry(defaultLocale);
56
+ const localeToLookupCurry = fp.curry(localeToLookup);
57
+ const multiLocaleToLookupCurry = fp.curry(multiLocaleToLookup);
58
+ const localeToDataCurry = fp.curry(localeToData);
50
59
  exports.defaultLocale = defaultLocaleCurry;
51
60
  exports.localeToData = localeToDataCurry;
52
61
  exports.localeToLookup = localeToLookupCurry;
@@ -1 +1 @@
1
- {"version":3,"file":"internationalization.js","sources":["../../../src/services/document-service/internationalization.ts"],"sourcesContent":["import type { Struct, Modules } from '@strapi/types';\nimport { curry, assoc } from 'lodash/fp';\n\ntype Transform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\ntype AsyncTransform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Promise<Modules.Documents.Params.All>;\n\nconst getDefaultLocale = async (): Promise<string> => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nconst defaultLocale: AsyncTransform = async (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (!params.locale) {\n return assoc('locale', await getDefaultLocale(), params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst localeToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst multiLocaleToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n if (params.locale === '*') {\n return params;\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Translate locale status parameter into the data that will be saved\n */\nconst localeToData: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n return assoc(['data', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\nconst defaultLocaleCurry = curry(defaultLocale);\nconst localeToLookupCurry = curry(localeToLookup);\nconst multiLocaleToLookupCurry = curry(multiLocaleToLookup);\nconst localeToDataCurry = curry(localeToData);\n\nexport {\n defaultLocaleCurry as defaultLocale,\n localeToLookupCurry as localeToLookup,\n localeToDataCurry as localeToData,\n multiLocaleToLookupCurry as multiLocaleToLookup,\n};\n"],"names":["assoc","curry"],"mappings":";;;AAaA,MAAM,mBAAmB,YAA6B;AACpD,SAAO,OAAO,OAAO,MAAM,EAAE,QAAQ,SAAS,EAAE;AAClD;AAEA,MAAM,gBAAgC,OAAO,aAAa,WAAW;AAC/D,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEI,MAAA,CAAC,OAAO,QAAQ;AAClB,WAAOA,EAAM,MAAA,UAAU,MAAM,oBAAoB,MAAM;AAAA,EACzD;AAEO,SAAA;AACT;AAKA,MAAM,iBAA4B,CAAC,aAAa,WAAW;AACrD,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ;AACjB,WAAOA,EAAAA,MAAM,CAAC,UAAU,QAAQ,GAAG,OAAO,QAAQ,MAAM;AAAA,EAC1D;AAEO,SAAA;AACT;AAKA,MAAM,sBAAiC,CAAC,aAAa,WAAW;AAC1D,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ;AACb,QAAA,OAAO,WAAW,KAAK;AAClB,aAAA;AAAA,IACT;AAEA,WAAOA,EAAAA,MAAM,CAAC,UAAU,QAAQ,GAAG,OAAO,QAAQ,MAAM;AAAA,EAC1D;AAEO,SAAA;AACT;AAKA,MAAM,eAA0B,CAAC,aAAa,WAAW;AACnD,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ;AACjB,WAAOA,EAAAA,MAAM,CAAC,QAAQ,QAAQ,GAAG,OAAO,QAAQ,MAAM;AAAA,EACxD;AAEO,SAAA;AACT;AAEM,MAAA,qBAAqBC,QAAM,aAAa;AACxC,MAAA,sBAAsBA,QAAM,cAAc;AAC1C,MAAA,2BAA2BA,QAAM,mBAAmB;AACpD,MAAA,oBAAoBA,QAAM,YAAY;;;;;"}
1
+ {"version":3,"file":"internationalization.js","sources":["../../../src/services/document-service/internationalization.ts"],"sourcesContent":["import type { Struct, Modules } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport { curry, assoc } from 'lodash/fp';\n\ntype Transform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\ntype AsyncTransform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Promise<Modules.Documents.Params.All>;\n\nconst getDefaultLocale = async (): Promise<string> => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nconst defaultLocale: AsyncTransform = async (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (!params.locale) {\n return assoc('locale', await getDefaultLocale(), params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst localeToLookup: Transform = (contentType, params) => {\n if (\n !params.locale ||\n !strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)\n ) {\n return params;\n }\n\n if (typeof params.locale !== 'string') {\n // localeToLookup accepts locales of '*'. This is because the document\n // service functions that use this transform work with the '*' locale\n // to return all locales.\n throw new errors.ValidationError(\n `Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`\n );\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst multiLocaleToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n if (params.locale === '*') {\n return params;\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Translate locale status parameter into the data that will be saved\n */\nconst localeToData: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n const isValidLocale = typeof params.locale === 'string' && params.locale !== '*';\n if (isValidLocale) {\n return assoc(['data', 'locale'], params.locale, params);\n }\n\n throw new errors.ValidationError(\n `Invalid locale param ${params.locale} provided. Document locales must be strings.`\n );\n }\n\n return params;\n};\n\nconst defaultLocaleCurry = curry(defaultLocale);\nconst localeToLookupCurry = curry(localeToLookup);\nconst multiLocaleToLookupCurry = curry(multiLocaleToLookup);\nconst localeToDataCurry = curry(localeToData);\n\nexport {\n defaultLocaleCurry as defaultLocale,\n localeToLookupCurry as localeToLookup,\n localeToDataCurry as localeToData,\n multiLocaleToLookupCurry as multiLocaleToLookup,\n};\n"],"names":["assoc","errors","curry"],"mappings":";;;;AAcA,MAAM,mBAAmB,YAA6B;AACpD,SAAO,OAAO,OAAO,MAAM,EAAE,QAAQ,SAAS,EAAE;AAClD;AAEA,MAAM,gBAAgC,OAAO,aAAa,WAAW;AAC/D,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEI,MAAA,CAAC,OAAO,QAAQ;AAClB,WAAOA,GAAM,MAAA,UAAU,MAAM,oBAAoB,MAAM;AAAA,EACzD;AAEO,SAAA;AACT;AAKA,MAAM,iBAA4B,CAAC,aAAa,WAAW;AACzD,MACE,CAAC,OAAO,UACR,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAClF;AACO,WAAA;AAAA,EACT;AAEI,MAAA,OAAO,OAAO,WAAW,UAAU;AAIrC,UAAM,IAAIC,YAAO,OAAA;AAAA,MACf,wBAAwB,OAAO,OAAO,MAAM,CAAC;AAAA,IAAA;AAAA,EAEjD;AAEA,SAAOD,GAAAA,MAAM,CAAC,UAAU,QAAQ,GAAG,OAAO,QAAQ,MAAM;AAC1D;AAKA,MAAM,sBAAiC,CAAC,aAAa,WAAW;AAC1D,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ;AACb,QAAA,OAAO,WAAW,KAAK;AAClB,aAAA;AAAA,IACT;AAEA,WAAOA,GAAAA,MAAM,CAAC,UAAU,QAAQ,GAAG,OAAO,QAAQ,MAAM;AAAA,EAC1D;AAEO,SAAA;AACT;AAKA,MAAM,eAA0B,CAAC,aAAa,WAAW;AACnD,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ;AACjB,UAAM,gBAAgB,OAAO,OAAO,WAAW,YAAY,OAAO,WAAW;AAC7E,QAAI,eAAe;AACjB,aAAOA,GAAAA,MAAM,CAAC,QAAQ,QAAQ,GAAG,OAAO,QAAQ,MAAM;AAAA,IACxD;AAEA,UAAM,IAAIC,YAAO,OAAA;AAAA,MACf,wBAAwB,OAAO,MAAM;AAAA,IAAA;AAAA,EAEzC;AAEO,SAAA;AACT;AAEM,MAAA,qBAAqBC,SAAM,aAAa;AACxC,MAAA,sBAAsBA,SAAM,cAAc;AAC1C,MAAA,2BAA2BA,SAAM,mBAAmB;AACpD,MAAA,oBAAoBA,SAAM,YAAY;;;;;"}
@@ -1,3 +1,4 @@
1
+ import { errors } from "@strapi/utils";
1
2
  import { curry, assoc } from "lodash/fp";
2
3
  const getDefaultLocale = async () => {
3
4
  return strapi.plugin("i18n").service("locales").getDefaultLocale();
@@ -12,13 +13,15 @@ const defaultLocale = async (contentType, params) => {
12
13
  return params;
13
14
  };
14
15
  const localeToLookup = (contentType, params) => {
15
- if (!strapi.plugin("i18n").service("content-types").isLocalizedContentType(contentType)) {
16
+ if (!params.locale || !strapi.plugin("i18n").service("content-types").isLocalizedContentType(contentType)) {
16
17
  return params;
17
18
  }
18
- if (params.locale) {
19
- return assoc(["lookup", "locale"], params.locale, params);
19
+ if (typeof params.locale !== "string") {
20
+ throw new errors.ValidationError(
21
+ `Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`
22
+ );
20
23
  }
21
- return params;
24
+ return assoc(["lookup", "locale"], params.locale, params);
22
25
  };
23
26
  const multiLocaleToLookup = (contentType, params) => {
24
27
  if (!strapi.plugin("i18n").service("content-types").isLocalizedContentType(contentType)) {
@@ -37,7 +40,13 @@ const localeToData = (contentType, params) => {
37
40
  return params;
38
41
  }
39
42
  if (params.locale) {
40
- return assoc(["data", "locale"], params.locale, params);
43
+ const isValidLocale = typeof params.locale === "string" && params.locale !== "*";
44
+ if (isValidLocale) {
45
+ return assoc(["data", "locale"], params.locale, params);
46
+ }
47
+ throw new errors.ValidationError(
48
+ `Invalid locale param ${params.locale} provided. Document locales must be strings.`
49
+ );
41
50
  }
42
51
  return params;
43
52
  };
@@ -1 +1 @@
1
- {"version":3,"file":"internationalization.mjs","sources":["../../../src/services/document-service/internationalization.ts"],"sourcesContent":["import type { Struct, Modules } from '@strapi/types';\nimport { curry, assoc } from 'lodash/fp';\n\ntype Transform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\ntype AsyncTransform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Promise<Modules.Documents.Params.All>;\n\nconst getDefaultLocale = async (): Promise<string> => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nconst defaultLocale: AsyncTransform = async (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (!params.locale) {\n return assoc('locale', await getDefaultLocale(), params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst localeToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst multiLocaleToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n if (params.locale === '*') {\n return params;\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Translate locale status parameter into the data that will be saved\n */\nconst localeToData: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n return assoc(['data', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\nconst defaultLocaleCurry = curry(defaultLocale);\nconst localeToLookupCurry = curry(localeToLookup);\nconst multiLocaleToLookupCurry = curry(multiLocaleToLookup);\nconst localeToDataCurry = curry(localeToData);\n\nexport {\n defaultLocaleCurry as defaultLocale,\n localeToLookupCurry as localeToLookup,\n localeToDataCurry as localeToData,\n multiLocaleToLookupCurry as multiLocaleToLookup,\n};\n"],"names":[],"mappings":";AAaA,MAAM,mBAAmB,YAA6B;AACpD,SAAO,OAAO,OAAO,MAAM,EAAE,QAAQ,SAAS,EAAE;AAClD;AAEA,MAAM,gBAAgC,OAAO,aAAa,WAAW;AAC/D,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEI,MAAA,CAAC,OAAO,QAAQ;AAClB,WAAO,MAAM,UAAU,MAAM,oBAAoB,MAAM;AAAA,EACzD;AAEO,SAAA;AACT;AAKA,MAAM,iBAA4B,CAAC,aAAa,WAAW;AACrD,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ;AACjB,WAAO,MAAM,CAAC,UAAU,QAAQ,GAAG,OAAO,QAAQ,MAAM;AAAA,EAC1D;AAEO,SAAA;AACT;AAKA,MAAM,sBAAiC,CAAC,aAAa,WAAW;AAC1D,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ;AACb,QAAA,OAAO,WAAW,KAAK;AAClB,aAAA;AAAA,IACT;AAEA,WAAO,MAAM,CAAC,UAAU,QAAQ,GAAG,OAAO,QAAQ,MAAM;AAAA,EAC1D;AAEO,SAAA;AACT;AAKA,MAAM,eAA0B,CAAC,aAAa,WAAW;AACnD,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ;AACjB,WAAO,MAAM,CAAC,QAAQ,QAAQ,GAAG,OAAO,QAAQ,MAAM;AAAA,EACxD;AAEO,SAAA;AACT;AAEM,MAAA,qBAAqB,MAAM,aAAa;AACxC,MAAA,sBAAsB,MAAM,cAAc;AAC1C,MAAA,2BAA2B,MAAM,mBAAmB;AACpD,MAAA,oBAAoB,MAAM,YAAY;"}
1
+ {"version":3,"file":"internationalization.mjs","sources":["../../../src/services/document-service/internationalization.ts"],"sourcesContent":["import type { Struct, Modules } from '@strapi/types';\nimport { errors } from '@strapi/utils';\nimport { curry, assoc } from 'lodash/fp';\n\ntype Transform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Modules.Documents.Params.All;\n\ntype AsyncTransform = (\n contentType: Struct.SingleTypeSchema | Struct.CollectionTypeSchema,\n params: Modules.Documents.Params.All\n) => Promise<Modules.Documents.Params.All>;\n\nconst getDefaultLocale = async (): Promise<string> => {\n return strapi.plugin('i18n').service('locales').getDefaultLocale();\n};\n\nconst defaultLocale: AsyncTransform = async (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (!params.locale) {\n return assoc('locale', await getDefaultLocale(), params);\n }\n\n return params;\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst localeToLookup: Transform = (contentType, params) => {\n if (\n !params.locale ||\n !strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)\n ) {\n return params;\n }\n\n if (typeof params.locale !== 'string') {\n // localeToLookup accepts locales of '*'. This is because the document\n // service functions that use this transform work with the '*' locale\n // to return all locales.\n throw new errors.ValidationError(\n `Invalid locale param ${String(params.locale)} provided. Document locales must be strings.`\n );\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n};\n\n/**\n * Add locale lookup query to the params\n */\nconst multiLocaleToLookup: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n if (params.locale === '*') {\n return params;\n }\n\n return assoc(['lookup', 'locale'], params.locale, params);\n }\n\n return params;\n};\n\n/**\n * Translate locale status parameter into the data that will be saved\n */\nconst localeToData: Transform = (contentType, params) => {\n if (!strapi.plugin('i18n').service('content-types').isLocalizedContentType(contentType)) {\n return params;\n }\n\n if (params.locale) {\n const isValidLocale = typeof params.locale === 'string' && params.locale !== '*';\n if (isValidLocale) {\n return assoc(['data', 'locale'], params.locale, params);\n }\n\n throw new errors.ValidationError(\n `Invalid locale param ${params.locale} provided. Document locales must be strings.`\n );\n }\n\n return params;\n};\n\nconst defaultLocaleCurry = curry(defaultLocale);\nconst localeToLookupCurry = curry(localeToLookup);\nconst multiLocaleToLookupCurry = curry(multiLocaleToLookup);\nconst localeToDataCurry = curry(localeToData);\n\nexport {\n defaultLocaleCurry as defaultLocale,\n localeToLookupCurry as localeToLookup,\n localeToDataCurry as localeToData,\n multiLocaleToLookupCurry as multiLocaleToLookup,\n};\n"],"names":[],"mappings":";;AAcA,MAAM,mBAAmB,YAA6B;AACpD,SAAO,OAAO,OAAO,MAAM,EAAE,QAAQ,SAAS,EAAE;AAClD;AAEA,MAAM,gBAAgC,OAAO,aAAa,WAAW;AAC/D,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEI,MAAA,CAAC,OAAO,QAAQ;AAClB,WAAO,MAAM,UAAU,MAAM,oBAAoB,MAAM;AAAA,EACzD;AAEO,SAAA;AACT;AAKA,MAAM,iBAA4B,CAAC,aAAa,WAAW;AACzD,MACE,CAAC,OAAO,UACR,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAClF;AACO,WAAA;AAAA,EACT;AAEI,MAAA,OAAO,OAAO,WAAW,UAAU;AAIrC,UAAM,IAAI,OAAO;AAAA,MACf,wBAAwB,OAAO,OAAO,MAAM,CAAC;AAAA,IAAA;AAAA,EAEjD;AAEA,SAAO,MAAM,CAAC,UAAU,QAAQ,GAAG,OAAO,QAAQ,MAAM;AAC1D;AAKA,MAAM,sBAAiC,CAAC,aAAa,WAAW;AAC1D,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ;AACb,QAAA,OAAO,WAAW,KAAK;AAClB,aAAA;AAAA,IACT;AAEA,WAAO,MAAM,CAAC,UAAU,QAAQ,GAAG,OAAO,QAAQ,MAAM;AAAA,EAC1D;AAEO,SAAA;AACT;AAKA,MAAM,eAA0B,CAAC,aAAa,WAAW;AACnD,MAAA,CAAC,OAAO,OAAO,MAAM,EAAE,QAAQ,eAAe,EAAE,uBAAuB,WAAW,GAAG;AAChF,WAAA;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ;AACjB,UAAM,gBAAgB,OAAO,OAAO,WAAW,YAAY,OAAO,WAAW;AAC7E,QAAI,eAAe;AACjB,aAAO,MAAM,CAAC,QAAQ,QAAQ,GAAG,OAAO,QAAQ,MAAM;AAAA,IACxD;AAEA,UAAM,IAAI,OAAO;AAAA,MACf,wBAAwB,OAAO,MAAM;AAAA,IAAA;AAAA,EAEzC;AAEO,SAAA;AACT;AAEM,MAAA,qBAAqB,MAAM,aAAa;AACxC,MAAA,sBAAsB,MAAM,cAAc;AAC1C,MAAA,2BAA2B,MAAM,mBAAmB;AACpD,MAAA,oBAAoB,MAAM,YAAY;"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const _ = require("lodash/fp");
3
+ const fp = require("lodash/fp");
4
4
  const pickSelectionParams = (data) => {
5
- return _.pick(["fields", "populate", "status"], data);
5
+ return fp.pick(["fields", "populate", "status"], data);
6
6
  };
7
7
  exports.pickSelectionParams = pickSelectionParams;
8
8
  //# sourceMappingURL=params.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"params.js","sources":["../../../src/services/document-service/params.ts"],"sourcesContent":["import { pick } from 'lodash/fp';\nimport type { UID, Modules } from '@strapi/types';\n\nconst pickSelectionParams = <TUID extends UID.ContentType>(\n data: unknown\n): Modules.Documents.Params.Pick<TUID, 'fields' | 'populate' | 'status'> => {\n return pick(['fields', 'populate', 'status'], data);\n};\n\nexport { pickSelectionParams };\n"],"names":["pick"],"mappings":";;;AAGM,MAAA,sBAAsB,CAC1B,SAC0E;AAC1E,SAAOA,EAAAA,KAAK,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI;AACpD;;"}
1
+ {"version":3,"file":"params.js","sources":["../../../src/services/document-service/params.ts"],"sourcesContent":["import { pick } from 'lodash/fp';\nimport type { UID, Modules } from '@strapi/types';\n\nconst pickSelectionParams = <TUID extends UID.ContentType>(\n data: unknown\n): Modules.Documents.Params.Pick<TUID, 'fields' | 'populate' | 'status'> => {\n return pick(['fields', 'populate', 'status'], data);\n};\n\nexport { pickSelectionParams };\n"],"names":["pick"],"mappings":";;;AAGM,MAAA,sBAAsB,CAC1B,SAC0E;AAC1E,SAAOA,GAAAA,KAAK,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI;AACpD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/repository.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAY3E,eAAO,MAAM,2BAA2B,EAAE,uBA4SzC,CAAC"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/repository.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAa3E,eAAO,MAAM,2BAA2B,EAAE,uBAyUzC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const _ = require("lodash/fp");
3
+ const fp = require("lodash/fp");
4
4
  const strapiUtils = require("@strapi/utils");
5
5
  const common = require("./common.js");
6
6
  const draftAndPublish = require("./draft-and-publish.js");
@@ -12,16 +12,19 @@ const transformContentTypesToModels = require("../../utils/transform-content-typ
12
12
  const populate = require("./utils/populate.js");
13
13
  const query = require("./transform/query.js");
14
14
  const idTransform = require("./transform/id-transform.js");
15
+ const events = require("./events.js");
15
16
  const createContentTypeRepository = (uid) => {
16
17
  const contentType = strapi.contentType(uid);
17
18
  const hasDraftAndPublish = strapiUtils.contentTypes.hasDraftAndPublish(contentType);
18
19
  const entries$1 = entries.createEntriesService(uid);
20
+ const eventManager = events.createEventManager(strapi, uid);
21
+ const emitEvent = fp.curry(eventManager.emitEvent);
19
22
  async function findMany(params2 = {}) {
20
23
  const query$1 = await strapiUtils.async.pipe(
21
24
  draftAndPublish.defaultToDraft,
22
25
  draftAndPublish.statusToLookup(contentType),
23
26
  internationalization.defaultLocale(contentType),
24
- internationalization.localeToLookup(contentType),
27
+ internationalization.multiLocaleToLookup(contentType),
25
28
  idTransform.transformParamsDocumentId(uid),
26
29
  query.transformParamsToQuery(uid)
27
30
  )(params2 || {});
@@ -47,25 +50,29 @@ const createContentTypeRepository = (uid) => {
47
50
  internationalization.localeToLookup(contentType),
48
51
  idTransform.transformParamsDocumentId(uid),
49
52
  query.transformParamsToQuery(uid),
50
- (query2) => _.assoc("where", { ...query2.where, documentId }, query2)
53
+ (query2) => fp.assoc("where", { ...query2.where, documentId }, query2)
51
54
  )(params2);
52
55
  return strapi.db.query(uid).findOne(query$1);
53
56
  }
54
57
  async function deleteDocument(opts = {}) {
55
58
  const { documentId, ...params2 } = opts;
56
59
  const query$1 = await strapiUtils.async.pipe(
57
- _.omit("status"),
60
+ fp.omit("status"),
58
61
  internationalization.defaultLocale(contentType),
59
62
  internationalization.multiLocaleToLookup(contentType),
60
63
  query.transformParamsToQuery(uid),
61
- (query2) => _.assoc("where", { ...query2.where, documentId }, query2)
64
+ (query2) => fp.assoc("where", { ...query2.where, documentId }, query2)
62
65
  )(params2);
63
66
  if (params2.status === "draft") {
64
67
  throw new Error("Cannot delete a draft document");
65
68
  }
66
69
  const entriesToDelete = await strapi.db.query(uid).findMany(query$1);
67
- await strapiUtils.async.map(entriesToDelete, (entryToDelete) => entries$1.delete(entryToDelete.id));
68
- return { deletedEntries: entriesToDelete };
70
+ const deletedEntries = await strapiUtils.async.map(
71
+ entriesToDelete,
72
+ (entryToDelete) => entries$1.delete(entryToDelete.id)
73
+ );
74
+ entriesToDelete.forEach(emitEvent("entry.delete"));
75
+ return { documentId, entries: deletedEntries };
69
76
  }
70
77
  async function create(opts = {}) {
71
78
  const { documentId, ...params2 } = opts;
@@ -77,11 +84,12 @@ const createContentTypeRepository = (uid) => {
77
84
  internationalization.localeToData(contentType)
78
85
  )(params2);
79
86
  const doc = await entries$1.create(queryParams);
87
+ emitEvent("entry.create", doc);
80
88
  if (hasDraftAndPublish && params2.status === "published") {
81
89
  return publish({
82
90
  ...params2,
83
91
  documentId: doc.documentId
84
- }).then((doc2) => doc2.versions[0]);
92
+ }).then((doc2) => doc2.entries[0]);
85
93
  }
86
94
  return doc;
87
95
  }
@@ -92,7 +100,7 @@ const createContentTypeRepository = (uid) => {
92
100
  internationalization.defaultLocale(contentType),
93
101
  internationalization.multiLocaleToLookup(contentType)
94
102
  )(params2);
95
- const entriesToClone = await strapi.db?.query(uid).findMany({
103
+ const entriesToClone = await strapi.db.query(uid).findMany({
96
104
  where: {
97
105
  ...queryParams?.lookup,
98
106
  documentId,
@@ -105,15 +113,16 @@ const createContentTypeRepository = (uid) => {
105
113
  const clonedEntries = await strapiUtils.async.map(
106
114
  entriesToClone,
107
115
  strapiUtils.async.pipe(
108
- _.omit("id"),
116
+ fp.omit("id"),
109
117
  // assign new documentId
110
- _.assoc("documentId", transformContentTypesToModels.createDocumentId()),
118
+ fp.assoc("documentId", transformContentTypesToModels.createDocumentId()),
111
119
  // Merge new data into it
112
- (data) => _.merge(data, queryParams.data),
120
+ (data) => fp.merge(data, queryParams.data),
113
121
  (data) => entries$1.create({ ...queryParams, data, status: "draft" })
114
122
  )
115
123
  );
116
- return { documentId: clonedEntries.at(0)?.documentId, versions: clonedEntries };
124
+ clonedEntries.forEach(emitEvent("entry.create"));
125
+ return { documentId: clonedEntries.at(0)?.documentId, entries: clonedEntries };
117
126
  }
118
127
  async function update(opts = {}) {
119
128
  const { documentId, ...params$1 } = opts;
@@ -133,6 +142,7 @@ const createContentTypeRepository = (uid) => {
133
142
  let updatedDraft = null;
134
143
  if (entryToUpdate) {
135
144
  updatedDraft = await entries$1.update(entryToUpdate, queryParams);
145
+ emitEvent("entry.update", updatedDraft);
136
146
  }
137
147
  if (!updatedDraft) {
138
148
  const documentExists = await strapi.db.query(contentType.uid).findOne({ where: { documentId } });
@@ -141,13 +151,14 @@ const createContentTypeRepository = (uid) => {
141
151
  ...queryParams,
142
152
  data: { ...queryParams.data, documentId }
143
153
  });
154
+ emitEvent("entry.create", updatedDraft);
144
155
  }
145
156
  }
146
157
  if (hasDraftAndPublish && updatedDraft && params$1.status === "published") {
147
158
  return publish({
148
159
  ...params$1,
149
160
  documentId
150
- }).then((doc) => doc.versions[0]);
161
+ }).then((doc) => doc.entries[0]);
151
162
  }
152
163
  return updatedDraft;
153
164
  }
@@ -167,37 +178,46 @@ const createContentTypeRepository = (uid) => {
167
178
  internationalization.defaultLocale(contentType),
168
179
  internationalization.multiLocaleToLookup(contentType)
169
180
  )(params2);
170
- await deleteDocument({
171
- ...queryParams,
172
- documentId,
173
- lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } }
174
- });
175
- const draftsToPublish = await strapi.db?.query(uid).findMany({
176
- where: {
177
- ...queryParams?.lookup,
178
- documentId,
179
- publishedAt: null
180
- },
181
- populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
182
- });
183
- const versions = await strapiUtils.async.map(
181
+ const [draftsToPublish, publishedToDelete] = await Promise.all([
182
+ strapi.db.query(uid).findMany({
183
+ where: {
184
+ ...queryParams?.lookup,
185
+ documentId,
186
+ publishedAt: null
187
+ // Ignore lookup
188
+ },
189
+ // Populate relations, media, compos and dz
190
+ populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
191
+ }),
192
+ strapi.db.query(uid).findMany({
193
+ where: {
194
+ ...queryParams?.lookup,
195
+ documentId,
196
+ publishedAt: { $ne: null }
197
+ },
198
+ select: ["id"]
199
+ })
200
+ ]);
201
+ await strapiUtils.async.map(publishedToDelete, (entry) => entries$1.delete(entry.id));
202
+ const publishedEntries = await strapiUtils.async.map(
184
203
  draftsToPublish,
185
204
  (draft) => entries$1.publish(draft, queryParams)
186
205
  );
187
- return { versions };
206
+ publishedEntries.forEach(emitEvent("entry.publish"));
207
+ return { documentId, entries: publishedEntries };
188
208
  }
189
209
  async function unpublish(opts = {}) {
190
210
  const { documentId, ...params2 } = opts;
191
- const queryParams = await strapiUtils.async.pipe(
211
+ const query$1 = await strapiUtils.async.pipe(
192
212
  internationalization.defaultLocale(contentType),
193
- internationalization.multiLocaleToLookup(contentType)
213
+ internationalization.multiLocaleToLookup(contentType),
214
+ query.transformParamsToQuery(uid),
215
+ (query2) => fp.assoc("where", { ...query2.where, documentId, publishedAt: { $ne: null } }, query2)
194
216
  )(params2);
195
- const { deletedEntries } = await deleteDocument({
196
- ...params2,
197
- documentId,
198
- lookup: { ...queryParams?.lookup, publishedAt: { $ne: null } }
199
- });
200
- return { versions: deletedEntries };
217
+ const versionsToDelete = await strapi.db.query(uid).findMany(query$1);
218
+ await strapiUtils.async.map(versionsToDelete, (entry) => entries$1.delete(entry.id));
219
+ versionsToDelete.forEach(emitEvent("entry.unpublish"));
220
+ return { documentId, entries: versionsToDelete };
201
221
  }
202
222
  async function discardDraft(opts = {}) {
203
223
  const { documentId, ...params2 } = opts;
@@ -205,24 +225,32 @@ const createContentTypeRepository = (uid) => {
205
225
  internationalization.defaultLocale(contentType),
206
226
  internationalization.multiLocaleToLookup(contentType)
207
227
  )(params2);
208
- await deleteDocument({
209
- ...queryParams,
210
- documentId,
211
- lookup: { ...queryParams?.lookup, publishedAt: null }
212
- });
213
- const entriesToDraft = await strapi.db?.query(uid).findMany({
214
- where: {
215
- ...queryParams?.lookup,
216
- documentId,
217
- publishedAt: { $ne: null }
218
- },
219
- populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
220
- });
228
+ const [versionsToDraft, versionsToDelete] = await Promise.all([
229
+ strapi.db.query(uid).findMany({
230
+ where: {
231
+ ...queryParams?.lookup,
232
+ documentId,
233
+ publishedAt: { $ne: null }
234
+ },
235
+ // Populate relations, media, compos and dz
236
+ populate: populate.getDeepPopulate(uid, { relationalFields: ["documentId", "locale"] })
237
+ }),
238
+ strapi.db.query(uid).findMany({
239
+ where: {
240
+ ...queryParams?.lookup,
241
+ documentId,
242
+ publishedAt: null
243
+ },
244
+ select: ["id"]
245
+ })
246
+ ]);
247
+ await strapiUtils.async.map(versionsToDelete, (entry) => entries$1.delete(entry.id));
221
248
  const draftEntries = await strapiUtils.async.map(
222
- entriesToDraft,
249
+ versionsToDraft,
223
250
  (entry) => entries$1.discardDraft(entry, queryParams)
224
251
  );
225
- return { versions: draftEntries };
252
+ draftEntries.forEach(emitEvent("entry.draft-discard"));
253
+ return { documentId, entries: draftEntries };
226
254
  }
227
255
  async function updateComponents(entry, data) {
228
256
  return components.updateComponents(uid, entry, data);