@strapi/core 0.0.0-experimental.e60ec1829240dae21c1e1d29076681c322288813 → 0.0.0-experimental.eba25ec571b091c6bde1104eb6c753debdf15462

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) 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 +68 -20
  5. package/dist/Strapi.js.map +1 -1
  6. package/dist/Strapi.mjs +46 -18
  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 +3 -9
  27. package/dist/core-api/service/collection-type.d.ts.map +1 -1
  28. package/dist/core-api/service/collection-type.js +3 -2
  29. package/dist/core-api/service/collection-type.js.map +1 -1
  30. package/dist/core-api/service/collection-type.mjs +4 -3
  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/domain/content-type/index.js +4 -4
  39. package/dist/domain/content-type/index.js.map +1 -1
  40. package/dist/ee/index.d.ts.map +1 -1
  41. package/dist/ee/index.js +9 -4
  42. package/dist/ee/index.js.map +1 -1
  43. package/dist/ee/index.mjs +6 -1
  44. package/dist/ee/index.mjs.map +1 -1
  45. package/dist/factories.js +4 -4
  46. package/dist/factories.js.map +1 -1
  47. package/dist/factories.mjs.map +1 -1
  48. package/dist/index.d.ts +14 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/index.mjs.map +1 -1
  52. package/dist/loaders/apis.js +2 -2
  53. package/dist/loaders/apis.js.map +1 -1
  54. package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
  55. package/dist/loaders/plugins/get-enabled-plugins.js +40 -12
  56. package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
  57. package/dist/loaders/plugins/get-enabled-plugins.mjs +10 -4
  58. package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -1
  59. package/dist/loaders/plugins/get-user-plugins-config.js +2 -2
  60. package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
  61. package/dist/loaders/plugins/index.d.ts.map +1 -1
  62. package/dist/loaders/plugins/index.js +34 -7
  63. package/dist/loaders/plugins/index.js.map +1 -1
  64. package/dist/loaders/plugins/index.mjs +9 -1
  65. package/dist/loaders/plugins/index.mjs.map +1 -1
  66. package/dist/middlewares/body.js +2 -2
  67. package/dist/middlewares/body.js.map +1 -1
  68. package/dist/middlewares/cors.d.ts.map +1 -1
  69. package/dist/middlewares/cors.js +9 -7
  70. package/dist/middlewares/cors.js.map +1 -1
  71. package/dist/middlewares/cors.mjs +9 -7
  72. package/dist/middlewares/cors.mjs.map +1 -1
  73. package/dist/middlewares/public.js +2 -2
  74. package/dist/middlewares/public.js.map +1 -1
  75. package/dist/middlewares/query.d.ts.map +1 -1
  76. package/dist/middlewares/query.js.map +1 -1
  77. package/dist/middlewares/query.mjs.map +1 -1
  78. package/dist/middlewares/responses.js +2 -2
  79. package/dist/middlewares/responses.js.map +1 -1
  80. package/dist/middlewares/security.d.ts.map +1 -1
  81. package/dist/middlewares/security.js +12 -5
  82. package/dist/middlewares/security.js.map +1 -1
  83. package/dist/middlewares/security.mjs +11 -4
  84. package/dist/middlewares/security.mjs.map +1 -1
  85. package/dist/middlewares/session.js +2 -2
  86. package/dist/middlewares/session.js.map +1 -1
  87. package/dist/migrations/database/5.0.0-discard-drafts.d.ts +27 -6
  88. package/dist/migrations/database/5.0.0-discard-drafts.d.ts.map +1 -1
  89. package/dist/migrations/database/5.0.0-discard-drafts.js +68 -11
  90. package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
  91. package/dist/migrations/database/5.0.0-discard-drafts.mjs +70 -13
  92. package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -1
  93. package/dist/migrations/draft-publish.d.ts +1 -1
  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/migrations/i18n.d.ts +5 -0
  100. package/dist/migrations/i18n.d.ts.map +1 -0
  101. package/dist/migrations/i18n.js +54 -0
  102. package/dist/migrations/i18n.js.map +1 -0
  103. package/dist/migrations/i18n.mjs +54 -0
  104. package/dist/migrations/i18n.mjs.map +1 -0
  105. package/dist/migrations/index.d.ts +5 -0
  106. package/dist/migrations/index.d.ts.map +1 -0
  107. package/dist/migrations/index.js +15 -0
  108. package/dist/migrations/index.js.map +1 -0
  109. package/dist/migrations/index.mjs +15 -0
  110. package/dist/migrations/index.mjs.map +1 -0
  111. package/dist/providers/admin.d.ts.map +1 -1
  112. package/dist/providers/admin.js.map +1 -1
  113. package/dist/providers/admin.mjs.map +1 -1
  114. package/dist/providers/registries.js +3 -3
  115. package/dist/providers/registries.js.map +1 -1
  116. package/dist/providers/registries.mjs +3 -3
  117. package/dist/providers/registries.mjs.map +1 -1
  118. package/dist/registries/apis.js +2 -2
  119. package/dist/registries/apis.js.map +1 -1
  120. package/dist/registries/components.js +2 -2
  121. package/dist/registries/components.js.map +1 -1
  122. package/dist/registries/content-types.js +3 -3
  123. package/dist/registries/content-types.js.map +1 -1
  124. package/dist/registries/controllers.js +3 -3
  125. package/dist/registries/controllers.js.map +1 -1
  126. package/dist/registries/custom-fields.js +4 -4
  127. package/dist/registries/custom-fields.js.map +1 -1
  128. package/dist/registries/hooks.js +2 -2
  129. package/dist/registries/hooks.js.map +1 -1
  130. package/dist/registries/middlewares.js +3 -3
  131. package/dist/registries/middlewares.js.map +1 -1
  132. package/dist/registries/modules.js +3 -3
  133. package/dist/registries/modules.js.map +1 -1
  134. package/dist/registries/plugins.js +2 -2
  135. package/dist/registries/plugins.js.map +1 -1
  136. package/dist/registries/policies.d.ts +1 -1
  137. package/dist/registries/policies.d.ts.map +1 -1
  138. package/dist/registries/policies.js +5 -5
  139. package/dist/registries/policies.js.map +1 -1
  140. package/dist/registries/policies.mjs +1 -1
  141. package/dist/registries/policies.mjs.map +1 -1
  142. package/dist/registries/services.js +3 -3
  143. package/dist/registries/services.js.map +1 -1
  144. package/dist/services/auth/index.js +3 -3
  145. package/dist/services/auth/index.js.map +1 -1
  146. package/dist/services/content-api/index.d.ts +10 -12
  147. package/dist/services/content-api/index.d.ts.map +1 -1
  148. package/dist/services/content-api/permissions/index.d.ts +10 -12
  149. package/dist/services/content-api/permissions/index.d.ts.map +1 -1
  150. package/dist/services/content-api/permissions/providers/action.d.ts +5 -6
  151. package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
  152. package/dist/services/content-api/permissions/providers/condition.d.ts +5 -6
  153. package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
  154. package/dist/services/core-store.js +3 -3
  155. package/dist/services/core-store.js.map +1 -1
  156. package/dist/services/cron.d.ts +3 -3
  157. package/dist/services/cron.d.ts.map +1 -1
  158. package/dist/services/cron.js +12 -7
  159. package/dist/services/cron.js.map +1 -1
  160. package/dist/services/cron.mjs +9 -4
  161. package/dist/services/cron.mjs.map +1 -1
  162. package/dist/services/document-service/attributes/index.js +2 -2
  163. package/dist/services/document-service/attributes/index.js.map +1 -1
  164. package/dist/services/document-service/attributes/transforms.js +3 -3
  165. package/dist/services/document-service/attributes/transforms.js.map +1 -1
  166. package/dist/services/document-service/common.d.ts +1 -1
  167. package/dist/services/document-service/common.d.ts.map +1 -1
  168. package/dist/services/document-service/common.js.map +1 -1
  169. package/dist/services/document-service/common.mjs.map +1 -1
  170. package/dist/services/document-service/components.js +15 -15
  171. package/dist/services/document-service/components.js.map +1 -1
  172. package/dist/services/document-service/draft-and-publish.js +16 -16
  173. package/dist/services/document-service/draft-and-publish.js.map +1 -1
  174. package/dist/services/document-service/entries.d.ts +2 -2
  175. package/dist/services/document-service/entries.d.ts.map +1 -1
  176. package/dist/services/document-service/entries.js +11 -12
  177. package/dist/services/document-service/entries.js.map +1 -1
  178. package/dist/services/document-service/entries.mjs +1 -2
  179. package/dist/services/document-service/entries.mjs.map +1 -1
  180. package/dist/services/document-service/index.d.ts +2 -1
  181. package/dist/services/document-service/index.d.ts.map +1 -1
  182. package/dist/services/document-service/index.js +3 -2
  183. package/dist/services/document-service/index.js.map +1 -1
  184. package/dist/services/document-service/index.mjs +3 -2
  185. package/dist/services/document-service/index.mjs.map +1 -1
  186. package/dist/services/document-service/internationalization.d.ts.map +1 -1
  187. package/dist/services/document-service/internationalization.js +21 -12
  188. package/dist/services/document-service/internationalization.js.map +1 -1
  189. package/dist/services/document-service/internationalization.mjs +14 -5
  190. package/dist/services/document-service/internationalization.mjs.map +1 -1
  191. package/dist/services/document-service/params.js +2 -2
  192. package/dist/services/document-service/params.js.map +1 -1
  193. package/dist/services/document-service/repository.d.ts.map +1 -1
  194. package/dist/services/document-service/repository.js +69 -18
  195. package/dist/services/document-service/repository.js.map +1 -1
  196. package/dist/services/document-service/repository.mjs +63 -12
  197. package/dist/services/document-service/repository.mjs.map +1 -1
  198. package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
  199. package/dist/services/document-service/transform/id-map.js +13 -4
  200. package/dist/services/document-service/transform/id-map.js.map +1 -1
  201. package/dist/services/document-service/transform/id-map.mjs +14 -5
  202. package/dist/services/document-service/transform/id-map.mjs.map +1 -1
  203. package/dist/services/document-service/transform/id-transform.js +2 -2
  204. package/dist/services/document-service/transform/id-transform.js.map +1 -1
  205. package/dist/services/document-service/transform/query.js +3 -3
  206. package/dist/services/document-service/transform/query.js.map +1 -1
  207. package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
  208. package/dist/services/document-service/transform/relations/extract/data-ids.js +18 -8
  209. package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -1
  210. package/dist/services/document-service/transform/relations/extract/data-ids.mjs +16 -6
  211. package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -1
  212. package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
  213. package/dist/services/document-service/transform/relations/transform/data-ids.js +21 -8
  214. package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -1
  215. package/dist/services/document-service/transform/relations/transform/data-ids.mjs +20 -7
  216. package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -1
  217. package/dist/services/document-service/transform/relations/utils/dp.js +2 -2
  218. package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -1
  219. package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
  220. package/dist/services/document-service/transform/relations/utils/map-relation.js +10 -10
  221. package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -1
  222. package/dist/services/document-service/transform/relations/utils/map-relation.mjs +4 -4
  223. package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -1
  224. package/dist/services/document-service/utils/populate.d.ts.map +1 -1
  225. package/dist/services/document-service/utils/populate.js +8 -2
  226. package/dist/services/document-service/utils/populate.js.map +1 -1
  227. package/dist/services/document-service/utils/populate.mjs +8 -2
  228. package/dist/services/document-service/utils/populate.mjs.map +1 -1
  229. package/dist/services/document-service/utils/unidirectional-relations.d.ts +36 -0
  230. package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -0
  231. package/dist/services/document-service/utils/unidirectional-relations.js +69 -0
  232. package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -0
  233. package/dist/services/document-service/utils/unidirectional-relations.mjs +69 -0
  234. package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -0
  235. package/dist/services/entity-validator/blocks-validator.d.ts +1 -2
  236. package/dist/services/entity-validator/blocks-validator.d.ts.map +1 -1
  237. package/dist/services/entity-validator/blocks-validator.js +4 -3
  238. package/dist/services/entity-validator/blocks-validator.js.map +1 -1
  239. package/dist/services/entity-validator/blocks-validator.mjs +3 -3
  240. package/dist/services/entity-validator/blocks-validator.mjs.map +1 -1
  241. package/dist/services/entity-validator/index.d.ts +15 -1
  242. package/dist/services/entity-validator/index.d.ts.map +1 -1
  243. package/dist/services/entity-validator/index.js +109 -53
  244. package/dist/services/entity-validator/index.js.map +1 -1
  245. package/dist/services/entity-validator/index.mjs +95 -39
  246. package/dist/services/entity-validator/index.mjs.map +1 -1
  247. package/dist/services/entity-validator/validators.d.ts +36 -25
  248. package/dist/services/entity-validator/validators.d.ts.map +1 -1
  249. package/dist/services/entity-validator/validators.js +148 -33
  250. package/dist/services/entity-validator/validators.js.map +1 -1
  251. package/dist/services/entity-validator/validators.mjs +140 -25
  252. package/dist/services/entity-validator/validators.mjs.map +1 -1
  253. package/dist/services/server/compose-endpoint.js +7 -7
  254. package/dist/services/server/compose-endpoint.js.map +1 -1
  255. package/dist/services/server/index.js +1 -1
  256. package/dist/services/server/index.js.map +1 -1
  257. package/dist/services/server/index.mjs +1 -1
  258. package/dist/services/server/index.mjs.map +1 -1
  259. package/dist/services/server/koa.js +3 -3
  260. package/dist/services/server/koa.js.map +1 -1
  261. package/dist/services/server/middleware.js +3 -3
  262. package/dist/services/server/middleware.js.map +1 -1
  263. package/dist/services/server/routing.js +2 -2
  264. package/dist/services/server/routing.js.map +1 -1
  265. package/dist/services/utils/dynamic-zones.js +5 -5
  266. package/dist/services/utils/dynamic-zones.js.map +1 -1
  267. package/dist/services/webhook-runner.d.ts +2 -1
  268. package/dist/services/webhook-runner.d.ts.map +1 -1
  269. package/dist/services/webhook-runner.js.map +1 -1
  270. package/dist/services/webhook-runner.mjs.map +1 -1
  271. package/dist/services/webhook-store.d.ts +2 -8
  272. package/dist/services/webhook-store.d.ts.map +1 -1
  273. package/dist/services/webhook-store.js +1 -1
  274. package/dist/services/webhook-store.js.map +1 -1
  275. package/dist/services/webhook-store.mjs +1 -1
  276. package/dist/services/webhook-store.mjs.map +1 -1
  277. package/dist/utils/cron.js +3 -3
  278. package/dist/utils/cron.js.map +1 -1
  279. package/dist/utils/fetch.d.ts.map +1 -1
  280. package/dist/utils/fetch.js +4 -3
  281. package/dist/utils/fetch.js.map +1 -1
  282. package/dist/utils/fetch.mjs +4 -3
  283. package/dist/utils/fetch.mjs.map +1 -1
  284. package/dist/utils/filepath-to-prop-path.d.ts +1 -1
  285. package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
  286. package/dist/utils/filepath-to-prop-path.js +27 -6
  287. package/dist/utils/filepath-to-prop-path.js.map +1 -1
  288. package/dist/utils/filepath-to-prop-path.mjs +25 -5
  289. package/dist/utils/filepath-to-prop-path.mjs.map +1 -1
  290. package/dist/utils/is-initialized.js +3 -3
  291. package/dist/utils/is-initialized.js.map +1 -1
  292. package/dist/utils/startup-logger.d.ts.map +1 -1
  293. package/dist/utils/startup-logger.js +10 -5
  294. package/dist/utils/startup-logger.js.map +1 -1
  295. package/dist/utils/startup-logger.mjs +9 -4
  296. package/dist/utils/startup-logger.mjs.map +1 -1
  297. package/dist/utils/transform-content-types-to-models.d.ts +355 -23
  298. package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
  299. package/dist/utils/transform-content-types-to-models.js +17 -4
  300. package/dist/utils/transform-content-types-to-models.js.map +1 -1
  301. package/dist/utils/transform-content-types-to-models.mjs +16 -3
  302. package/dist/utils/transform-content-types-to-models.mjs.map +1 -1
  303. package/package.json +21 -19
