@strapi/core 0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e → 0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b

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 (240) 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 +4 -18
  26. package/dist/core-api/controller/transform.js.map +1 -1
  27. package/dist/core-api/controller/transform.mjs +4 -18
  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 +14 -8
  52. package/dist/core-api/service/single-type.d.ts.map +1 -1
  53. package/dist/core-api/service/single-type.js +36 -50
  54. package/dist/core-api/service/single-type.js.map +1 -1
  55. package/dist/core-api/service/single-type.mjs +35 -50
  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/common.d.ts +4 -0
  68. package/dist/services/document-service/common.d.ts.map +1 -0
  69. package/dist/services/document-service/common.js +7 -0
  70. package/dist/services/document-service/common.js.map +1 -0
  71. package/dist/services/document-service/common.mjs +7 -0
  72. package/dist/services/document-service/common.mjs.map +1 -0
  73. package/dist/services/document-service/document-engine.d.ts.map +1 -1
  74. package/dist/services/document-service/document-engine.js +117 -76
  75. package/dist/services/document-service/document-engine.js.map +1 -1
  76. package/dist/services/document-service/document-engine.mjs +112 -71
  77. package/dist/services/document-service/document-engine.mjs.map +1 -1
  78. package/dist/services/document-service/draft-and-publish.d.ts +24 -0
  79. package/dist/services/document-service/draft-and-publish.d.ts.map +1 -0
  80. package/dist/services/document-service/draft-and-publish.js +41 -0
  81. package/dist/services/document-service/draft-and-publish.js.map +1 -0
  82. package/dist/services/document-service/draft-and-publish.mjs +41 -0
  83. package/dist/services/document-service/draft-and-publish.mjs.map +1 -0
  84. package/dist/services/document-service/{document-service.d.ts → index.d.ts} +2 -4
  85. package/dist/services/document-service/index.d.ts.map +1 -0
  86. package/dist/services/document-service/index.js +22 -0
  87. package/dist/services/document-service/index.js.map +1 -0
  88. package/dist/services/document-service/index.mjs +22 -0
  89. package/dist/services/document-service/index.mjs.map +1 -0
  90. package/dist/services/document-service/internationalization.d.ts +8 -0
  91. package/dist/services/document-service/internationalization.d.ts.map +1 -0
  92. package/dist/services/document-service/internationalization.js +54 -0
  93. package/dist/services/document-service/internationalization.js.map +1 -0
  94. package/dist/services/document-service/internationalization.mjs +54 -0
  95. package/dist/services/document-service/internationalization.mjs.map +1 -0
  96. package/dist/services/document-service/middlewares.d.ts +8 -0
  97. package/dist/services/document-service/middlewares.d.ts.map +1 -0
  98. package/dist/services/document-service/middlewares.js +46 -0
  99. package/dist/services/document-service/middlewares.js.map +1 -0
  100. package/dist/services/document-service/middlewares.mjs +46 -0
  101. package/dist/services/document-service/middlewares.mjs.map +1 -0
  102. package/dist/services/document-service/repositories/content-type.d.ts +3 -0
  103. package/dist/services/document-service/repositories/content-type.d.ts.map +1 -0
  104. package/dist/services/document-service/repositories/content-type.js +139 -0
  105. package/dist/services/document-service/repositories/content-type.js.map +1 -0
  106. package/dist/services/document-service/repositories/content-type.mjs +139 -0
  107. package/dist/services/document-service/repositories/content-type.mjs.map +1 -0
  108. package/dist/services/document-service/transform/data.d.ts +5 -0
  109. package/dist/services/document-service/transform/data.d.ts.map +1 -0
  110. package/dist/services/document-service/transform/data.js +13 -0
  111. package/dist/services/document-service/transform/data.js.map +1 -0
  112. package/dist/services/document-service/transform/data.mjs +13 -0
  113. package/dist/services/document-service/transform/data.mjs.map +1 -0
  114. package/dist/services/document-service/transform/fields.d.ts +5 -0
  115. package/dist/services/document-service/transform/fields.d.ts.map +1 -0
  116. package/dist/services/document-service/transform/fields.js +24 -0
  117. package/dist/services/document-service/transform/fields.js.map +1 -0
  118. package/dist/services/document-service/transform/fields.mjs +24 -0
  119. package/dist/services/document-service/transform/fields.mjs.map +1 -0
  120. package/dist/services/document-service/transform/filters.d.ts +3 -0
  121. package/dist/services/document-service/transform/filters.d.ts.map +1 -0
  122. package/dist/services/document-service/transform/id-map.d.ts +23 -0
  123. package/dist/services/document-service/transform/id-map.d.ts.map +1 -0
  124. package/dist/services/document-service/transform/id-map.js +72 -0
  125. package/dist/services/document-service/transform/id-map.js.map +1 -0
  126. package/dist/services/document-service/transform/id-map.mjs +72 -0
  127. package/dist/services/document-service/transform/id-map.mjs.map +1 -0
  128. package/dist/services/document-service/transform/id-transform.d.ts +19 -0
  129. package/dist/services/document-service/transform/id-transform.d.ts.map +1 -0
  130. package/dist/services/document-service/transform/id-transform.js +27 -0
  131. package/dist/services/document-service/transform/id-transform.js.map +1 -0
  132. package/dist/services/document-service/transform/id-transform.mjs +27 -0
  133. package/dist/services/document-service/transform/id-transform.mjs.map +1 -0
  134. package/dist/services/document-service/transform/populate.d.ts +3 -0
  135. package/dist/services/document-service/transform/populate.d.ts.map +1 -0
  136. package/dist/services/document-service/transform/populate.js +21 -0
  137. package/dist/services/document-service/transform/populate.js.map +1 -0
  138. package/dist/services/document-service/transform/populate.mjs +21 -0
  139. package/dist/services/document-service/transform/populate.mjs.map +1 -0
  140. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts +13 -0
  141. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -0
  142. package/dist/services/document-service/transform/relations/extract/data-ids.js +79 -0
  143. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -0
  144. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +79 -0
  145. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -0
  146. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts +10 -0
  147. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -0
  148. package/dist/services/document-service/transform/relations/transform/data-ids.js +117 -0
  149. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -0
  150. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +117 -0
  151. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -0
  152. package/dist/services/document-service/transform/relations/transform/output-ids.d.ts +4 -0
  153. package/dist/services/document-service/transform/relations/transform/output-ids.d.ts.map +1 -0
  154. package/dist/services/document-service/transform/relations/utils/data.d.ts +4 -0
  155. package/dist/services/document-service/transform/relations/utils/data.d.ts.map +1 -0
  156. package/dist/services/document-service/transform/relations/utils/data.js +12 -0
  157. package/dist/services/document-service/transform/relations/utils/data.js.map +1 -0
  158. package/dist/services/document-service/transform/relations/utils/data.mjs +12 -0
  159. package/dist/services/document-service/transform/relations/utils/data.mjs.map +1 -0
  160. package/dist/services/document-service/transform/relations/utils/i18n.d.ts +10 -0
  161. package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -0
  162. package/dist/services/document-service/transform/relations/utils/i18n.js +31 -0
  163. package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -0
  164. package/dist/services/document-service/transform/relations/utils/i18n.mjs +31 -0
  165. package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -0
  166. package/dist/services/document-service/transform/relations/utils/types.d.ts +12 -0
  167. package/dist/services/document-service/transform/relations/utils/types.d.ts.map +1 -0
  168. package/dist/services/document-service/transform/sort.d.ts +5 -0
  169. package/dist/services/document-service/transform/sort.d.ts.map +1 -0
  170. package/dist/services/document-service/transform/types.d.ts +13 -0
  171. package/dist/services/document-service/transform/types.d.ts.map +1 -0
  172. package/dist/services/document-service/transform/utils.d.ts +9 -0
  173. package/dist/services/document-service/transform/utils.d.ts.map +1 -0
  174. package/dist/services/document-service/utils/populate.d.ts +3 -0
  175. package/dist/services/document-service/utils/populate.d.ts.map +1 -0
  176. package/dist/services/document-service/utils/populate.js +41 -0
  177. package/dist/services/document-service/utils/populate.js.map +1 -0
  178. package/dist/services/document-service/utils/populate.mjs +41 -0
  179. package/dist/services/document-service/utils/populate.mjs.map +1 -0
  180. package/dist/services/entity-validator/blocks-validator.d.ts.map +1 -1
  181. package/dist/services/entity-validator/blocks-validator.js +22 -2
  182. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  183. package/dist/services/entity-validator/blocks-validator.mjs +22 -2
  184. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  185. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  186. package/dist/services/entity-validator/validators.js +7 -8
  187. package/dist/services/entity-validator/validators.js.map +1 -1
  188. package/dist/services/entity-validator/validators.mjs +7 -8
  189. package/dist/services/entity-validator/validators.mjs.map +1 -1
  190. package/dist/services/server/compose-endpoint.d.ts.map +1 -1
  191. package/dist/services/server/compose-endpoint.js +3 -0
  192. package/dist/services/server/compose-endpoint.js.map +1 -1
  193. package/dist/services/server/compose-endpoint.mjs +3 -0
  194. package/dist/services/server/compose-endpoint.mjs.map +1 -1
  195. package/dist/services/webhook-store.js +2 -2
  196. package/dist/services/webhook-store.js.map +1 -1
  197. package/dist/services/webhook-store.mjs +2 -2
  198. package/dist/services/webhook-store.mjs.map +1 -1
  199. package/dist/utils/transform-content-types-to-models.d.ts +174 -3
  200. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  201. package/dist/utils/transform-content-types-to-models.js +80 -41
  202. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  203. package/dist/utils/transform-content-types-to-models.mjs +79 -41
  204. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  205. package/package.json +14 -14
  206. package/dist/core-api/service/get-fetch-params.d.ts +0 -7
  207. package/dist/core-api/service/get-fetch-params.d.ts.map +0 -1
  208. package/dist/core-api/service/get-fetch-params.js +0 -14
  209. package/dist/core-api/service/get-fetch-params.js.map +0 -1
  210. package/dist/core-api/service/get-fetch-params.mjs +0 -14
  211. package/dist/core-api/service/get-fetch-params.mjs.map +0 -1
  212. package/dist/services/document-service/document-service.d.ts.map +0 -1
  213. package/dist/services/document-service/document-service.js +0 -132
  214. package/dist/services/document-service/document-service.js.map +0 -1
  215. package/dist/services/document-service/document-service.mjs +0 -132
  216. package/dist/services/document-service/document-service.mjs.map +0 -1
  217. package/dist/services/document-service/middlewares/defaults/draft-and-publish.d.ts +0 -26
  218. package/dist/services/document-service/middlewares/defaults/draft-and-publish.d.ts.map +0 -1
  219. package/dist/services/document-service/middlewares/defaults/draft-and-publish.js +0 -58
  220. package/dist/services/document-service/middlewares/defaults/draft-and-publish.js.map +0 -1
  221. package/dist/services/document-service/middlewares/defaults/draft-and-publish.mjs +0 -58
  222. package/dist/services/document-service/middlewares/defaults/draft-and-publish.mjs.map +0 -1
  223. package/dist/services/document-service/middlewares/defaults/index.d.ts +0 -3
  224. package/dist/services/document-service/middlewares/defaults/index.d.ts.map +0 -1
  225. package/dist/services/document-service/middlewares/defaults/index.js +0 -82
  226. package/dist/services/document-service/middlewares/defaults/index.js.map +0 -1
  227. package/dist/services/document-service/middlewares/defaults/index.mjs +0 -82
  228. package/dist/services/document-service/middlewares/defaults/index.mjs.map +0 -1
  229. package/dist/services/document-service/middlewares/defaults/locales.d.ts +0 -18
  230. package/dist/services/document-service/middlewares/defaults/locales.d.ts.map +0 -1
  231. package/dist/services/document-service/middlewares/defaults/locales.js +0 -50
  232. package/dist/services/document-service/middlewares/defaults/locales.js.map +0 -1
  233. package/dist/services/document-service/middlewares/defaults/locales.mjs +0 -50
  234. package/dist/services/document-service/middlewares/defaults/locales.mjs.map +0 -1
  235. package/dist/services/document-service/middlewares/index.d.ts +0 -11
  236. package/dist/services/document-service/middlewares/index.d.ts.map +0 -1
  237. package/dist/services/document-service/middlewares/index.js +0 -59
  238. package/dist/services/document-service/middlewares/index.js.map +0 -1
  239. package/dist/services/document-service/middlewares/index.mjs +0 -59
  240. package/dist/services/document-service/middlewares/index.mjs.map +0 -1