@@ -19,48 +19,380 @@ export declare const getComponentJoinColumnEntityName: (identifiers: Identifiers
19
19
  export declare const getComponentJoinColumnInverseName: (identifiers: Identifiers) => string;
20
20
  export declare const getComponentTypeColumn: (identifiers: Identifiers) => string;
21
21
  export declare const getComponentFkIndexName: (contentType: string, identifiers: Identifiers) => string;
22
- export type LoadedContentTypeModel = Struct.ContentTypeSchema & Required<Pick<Struct.ContentTypeSchema, 'collectionName' | 'uid' | 'modelName'>>;
23
- export declare const transformAttribute: (name: string, attribute: Schema.Attribute.AnyAttribute, contentType: LoadedContentTypeModel, identifiers: Identifiers) => (Schema.Attribute.OfType<"biginteger"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<string> & Schema.Attribute.MinMaxOption<string> & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.UniqueOption) | (Schema.Attribute.OfType<"boolean"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<boolean> & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | (Schema.Attribute.OfType<"blocks"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | (Schema.Attribute.OfType<"datetime"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<Schema.Attribute.DateTimeValue> & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.UniqueOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | (Schema.Attribute.OfType<"date"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<Schema.Attribute.DateValue> & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.UniqueOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | (Schema.Attribute.OfType<"decimal"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<number> & Schema.Attribute.MinMaxOption<number> & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.UniqueOption) | (Schema.Attribute.OfType<"email"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<string> & Schema.Attribute.MinMaxLengthOption & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.UniqueOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | (Schema.Attribute.OfType<"enumeration"> & Schema.Attribute.EnumerationProperties<string[]> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<string> & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | (Schema.Attribute.OfType<"float"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<number> & Schema.Attribute.MinMaxOption<number> & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.UniqueOption) | (Schema.Attribute.OfType<"integer"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<number> & Schema.Attribute.MinMaxOption<number> & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.UniqueOption) | (Schema.Attribute.OfType<"json"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.RequiredOption & Schema.Attribute.PrivateOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.DefaultOption<import("@strapi/types/dist/utils").JSONPrimitive>) | (Schema.Attribute.OfType<"password"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<string> & Schema.Attribute.MinMaxLengthOption & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | (Schema.Attribute.OfType<"relation"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.PrivateOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.RequiredOption & {
22
+ export type LoadedContentTypeModel = Struct.ContentTypeSchema & Required<Pick<Struct.ContentTypeSchema, 'collectionName' | 'uid' | 'modelName'>> & Pick<Model, 'lifecycles'>;
23
+ export declare const transformAttribute: (name: string, attribute: Schema.Attribute.AnyAttribute, contentType: LoadedContentTypeModel, identifiers: Identifiers) => {
24
+ type: "biginteger";
25
+ pluginOptions?: object | undefined;
26
+ searchable?: boolean | undefined;
27
+ column?: Partial<Schema.Attribute.Column> | undefined;
28
+ configurable?: boolean | undefined;
29
+ default?: string | (() => string) | undefined;
30
+ min?: string | undefined;
31
+ max?: string | undefined;
32
+ private?: boolean | undefined;
33
+ required?: boolean | undefined;
34
+ writable?: boolean | undefined;
35
+ visible?: boolean | undefined;
36
+ unique?: boolean | undefined;
37
+ } | {
38
+ type: "boolean";
39
+ pluginOptions?: object | undefined;
40
+ searchable?: boolean | undefined;
41
+ column?: Partial<Schema.Attribute.Column> | undefined;
42
+ configurable?: boolean | undefined;
43
+ default?: boolean | (() => boolean) | undefined;
44
+ private?: boolean | undefined;
45
+ required?: boolean | undefined;
46
+ writable?: boolean | undefined;
47
+ visible?: boolean | undefined;
48
+ } | {
49
+ type: "blocks";
50
+ pluginOptions?: object | undefined;
51
+ searchable?: boolean | undefined;
52
+ column?: Partial<Schema.Attribute.Column> | undefined;
53
+ configurable?: boolean | undefined;
54
+ private?: boolean | undefined;
55
+ required?: boolean | undefined;
56
+ writable?: boolean | undefined;
57
+ visible?: boolean | undefined;
58
+ } | {
59
+ type: "datetime";
60
+ pluginOptions?: object | undefined;
61
+ searchable?: boolean | undefined;
62
+ column?: Partial<Schema.Attribute.Column> | undefined;
63
+ configurable?: boolean | undefined;
64
+ default?: Schema.Attribute.DateTimeValue | (() => Schema.Attribute.DateTimeValue) | undefined;
65
+ private?: boolean | undefined;
66
+ required?: boolean | undefined;
67
+ unique?: boolean | undefined;
68
+ writable?: boolean | undefined;
69
+ visible?: boolean | undefined;
70
+ } | {
71
+ type: "date";
72
+ pluginOptions?: object | undefined;
73
+ searchable?: boolean | undefined;
74
+ column?: Partial<Schema.Attribute.Column> | undefined;
75
+ configurable?: boolean | undefined;
76
+ default?: Schema.Attribute.DateValue | (() => Schema.Attribute.DateValue) | undefined;
77
+ private?: boolean | undefined;
78
+ required?: boolean | undefined;
79
+ unique?: boolean | undefined;
80
+ writable?: boolean | undefined;
81
+ visible?: boolean | undefined;
82
+ } | {
83
+ type: "decimal";
84
+ pluginOptions?: object | undefined;
85
+ searchable?: boolean | undefined;
86
+ column?: Partial<Schema.Attribute.Column> | undefined;
87
+ configurable?: boolean | undefined;
88
+ default?: number | (() => number) | undefined;
89
+ min?: number | undefined;
90
+ max?: number | undefined;
91
+ private?: boolean | undefined;
92
+ required?: boolean | undefined;
93
+ writable?: boolean | undefined;
94
+ visible?: boolean | undefined;
95
+ unique?: boolean | undefined;
96
+ } | {
97
+ type: "email";
98
+ pluginOptions?: object | undefined;
99
+ searchable?: boolean | undefined;
100
+ column?: Partial<Schema.Attribute.Column> | undefined;
101
+ configurable?: boolean | undefined;
102
+ default?: string | (() => string) | undefined;
103
+ minLength?: number | undefined;
104
+ maxLength?: number | undefined;
105
+ private?: boolean | undefined;
106
+ required?: boolean | undefined;
107
+ unique?: boolean | undefined;
108
+ writable?: boolean | undefined;
109
+ visible?: boolean | undefined;
110
+ } | {
111
+ type: "enumeration";
112
+ pluginOptions?: object | undefined;
113
+ searchable?: boolean | undefined;
114
+ column?: Partial<Schema.Attribute.Column> | undefined;
115
+ enum: string[];
116
+ enumName?: string | undefined;
117
+ configurable?: boolean | undefined;
118
+ default?: string | (() => string) | undefined;
119
+ private?: boolean | undefined;
120
+ required?: boolean | undefined;
121
+ writable?: boolean | undefined;
122
+ visible?: boolean | undefined;
123
+ } | {
124
+ type: "float";
125
+ pluginOptions?: object | undefined;
126
+ searchable?: boolean | undefined;
127
+ column?: Partial<Schema.Attribute.Column> | undefined;
128
+ configurable?: boolean | undefined;
129
+ default?: number | (() => number) | undefined;
130
+ min?: number | undefined;
131
+ max?: number | undefined;
132
+ private?: boolean | undefined;
133
+ required?: boolean | undefined;
134
+ writable?: boolean | undefined;
135
+ visible?: boolean | undefined;
136
+ unique?: boolean | undefined;
137
+ } | {
138
+ type: "integer";
139
+ pluginOptions?: object | undefined;
140
+ searchable?: boolean | undefined;
141
+ column?: Partial<Schema.Attribute.Column> | undefined;
142
+ configurable?: boolean | undefined;
143
+ default?: number | (() => number) | undefined;
144
+ min?: number | undefined;
145
+ max?: number | undefined;
146
+ private?: boolean | undefined;
147
+ required?: boolean | undefined;
148
+ writable?: boolean | undefined;
149
+ visible?: boolean | undefined;
150
+ unique?: boolean | undefined;
151
+ } | {
152
+ type: "json";
153
+ pluginOptions?: object | undefined;
154
+ searchable?: boolean | undefined;
155
+ column?: Partial<Schema.Attribute.Column> | undefined;
156
+ configurable?: boolean | undefined;
157
+ required?: boolean | undefined;
158
+ private?: boolean | undefined;
159
+ writable?: boolean | undefined;
160
+ visible?: boolean | undefined;
161
+ default?: import("@strapi/types/dist/utils").JSONPrimitive | (() => import("@strapi/types/dist/utils").JSONPrimitive) | undefined;
162
+ } | {
163
+ type: "password";
164
+ pluginOptions?: object | undefined;
165
+ searchable?: boolean | undefined;
166
+ column?: Partial<Schema.Attribute.Column> | undefined;
167
+ configurable?: boolean | undefined;
168
+ default?: string | (() => string) | undefined;
169
+ minLength?: number | undefined;
170
+ maxLength?: number | undefined;
171
+ private?: boolean | undefined;
172
+ required?: boolean | undefined;
173
+ writable?: boolean | undefined;
174
+ visible?: boolean | undefined;
175
+ } | {
176
+ type: "relation";
177
+ pluginOptions?: object | undefined;
178
+ searchable?: boolean | undefined;
179
+ column?: Partial<Schema.Attribute.Column> | undefined;
180
+ configurable?: boolean | undefined;
181
+ private?: boolean | undefined;
182
+ writable?: boolean | undefined;
183
+ visible?: boolean | undefined;
184
+ required?: boolean | undefined;
24
185
  useJoinTable?: boolean | undefined;
25
- } & {
26
186
  relation: "morphToOne";
27
- }) | (Schema.Attribute.OfType<"relation"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.PrivateOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.RequiredOption & {
187
+ } | {
188
+ type: "relation";
189
+ pluginOptions?: object | undefined;
190
+ searchable?: boolean | undefined;
191
+ column?: Partial<Schema.Attribute.Column> | undefined;
192
+ configurable?: boolean | undefined;
193
+ private?: boolean | undefined;
194
+ writable?: boolean | undefined;
195
+ visible?: boolean | undefined;
196
+ required?: boolean | undefined;
28
197
  useJoinTable?: boolean | undefined;
29
- } & {
30
198
  relation: "morphToMany";
31
- }) | (Schema.Attribute.OfType<"relation"> & Schema.Attribute.CommonBidirectionalProperties<import("@strapi/types/dist/uid").ContentType> & Schema.Attribute.ConfigurableOption & Schema.Attribute.PrivateOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.RequiredOption & {
199
+ } | {
200
+ type: "relation";
201
+ pluginOptions?: object | undefined;
202
+ searchable?: boolean | undefined;
203
+ column?: Partial<Schema.Attribute.Column> | undefined;
204
+ target: import("@strapi/types/dist/uid").ContentType;
205
+ inversedBy?: string | undefined;
206
+ mappedBy?: string | undefined;
207
+ configurable?: boolean | undefined;
208
+ private?: boolean | undefined;
209
+ writable?: boolean | undefined;
210
+ visible?: boolean | undefined;
211
+ required?: boolean | undefined;
32
212
  useJoinTable?: boolean | undefined;
33
- } & {
34
213
  relation: "oneToOne";
35
- }) | (Schema.Attribute.OfType<"relation"> & Schema.Attribute.CommonBidirectionalProperties<import("@strapi/types/dist/uid").ContentType> & Schema.Attribute.ConfigurableOption & Schema.Attribute.PrivateOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.RequiredOption & {
214
+ } | {
215
+ type: "relation";
216
+ pluginOptions?: object | undefined;
217
+ searchable?: boolean | undefined;
218
+ column?: Partial<Schema.Attribute.Column> | undefined;
219
+ target: import("@strapi/types/dist/uid").ContentType;
220
+ inversedBy?: string | undefined;
221
+ mappedBy?: string | undefined;
222
+ configurable?: boolean | undefined;
223
+ private?: boolean | undefined;
224
+ writable?: boolean | undefined;
225
+ visible?: boolean | undefined;
226
+ required?: boolean | undefined;
36
227
  useJoinTable?: boolean | undefined;
37
- } & {
38
228
  relation: "oneToMany";
39
- }) | (Schema.Attribute.OfType<"relation"> & Schema.Attribute.CommonBidirectionalProperties<import("@strapi/types/dist/uid").ContentType> & Schema.Attribute.ConfigurableOption & Schema.Attribute.PrivateOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.RequiredOption & {
229
+ } | {
230
+ type: "relation";
231
+ pluginOptions?: object | undefined;
232
+ searchable?: boolean | undefined;
233
+ column?: Partial<Schema.Attribute.Column> | undefined;
234
+ target: import("@strapi/types/dist/uid").ContentType;
235
+ inversedBy?: string | undefined;
236
+ mappedBy?: string | undefined;
237
+ configurable?: boolean | undefined;
238
+ private?: boolean | undefined;
239
+ writable?: boolean | undefined;
240
+ visible?: boolean | undefined;
241
+ required?: boolean | undefined;
40
242
  useJoinTable?: boolean | undefined;
41
- } & {
42
243
  relation: "manyToOne";
43
- }) | (Schema.Attribute.OfType<"relation"> & Schema.Attribute.CommonBidirectionalProperties<import("@strapi/types/dist/uid").ContentType> & Schema.Attribute.ConfigurableOption & Schema.Attribute.PrivateOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.RequiredOption & {
244
+ } | {
245
+ type: "relation";
246
+ pluginOptions?: object | undefined;
247
+ searchable?: boolean | undefined;
248
+ column?: Partial<Schema.Attribute.Column> | undefined;
249
+ target: import("@strapi/types/dist/uid").ContentType;
250
+ inversedBy?: string | undefined;
251
+ mappedBy?: string | undefined;
252
+ configurable?: boolean | undefined;
253
+ private?: boolean | undefined;
254
+ writable?: boolean | undefined;
255
+ visible?: boolean | undefined;
256
+ required?: boolean | undefined;
44
257
  useJoinTable?: boolean | undefined;
45
- } & {
46
258
  relation: "manyToMany";
47
- }) | (Schema.Attribute.OfType<"relation"> & Schema.Attribute.XWayCommonProperties<import("@strapi/types/dist/uid").ContentType> & Schema.Attribute.ConfigurableOption & Schema.Attribute.PrivateOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.RequiredOption & {
259
+ } | {
260
+ type: "relation";
261
+ pluginOptions?: object | undefined;
262
+ searchable?: boolean | undefined;
263
+ column?: Partial<Schema.Attribute.Column> | undefined;
264
+ target: import("@strapi/types/dist/uid").ContentType;
265
+ configurable?: boolean | undefined;
266
+ private?: boolean | undefined;
267
+ writable?: boolean | undefined;
268
+ visible?: boolean | undefined;
269
+ required?: boolean | undefined;
48
270
  useJoinTable?: boolean | undefined;
49
- } & {
50
271
  relation: "oneWay";
51
- }) | (Schema.Attribute.OfType<"relation"> & Schema.Attribute.XWayCommonProperties<import("@strapi/types/dist/uid").ContentType> & Schema.Attribute.ConfigurableOption & Schema.Attribute.PrivateOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.RequiredOption & {
272
+ } | {
273
+ type: "relation";
274
+ pluginOptions?: object | undefined;
275
+ searchable?: boolean | undefined;
276
+ column?: Partial<Schema.Attribute.Column> | undefined;
277
+ target: import("@strapi/types/dist/uid").ContentType;
278
+ configurable?: boolean | undefined;
279
+ private?: boolean | undefined;
280
+ writable?: boolean | undefined;
281
+ visible?: boolean | undefined;
282
+ required?: boolean | undefined;
52
283
  useJoinTable?: boolean | undefined;
53
- } & {
54
284
  relation: "manyWay";
55
- }) | (Schema.Attribute.OfType<"relation"> & Schema.Attribute.MorphReferenceCommonProperties<import("@strapi/types/dist/uid").ContentType> & Schema.Attribute.ConfigurableOption & Schema.Attribute.PrivateOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.RequiredOption & {
285
+ } | {
286
+ type: "relation";
287
+ pluginOptions?: object | undefined;
288
+ searchable?: boolean | undefined;
289
+ column?: Partial<Schema.Attribute.Column> | undefined;
290
+ target: import("@strapi/types/dist/uid").ContentType;
291
+ morphBy?: string | undefined;
292
+ configurable?: boolean | undefined;
293
+ private?: boolean | undefined;
294
+ writable?: boolean | undefined;
295
+ visible?: boolean | undefined;
296
+ required?: boolean | undefined;
56
297
  useJoinTable?: boolean | undefined;
57
- } & {
58
298
  relation: "morphOne";
59
- }) | (Schema.Attribute.OfType<"relation"> & Schema.Attribute.MorphReferenceCommonProperties<import("@strapi/types/dist/uid").ContentType> & Schema.Attribute.ConfigurableOption & Schema.Attribute.PrivateOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption & Schema.Attribute.RequiredOption & {
299
+ } | {
300
+ type: "relation";
301
+ pluginOptions?: object | undefined;
302
+ searchable?: boolean | undefined;
303
+ column?: Partial<Schema.Attribute.Column> | undefined;
304
+ target: import("@strapi/types/dist/uid").ContentType;
305
+ morphBy?: string | undefined;
306
+ configurable?: boolean | undefined;
307
+ private?: boolean | undefined;
308
+ writable?: boolean | undefined;
309
+ visible?: boolean | undefined;
310
+ required?: boolean | undefined;
60
311
  useJoinTable?: boolean | undefined;
61
- } & {
62
312
  relation: "morphMany";
63
- }) | (Schema.Attribute.OfType<"richtext"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<string> & Schema.Attribute.MinMaxLengthOption & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | (Schema.Attribute.OfType<"string"> & Schema.Attribute.StringProperties & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<string> & Schema.Attribute.MinMaxLengthOption & Schema.Attribute.PrivateOption & Schema.Attribute.UniqueOption & Schema.Attribute.RequiredOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | (Schema.Attribute.OfType<"text"> & Schema.Attribute.TextProperties & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<string> & Schema.Attribute.MinMaxLengthOption & Schema.Attribute.PrivateOption & Schema.Attribute.UniqueOption & Schema.Attribute.RequiredOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | (Schema.Attribute.OfType<"time"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<Schema.Attribute.TimeValue> & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.UniqueOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | (Schema.Attribute.OfType<"timestamp"> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<Schema.Attribute.TimestampValue> & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.UniqueOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | (Schema.Attribute.OfType<"uid"> & Schema.Attribute.UIDProperties<string, Schema.Attribute.UIDOptions> & Schema.Attribute.ConfigurableOption & Schema.Attribute.DefaultOption<string> & Schema.Attribute.MinMaxLengthOption & Schema.Attribute.PrivateOption & Schema.Attribute.RequiredOption & Schema.Attribute.WritableOption & Schema.Attribute.VisibleOption) | {
313
+ } | {
314
+ type: "richtext";
315
+ pluginOptions?: object | undefined;
316
+ searchable?: boolean | undefined;
317
+ column?: Partial<Schema.Attribute.Column> | undefined;
318
+ configurable?: boolean | undefined;
319
+ default?: string | (() => string) | undefined;
320
+ minLength?: number | undefined;
321
+ maxLength?: number | undefined;
322
+ private?: boolean | undefined;
323
+ required?: boolean | undefined;
324
+ writable?: boolean | undefined;
325
+ visible?: boolean | undefined;
326
+ } | {
327
+ type: "string";
328
+ pluginOptions?: object | undefined;
329
+ searchable?: boolean | undefined;
330
+ column?: Partial<Schema.Attribute.Column> | undefined;
331
+ regex?: RegExp | undefined;
332
+ configurable?: boolean | undefined;
333
+ default?: string | (() => string) | undefined;
334
+ minLength?: number | undefined;
335
+ maxLength?: number | undefined;
336
+ private?: boolean | undefined;
337
+ unique?: boolean | undefined;
338
+ required?: boolean | undefined;
339
+ writable?: boolean | undefined;
340
+ visible?: boolean | undefined;
341
+ } | {
342
+ type: "text";
343
+ pluginOptions?: object | undefined;
344
+ searchable?: boolean | undefined;
345
+ column?: Partial<Schema.Attribute.Column> | undefined;
346
+ regex?: RegExp | undefined;
347
+ configurable?: boolean | undefined;
348
+ default?: string | (() => string) | undefined;
349
+ minLength?: number | undefined;
350
+ maxLength?: number | undefined;
351
+ private?: boolean | undefined;
352
+ unique?: boolean | undefined;
353
+ required?: boolean | undefined;
354
+ writable?: boolean | undefined;
355
+ visible?: boolean | undefined;
356
+ } | {
357
+ type: "time";
358
+ pluginOptions?: object | undefined;
359
+ searchable?: boolean | undefined;
360
+ column?: Partial<Schema.Attribute.Column> | undefined;
361
+ configurable?: boolean | undefined;
362
+ default?: Schema.Attribute.TimeValue | (() => Schema.Attribute.TimeValue) | undefined;
363
+ private?: boolean | undefined;
364
+ required?: boolean | undefined;
365
+ unique?: boolean | undefined;
366
+ writable?: boolean | undefined;
367
+ visible?: boolean | undefined;
368
+ } | {
369
+ type: "timestamp";
370
+ pluginOptions?: object | undefined;
371
+ searchable?: boolean | undefined;
372
+ column?: Partial<Schema.Attribute.Column> | undefined;
373
+ configurable?: boolean | undefined;
374
+ default?: Schema.Attribute.TimestampValue | (() => Schema.Attribute.TimestampValue) | undefined;
375
+ private?: boolean | undefined;
376
+ required?: boolean | undefined;
377
+ unique?: boolean | undefined;
378
+ writable?: boolean | undefined;
379
+ visible?: boolean | undefined;
380
+ } | {
381
+ type: "uid";
382
+ pluginOptions?: object | undefined;
383
+ searchable?: boolean | undefined;
384
+ column?: Partial<Schema.Attribute.Column> | undefined;
385
+ targetField?: string | undefined;
386
+ options?: Schema.Attribute.UIDOptions | undefined;
387
+ configurable?: boolean | undefined;
388
+ default?: string | (() => string) | undefined;
389
+ minLength?: number | undefined;
390
+ maxLength?: number | undefined;
391
+ private?: boolean | undefined;
392
+ required?: boolean | undefined;
393
+ writable?: boolean | undefined;
394
+ visible?: boolean | undefined;
395
+ } | {
64
396
  type: string;
65
397
  relation: string;
66
398
  target: string;
@@ -124,7 +456,7 @@ export declare const transformAttribute: (name: string, attribute: Schema.Attrib
124
456
  morphBy?: undefined;
125
457
  };
126
458
  export declare const transformAttributes: (contentType: LoadedContentTypeModel, identifiers: Identifiers) => {};
127
- export declare const hasComponentsOrDz: (contentType: LoadedContentTypeModel) => contentType is Struct.ContentTypeSchema & Required<Pick<Struct.ContentTypeSchema, "uid" | "collectionName" | "modelName">> & {
459
+ export declare const hasComponentsOrDz: (contentType: LoadedContentTypeModel) => contentType is Struct.ContentTypeSchema & Required<Pick<Struct.ContentTypeSchema, "uid" | "collectionName" | "modelName">> & Pick<Model, "lifecycles"> & {
128
460
  type: 'dynamiczone' | 'component';
129
461
  };
130
462
  export declare const createDocumentId: typeof createId;
@@ -1 +1 @@
1
- {"version":3,"file":"transform-content-types-to-models.d.ts","sourceRoot":"","sources":["../../src/utils/transform-content-types-to-models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIhD;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,yBAAyB,mBAAoB,MAAM,eAAe,WAAW,WAKzF,CAAC;AAEF,eAAO,MAAM,kBAAkB,mBAAoB,MAAM,eAAe,WAAW,WAKlF,CAAC;AAEF,eAAO,MAAM,gCAAgC,gBAAiB,WAAW,WAKxE,CAAC;AAEF,eAAO,MAAM,iCAAiC,gBAAiB,WAAW,WAKzE,CAAC;AAEF,eAAO,MAAM,sBAAsB,gBAAiB,WAAW,WAE9D,CAAC;AAEF,eAAO,MAAM,uBAAuB,gBAAiB,MAAM,eAAe,WAAW,WAMpF,CAAC;AAIF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,iBAAiB,GAC3D,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC;AAGnF,eAAO,MAAM,kBAAkB,SACvB,MAAM,aACD,OAAO,SAAS,CAAC,YAAY,eAC3B,sBAAsB,eACtB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+FzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,gBACjB,sBAAsB,eACtB,WAAW,OAazB,CAAC;AAEF,eAAO,MAAM,iBAAiB,gBACf,sBAAsB;UACc,aAAa,GAAG,WAAW;CAI7E,CAAC;AAEF,eAAO,MAAM,gBAAgB,iBAAW,CAAC;AAgFzC,eAAO,MAAM,6BAA6B,iBAC1B,sBAAsB,EAAE,eACzB,WAAW,KACvB,KAAK,EAiDP,CAAC"}
1
+ {"version":3,"file":"transform-content-types-to-models.d.ts","sourceRoot":"","sources":["../../src/utils/transform-content-types-to-models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIhD;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,yBAAyB,mBAAoB,MAAM,eAAe,WAAW,WAKzF,CAAC;AAEF,eAAO,MAAM,kBAAkB,mBAAoB,MAAM,eAAe,WAAW,WAKlF,CAAC;AAEF,eAAO,MAAM,gCAAgC,gBAAiB,WAAW,WAKxE,CAAC;AAEF,eAAO,MAAM,iCAAiC,gBAAiB,WAAW,WAKzE,CAAC;AAEF,eAAO,MAAM,sBAAsB,gBAAiB,WAAW,WAE9D,CAAC;AAEF,eAAO,MAAM,uBAAuB,gBAAiB,MAAM,eAAe,WAAW,WAMpF,CAAC;AAIF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,iBAAiB,GAC3D,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,KAAK,GAAG,WAAW,CAAC,CAAC,GAChF,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAG5B,eAAO,MAAM,kBAAkB,SACvB,MAAM,aACD,OAAO,SAAS,CAAC,YAAY,eAC3B,sBAAsB,eACtB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+FzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,gBACjB,sBAAsB,eACtB,WAAW,OAazB,CAAC;AAEF,eAAO,MAAM,iBAAiB,gBACf,sBAAsB;UACc,aAAa,GAAG,WAAW;CAI7E,CAAC;AAEF,eAAO,MAAM,gBAAgB,iBAAW,CAAC;AAgFzC,eAAO,MAAM,6BAA6B,iBAC1B,sBAAsB,EAAE,eACzB,WAAW,KACvB,KAAK,EAkEP,CAAC"}
@@ -2,10 +2,10 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const cuid2 = require("@paralleldrive/cuid2");
4
4
  const assert = require("node:assert");
5
- const _ = require("lodash/fp");
5
+ const fp = require("lodash/fp");
6
6
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
7
7
  const assert__default = /* @__PURE__ */ _interopDefault(assert);
8
- const ___default = /* @__PURE__ */ _interopDefault(_);
8
+ const fp__default = /* @__PURE__ */ _interopDefault(fp);
9
9
  const getComponentJoinTableName = (collectionName, identifiers) => {
10
10
  return identifiers.getNameFromTokens([
11
11
  { name: collectionName, compressible: true },
@@ -233,7 +233,7 @@ const transformContentTypesToModels = (contentTypes, identifiers) => {
233
233
  const documentIdAttribute = contentType.modelType === "contentType" ? { documentId: { type: "string", default: createDocumentId } } : {};
234
234
  const reservedAttributeNames = ["document_id", identifiers.ID_COLUMN];
235
235
  Object.keys(contentType.attributes || {}).forEach((attributeName) => {
236
- const snakeCasedAttributeName = ___default.default.snakeCase(attributeName);
236
+ const snakeCasedAttributeName = fp__default.default.snakeCase(attributeName);
237
237
  if (reservedAttributeNames.includes(snakeCasedAttributeName)) {
238
238
  throw new Error(
239
239
  `The attribute "${attributeName}" is reserved and cannot be used in a model. Please rename "${contentType.modelName}" attribute "${attributeName}" to something else.`
@@ -255,8 +255,21 @@ const transformContentTypesToModels = (contentTypes, identifiers) => {
255
255
  },
256
256
  ...documentIdAttribute,
257
257
  ...transformAttributes(contentType, identifiers)
258
- }
258
+ },
259
+ indexes: contentType.indexes,
260
+ foreignKeys: contentType.foreignKeys,
261
+ lifecycles: contentType?.lifecycles ?? {}
259
262
  };
263
+ if (contentType.modelType === "contentType") {
264
+ model.indexes = [
265
+ ...model.indexes || [],
266
+ {
267
+ name: identifiers.getIndexName([contentType.collectionName, "documents"]),
268
+ // Filter attributes that are not in the schema
269
+ columns: ["documentId", "locale", "publishedAt"].filter((n) => model.attributes[n]).map((name) => identifiers.getColumnName(fp__default.default.snakeCase(name)))
270
+ }
271
+ ];
272
+ }
260
273
  models.push(model);
261
274
  });
262
275
  return models;
@@ -1 +1 @@
1
- {"version":3,"file":"transform-content-types-to-models.js","sources":["../../src/utils/transform-content-types-to-models.ts"],"sourcesContent":["import { type Model, type Identifiers } from '@strapi/database';\nimport type { Struct, Schema } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\nimport _ from 'lodash/fp';\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 * IMPORTANT!\n * If we use short versions of anything, we MUST call getNameFromTokens directly; attempting to shorten them ourselves\n * prevents the unshortened name map from being filled properly, so for example it will think that the short name\n * 'collection4f3a_cmps' maps to the unshortened 'collectionname_cmps' rather than 'collectionname_components'\n * Therefore, we only use the identifiers helpers in cases where we do not do any of our own shortening\n */\n\nexport const getComponentJoinTableName = (collectionName: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ]);\n};\n\nexport const getDzJoinTableName = (collectionName: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ]);\n};\n\nexport const getComponentJoinColumnEntityName = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: 'entity', compressible: false },\n { name: 'id', compressible: false },\n ]);\n};\n\nexport const getComponentJoinColumnInverseName = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: 'component', shortName: 'cmp', compressible: false },\n { name: 'id', compressible: false },\n ]);\n};\n\nexport const getComponentTypeColumn = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([{ name: 'component_type', compressible: false }]);\n};\n\nexport const getComponentFkIndexName = (contentType: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: contentType, compressible: true },\n { name: 'entity', compressible: false },\n { name: 'fk', compressible: false },\n ]);\n};\n\n// const { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;\n\nexport type LoadedContentTypeModel = Struct.ContentTypeSchema &\n Required<Pick<Struct.ContentTypeSchema, '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: Schema.Attribute.AnyAttribute,\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\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, identifiers);\n const joinColumnEntityName = getComponentJoinColumnEntityName(identifiers);\n const joinColumnInverseName = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\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: identifiers.ID_COLUMN,\n },\n inverseJoinColumn: {\n name: joinColumnInverseName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n on: {\n field: name,\n },\n orderColumnName: identifiers.ORDER_COLUMN,\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [\n joinColumnEntityName,\n joinColumnInverseName,\n identifiers.FIELD_COLUMN,\n compTypeColumn,\n ],\n },\n };\n }\n case 'dynamiczone': {\n const joinTableName = getDzJoinTableName(contentType.collectionName, identifiers);\n const joinColumnEntityName = getComponentJoinColumnEntityName(identifiers);\n const joinColumnInverseName = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\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: identifiers.ID_COLUMN,\n },\n morphColumn: {\n idColumn: {\n name: joinColumnInverseName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n typeColumn: {\n name: compTypeColumn,\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [\n joinColumnEntityName,\n joinColumnInverseName,\n identifiers.FIELD_COLUMN,\n compTypeColumn,\n ],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nexport const transformAttributes = (\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(\n attrName,\n contentType.attributes[attrName]!,\n contentType,\n identifiers\n ),\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: string }) => type === 'dynamiczone' || type === 'component') as any\n );\n};\n\nexport const createDocumentId = createId;\n\nconst createCompoLinkModel = (\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n): Model => {\n const name = getComponentJoinTableName(contentType.collectionName, identifiers);\n\n const entityId = getComponentJoinColumnEntityName(identifiers);\n const componentId = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\n const fkIndex = getComponentFkIndexName(contentType.collectionName, identifiers);\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 [identifiers.ID_COLUMN]: {\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 [compTypeColumn]: {\n type: 'string',\n },\n [identifiers.FIELD_COLUMN]: {\n type: 'string',\n },\n [identifiers.ORDER_COLUMN]: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: identifiers.getIndexName([contentType.collectionName, identifiers.FIELD_COLUMN]),\n columns: [identifiers.FIELD_COLUMN],\n },\n {\n name: identifiers.getIndexName([contentType.collectionName, compTypeColumn]),\n columns: [compTypeColumn],\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, identifiers.FIELD_COLUMN, compTypeColumn],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndex,\n columns: [entityId],\n referencedColumns: [identifiers.ID_COLUMN],\n referencedTable: identifiers.getTableName(contentType.collectionName),\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (\n contentTypes: LoadedContentTypeModel[],\n identifiers: Identifiers\n): 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, Schema.Attribute.AnyAttribute> =\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', identifiers.ID_COLUMN];\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, identifiers);\n models.push(compoLinkModel);\n }\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: contentType.collectionName, // This gets shortened in metadata.loadModels(), so we don't shorten here or it will happen twice\n attributes: {\n [identifiers.ID_COLUMN]: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType, identifiers),\n },\n };\n\n models.push(model);\n });\n\n return models;\n};\n"],"names":["createId","assert","_"],"mappings":"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"}
1
+ {"version":3,"file":"transform-content-types-to-models.js","sources":["../../src/utils/transform-content-types-to-models.ts"],"sourcesContent":["import { type Model, type Identifiers } from '@strapi/database';\nimport type { Struct, Schema } from '@strapi/types';\nimport { createId } from '@paralleldrive/cuid2';\nimport assert from 'node:assert';\nimport _ from 'lodash/fp';\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 * IMPORTANT!\n * If we use short versions of anything, we MUST call getNameFromTokens directly; attempting to shorten them ourselves\n * prevents the unshortened name map from being filled properly, so for example it will think that the short name\n * 'collection4f3a_cmps' maps to the unshortened 'collectionname_cmps' rather than 'collectionname_components'\n * Therefore, we only use the identifiers helpers in cases where we do not do any of our own shortening\n */\n\nexport const getComponentJoinTableName = (collectionName: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ]);\n};\n\nexport const getDzJoinTableName = (collectionName: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: collectionName, compressible: true },\n { name: 'components', shortName: 'cmps', compressible: false },\n ]);\n};\n\nexport const getComponentJoinColumnEntityName = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: 'entity', compressible: false },\n { name: 'id', compressible: false },\n ]);\n};\n\nexport const getComponentJoinColumnInverseName = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: 'component', shortName: 'cmp', compressible: false },\n { name: 'id', compressible: false },\n ]);\n};\n\nexport const getComponentTypeColumn = (identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([{ name: 'component_type', compressible: false }]);\n};\n\nexport const getComponentFkIndexName = (contentType: string, identifiers: Identifiers) => {\n return identifiers.getNameFromTokens([\n { name: contentType, compressible: true },\n { name: 'entity', compressible: false },\n { name: 'fk', compressible: false },\n ]);\n};\n\n// const { ID_COLUMN: id, FIELD_COLUMN: field, ORDER_COLUMN: order } = identifiers;\n\nexport type LoadedContentTypeModel = Struct.ContentTypeSchema &\n Required<Pick<Struct.ContentTypeSchema, 'collectionName' | 'uid' | 'modelName'>> &\n Pick<Model, 'lifecycles'>;\n\n// Transforms an attribute (particularly for relation types) into the format that strapi/database accepts\nexport const transformAttribute = (\n name: string,\n attribute: Schema.Attribute.AnyAttribute,\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\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, identifiers);\n const joinColumnEntityName = getComponentJoinColumnEntityName(identifiers);\n const joinColumnInverseName = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\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: identifiers.ID_COLUMN,\n },\n inverseJoinColumn: {\n name: joinColumnInverseName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n on: {\n field: name,\n },\n orderColumnName: identifiers.ORDER_COLUMN,\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [\n joinColumnEntityName,\n joinColumnInverseName,\n identifiers.FIELD_COLUMN,\n compTypeColumn,\n ],\n },\n };\n }\n case 'dynamiczone': {\n const joinTableName = getDzJoinTableName(contentType.collectionName, identifiers);\n const joinColumnEntityName = getComponentJoinColumnEntityName(identifiers);\n const joinColumnInverseName = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\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: identifiers.ID_COLUMN,\n },\n morphColumn: {\n idColumn: {\n name: joinColumnInverseName,\n referencedColumn: identifiers.ID_COLUMN,\n },\n typeColumn: {\n name: compTypeColumn,\n },\n typeField: '__component',\n },\n on: {\n field: name,\n },\n orderBy: {\n order: 'asc',\n },\n pivotColumns: [\n joinColumnEntityName,\n joinColumnInverseName,\n identifiers.FIELD_COLUMN,\n compTypeColumn,\n ],\n },\n };\n }\n default: {\n return attribute;\n }\n }\n};\n\nexport const transformAttributes = (\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n) => {\n return Object.keys(contentType.attributes! || {}).reduce((attrs, attrName) => {\n return {\n ...attrs,\n [attrName]: transformAttribute(\n attrName,\n contentType.attributes[attrName]!,\n contentType,\n identifiers\n ),\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: string }) => type === 'dynamiczone' || type === 'component') as any\n );\n};\n\nexport const createDocumentId = createId;\n\nconst createCompoLinkModel = (\n contentType: LoadedContentTypeModel,\n identifiers: Identifiers\n): Model => {\n const name = getComponentJoinTableName(contentType.collectionName, identifiers);\n\n const entityId = getComponentJoinColumnEntityName(identifiers);\n const componentId = getComponentJoinColumnInverseName(identifiers);\n const compTypeColumn = getComponentTypeColumn(identifiers);\n const fkIndex = getComponentFkIndexName(contentType.collectionName, identifiers);\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 [identifiers.ID_COLUMN]: {\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 [compTypeColumn]: {\n type: 'string',\n },\n [identifiers.FIELD_COLUMN]: {\n type: 'string',\n },\n [identifiers.ORDER_COLUMN]: {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n },\n },\n indexes: [\n {\n name: identifiers.getIndexName([contentType.collectionName, identifiers.FIELD_COLUMN]),\n columns: [identifiers.FIELD_COLUMN],\n },\n {\n name: identifiers.getIndexName([contentType.collectionName, compTypeColumn]),\n columns: [compTypeColumn],\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, identifiers.FIELD_COLUMN, compTypeColumn],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndex,\n columns: [entityId],\n referencedColumns: [identifiers.ID_COLUMN],\n referencedTable: identifiers.getTableName(contentType.collectionName),\n onDelete: 'CASCADE',\n },\n ],\n };\n};\n\nexport const transformContentTypesToModels = (\n contentTypes: LoadedContentTypeModel[],\n identifiers: Identifiers\n): 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, Schema.Attribute.AnyAttribute> =\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', identifiers.ID_COLUMN];\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, identifiers);\n models.push(compoLinkModel);\n }\n\n const model: Model = {\n uid: contentType.uid,\n singularName: contentType.modelName,\n tableName: contentType.collectionName, // This gets shortened in metadata.loadModels(), so we don't shorten here or it will happen twice\n attributes: {\n [identifiers.ID_COLUMN]: {\n type: 'increments',\n },\n ...documentIdAttribute,\n ...transformAttributes(contentType, identifiers),\n },\n indexes: contentType.indexes as Model['indexes'],\n foreignKeys: contentType.foreignKeys as Model['foreignKeys'],\n lifecycles: contentType?.lifecycles ?? {},\n };\n\n // Add indexes to model\n if (contentType.modelType === 'contentType') {\n model.indexes = [\n ...(model.indexes || []),\n {\n name: identifiers.getIndexName([contentType.collectionName, 'documents']),\n // Filter attributes that are not in the schema\n columns: ['documentId', 'locale', 'publishedAt']\n .filter((n) => model.attributes[n])\n .map((name) => identifiers.getColumnName(_.snakeCase(name))),\n },\n ];\n }\n\n models.push(model);\n });\n\n return models;\n};\n"],"names":["createId","assert","_"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { createId } from "@paralleldrive/cuid2";
2
2
  import assert from "node:assert";
3
- import _ from "lodash/fp";
3
+ import fp from "lodash/fp";
4
4
  const getComponentJoinTableName = (collectionName, identifiers) => {
5
5
  return identifiers.getNameFromTokens([
6
6
  { name: collectionName, compressible: true },
@@ -228,7 +228,7 @@ const transformContentTypesToModels = (contentTypes, identifiers) => {
228
228
  const documentIdAttribute = contentType.modelType === "contentType" ? { documentId: { type: "string", default: createDocumentId } } : {};
229
229
  const reservedAttributeNames = ["document_id", identifiers.ID_COLUMN];
230
230
  Object.keys(contentType.attributes || {}).forEach((attributeName) => {
231
- const snakeCasedAttributeName = _.snakeCase(attributeName);
231
+ const snakeCasedAttributeName = fp.snakeCase(attributeName);
232
232
  if (reservedAttributeNames.includes(snakeCasedAttributeName)) {
233
233
  throw new Error(
234
234
  `The attribute "${attributeName}" is reserved and cannot be used in a model. Please rename "${contentType.modelName}" attribute "${attributeName}" to something else.`
@@ -250,8 +250,21 @@ const transformContentTypesToModels = (contentTypes, identifiers) => {
250
250
  },
251
251
  ...documentIdAttribute,
252
252
  ...transformAttributes(contentType, identifiers)
253
- }
253
+ },
254
+ indexes: contentType.indexes,
255
+ foreignKeys: contentType.foreignKeys,
256
+ lifecycles: contentType?.lifecycles ?? {}
254
257
  };
258
+ if (contentType.modelType === "contentType") {
259
+ model.indexes = [
260
+ ...model.indexes || [],
261
+ {
262
+ name: identifiers.getIndexName([contentType.collectionName, "documents"]),
263
+ // Filter attributes that are not in the schema
264
+ columns: ["documentId", "locale", "publishedAt"].filter((n) => model.attributes[n]).map((name) => identifiers.getColumnName(fp.snakeCase(name)))
265
+ }
266
+ ];
267
+ }
255
268
  models.push(model);
256
269
  });
257
270
  return models;