@@ -1,5 +1,16 @@
1
+ import { utils } from "@strapi/database";
1
2
  import { createId } from "@paralleldrive/cuid2";
2
3
  import assert from "node:assert";
4
+ import _ from "lodash/fp";
5
+ const { identifiers } = utils;
6
+ const COMPONENT_JOIN_TABLE_SUFFIX = "components";
7
+ const DZ_JOIN_TABLE_SUFFIX = "components";
8
+ const COMPONENT_INVERSE_COLUMN_NAME = "component";
9
+ const COMPONENT_TYPE_COLUMN = "component_type";
10
+ const ENTITY = "entity";
11
+ const getComponentJoinTableName = (collectionName) => identifiers.getTableName(collectionName, { suffix: COMPONENT_JOIN_TABLE_SUFFIX });
12
+ const getDzJoinTableName = (collectionName) => identifiers.getTableName(collectionName, { suffix: DZ_JOIN_TABLE_SUFFIX });
13
+ const { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;
3
14
  const transformAttribute = (name, attribute, contentType) => {
4
15
  switch (attribute.type) {
5
16
  case "media": {
@@ -11,6 +22,11 @@ const transformAttribute = (name, attribute, contentType) => {
11
22
  };
12
23
  }
13
24
  case "component": {
25
+ const joinTableName = getComponentJoinTableName(contentType.collectionName);
26
+ const joinColumnEntityName = identifiers.getJoinColumnAttributeIdName(ENTITY);
27
+ const joinColumnInverseName = identifiers.getJoinColumnAttributeIdName(
28
+ COMPONENT_INVERSE_COLUMN_NAME
29
+ );
14
30
  return {
15
31
  type: "relation",
16
32
  relation: attribute.repeatable === true ? "oneToMany" : "oneToOne",
@@ -18,45 +34,50 @@ const transformAttribute = (name, attribute, contentType) => {
18
34
  // We need the join table name to be deterministic,
19
35
  // We need to allow passing the join table name as an option
20
36
  joinTable: {
21
- name: `${contentType.collectionName}_components`,
37
+ name: joinTableName,
22
38
  joinColumn: {
23
- name: "entity_id",
24
- referencedColumn: "id"
39
+ name: joinColumnEntityName,
40
+ referencedColumn: id
25
41
  },
26
42
  inverseJoinColumn: {
27
- name: "component_id",
28
- referencedColumn: "id"
43
+ name: joinColumnInverseName,
44
+ referencedColumn: id
29
45
  },
30
46
  on: {
31
47
  field: name
32
48
  },
33
- orderColumnName: "order",
49
+ orderColumnName: order,
34
50
  orderBy: {
35
51
  order: "asc"
36
52
  },
37
- pivotColumns: ["entity_id", "component_id", "field", "component_type"]
53
+ pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, COMPONENT_TYPE_COLUMN]
38
54
  }
39
55
  };
40
56
  }
41
57
  case "dynamiczone": {
58
+ const joinTableName = getDzJoinTableName(contentType.collectionName);
59
+ const joinColumnEntityName = identifiers.getJoinColumnAttributeIdName(ENTITY);
60
+ const joinColumnInverseName = identifiers.getJoinColumnAttributeIdName(
61
+ COMPONENT_INVERSE_COLUMN_NAME
62
+ );
42
63
  return {
43
64
  type: "relation",
44
65
  relation: "morphToMany",
45
66
  // TODO: handle restrictions at some point
46
67
  // target: attribute.components,
47
68
  joinTable: {
48
- name: `${contentType.collectionName}_components`,
69
+ name: joinTableName,
49
70
  joinColumn: {
50
- name: "entity_id",
51
- referencedColumn: "id"
71
+ name: joinColumnEntityName,
72
+ referencedColumn: id
52
73
  },
53
74
  morphColumn: {
54
75
  idColumn: {
55
- name: "component_id",
56
- referencedColumn: "id"
76
+ name: joinColumnInverseName,
77
+ referencedColumn: id
57
78
  },
58
79
  typeColumn: {
59
- name: "component_type"
80
+ name: COMPONENT_TYPE_COLUMN
60
81
  },
61
82
  typeField: "__component"
62
83
  },
@@ -66,7 +87,7 @@ const transformAttribute = (name, attribute, contentType) => {
66
87
  orderBy: {
67
88
  order: "asc"
68
89
  },
69
- pivotColumns: ["entity_id", "component_id", "field", "component_type"]
90
+ pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, COMPONENT_TYPE_COLUMN]
70
91
  }
71
92
  };
72
93
  }
@@ -84,41 +105,44 @@ const transformAttributes = (contentType) => {
84
105
  }, {});
85
106
  };
86
107
  const hasComponentsOrDz = (contentType) => {
87
- return Object.values(contentType.attributes).some(
108
+ return Object.values(contentType.attributes || {}).some(
88
109
  ({ type }) => type === "dynamiczone" || type === "component"
89
110
  );
90
111
  };
91
112
  const createDocumentId = createId;
92
113
  const createCompoLinkModel = (contentType) => {
93
- const name = `${contentType.collectionName}_components`;
114
+ const name = getComponentJoinTableName(contentType.collectionName);
115
+ const entityId = identifiers.getJoinColumnAttributeIdName(ENTITY);
116
+ const componentId = identifiers.getJoinColumnAttributeIdName(COMPONENT_INVERSE_COLUMN_NAME);
117
+ const fkIndex = identifiers.getFkIndexName([contentType.collectionName, ENTITY]);
94
118
  return {
95
119
  // TODO: make sure there can't be any conflicts with a prefix
96
120
  singularName: name,
97
121
  uid: name,
98
122
  tableName: name,
99
123
  attributes: {
100
- id: {
124
+ [id]: {
101
125
  type: "increments"
102
126
  },
103
- entity_id: {
127
+ [entityId]: {
104
128
  type: "integer",
105
129
  column: {
106
130
  unsigned: true
107
131
  }
108
132
  },
109
- component_id: {
133
+ [componentId]: {
110
134
  type: "integer",
111
135
  column: {
112
136
  unsigned: true
113
137
  }
114
138
  },
115
- component_type: {
139
+ [COMPONENT_TYPE_COLUMN]: {
116
140
  type: "string"
117
141
  },
118
- field: {
142
+ [field]: {
119
143
  type: "string"
120
144
  },
121
- order: {
145
+ [order]: {
122
146
  type: "float",
123
147
  column: {
124
148
  unsigned: true,
@@ -128,29 +152,30 @@ const createCompoLinkModel = (contentType) => {
128
152
  },
129
153
  indexes: [
130
154
  {
131
- name: `${contentType.collectionName}_field_index`,
132
- columns: ["field"]
155
+ name: identifiers.getIndexName([contentType.collectionName, field]),
156
+ columns: [field]
133
157
  },
134
158
  {
135
- name: `${contentType.collectionName}_component_type_index`,
136
- columns: ["component_type"]
159
+ name: identifiers.getIndexName([contentType.collectionName, COMPONENT_TYPE_COLUMN]),
160
+ columns: [COMPONENT_TYPE_COLUMN]
137
161
  },
138
162
  {
139
- name: `${contentType.collectionName}_entity_fk`,
140
- columns: ["entity_id"]
163
+ name: fkIndex,
164
+ columns: [entityId]
141
165
  },
142
166
  {
143
- name: `${contentType.collectionName}_unique`,
144
- columns: ["entity_id", "component_id", "field", "component_type"],
167
+ // NOTE: since we don't include attribute names, we need to be careful not to create another unique index
168
+ name: identifiers.getUniqueIndexName([contentType.collectionName]),
169
+ columns: [entityId, componentId, field, COMPONENT_TYPE_COLUMN],
145
170
  type: "unique"
146
171
  }
147
172
  ],
148
173
  foreignKeys: [
149
174
  {
150
- name: `${contentType.collectionName}_entity_fk`,
151
- columns: ["entity_id"],
152
- referencedColumns: ["id"],
153
- referencedTable: contentType.collectionName,
175
+ name: fkIndex,
176
+ columns: [entityId],
177
+ referencedColumns: [id],
178
+ referencedTable: identifiers.getTableName(contentType.collectionName),
154
179
  onDelete: "CASCADE"
155
180
  }
156
181
  ]
@@ -159,12 +184,16 @@ const createCompoLinkModel = (contentType) => {
159
184
  const transformContentTypesToModels = (contentTypes) => {
160
185
  const models = [];
161
186
  contentTypes.forEach((contentType) => {
187
+ assert(contentType.collectionName, 'Content type "collectionName" is required');
188
+ assert(contentType.modelName, 'Content type "modelName" is required');
189
+ assert(contentType.uid, 'Content type "uid" is required');
162
190
  const documentIdAttribute = contentType.modelType === "contentType" ? { documentId: { type: "string", default: createDocumentId } } : {};
163
- const reservedAttributeNames = ["documentId", "document_id", "id"];
164
- reservedAttributeNames.forEach((reservedAttributeName) => {
165
- if (reservedAttributeName in contentType.attributes) {
191
+ const reservedAttributeNames = ["document_id", id];
192
+ Object.keys(contentType.attributes || {}).forEach((attributeName) => {
193
+ const snakeCasedAttributeName = _.snakeCase(attributeName);
194
+ if (reservedAttributeNames.includes(snakeCasedAttributeName)) {
166
195
  throw new Error(
167
- `The attribute "${reservedAttributeName}" is reserved and cannot be used in a modelPlease rename "${contentType.modelName}" attribute "${reservedAttributeName}" to something else.`
196
+ `The attribute "${attributeName}" is reserved and cannot be used in a model. Please rename "${contentType.modelName}" attribute "${attributeName}" to something else.`
168
197
  );
169
198
  }
170
199
  });
@@ -172,13 +201,12 @@ const transformContentTypesToModels = (contentTypes) => {
172
201
  const compoLinkModel = createCompoLinkModel(contentType);
173
202
  models.push(compoLinkModel);
174
203
  }
175
- assert(contentType.collectionName, "Collection name is required");
176
204
  const model = {
177
205
  uid: contentType.uid,
178
206
  singularName: contentType.modelName,
179
- tableName: contentType.collectionName,
207
+ tableName: identifiers.getTableName(contentType.collectionName),
180
208
  attributes: {
181
- id: {
209
+ [id]: {
182
210
  type: "increments"
183
211
  },
184
212
  ...documentIdAttribute,
@@ -190,7 +218,17 @@ const transformContentTypesToModels = (contentTypes) => {
190
218
  return models;
191
219
  };
192
220
  export {
221
+ COMPONENT_INVERSE_COLUMN_NAME,
222
+ COMPONENT_JOIN_TABLE_SUFFIX,
223
+ COMPONENT_TYPE_COLUMN,
224
+ DZ_JOIN_TABLE_SUFFIX,
225
+ ENTITY,
193
226
  createDocumentId,
227
+ getComponentJoinTableName,
228
+ getDzJoinTableName,
229
+ hasComponentsOrDz,
230
+ transformAttribute,
231
+ transformAttributes,
194
232
  transformContentTypesToModels
195
233
  };
196
234
  //# sourceMappingURL=transform-content-types-to-models.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform-content-types-to-models.mjs","sources":["../../src/utils/transform-content-types-to-models.ts"],"sourcesContent":["import { Model } from '@strapi/database';\nimport { Schema, Attribute } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\n\nconst transformAttribute = (\n name: string,\n attribute: Attribute.Any,\n contentType: Schema.ContentType\n) => {\n switch (attribute.type) {\n case 'media': {\n return {\n type: 'relation',\n relation: attribute.multiple === true ? 'morphMany' : 'morphOne',\n target: 'plugin::upload.file',\n morphBy: 'related',\n };\n }\n case 'component': {\n return {\n type: 'relation',\n relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',\n target: attribute.component,\n\n // We need the join table name to be deterministic,\n // We need to allow passing the join table name as an option\n joinTable: {\n name: `${contentType.collectionName}_components`,\n joinColumn: {\n name: 'entity_id',\n referencedColumn: 'id',\n },\n inverseJoinColumn: {\n name: 'component_id',\n referencedColumn: 'id',\n },\n on: {\n field: name,\n },\n orderColumnName: 'order',\n orderBy: {\n order: 'asc',\n },\n pivotColumns: ['entity_id', 'component_id', 'field', 'component_type'],\n },\n };\n }\n case 'dynamiczone': {\n return {\n type: 'relation',\n relation: 'morphToMany',\n // TODO: handle restrictions at some point\n // target: attribute.components,\n joinTable: {\n name: `${contentType.collectionName}_components`,\n joinColumn: {\n name: 'entity_id',\n referencedColumn: 'id',\n },\n morphColumn: {\n idColumn: {\n name: 'component_id',\n referencedColumn: 'id',\n },\n typeColumn: {\n name: 'component_type',\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: ['entity_id', 'component_id', 'field', 'component_type'],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nconst transformAttributes = (contentType: Schema.ContentType) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(attrName, contentType.attributes[attrName]!, contentType),\n };\n }, {});\n};\n\nconst hasComponentsOrDz = (contentType: Schema.ContentType) => {\n return Object.values(contentType.attributes).some(\n ({ type }) => type === 'dynamiczone' || type === 'component'\n );\n};\n\nexport const createDocumentId = createId;\n\nconst createCompoLinkModel = (contentType: Schema.ContentType): Model => {\n const name = `${contentType.collectionName}_components`;\n\n return {\n // TODO: make sure there can't be any conflicts with a prefix\n singularName: name,\n uid: name,\n tableName: name,\n attributes: {\n id: {\n type: 'increments',\n },\n entity_id: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n component_id: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n component_type: {\n type: 'string',\n },\n field: {\n type: 'string',\n },\n order: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: `${contentType.collectionName}_field_index`,\n columns: ['field'],\n },\n {\n name: `${contentType.collectionName}_component_type_index`,\n columns: ['component_type'],\n },\n {\n name: `${contentType.collectionName}_entity_fk`,\n columns: ['entity_id'],\n },\n {\n name: `${contentType.collectionName}_unique`,\n columns: ['entity_id', 'component_id', 'field', 'component_type'],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: `${contentType.collectionName}_entity_fk`,\n columns: ['entity_id'],\n referencedColumns: ['id'],\n referencedTable: contentType.collectionName!,\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (contentTypes: Schema.ContentType[]): Model[] => {\n const models: Model[] = [];\n\n contentTypes.forEach((contentType) => {\n // Add document id to content types\n // as it is not documented\n const documentIdAttribute: Record<string, Attribute.Any> =\n contentType.modelType === 'contentType'\n ? { documentId: { type: 'string', default: createDocumentId } }\n : {};\n\n // Prevent user from creating a documentId attribute\n const reservedAttributeNames = ['documentId', 'document_id', 'id'];\n reservedAttributeNames.forEach((reservedAttributeName) => {\n if (reservedAttributeName in contentType.attributes) {\n throw new Error(\n `The attribute \"${reservedAttributeName}\" is reserved and cannot be used in a model` +\n `Please rename \"${contentType.modelName}\" attribute \"${reservedAttributeName}\" to something else.`\n );\n }\n });\n\n if (hasComponentsOrDz(contentType)) {\n const compoLinkModel = createCompoLinkModel(contentType);\n models.push(compoLinkModel);\n }\n\n assert(contentType.collectionName, 'Collection name is required');\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: contentType.collectionName,\n attributes: {\n id: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType),\n },\n };\n\n models.push(model);\n });\n\n return models;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transform-content-types-to-models.mjs","sources":["../../src/utils/transform-content-types-to-models.ts"],"sourcesContent":["import { type Model, utils } from '@strapi/database';\nimport { Schema, Attribute } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\nimport _ from 'lodash/fp';\n\nconst { identifiers } = utils;\n\n/**\n * Because strapi/database models don't know about things like components or dynamic zones, we use this file to convert them\n * to a relations format that it recognizes\n *\n * Therefore we have to keep an additional set of helpers/extensions to the database naming methods\n */\n\nexport const COMPONENT_JOIN_TABLE_SUFFIX = 'components';\nexport const DZ_JOIN_TABLE_SUFFIX = 'components';\nexport const COMPONENT_INVERSE_COLUMN_NAME = 'component';\nexport const COMPONENT_TYPE_COLUMN = 'component_type';\nexport const ENTITY = 'entity';\n\nexport const getComponentJoinTableName = (collectionName: string) =>\n identifiers.getTableName(collectionName, { suffix: COMPONENT_JOIN_TABLE_SUFFIX });\n\nexport const getDzJoinTableName = (collectionName: string) =>\n identifiers.getTableName(collectionName, { suffix: DZ_JOIN_TABLE_SUFFIX });\n\nconst { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;\n\nexport type LoadedContentTypeModel = Schema.ContentType &\n Required<Pick<Schema.ContentType, 'collectionName' | 'uid' | 'modelName'>>;\n\n// Transforms an attribute (particularly for relation types) into the format that strapi/database accepts\nexport const transformAttribute = (\n name: string,\n attribute: Attribute.Any,\n contentType: LoadedContentTypeModel\n) => {\n switch (attribute.type) {\n case 'media': {\n return {\n type: 'relation',\n relation: attribute.multiple === true ? 'morphMany' : 'morphOne',\n target: 'plugin::upload.file',\n morphBy: 'related',\n };\n }\n case 'component': {\n const joinTableName = getComponentJoinTableName(contentType.collectionName);\n const joinColumnEntityName = identifiers.getJoinColumnAttributeIdName(ENTITY);\n const joinColumnInverseName = identifiers.getJoinColumnAttributeIdName(\n COMPONENT_INVERSE_COLUMN_NAME\n );\n\n return {\n type: 'relation',\n relation: attribute.repeatable === true ? 'oneToMany' : 'oneToOne',\n target: attribute.component,\n\n // We need the join table name to be deterministic,\n // We need to allow passing the join table name as an option\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: id,\n },\n inverseJoinColumn: {\n name: joinColumnInverseName,\n referencedColumn: id,\n },\n on: {\n field: name,\n },\n orderColumnName: order,\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, COMPONENT_TYPE_COLUMN],\n },\n };\n }\n case 'dynamiczone': {\n const joinTableName = getDzJoinTableName(contentType.collectionName);\n const joinColumnEntityName = identifiers.getJoinColumnAttributeIdName(ENTITY);\n const joinColumnInverseName = identifiers.getJoinColumnAttributeIdName(\n COMPONENT_INVERSE_COLUMN_NAME\n );\n\n return {\n type: 'relation',\n relation: 'morphToMany',\n // TODO: handle restrictions at some point\n // target: attribute.components,\n joinTable: {\n name: joinTableName,\n joinColumn: {\n name: joinColumnEntityName,\n referencedColumn: id,\n },\n morphColumn: {\n idColumn: {\n name: joinColumnInverseName,\n referencedColumn: id,\n },\n typeColumn: {\n name: COMPONENT_TYPE_COLUMN,\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [joinColumnEntityName, joinColumnInverseName, field, COMPONENT_TYPE_COLUMN],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nexport const transformAttributes = (contentType: LoadedContentTypeModel) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(attrName, contentType.attributes[attrName]!, contentType),\n };\n }, {});\n};\n\nexport const hasComponentsOrDz = (\n contentType: LoadedContentTypeModel\n): contentType is LoadedContentTypeModel & { type: 'dynamiczone' | 'component' } => {\n return Object.values(contentType.attributes || {}).some(\n ({ type }) => type === 'dynamiczone' || type === 'component'\n );\n};\n\nexport const createDocumentId = createId;\n\n// Creates the\nconst createCompoLinkModel = (contentType: LoadedContentTypeModel): Model => {\n const name = getComponentJoinTableName(contentType.collectionName);\n\n const entityId = identifiers.getJoinColumnAttributeIdName(ENTITY);\n const componentId = identifiers.getJoinColumnAttributeIdName(COMPONENT_INVERSE_COLUMN_NAME);\n const fkIndex = identifiers.getFkIndexName([contentType.collectionName, ENTITY]);\n\n return {\n // TODO: make sure there can't be any conflicts with a prefix\n singularName: name,\n uid: name,\n tableName: name,\n attributes: {\n [id]: {\n type: 'increments',\n },\n [entityId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [componentId]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [COMPONENT_TYPE_COLUMN]: {\n type: 'string',\n },\n [field]: {\n type: 'string',\n },\n [order]: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: identifiers.getIndexName([contentType.collectionName, field]),\n columns: [field],\n },\n {\n name: identifiers.getIndexName([contentType.collectionName, COMPONENT_TYPE_COLUMN]),\n columns: [COMPONENT_TYPE_COLUMN],\n },\n {\n name: fkIndex,\n columns: [entityId],\n },\n {\n // NOTE: since we don't include attribute names, we need to be careful not to create another unique index\n name: identifiers.getUniqueIndexName([contentType.collectionName]),\n columns: [entityId, componentId, field, COMPONENT_TYPE_COLUMN],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndex,\n columns: [entityId],\n referencedColumns: [id],\n referencedTable: identifiers.getTableName(contentType.collectionName),\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (contentTypes: LoadedContentTypeModel[]): Model[] => {\n const models: Model[] = [];\n\n contentTypes.forEach((contentType) => {\n assert(contentType.collectionName, 'Content type \"collectionName\" is required');\n assert(contentType.modelName, 'Content type \"modelName\" is required');\n assert(contentType.uid, 'Content type \"uid\" is required');\n\n // Add document id to content types\n // as it is not documented\n const documentIdAttribute: Record<string, Attribute.Any> =\n contentType.modelType === 'contentType'\n ? { documentId: { type: 'string', default: createDocumentId } }\n : {};\n\n // TODO: this needs to be combined with getReservedNames, we should not be maintaining two lists\n // Prevent user from creating a documentId attribute\n const reservedAttributeNames = ['document_id', id];\n Object.keys(contentType.attributes || {}).forEach((attributeName) => {\n const snakeCasedAttributeName = _.snakeCase(attributeName);\n if (reservedAttributeNames.includes(snakeCasedAttributeName)) {\n throw new Error(\n `The attribute \"${attributeName}\" is reserved and cannot be used in a model. Please rename \"${contentType.modelName}\" attribute \"${attributeName}\" to something else.`\n );\n }\n });\n\n if (hasComponentsOrDz(contentType)) {\n const compoLinkModel = createCompoLinkModel(contentType);\n models.push(compoLinkModel);\n }\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: identifiers.getTableName(contentType.collectionName),\n attributes: {\n [id]: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType),\n },\n };\n\n models.push(model);\n });\n\n return models;\n};\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/core",
3
- "version": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e",
3
+ "version": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b",
4
4
  "description": "Core of Strapi",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -55,16 +55,16 @@
55
55
  "@koa/cors": "3.4.3",
56
56
  "@koa/router": "10.1.1",
57
57
  "@paralleldrive/cuid2": "2.2.2",
58
- "@strapi/admin": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e",
59
- "@strapi/database": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e",
60
- "@strapi/generate-new": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e",
61
- "@strapi/generators": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e",
62
- "@strapi/logger": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e",
63
- "@strapi/pack-up": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e",
64
- "@strapi/permissions": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e",
65
- "@strapi/types": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e",
66
- "@strapi/typescript-utils": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e",
67
- "@strapi/utils": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e",
58
+ "@strapi/admin": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b",
59
+ "@strapi/database": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b",
60
+ "@strapi/generate-new": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b",
61
+ "@strapi/generators": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b",
62
+ "@strapi/logger": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b",
63
+ "@strapi/pack-up": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b",
64
+ "@strapi/permissions": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b",
65
+ "@strapi/types": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b",
66
+ "@strapi/typescript-utils": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b",
67
+ "@strapi/utils": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b",
68
68
  "bcryptjs": "2.4.3",
69
69
  "boxen": "5.1.2",
70
70
  "chalk": "4.1.2",
@@ -122,13 +122,13 @@
122
122
  "@types/node": "18.18.4",
123
123
  "@types/node-schedule": "2.1.0",
124
124
  "@types/statuses": "2.0.1",
125
- "eslint-config-custom": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e",
125
+ "eslint-config-custom": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b",
126
126
  "supertest": "6.3.3",
127
- "tsconfig": "0.0.0-experimental.3f7b2587c5e3d548262671895cf11d8bf8c9166e"
127
+ "tsconfig": "0.0.0-experimental.8294852592c0a1fb061c5d3576327fa0e80bab5b"
128
128
  },
129
129
  "engines": {
130
130
  "node": ">=18.0.0 <=20.x.x",
131
131
  "npm": ">=6.0.0"
132
132
  },
133
- "gitHead": "3f7b2587c5e3d548262671895cf11d8bf8c9166e"
133
+ "gitHead": "8294852592c0a1fb061c5d3576327fa0e80bab5b"
134
134
  }
@@ -1,7 +0,0 @@
1
- /**
2
- * Create default fetch params
3
- */
4
- export declare const getFetchParams: (params?: {}) => {
5
- publicationState: string;
6
- };
7
- //# sourceMappingURL=get-fetch-params.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-fetch-params.d.ts","sourceRoot":"","sources":["../../../src/core-api/service/get-fetch-params.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,cAAc;;CAK1B,CAAC"}
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const strapiUtils = require("@strapi/utils");
4
- const {
5
- constants: { DP_PUB_STATE_LIVE }
6
- } = strapiUtils.contentTypes;
7
- const getFetchParams = (params = {}) => {
8
- return {
9
- publicationState: DP_PUB_STATE_LIVE,
10
- ...params
11
- };
12
- };
13
- exports.getFetchParams = getFetchParams;
14
- //# sourceMappingURL=get-fetch-params.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-fetch-params.js","sources":["../../../src/core-api/service/get-fetch-params.ts"],"sourcesContent":["import { contentTypes as contentTypeUtils } from '@strapi/utils';\n\nconst {\n constants: { DP_PUB_STATE_LIVE },\n} = contentTypeUtils;\n\n/**\n * Create default fetch params\n */\nexport const getFetchParams = (params = {}) => {\n return {\n publicationState: DP_PUB_STATE_LIVE,\n ...params,\n };\n};\n"],"names":["contentTypeUtils"],"mappings":";;;AAEA,MAAM;AAAA,EACJ,WAAW,EAAE,kBAAkB;AACjC,IAAIA;AAKG,MAAM,iBAAiB,CAAC,SAAS,OAAO;AACtC,SAAA;AAAA,IACL,kBAAkB;AAAA,IAClB,GAAG;AAAA,EAAA;AAEP;;"}
@@ -1,14 +0,0 @@
1
- import { contentTypes } from "@strapi/utils";
2
- const {
3
- constants: { DP_PUB_STATE_LIVE }
4
- } = contentTypes;
5
- const getFetchParams = (params = {}) => {
6
- return {
7
- publicationState: DP_PUB_STATE_LIVE,
8
- ...params
9
- };
10
- };
11
- export {
12
- getFetchParams
13
- };
14
- //# sourceMappingURL=get-fetch-params.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-fetch-params.mjs","sources":["../../../src/core-api/service/get-fetch-params.ts"],"sourcesContent":["import { contentTypes as contentTypeUtils } from '@strapi/utils';\n\nconst {\n constants: { DP_PUB_STATE_LIVE },\n} = contentTypeUtils;\n\n/**\n * Create default fetch params\n */\nexport const getFetchParams = (params = {}) => {\n return {\n publicationState: DP_PUB_STATE_LIVE,\n ...params,\n };\n};\n"],"names":["contentTypeUtils"],"mappings":";AAEA,MAAM;AAAA,EACJ,WAAW,EAAE,kBAAkB;AACjC,IAAIA;AAKG,MAAM,iBAAiB,CAAC,SAAS,OAAO;AACtC,SAAA;AAAA,IACL,kBAAkB;AAAA,IAClB,GAAG;AAAA,EAAA;AAEP;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-service.d.ts","sourceRoot":"","sources":["../../../src/services/document-service/document-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM,eAAe,CAAC;AAK1D;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,qBAAqB,WACxB,MAAM;eACkB,GAAG;MAClC,UAAU,OAsIZ,CAAC"}
@@ -1,132 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const documentEngine = require("./document-engine.js");
4
- const index$1 = require("./middlewares/index.js");
5
- const index = require("./middlewares/defaults/index.js");
6
- const createDocumentService = (strapi, { defaults = {} } = {}) => {
7
- const documents = documentEngine({ strapi, db: strapi.db });
8
- const middlewareManager = index$1.default();
9
- index.loadDefaultMiddlewares(middlewareManager);
10
- function create(uid) {
11
- return {
12
- async findMany(params = {}) {
13
- return strapi.db?.transaction?.(
14
- async () => middlewareManager.run(
15
- { action: "findMany", uid, params, options: {} },
16
- ({ params: params2 }) => documents.findMany(uid, params2)
17
- )
18
- );
19
- },
20
- async findFirst(params = {}) {
21
- return strapi.db?.transaction?.(
22
- async () => middlewareManager.run(
23
- { action: "findFirst", uid, params, options: {} },
24
- ({ params: params2 }) => documents.findFirst(uid, params2)
25
- )
26
- );
27
- },
28
- async findOne(id, params = {}) {
29
- return strapi.db?.transaction?.(
30
- async () => middlewareManager.run(
31
- { action: "findOne", uid, params, options: { id } },
32
- ({ params: params2 }) => documents.findOne(uid, id, params2)
33
- )
34
- );
35
- },
36
- async delete(id, params = {}) {
37
- return strapi.db?.transaction?.(
38
- async () => middlewareManager.run(
39
- { action: "delete", uid, params, options: { id } },
40
- ({ params: params2 }) => documents.delete(uid, id, params2)
41
- )
42
- );
43
- },
44
- async deleteMany(params = {}) {
45
- return strapi.db?.transaction?.(
46
- async () => middlewareManager.run(
47
- { action: "deleteMany", uid, params, options: {} },
48
- ({ params: params2 }) => documents.deleteMany(uid, params2)
49
- )
50
- );
51
- },
52
- async create(params = {}) {
53
- return strapi.db?.transaction?.(
54
- async () => middlewareManager.run(
55
- { action: "create", uid, params, options: {} },
56
- ({ params: params2 }) => documents.create(uid, params2)
57
- )
58
- );
59
- },
60
- async clone(id, params = {}) {
61
- return strapi.db?.transaction?.(
62
- async () => middlewareManager.run(
63
- { action: "clone", uid, params, options: { id } },
64
- ({ params: params2 }) => documents.clone(uid, id, params2)
65
- )
66
- );
67
- },
68
- async update(id, params = {}) {
69
- return strapi.db?.transaction?.(
70
- async () => middlewareManager.run(
71
- { action: "update", uid, params, options: { id } },
72
- ({ params: params2 }) => documents.update(uid, id, params2)
73
- )
74
- );
75
- },
76
- async count(params = {}) {
77
- return strapi.db?.transaction?.(
78
- async () => middlewareManager.run(
79
- { action: "count", uid, params, options: {} },
80
- ({ params: params2 }) => documents.count(uid, params2)
81
- )
82
- );
83
- },
84
- async publish(id, params = {}) {
85
- return strapi.db?.transaction?.(
86
- async () => middlewareManager.run(
87
- { action: "publish", uid, params, options: { id } },
88
- ({ params: params2 }) => documents.publish(uid, id, params2)
89
- )
90
- );
91
- },
92
- async unpublish(id, params = {}) {
93
- return strapi.db?.transaction?.(
94
- async () => middlewareManager.run(
95
- { action: "unpublish", uid, params, options: { id } },
96
- ({ params: params2 }) => documents.unpublish(uid, id, params2)
97
- )
98
- );
99
- },
100
- async discardDraft(id, params = {}) {
101
- return strapi.db?.transaction?.(
102
- async () => middlewareManager.run(
103
- { action: "discardDraft", uid, params, options: { id } },
104
- ({ params: params2 }) => documents.discardDraft(uid, id, params2)
105
- )
106
- );
107
- },
108
- // @ts-expect-error - TODO: Fix this
109
- with(params) {
110
- return createDocumentService(strapi, {
111
- defaults: { ...defaults, ...params }
112
- })(uid);
113
- },
114
- use(action, cb, opts) {
115
- middlewareManager.add(uid, action, cb, opts);
116
- return this;
117
- }
118
- };
119
- }
120
- Object.assign(create, {
121
- use(action, cb, opts) {
122
- middlewareManager.add("_all", action, cb, opts);
123
- return create;
124
- },
125
- middlewares: middlewareManager,
126
- // NOTE : We should do this in a different way, where lifecycles are executed for the different methods
127
- ...documents
128
- });
129
- return create;
130
- };
131
- exports.createDocumentService = createDocumentService;
132
- //# sourceMappingURL=document-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-service.js","sources":["../../../src/services/document-service/document-service.ts"],"sourcesContent":["import { Strapi, Common, Documents } from '@strapi/types';\nimport createDocumentRepository from './document-engine';\nimport createMiddlewareManager from './middlewares';\nimport { loadDefaultMiddlewares } from './middlewares/defaults';\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 * @param options.defaults - Default parameters to apply to all actions\n * @param options.parent - Parent repository, used when creating a new repository with .with()\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 = (\n strapi: Strapi,\n { defaults = {} }: { defaults?: any } = {}\n): Documents.Service => {\n const documents = createDocumentRepository({ strapi, db: strapi.db! });\n\n const middlewareManager = createMiddlewareManager();\n loadDefaultMiddlewares(middlewareManager);\n\n function create<TContentTypeUID extends Common.UID.ContentType>(\n uid: TContentTypeUID\n ): Documents.ServiceInstance<TContentTypeUID> {\n return {\n async findMany(params = {} as any) {\n return strapi.db?.transaction?.(async () =>\n middlewareManager.run({ action: 'findMany', uid, params, options: {} }, ({ params }) =>\n documents.findMany(uid, params)\n )\n );\n },\n\n async findFirst(params = {} as any) {\n return strapi.db?.transaction?.(async () =>\n middlewareManager.run({ action: 'findFirst', uid, params, options: {} }, ({ params }) =>\n documents.findFirst(uid, params)\n )\n );\n },\n\n async findOne(id: string, params = {} as any) {\n return strapi.db?.transaction?.(async () =>\n middlewareManager.run({ action: 'findOne', uid, params, options: { id } }, ({ params }) =>\n documents.findOne(uid, id, params)\n )\n );\n },\n\n async delete(id: string, params = {} as any) {\n return strapi.db?.transaction?.(async () =>\n middlewareManager.run({ action: 'delete', uid, params, options: { id } }, ({ params }) =>\n documents.delete(uid, id, params)\n )\n );\n },\n\n async deleteMany(params = {} as any) {\n return strapi.db?.transaction?.(async () =>\n middlewareManager.run({ action: 'deleteMany', uid, params, options: {} }, ({ params }) =>\n documents.deleteMany(uid, params)\n )\n );\n },\n\n async create(params = {} as any) {\n return strapi.db?.transaction?.(async () =>\n middlewareManager.run({ action: 'create', uid, params, options: {} }, ({ params }) =>\n documents.create(uid, params)\n )\n );\n },\n\n async clone(id: string, params = {} as any) {\n return strapi.db?.transaction?.(async () =>\n middlewareManager.run({ action: 'clone', uid, params, options: { id } }, ({ params }) =>\n documents.clone(uid, id, params)\n )\n );\n },\n\n async update(id: string, params = {} as any) {\n return strapi.db?.transaction?.(async () =>\n middlewareManager.run({ action: 'update', uid, params, options: { id } }, ({ params }) =>\n documents.update(uid, id, params)\n )\n );\n },\n\n async count(params = {} as any) {\n return strapi.db?.transaction?.(async () =>\n middlewareManager.run({ action: 'count', uid, params, options: {} }, ({ params }) =>\n documents.count(uid, params)\n )\n );\n },\n\n async publish(id: string, params = {} as any) {\n return strapi.db?.transaction?.(async () =>\n middlewareManager.run({ action: 'publish', uid, params, options: { id } }, ({ params }) =>\n documents.publish(uid, id, params)\n )\n );\n },\n\n async unpublish(id: string, params = {} as any) {\n return strapi.db?.transaction?.(async () =>\n middlewareManager.run(\n { action: 'unpublish', uid, params, options: { id } },\n ({ params }) => documents.unpublish(uid, id, params)\n )\n );\n },\n\n async discardDraft(id: string, params = {} as any) {\n return strapi.db?.transaction?.(async () =>\n middlewareManager.run(\n { action: 'discardDraft', uid, params, options: { id } },\n ({ params }) => documents.discardDraft(uid, id, params)\n )\n );\n },\n\n // @ts-expect-error - TODO: Fix this\n with(params: object) {\n return createDocumentService(strapi, {\n defaults: { ...defaults, ...params },\n })(uid);\n },\n\n use(action, cb, opts) {\n middlewareManager.add(uid, action, cb, opts);\n return this;\n },\n };\n }\n\n Object.assign(create, {\n use(action: any, cb: any, opts?: any) {\n middlewareManager.add('_all', action, cb, opts);\n return create;\n },\n middlewares: middlewareManager,\n // NOTE : We should do this in a different way, where lifecycles are executed for the different methods\n ...documents,\n });\n\n // @ts-expect-error - TODO: Fix this\n return create;\n};\n"],"names":["createDocumentRepository","createMiddlewareManager","loadDefaultMiddlewares","params"],"mappings":"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"}