@strapi/database 5.12.1 → 5.12.3

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 (321) hide show
  1. package/dist/connection.js +43 -0
  2. package/dist/connection.js.map +1 -0
  3. package/dist/connection.mjs +41 -0
  4. package/dist/connection.mjs.map +1 -0
  5. package/dist/dialects/dialect.js +54 -0
  6. package/dist/dialects/dialect.js.map +1 -0
  7. package/dist/dialects/dialect.mjs +52 -0
  8. package/dist/dialects/dialect.mjs.map +1 -0
  9. package/dist/dialects/index.js +44 -0
  10. package/dist/dialects/index.js.map +1 -0
  11. package/dist/dialects/index.mjs +42 -0
  12. package/dist/dialects/index.mjs.map +1 -0
  13. package/dist/dialects/mysql/constants.js +8 -0
  14. package/dist/dialects/mysql/constants.js.map +1 -0
  15. package/dist/dialects/mysql/constants.mjs +5 -0
  16. package/dist/dialects/mysql/constants.mjs.map +1 -0
  17. package/dist/dialects/mysql/database-inspector.js +35 -0
  18. package/dist/dialects/mysql/database-inspector.js.map +1 -0
  19. package/dist/dialects/mysql/database-inspector.mjs +33 -0
  20. package/dist/dialects/mysql/database-inspector.mjs.map +1 -0
  21. package/dist/dialects/mysql/index.js +75 -0
  22. package/dist/dialects/mysql/index.js.map +1 -0
  23. package/dist/dialects/mysql/index.mjs +73 -0
  24. package/dist/dialects/mysql/index.mjs.map +1 -0
  25. package/dist/dialects/mysql/schema-inspector.js +297 -0
  26. package/dist/dialects/mysql/schema-inspector.js.map +1 -0
  27. package/dist/dialects/mysql/schema-inspector.mjs +295 -0
  28. package/dist/dialects/mysql/schema-inspector.mjs.map +1 -0
  29. package/dist/dialects/postgresql/index.js +62 -0
  30. package/dist/dialects/postgresql/index.js.map +1 -0
  31. package/dist/dialects/postgresql/index.mjs +60 -0
  32. package/dist/dialects/postgresql/index.mjs.map +1 -0
  33. package/dist/dialects/postgresql/schema-inspector.js +316 -0
  34. package/dist/dialects/postgresql/schema-inspector.js.map +1 -0
  35. package/dist/dialects/postgresql/schema-inspector.mjs +314 -0
  36. package/dist/dialects/postgresql/schema-inspector.mjs.map +1 -0
  37. package/dist/dialects/sqlite/index.js +82 -0
  38. package/dist/dialects/sqlite/index.js.map +1 -0
  39. package/dist/dialects/sqlite/index.mjs +80 -0
  40. package/dist/dialects/sqlite/index.mjs.map +1 -0
  41. package/dist/dialects/sqlite/schema-inspector.js +211 -0
  42. package/dist/dialects/sqlite/schema-inspector.js.map +1 -0
  43. package/dist/dialects/sqlite/schema-inspector.mjs +209 -0
  44. package/dist/dialects/sqlite/schema-inspector.mjs.map +1 -0
  45. package/dist/entity-manager/entity-repository.js +139 -0
  46. package/dist/entity-manager/entity-repository.js.map +1 -0
  47. package/dist/entity-manager/entity-repository.mjs +137 -0
  48. package/dist/entity-manager/entity-repository.mjs.map +1 -0
  49. package/dist/entity-manager/index.js +1186 -0
  50. package/dist/entity-manager/index.js.map +1 -0
  51. package/dist/entity-manager/index.mjs +1184 -0
  52. package/dist/entity-manager/index.mjs.map +1 -0
  53. package/dist/entity-manager/morph-relations.js +73 -0
  54. package/dist/entity-manager/morph-relations.js.map +1 -0
  55. package/dist/entity-manager/morph-relations.mjs +69 -0
  56. package/dist/entity-manager/morph-relations.mjs.map +1 -0
  57. package/dist/entity-manager/regular-relations.js +247 -0
  58. package/dist/entity-manager/regular-relations.js.map +1 -0
  59. package/dist/entity-manager/regular-relations.mjs +242 -0
  60. package/dist/entity-manager/regular-relations.mjs.map +1 -0
  61. package/dist/entity-manager/relations-orderer.js +221 -0
  62. package/dist/entity-manager/relations-orderer.js.map +1 -0
  63. package/dist/entity-manager/relations-orderer.mjs +218 -0
  64. package/dist/entity-manager/relations-orderer.mjs.map +1 -0
  65. package/dist/errors/database.js +13 -0
  66. package/dist/errors/database.js.map +1 -0
  67. package/dist/errors/database.mjs +11 -0
  68. package/dist/errors/database.mjs.map +1 -0
  69. package/dist/errors/index.js +18 -0
  70. package/dist/errors/index.js.map +1 -0
  71. package/dist/errors/index.mjs +7 -0
  72. package/dist/errors/index.mjs.map +1 -0
  73. package/dist/errors/invalid-date.js +13 -0
  74. package/dist/errors/invalid-date.js.map +1 -0
  75. package/dist/errors/invalid-date.mjs +11 -0
  76. package/dist/errors/invalid-date.mjs.map +1 -0
  77. package/dist/errors/invalid-datetime.js +13 -0
  78. package/dist/errors/invalid-datetime.js.map +1 -0
  79. package/dist/errors/invalid-datetime.mjs +11 -0
  80. package/dist/errors/invalid-datetime.mjs.map +1 -0
  81. package/dist/errors/invalid-relation.js +13 -0
  82. package/dist/errors/invalid-relation.js.map +1 -0
  83. package/dist/errors/invalid-relation.mjs +11 -0
  84. package/dist/errors/invalid-relation.mjs.map +1 -0
  85. package/dist/errors/invalid-time.js +13 -0
  86. package/dist/errors/invalid-time.js.map +1 -0
  87. package/dist/errors/invalid-time.mjs +11 -0
  88. package/dist/errors/invalid-time.mjs.map +1 -0
  89. package/dist/errors/not-null.js +17 -0
  90. package/dist/errors/not-null.js.map +1 -0
  91. package/dist/errors/not-null.mjs +15 -0
  92. package/dist/errors/not-null.mjs.map +1 -0
  93. package/dist/fields/biginteger.js +9 -0
  94. package/dist/fields/biginteger.js.map +1 -0
  95. package/dist/fields/biginteger.mjs +7 -0
  96. package/dist/fields/biginteger.mjs.map +1 -0
  97. package/dist/fields/boolean.js +48 -0
  98. package/dist/fields/boolean.js.map +1 -0
  99. package/dist/fields/boolean.mjs +46 -0
  100. package/dist/fields/boolean.mjs.map +1 -0
  101. package/dist/fields/date.js +16 -0
  102. package/dist/fields/date.js.map +1 -0
  103. package/dist/fields/date.mjs +14 -0
  104. package/dist/fields/date.mjs.map +1 -0
  105. package/dist/fields/datetime.js +37 -0
  106. package/dist/fields/datetime.js.map +1 -0
  107. package/dist/fields/datetime.mjs +16 -0
  108. package/dist/fields/datetime.mjs.map +1 -0
  109. package/dist/fields/field.js +16 -0
  110. package/dist/fields/field.js.map +1 -0
  111. package/dist/fields/field.mjs +14 -0
  112. package/dist/fields/field.mjs.map +1 -0
  113. package/dist/fields/index.js +45 -0
  114. package/dist/fields/index.js.map +1 -0
  115. package/dist/fields/index.mjs +43 -0
  116. package/dist/fields/index.mjs.map +1 -0
  117. package/dist/fields/json.js +36 -0
  118. package/dist/fields/json.js.map +1 -0
  119. package/dist/fields/json.mjs +34 -0
  120. package/dist/fields/json.mjs.map +1 -0
  121. package/dist/fields/number.js +20 -0
  122. package/dist/fields/number.js.map +1 -0
  123. package/dist/fields/number.mjs +18 -0
  124. package/dist/fields/number.mjs.map +1 -0
  125. package/dist/fields/shared/parsers.js +91 -0
  126. package/dist/fields/shared/parsers.js.map +1 -0
  127. package/dist/fields/shared/parsers.mjs +68 -0
  128. package/dist/fields/shared/parsers.mjs.map +1 -0
  129. package/dist/fields/string.js +16 -0
  130. package/dist/fields/string.js.map +1 -0
  131. package/dist/fields/string.mjs +14 -0
  132. package/dist/fields/string.mjs.map +1 -0
  133. package/dist/fields/time.js +17 -0
  134. package/dist/fields/time.js.map +1 -0
  135. package/dist/fields/time.mjs +15 -0
  136. package/dist/fields/time.mjs.map +1 -0
  137. package/dist/fields/timestamp.js +37 -0
  138. package/dist/fields/timestamp.js.map +1 -0
  139. package/dist/fields/timestamp.mjs +16 -0
  140. package/dist/fields/timestamp.mjs.map +1 -0
  141. package/dist/index.js +33 -8569
  142. package/dist/index.js.map +1 -1
  143. package/dist/index.mjs +16 -8532
  144. package/dist/index.mjs.map +1 -1
  145. package/dist/lifecycles/index.js +73 -0
  146. package/dist/lifecycles/index.js.map +1 -0
  147. package/dist/lifecycles/index.mjs +71 -0
  148. package/dist/lifecycles/index.mjs.map +1 -0
  149. package/dist/lifecycles/subscribers/index.js +10 -0
  150. package/dist/lifecycles/subscribers/index.js.map +1 -0
  151. package/dist/lifecycles/subscribers/index.mjs +8 -0
  152. package/dist/lifecycles/subscribers/index.mjs.map +1 -0
  153. package/dist/lifecycles/subscribers/models-lifecycles.js +13 -0
  154. package/dist/lifecycles/subscribers/models-lifecycles.js.map +1 -0
  155. package/dist/lifecycles/subscribers/models-lifecycles.mjs +11 -0
  156. package/dist/lifecycles/subscribers/models-lifecycles.mjs.map +1 -0
  157. package/dist/lifecycles/subscribers/timestamps.js +55 -0
  158. package/dist/lifecycles/subscribers/timestamps.js.map +1 -0
  159. package/dist/lifecycles/subscribers/timestamps.mjs +53 -0
  160. package/dist/lifecycles/subscribers/timestamps.mjs.map +1 -0
  161. package/dist/metadata/index.js +24 -0
  162. package/dist/metadata/index.js.map +1 -0
  163. package/dist/metadata/index.mjs +16 -0
  164. package/dist/metadata/index.mjs.map +1 -0
  165. package/dist/metadata/metadata.js +100 -0
  166. package/dist/metadata/metadata.js.map +1 -0
  167. package/dist/metadata/metadata.mjs +98 -0
  168. package/dist/metadata/metadata.mjs.map +1 -0
  169. package/dist/metadata/relations.js +545 -0
  170. package/dist/metadata/relations.js.map +1 -0
  171. package/dist/metadata/relations.mjs +536 -0
  172. package/dist/metadata/relations.mjs.map +1 -0
  173. package/dist/migrations/common.js +8 -0
  174. package/dist/migrations/common.js.map +1 -0
  175. package/dist/migrations/common.mjs +6 -0
  176. package/dist/migrations/common.mjs.map +1 -0
  177. package/dist/migrations/index.js +39 -0
  178. package/dist/migrations/index.js.map +1 -0
  179. package/dist/migrations/index.mjs +37 -0
  180. package/dist/migrations/index.mjs.map +1 -0
  181. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js +179 -0
  182. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js.map +1 -0
  183. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs +177 -0
  184. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs.map +1 -0
  185. package/dist/migrations/internal-migrations/5.0.0-02-document-id.js +125 -0
  186. package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -0
  187. package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs +123 -0
  188. package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -0
  189. package/dist/migrations/internal-migrations/5.0.0-03-locale.js +41 -0
  190. package/dist/migrations/internal-migrations/5.0.0-03-locale.js.map +1 -0
  191. package/dist/migrations/internal-migrations/5.0.0-03-locale.mjs +39 -0
  192. package/dist/migrations/internal-migrations/5.0.0-03-locale.mjs.map +1 -0
  193. package/dist/migrations/internal-migrations/5.0.0-04-published-at.js +45 -0
  194. package/dist/migrations/internal-migrations/5.0.0-04-published-at.js.map +1 -0
  195. package/dist/migrations/internal-migrations/5.0.0-04-published-at.mjs +43 -0
  196. package/dist/migrations/internal-migrations/5.0.0-04-published-at.mjs.map +1 -0
  197. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js +43 -0
  198. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js.map +1 -0
  199. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs +41 -0
  200. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs.map +1 -0
  201. package/dist/migrations/internal-migrations/index.js +26 -0
  202. package/dist/migrations/internal-migrations/index.js.map +1 -0
  203. package/dist/migrations/internal-migrations/index.mjs +24 -0
  204. package/dist/migrations/internal-migrations/index.mjs.map +1 -0
  205. package/dist/migrations/internal.js +63 -0
  206. package/dist/migrations/internal.js.map +1 -0
  207. package/dist/migrations/internal.mjs +61 -0
  208. package/dist/migrations/internal.mjs.map +1 -0
  209. package/dist/migrations/logger.js +24 -0
  210. package/dist/migrations/logger.js.map +1 -0
  211. package/dist/migrations/logger.mjs +22 -0
  212. package/dist/migrations/logger.mjs.map +1 -0
  213. package/dist/migrations/storage.js +39 -0
  214. package/dist/migrations/storage.js.map +1 -0
  215. package/dist/migrations/storage.mjs +37 -0
  216. package/dist/migrations/storage.mjs.map +1 -0
  217. package/dist/migrations/users.js +87 -0
  218. package/dist/migrations/users.js.map +1 -0
  219. package/dist/migrations/users.mjs +85 -0
  220. package/dist/migrations/users.mjs.map +1 -0
  221. package/dist/query/helpers/join.js +127 -0
  222. package/dist/query/helpers/join.js.map +1 -0
  223. package/dist/query/helpers/join.mjs +122 -0
  224. package/dist/query/helpers/join.mjs.map +1 -0
  225. package/dist/query/helpers/order-by.js +167 -0
  226. package/dist/query/helpers/order-by.js.map +1 -0
  227. package/dist/query/helpers/order-by.mjs +163 -0
  228. package/dist/query/helpers/order-by.mjs.map +1 -0
  229. package/dist/query/helpers/populate/apply.js +592 -0
  230. package/dist/query/helpers/populate/apply.js.map +1 -0
  231. package/dist/query/helpers/populate/apply.mjs +590 -0
  232. package/dist/query/helpers/populate/apply.mjs.map +1 -0
  233. package/dist/query/helpers/populate/process.js +92 -0
  234. package/dist/query/helpers/populate/process.js.map +1 -0
  235. package/dist/query/helpers/populate/process.mjs +90 -0
  236. package/dist/query/helpers/populate/process.mjs.map +1 -0
  237. package/dist/query/helpers/search.js +67 -0
  238. package/dist/query/helpers/search.js.map +1 -0
  239. package/dist/query/helpers/search.mjs +65 -0
  240. package/dist/query/helpers/search.mjs.map +1 -0
  241. package/dist/query/helpers/streams/readable.js +131 -0
  242. package/dist/query/helpers/streams/readable.js.map +1 -0
  243. package/dist/query/helpers/streams/readable.mjs +129 -0
  244. package/dist/query/helpers/streams/readable.mjs.map +1 -0
  245. package/dist/query/helpers/transform.js +77 -0
  246. package/dist/query/helpers/transform.js.map +1 -0
  247. package/dist/query/helpers/transform.mjs +73 -0
  248. package/dist/query/helpers/transform.mjs.map +1 -0
  249. package/dist/query/helpers/where.js +372 -0
  250. package/dist/query/helpers/where.js.map +1 -0
  251. package/dist/query/helpers/where.mjs +369 -0
  252. package/dist/query/helpers/where.mjs.map +1 -0
  253. package/dist/query/query-builder.js +507 -0
  254. package/dist/query/query-builder.js.map +1 -0
  255. package/dist/query/query-builder.mjs +505 -0
  256. package/dist/query/query-builder.mjs.map +1 -0
  257. package/dist/repairs/index.js +13 -0
  258. package/dist/repairs/index.js.map +1 -0
  259. package/dist/repairs/index.mjs +11 -0
  260. package/dist/repairs/index.mjs.map +1 -0
  261. package/dist/repairs/operations/remove-orphan-morph-types.js +54 -0
  262. package/dist/repairs/operations/remove-orphan-morph-types.js.map +1 -0
  263. package/dist/repairs/operations/remove-orphan-morph-types.mjs +52 -0
  264. package/dist/repairs/operations/remove-orphan-morph-types.mjs.map +1 -0
  265. package/dist/schema/builder.js +354 -0
  266. package/dist/schema/builder.js.map +1 -0
  267. package/dist/schema/builder.mjs +352 -0
  268. package/dist/schema/builder.mjs.map +1 -0
  269. package/dist/schema/diff.js +379 -0
  270. package/dist/schema/diff.js.map +1 -0
  271. package/dist/schema/diff.mjs +377 -0
  272. package/dist/schema/diff.mjs.map +1 -0
  273. package/dist/schema/index.js +93 -0
  274. package/dist/schema/index.js.map +1 -0
  275. package/dist/schema/index.mjs +91 -0
  276. package/dist/schema/index.mjs.map +1 -0
  277. package/dist/schema/schema.js +266 -0
  278. package/dist/schema/schema.js.map +1 -0
  279. package/dist/schema/schema.mjs +264 -0
  280. package/dist/schema/schema.mjs.map +1 -0
  281. package/dist/schema/storage.js +58 -0
  282. package/dist/schema/storage.js.map +1 -0
  283. package/dist/schema/storage.mjs +56 -0
  284. package/dist/schema/storage.mjs.map +1 -0
  285. package/dist/transaction-context.js +65 -0
  286. package/dist/transaction-context.js.map +1 -0
  287. package/dist/transaction-context.mjs +63 -0
  288. package/dist/transaction-context.mjs.map +1 -0
  289. package/dist/utils/async-curry.js +19 -0
  290. package/dist/utils/async-curry.js.map +1 -0
  291. package/dist/utils/async-curry.mjs +17 -0
  292. package/dist/utils/async-curry.mjs.map +1 -0
  293. package/dist/utils/identifiers/hash.js +30 -0
  294. package/dist/utils/identifiers/hash.js.map +1 -0
  295. package/dist/utils/identifiers/hash.mjs +28 -0
  296. package/dist/utils/identifiers/hash.mjs.map +1 -0
  297. package/dist/utils/identifiers/index.js +414 -0
  298. package/dist/utils/identifiers/index.js.map +1 -0
  299. package/dist/utils/identifiers/index.mjs +411 -0
  300. package/dist/utils/identifiers/index.mjs.map +1 -0
  301. package/dist/utils/knex.js +21 -0
  302. package/dist/utils/knex.js.map +1 -0
  303. package/dist/utils/knex.mjs +18 -0
  304. package/dist/utils/knex.mjs.map +1 -0
  305. package/dist/utils/types.js +51 -0
  306. package/dist/utils/types.js.map +1 -0
  307. package/dist/utils/types.mjs +44 -0
  308. package/dist/utils/types.mjs.map +1 -0
  309. package/dist/validations/index.js +12 -0
  310. package/dist/validations/index.js.map +1 -0
  311. package/dist/validations/index.mjs +10 -0
  312. package/dist/validations/index.mjs.map +1 -0
  313. package/dist/validations/relations/bidirectional.js +64 -0
  314. package/dist/validations/relations/bidirectional.js.map +1 -0
  315. package/dist/validations/relations/bidirectional.mjs +62 -0
  316. package/dist/validations/relations/bidirectional.mjs.map +1 -0
  317. package/dist/validations/relations/index.js +13 -0
  318. package/dist/validations/relations/index.js.map +1 -0
  319. package/dist/validations/relations/index.mjs +11 -0
  320. package/dist/validations/relations/index.mjs.map +1 -0
  321. package/package.json +4 -4
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/dialects/dialect.ts","../src/errors/database.ts","../src/errors/not-null.ts","../src/errors/invalid-time.ts","../src/errors/invalid-date.ts","../src/errors/invalid-datetime.ts","../src/errors/invalid-relation.ts","../src/dialects/postgresql/schema-inspector.ts","../src/dialects/postgresql/index.ts","../src/dialects/mysql/schema-inspector.ts","../src/dialects/mysql/constants.ts","../src/dialects/mysql/database-inspector.ts","../src/dialects/mysql/index.ts","../src/dialects/sqlite/schema-inspector.ts","../src/dialects/sqlite/index.ts","../src/dialects/index.ts","../src/schema/builder.ts","../src/schema/diff.ts","../src/schema/storage.ts","../src/utils/types.ts","../src/utils/identifiers/hash.ts","../src/utils/identifiers/index.ts","../src/schema/schema.ts","../src/schema/index.ts","../src/metadata/relations.ts","../src/metadata/metadata.ts","../src/metadata/index.ts","../src/fields/field.ts","../src/fields/string.ts","../src/fields/json.ts","../src/fields/biginteger.ts","../src/fields/number.ts","../src/fields/shared/parsers.ts","../src/fields/date.ts","../src/fields/time.ts","../src/fields/datetime.ts","../src/fields/timestamp.ts","../src/fields/boolean.ts","../src/fields/index.ts","../src/transaction-context.ts","../src/utils/knex.ts","../src/query/helpers/transform.ts","../src/query/helpers/search.ts","../src/query/helpers/join.ts","../src/query/helpers/order-by.ts","../src/query/helpers/populate/apply.ts","../src/query/helpers/populate/process.ts","../src/query/helpers/where.ts","../src/query/helpers/streams/readable.ts","../src/query/query-builder.ts","../src/entity-manager/entity-repository.ts","../src/entity-manager/morph-relations.ts","../src/entity-manager/regular-relations.ts","../src/entity-manager/relations-orderer.ts","../src/entity-manager/index.ts","../src/migrations/storage.ts","../src/migrations/common.ts","../src/migrations/logger.ts","../src/migrations/users.ts","../src/migrations/internal-migrations/5.0.0-02-document-id.ts","../src/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.ts","../src/migrations/internal-migrations/5.0.0-03-locale.ts","../src/migrations/internal-migrations/5.0.0-04-published-at.ts","../src/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.ts","../src/migrations/internal-migrations/index.ts","../src/migrations/internal.ts","../src/migrations/index.ts","../src/lifecycles/subscribers/models-lifecycles.ts","../src/lifecycles/subscribers/timestamps.ts","../src/lifecycles/subscribers/index.ts","../src/lifecycles/index.ts","../src/connection.ts","../src/validations/relations/bidirectional.ts","../src/validations/relations/index.ts","../src/validations/index.ts","../src/repairs/operations/remove-orphan-morph-types.ts","../src/utils/async-curry.ts","../src/repairs/index.ts","../src/index.ts"],"sourcesContent":["import type { Database } from '..';\nimport type { ForeignKey, Index, Schema } from '../schema';\n\nexport interface SchemaInspector {\n getSchema(): Promise<Schema>;\n getIndexes(tableName: string): Promise<Index[]>;\n getForeignKeys(tableName: string): Promise<ForeignKey[]>;\n getTables(): Promise<string[]>;\n}\n\nexport default class Dialect {\n db: Database;\n\n schemaInspector: SchemaInspector = {} as SchemaInspector;\n\n client: string;\n\n constructor(db: Database, client: string) {\n this.db = db;\n this.client = client;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n configure(conn?: any) {}\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async initialize(_nativeConnection?: unknown) {\n // noop\n }\n\n getTables() {\n throw new Error('getTables not implemented for this dialect');\n }\n\n getSqlType(type: unknown) {\n return type;\n }\n\n canAlterConstraints() {\n return true;\n }\n\n usesForeignKeys() {\n return false;\n }\n\n useReturning() {\n return false;\n }\n\n supportsUnsigned() {\n return false;\n }\n\n supportsOperator(operator?: string): boolean;\n supportsOperator(): boolean {\n return true;\n }\n\n async startSchemaUpdate() {\n // noop\n }\n\n async endSchemaUpdate() {\n // noop\n }\n\n transformErrors(error: Error | { message: string }) {\n if (error instanceof Error) {\n throw error;\n }\n\n throw new Error(error.message);\n }\n\n canAddIncrements() {\n return true;\n }\n}\n","export default class DatabaseError extends Error {\n details: unknown;\n\n constructor(message = 'A database error occured', details = {}) {\n super();\n this.name = 'DatabaseError';\n this.message = message;\n this.details = details;\n }\n}\n","import DatabaseError from './database';\n\nexport default class NotNullError extends DatabaseError {\n constructor({ column = '' } = {}) {\n super(`Not null constraint violation${column ? ` on column ${column}` : ''}.`);\n this.name = 'NotNullError';\n this.details = { column };\n this.stack = '';\n }\n}\n","import DatabaseError from './database';\n\nexport default class InvalidTimeError extends DatabaseError {\n constructor(message = 'Invalid time format, expected HH:mm:ss.SSS') {\n super(message);\n this.name = 'InvalidTimeFormat';\n }\n}\n","import DatabaseError from './database';\n\nexport default class InvalidDateError extends DatabaseError {\n constructor(message = 'Invalid date format, expected YYYY-MM-DD') {\n super(message);\n this.name = 'InvalidDateFormat';\n }\n}\n","import DatabaseError from './database';\n\nexport default class InvalidDateTimeError extends DatabaseError {\n constructor(message = 'Invalid relation format') {\n super(message);\n this.name = 'InvalidDatetimeFormat';\n }\n}\n","import DatabaseError from './database';\n\nexport default class InvalidRelationError extends DatabaseError {\n constructor(message = 'Invalid relation format') {\n super(message);\n this.name = 'InvalidRelationFormat';\n }\n}\n","import type { Database } from '../..';\nimport type { Schema, Column, Index, ForeignKey } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\n\ninterface RawTable {\n table_name: string;\n}\n\ninterface RawColumn {\n data_type: string;\n column_name: string;\n character_maximum_length: number;\n column_default: string;\n is_nullable: string;\n}\n\ninterface RawIndex {\n indexrelid: string;\n index_name: string;\n column_name: string;\n is_unique: boolean;\n is_primary: boolean;\n}\n\ninterface RawForeignKey {\n constraint_name: string;\n}\n\nconst SQL_QUERIES = {\n TABLE_LIST: /* sql */ `\n SELECT *\n FROM information_schema.tables\n WHERE\n table_schema = ?\n AND table_type = 'BASE TABLE'\n AND table_name != 'geometry_columns'\n AND table_name != 'spatial_ref_sys';\n `,\n LIST_COLUMNS: /* sql */ `\n SELECT data_type, column_name, character_maximum_length, column_default, is_nullable\n FROM information_schema.columns\n WHERE table_schema = ? AND table_name = ?;\n `,\n INDEX_LIST: /* sql */ `\n SELECT\n ix.indexrelid,\n i.relname as index_name,\n a.attname as column_name,\n ix.indisunique as is_unique,\n ix.indisprimary as is_primary\n FROM\n pg_class t,\n pg_namespace s,\n pg_class i,\n pg_index ix,\n pg_attribute a\n WHERE\n t.oid = ix.indrelid\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = ANY(ix.indkey)\n AND t.relkind = 'r'\n AND t.relnamespace = s.oid\n AND s.nspname = ?\n AND t.relname = ?;\n `,\n FOREIGN_KEY_LIST: /* sql */ `\n SELECT\n tco.\"constraint_name\" as constraint_name\n FROM information_schema.table_constraints tco\n WHERE\n tco.constraint_type = 'FOREIGN KEY'\n AND tco.constraint_schema = ?\n AND tco.table_name = ?\n `,\n FOREIGN_KEY_REFERENCES: /* sql */ `\n SELECT\n kcu.\"constraint_name\" as constraint_name,\n kcu.\"column_name\" as column_name\n\n FROM information_schema.key_column_usage kcu\n WHERE kcu.constraint_name=ANY(?)\n AND kcu.table_schema = ?\n AND kcu.table_name = ?;\n `,\n\n FOREIGN_KEY_REFERENCES_CONSTRAIN: /* sql */ `\n SELECT\n rco.update_rule as on_update,\n rco.delete_rule as on_delete,\n rco.\"unique_constraint_name\" as unique_constraint_name\n FROM information_schema.referential_constraints rco\n WHERE rco.constraint_name=ANY(?)\n AND rco.constraint_schema = ?\n`,\n FOREIGN_KEY_REFERENCES_CONSTRAIN_RFERENCE: /* sql */ `\n SELECT\n rel_kcu.\"table_name\" as foreign_table,\n rel_kcu.\"column_name\" as fk_column_name\n FROM information_schema.key_column_usage rel_kcu\n WHERE rel_kcu.constraint_name=?\n AND rel_kcu.table_schema = ?\n`,\n};\n\nconst toStrapiType = (column: RawColumn) => {\n const rootType = column.data_type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'integer': {\n // find a way to figure out the increments\n return { type: 'integer' };\n }\n case 'text': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n case 'character': {\n return { type: 'string', args: [column.character_maximum_length] };\n }\n case 'timestamp': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n case 'numeric': {\n return { type: 'decimal', args: [10, 2] };\n }\n case 'real':\n case 'double': {\n return { type: 'double' };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'jsonb': {\n return { type: 'jsonb' };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nconst getIndexType = (index: RawIndex) => {\n if (index.is_primary) {\n return 'primary';\n }\n\n if (index.is_unique) {\n return 'unique';\n }\n};\n\nexport default class PostgresqlSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n\n const tables = await this.getTables();\n\n schema.tables = await Promise.all(\n tables.map(async (tableName) => {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n return {\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n };\n })\n );\n\n return schema;\n }\n\n getDatabaseSchema(): string {\n return this.db.getSchemaName() || 'public';\n }\n\n async getTables(): Promise<string[]> {\n const { rows } = await this.db.connection.raw<{ rows: RawTable[] }>(SQL_QUERIES.TABLE_LIST, [\n this.getDatabaseSchema(),\n ]);\n\n return rows.map((row) => row.table_name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const { rows } = await this.db.connection.raw<{ rows: RawColumn[] }>(SQL_QUERIES.LIST_COLUMNS, [\n this.getDatabaseSchema(),\n tableName,\n ]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n const defaultTo =\n row.column_default && row.column_default.includes('nextval(') ? null : row.column_default;\n\n return {\n type,\n args,\n defaultTo,\n name: row.column_name,\n notNullable: row.is_nullable === 'NO',\n unsigned: false,\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const { rows } = await this.db.connection.raw<{ rows: RawIndex[] }>(SQL_QUERIES.INDEX_LIST, [\n this.getDatabaseSchema(),\n tableName,\n ]);\n\n const ret: Record<RawIndex['indexrelid'], Index> = {};\n\n for (const index of rows) {\n if (index.column_name === 'id') {\n continue;\n }\n\n if (!ret[index.indexrelid]) {\n ret[index.indexrelid] = {\n columns: [index.column_name],\n name: index.index_name,\n type: getIndexType(index),\n };\n } else {\n ret[index.indexrelid].columns.push(index.column_name);\n }\n }\n\n return Object.values(ret);\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const { rows } = await this.db.connection.raw<{ rows: RawForeignKey[] }>(\n SQL_QUERIES.FOREIGN_KEY_LIST,\n [this.getDatabaseSchema(), tableName]\n );\n\n const ret: Record<RawForeignKey['constraint_name'], ForeignKey> = {};\n\n for (const fk of rows) {\n ret[fk.constraint_name] = {\n name: fk.constraint_name,\n columns: [],\n referencedColumns: [],\n referencedTable: null,\n onUpdate: null,\n onDelete: null,\n } as unknown as ForeignKey;\n }\n\n const constraintNames = Object.keys(ret);\n const dbSchema = this.getDatabaseSchema();\n if (constraintNames.length > 0) {\n const { rows: fkReferences } = await this.db.connection.raw(\n SQL_QUERIES.FOREIGN_KEY_REFERENCES,\n [[constraintNames], dbSchema, tableName]\n );\n\n for (const fkReference of fkReferences) {\n ret[fkReference.constraint_name].columns.push(fkReference.column_name);\n\n const { rows: fkReferencesConstraint } = await this.db.connection.raw(\n SQL_QUERIES.FOREIGN_KEY_REFERENCES_CONSTRAIN,\n [[fkReference.constraint_name], dbSchema]\n );\n\n for (const fkReferenceC of fkReferencesConstraint) {\n const { rows: fkReferencesConstraintReferece } = await this.db.connection.raw(\n SQL_QUERIES.FOREIGN_KEY_REFERENCES_CONSTRAIN_RFERENCE,\n [fkReferenceC.unique_constraint_name, dbSchema]\n );\n for (const fkReferenceConst of fkReferencesConstraintReferece) {\n ret[fkReference.constraint_name].referencedTable = fkReferenceConst.foreign_table;\n ret[fkReference.constraint_name].referencedColumns.push(\n fkReferenceConst.fk_column_name\n );\n }\n ret[fkReference.constraint_name].onUpdate = fkReferenceC.on_update.toUpperCase();\n ret[fkReference.constraint_name].onDelete = fkReferenceC.on_delete.toUpperCase();\n }\n }\n }\n\n return Object.values(ret);\n }\n}\n","import * as errors from '../../errors';\nimport type { Database } from '../..';\nimport Dialect from '../dialect';\nimport PostgresqlSchemaInspector from './schema-inspector';\n\nexport default class PostgresDialect extends Dialect {\n schemaInspector: PostgresqlSchemaInspector;\n\n constructor(db: Database) {\n super(db, 'postgres');\n\n this.schemaInspector = new PostgresqlSchemaInspector(db);\n }\n\n useReturning() {\n return true;\n }\n\n async initialize(nativeConnection: unknown) {\n // Don't cast DATE string to Date()\n this.db.connection.client.driver.types.setTypeParser(\n this.db.connection.client.driver.types.builtins.DATE,\n 'text',\n (v: unknown) => v\n );\n // Don't parse JSONB automatically\n this.db.connection.client.driver.types.setTypeParser(\n this.db.connection.client.driver.types.builtins.JSONB,\n 'text',\n (v: unknown) => v\n );\n this.db.connection.client.driver.types.setTypeParser(\n this.db.connection.client.driver.types.builtins.NUMERIC,\n 'text',\n parseFloat\n );\n\n // If we're using a schema, set the default path for all table names in queries to use that schema\n // Ideally we would rely on Knex config.searchPath to do this for us\n // However, createConnection must remain synchronous and if the user is using a connection function,\n // we do not know what their schema is until after the connection is resolved\n const schemaName = this.db.getSchemaName();\n if (schemaName) {\n await this.db.connection\n .raw(`SET search_path TO \"${schemaName}\"`)\n .connection(nativeConnection);\n }\n }\n\n usesForeignKeys() {\n return true;\n }\n\n getSqlType(type: string) {\n switch (type) {\n case 'timestamp': {\n return 'datetime';\n }\n default: {\n return type;\n }\n }\n }\n\n transformErrors(error: NodeJS.ErrnoException) {\n switch (error.code) {\n case '23502': {\n throw new errors.NotNullError({\n column: 'column' in error ? `${error.column}` : undefined,\n });\n }\n default: {\n super.transformErrors(error);\n }\n }\n }\n}\n","import type { Column, ForeignKey, Index, Schema } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\nimport type { Database } from '../..';\n\ninterface RawTable {\n table_name: string;\n}\n\ninterface RawColumn {\n data_type: string;\n column_name: string;\n character_maximum_length: number;\n column_default: string;\n is_nullable: string;\n column_type: string;\n column_key: string;\n}\n\ninterface RawIndex {\n Key_name: string;\n Column_name: string;\n Non_unique: boolean | string;\n}\n\ninterface RawForeignKey {\n constraint_name: string;\n}\n\nconst SQL_QUERIES = {\n TABLE_LIST: /* sql */ `\n SELECT\n t.table_name as table_name\n FROM information_schema.tables t\n WHERE table_type = 'BASE TABLE'\n AND table_schema = schema();\n `,\n LIST_COLUMNS: /* sql */ `\n SELECT\n c.data_type as data_type,\n c.column_name as column_name,\n c.character_maximum_length as character_maximum_length,\n c.column_default as column_default,\n c.is_nullable as is_nullable,\n c.column_type as column_type,\n c.column_key as column_key\n FROM information_schema.columns c\n WHERE table_schema = database()\n AND table_name = ?;\n `,\n INDEX_LIST: /* sql */ `\n show index from ??;\n `,\n FOREIGN_KEY_LIST: /* sql */ `\n SELECT\n tc.constraint_name as constraint_name\n FROM information_schema.table_constraints tc\n WHERE tc.constraint_type = 'FOREIGN KEY'\n AND tc.table_schema = database()\n AND tc.table_name = ?;\n `,\n FOREIGN_KEY_REFERENCES: /* sql */ `\n SELECT\n kcu.constraint_name as constraint_name,\n kcu.column_name as column_name,\n kcu.referenced_table_name as referenced_table_name,\n kcu.referenced_column_name as referenced_column_name\n FROM information_schema.key_column_usage kcu\n WHERE kcu.constraint_name in (?)\n AND kcu.table_schema = database()\n AND kcu.table_name = ?;\n `,\n FOREIGN_KEY_REFERENTIALS_CONSTRAINTS: /* sql */ `\n SELECT\n rc.constraint_name as constraint_name,\n rc.update_rule as on_update,\n rc.delete_rule as on_delete\n FROM information_schema.referential_constraints AS rc\n WHERE rc.constraint_name in (?)\n AND rc.constraint_schema = database()\n AND rc.table_name = ?;\n `,\n};\n\nconst toStrapiType = (column: RawColumn) => {\n const rootType = column.data_type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'int': {\n if (column.column_key === 'PRI') {\n return { type: 'increments', args: [{ primary: true, primaryKey: true }], unsigned: false };\n }\n\n return { type: 'integer' };\n }\n case 'decimal': {\n return { type: 'decimal', args: [10, 2] };\n }\n case 'double': {\n return { type: 'double' };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'enum': {\n return { type: 'string' };\n }\n case 'tinyint': {\n return { type: 'boolean' };\n }\n case 'longtext': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'varchar': {\n return { type: 'string', args: [column.character_maximum_length] };\n }\n case 'datetime': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n case 'timestamp': {\n return { type: 'timestamp', args: [{ useTz: false, precision: 6 }] };\n }\n case 'json': {\n return { type: 'jsonb' };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nexport default class MysqlSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n\n const tables = await this.getTables();\n\n schema.tables = await Promise.all(\n tables.map(async (tableName) => {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n return {\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n };\n })\n );\n\n return schema;\n }\n\n async getTables(): Promise<string[]> {\n const [rows] = await this.db.connection.raw<[RawTable[]]>(SQL_QUERIES.TABLE_LIST);\n\n return rows.map((row) => row.table_name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const [rows] = await this.db.connection.raw<[RawColumn[]]>(SQL_QUERIES.LIST_COLUMNS, [\n tableName,\n ]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n return {\n type,\n args,\n defaultTo: row.column_default,\n name: row.column_name,\n notNullable: row.is_nullable === 'NO',\n unsigned: row.column_type.endsWith(' unsigned'),\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const [rows] = await this.db.connection.raw<[RawIndex[]]>(SQL_QUERIES.INDEX_LIST, [tableName]);\n\n const ret: Record<RawIndex['Key_name'], Index> = {};\n\n for (const index of rows) {\n if (index.Column_name === 'id') {\n continue;\n }\n\n if (!ret[index.Key_name]) {\n const indexInfo: Index = {\n columns: [index.Column_name],\n name: index.Key_name,\n };\n if (!index.Non_unique || index.Non_unique === '0') {\n indexInfo.type = 'unique';\n }\n\n ret[index.Key_name] = indexInfo;\n } else {\n ret[index.Key_name].columns.push(index.Column_name);\n }\n }\n\n return Object.values(ret);\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const [rows] = await this.db.connection.raw<[RawForeignKey[]]>(SQL_QUERIES.FOREIGN_KEY_LIST, [\n tableName,\n ]);\n\n const ret: Record<RawForeignKey['constraint_name'], ForeignKey> = {};\n\n for (const fk of rows) {\n ret[fk.constraint_name] = {\n name: fk.constraint_name,\n columns: [],\n referencedColumns: [],\n referencedTable: null,\n onUpdate: null,\n onDelete: null,\n } as unknown as ForeignKey;\n }\n\n const contraintNames = Object.keys(ret);\n\n if (contraintNames.length > 0) {\n const [fkReferences] = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_REFERENCES, [\n contraintNames,\n tableName,\n ]);\n\n for (const fkReference of fkReferences) {\n ret[fkReference.constraint_name].referencedTable = fkReference.referenced_table_name;\n ret[fkReference.constraint_name].columns.push(fkReference.column_name);\n ret[fkReference.constraint_name].referencedColumns.push(fkReference.referenced_column_name);\n }\n\n const [fkReferentialConstraints] = await this.db.connection.raw(\n SQL_QUERIES.FOREIGN_KEY_REFERENTIALS_CONSTRAINTS,\n [contraintNames, tableName]\n );\n\n for (const fkReferentialConstraint of fkReferentialConstraints) {\n ret[fkReferentialConstraint.constraint_name].onUpdate =\n fkReferentialConstraint.on_update.toUpperCase();\n ret[fkReferentialConstraint.constraint_name].onDelete =\n fkReferentialConstraint.on_delete.toUpperCase();\n }\n }\n\n return Object.values(ret);\n }\n}\n","export const MYSQL = 'MYSQL';\nexport const MARIADB = 'MARIADB';\n","import { MARIADB, MYSQL } from './constants';\nimport type { Database } from '../..';\n\nexport interface Information {\n database: typeof MARIADB | typeof MYSQL | null;\n version: string | null;\n}\n\nconst SQL_QUERIES = {\n VERSION: `SELECT version() as version`,\n};\n\nexport default class MysqlDatabaseInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getInformation(nativeConnection?: unknown): Promise<Information> {\n let database: Information['database'];\n let versionNumber: Information['version'];\n try {\n const [results] = await this.db.connection\n .raw(SQL_QUERIES.VERSION)\n .connection(nativeConnection);\n const versionSplit = results[0].version.split('-');\n const databaseName = versionSplit[1];\n versionNumber = versionSplit[0];\n database = databaseName && databaseName.toLowerCase() === 'mariadb' ? MARIADB : MYSQL;\n } catch (e) {\n return {\n database: null,\n version: null,\n };\n }\n\n return {\n database,\n version: versionNumber,\n };\n }\n}\n","import type { Knex } from 'knex';\n\nimport Dialect from '../dialect';\nimport MysqlSchemaInspector from './schema-inspector';\nimport MysqlDatabaseInspector from './database-inspector';\nimport type { Database } from '../..';\n\nimport type { Information } from './database-inspector';\n\nexport default class MysqlDialect extends Dialect {\n schemaInspector: MysqlSchemaInspector;\n\n databaseInspector: MysqlDatabaseInspector;\n\n info: Information | null = null;\n\n constructor(db: Database) {\n super(db, 'mysql');\n\n this.schemaInspector = new MysqlSchemaInspector(db);\n this.databaseInspector = new MysqlDatabaseInspector(db);\n }\n\n configure() {\n const connection = this.db.config.connection.connection as Knex.MySqlConnectionConfig;\n\n connection.supportBigNumbers = true;\n // Only allow bigNumberStrings option set to be true if no connection option passed\n // Otherwise bigNumberStrings option should be allowed to used from DB config\n if (connection.bigNumberStrings === undefined) {\n connection.bigNumberStrings = true;\n }\n connection.typeCast = (\n field: { type: string; string: () => string; length: number },\n next: () => void\n ) => {\n if (field.type === 'DECIMAL' || field.type === 'NEWDECIMAL') {\n const value = field.string();\n return value === null ? null : Number(value);\n }\n\n if (field.type === 'TINY' && field.length === 1) {\n const value = field.string();\n return value ? value === '1' : null;\n }\n\n if (field.type === 'DATE') {\n return field.string();\n }\n\n return next();\n };\n }\n\n async initialize(nativeConnection: unknown) {\n try {\n await this.db.connection\n .raw(`set session sql_require_primary_key = 0;`)\n .connection(nativeConnection);\n } catch (err) {\n // Ignore error due to lack of session permissions\n }\n\n // We only need to get info on the first connection in the pool\n /**\n * Note: There is a race condition here where if two connections are opened at the same time, both will retrieve\n * db info, but it doesn't cause issues, it's just one wasted query one time, so we can safely leave it to avoid\n * adding extra complexity\n * */\n if (!this.info) {\n this.info = await this.databaseInspector.getInformation(nativeConnection);\n }\n }\n\n async startSchemaUpdate() {\n try {\n await this.db.connection.raw(`set foreign_key_checks = 0;`);\n await this.db.connection.raw(`set session sql_require_primary_key = 0;`);\n } catch (err) {\n // Ignore error due to lack of session permissions\n }\n }\n\n async endSchemaUpdate() {\n await this.db.connection.raw(`set foreign_key_checks = 1;`);\n }\n\n supportsUnsigned() {\n return true;\n }\n\n usesForeignKeys() {\n return true;\n }\n\n transformErrors(error: Error) {\n super.transformErrors(error);\n }\n}\n","import type { Database } from '../..';\nimport type { Schema, Column, Index, ForeignKey } from '../../schema/types';\nimport type { SchemaInspector } from '../dialect';\n\nconst SQL_QUERIES = {\n TABLE_LIST: `select name from sqlite_master where type = 'table' and name NOT LIKE 'sqlite%'`,\n TABLE_INFO: `pragma table_info(??)`,\n INDEX_LIST: 'pragma index_list(??)',\n INDEX_INFO: 'pragma index_info(??)',\n FOREIGN_KEY_LIST: 'pragma foreign_key_list(??)',\n};\n\ninterface RawTable {\n name: string;\n}\ninterface RawColumn {\n type: string;\n args?: unknown[];\n name: string;\n defaultTo?: unknown;\n notNullable?: boolean;\n unsigned?: boolean;\n unique?: boolean;\n primary?: boolean;\n pk?: boolean;\n foreign?: {\n table: string;\n column: string;\n onUpdate: string;\n onDelete: string;\n };\n data_type?: string;\n dflt_value?: unknown;\n notnull?: boolean;\n}\n\ninterface RawIndex {\n name: string;\n unique: boolean;\n}\n\ninterface RawIndexInfo {\n name: string;\n}\n\ninterface RawForeignKey {\n id: number;\n seq: number;\n table: string;\n from: string;\n to: string;\n on_update: string;\n on_delete: string;\n}\n\nconst toStrapiType = (column: RawColumn) => {\n const { type } = column;\n\n const rootType = type.toLowerCase().match(/[^(), ]+/)?.[0];\n\n switch (rootType) {\n case 'integer': {\n if (column.pk) {\n return { type: 'increments', args: [{ primary: true, primaryKey: true }] };\n }\n\n return { type: 'integer' };\n }\n case 'float': {\n return { type: 'float', args: [10, 2] };\n }\n case 'bigint': {\n return { type: 'bigInteger' };\n }\n case 'varchar': {\n const length = type.slice(8, type.length - 1);\n\n return { type: 'string', args: [Number(length)] };\n }\n case 'text': {\n return { type: 'text', args: ['longtext'] };\n }\n case 'json': {\n return { type: 'jsonb' };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n case 'datetime': {\n return { type: 'datetime', args: [{ useTz: false, precision: 6 }] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n default: {\n return { type: 'specificType', args: [column.data_type] };\n }\n }\n};\n\nexport default class SqliteSchemaInspector implements SchemaInspector {\n db: Database;\n\n constructor(db: Database) {\n this.db = db;\n }\n\n async getSchema() {\n const schema: Schema = { tables: [] };\n const tables = await this.getTables();\n\n for (const tableName of tables) {\n const columns = await this.getColumns(tableName);\n const indexes = await this.getIndexes(tableName);\n const foreignKeys = await this.getForeignKeys(tableName);\n\n schema.tables.push({\n name: tableName,\n columns,\n indexes,\n foreignKeys,\n });\n }\n\n return schema;\n }\n\n async getTables(): Promise<string[]> {\n const rows = await this.db.connection.raw<RawTable[]>(SQL_QUERIES.TABLE_LIST);\n\n return rows.map((row) => row.name);\n }\n\n async getColumns(tableName: string): Promise<Column[]> {\n const rows = await this.db.connection.raw<RawColumn[]>(SQL_QUERIES.TABLE_INFO, [tableName]);\n\n return rows.map((row) => {\n const { type, args = [], ...rest } = toStrapiType(row);\n\n return {\n type,\n args,\n name: row.name,\n defaultTo: row.dflt_value,\n notNullable: row.notnull !== null ? Boolean(row.notnull) : null,\n unsigned: false,\n ...rest,\n };\n });\n }\n\n async getIndexes(tableName: string): Promise<Index[]> {\n const indexes = await this.db.connection.raw<RawIndex[]>(SQL_QUERIES.INDEX_LIST, [tableName]);\n\n const ret: Index[] = [];\n\n for (const index of indexes.filter((index) => !index.name.startsWith('sqlite_'))) {\n const res = await this.db.connection.raw<RawIndexInfo[]>(SQL_QUERIES.INDEX_INFO, [\n index.name,\n ]);\n\n const indexInfo: Index = {\n columns: res.map((row) => row.name),\n name: index.name,\n };\n\n if (index.unique) {\n indexInfo.type = 'unique';\n }\n\n ret.push(indexInfo);\n }\n\n return ret;\n }\n\n async getForeignKeys(tableName: string): Promise<ForeignKey[]> {\n const fks = await this.db.connection.raw<RawForeignKey[]>(SQL_QUERIES.FOREIGN_KEY_LIST, [\n tableName,\n ]);\n\n const ret: Record<RawForeignKey['id'], ForeignKey> = {};\n\n for (const fk of fks) {\n if (!ret[fk.id]) {\n ret[fk.id] = {\n // TODO: name, // find name\n name: '',\n columns: [fk.from],\n referencedColumns: [fk.to],\n referencedTable: fk.table,\n onUpdate: fk.on_update.toUpperCase(),\n onDelete: fk.on_delete.toUpperCase(),\n };\n } else {\n ret[fk.id].columns.push(fk.from);\n ret[fk.id].referencedColumns.push(fk.to);\n }\n }\n\n return Object.values(ret);\n }\n}\n","import path from 'path';\nimport fse from 'fs-extra';\nimport type { Knex } from 'knex';\n\nimport * as errors from '../../errors';\nimport Dialect from '../dialect';\nimport SqliteSchemaInspector from './schema-inspector';\nimport type { Database } from '../..';\n\nconst UNSUPPORTED_OPERATORS = ['$jsonSupersetOf'];\n\nexport default class SqliteDialect extends Dialect {\n schemaInspector: SqliteSchemaInspector;\n\n constructor(db: Database) {\n super(db, 'sqlite');\n\n this.schemaInspector = new SqliteSchemaInspector(db);\n }\n\n configure(conn?: Knex.Sqlite3ConnectionConfig) {\n const connection =\n conn || (this.db.config.connection.connection as Knex.Sqlite3ConnectionConfig);\n if (typeof connection !== 'string') {\n connection.filename = path.resolve(connection.filename);\n }\n\n const dbDir = path.dirname(connection.filename);\n\n fse.ensureDirSync(dbDir);\n }\n\n useReturning() {\n return true;\n }\n\n async initialize(nativeConnection: unknown) {\n await this.db.connection.raw('pragma foreign_keys = on').connection(nativeConnection);\n }\n\n canAlterConstraints() {\n return false;\n }\n\n getSqlType(type: string) {\n switch (type) {\n case 'enum': {\n return 'text';\n }\n case 'double':\n case 'decimal': {\n return 'float';\n }\n case 'timestamp': {\n return 'datetime';\n }\n default: {\n return type;\n }\n }\n }\n\n supportsOperator(operator: string) {\n return !UNSUPPORTED_OPERATORS.includes(operator);\n }\n\n async startSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = off`);\n }\n\n async endSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = on`);\n }\n\n transformErrors(error: NodeJS.ErrnoException) {\n switch (error.errno) {\n case 19: {\n throw new errors.NotNullError(); // TODO: extract column name\n }\n default: {\n super.transformErrors(error);\n }\n }\n }\n\n canAddIncrements() {\n return false;\n }\n}\n","import type { Database } from '..';\nimport Dialect from './dialect';\nimport PostgresClass from './postgresql';\nimport MysqlClass from './mysql';\nimport SqliteClass from './sqlite';\n\n/**\n * Require our dialect-specific code\n */\nconst getDialectClass = (client: string): typeof Dialect => {\n switch (client) {\n case 'postgres':\n return PostgresClass;\n case 'mysql':\n return MysqlClass;\n case 'sqlite':\n return SqliteClass;\n default:\n throw new Error(`Unknown dialect ${client}`);\n }\n};\n\n/**\n * Get the dialect of a database client\n */\nconst getDialectName = (client: unknown) => {\n switch (client) {\n case 'postgres':\n return 'postgres';\n case 'mysql':\n return 'mysql';\n case 'sqlite':\n return 'sqlite';\n default:\n throw new Error(`Unknown dialect ${client}`);\n }\n};\n\nconst getDialect = (db: Database) => {\n const { client } = db.config.connection;\n const dialectName = getDialectName(client);\n\n const constructor = getDialectClass(dialectName);\n const dialect = new constructor(db, dialectName);\n\n return dialect;\n};\n\nexport { Dialect, getDialect };\n","import { isNil, prop, omit, castArray } from 'lodash/fp';\nimport createDebug from 'debug';\n\nimport type { Knex } from 'knex';\nimport type { Database } from '..';\nimport type { Schema, Table, SchemaDiff, TableDiff, ForeignKey, Index, Column } from './types';\n\nconst debug = createDebug('strapi::database');\n\nexport default (db: Database) => {\n const helpers = createHelpers(db);\n\n return {\n /**\n * Returns a knex schema builder instance\n * @param {string} table - table name\n */\n getSchemaBuilder(trx: Knex.Transaction) {\n return db.getSchemaConnection(trx);\n },\n\n /**\n * Creates schema in DB\n */\n async createSchema(schema: Schema) {\n await db.connection.transaction(async (trx) => {\n await this.createTables(schema.tables, trx);\n });\n },\n\n /**\n * Creates a list of tables in a schema\n * @param {KnexInstance} trx\n * @param {Table[]} tables\n */\n async createTables(tables: Table[], trx: Knex.Transaction) {\n for (const table of tables) {\n debug(`Creating table: ${table.name}`);\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.createTable(schemaBuilder, table);\n }\n\n // create FKs once all the tables exist\n for (const table of tables) {\n debug(`Creating table foreign keys: ${table.name}`);\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.createTableForeignKeys(schemaBuilder, table);\n }\n },\n /**\n * Drops schema from DB\n */\n async dropSchema(schema: Schema, { dropDatabase = false } = {}) {\n if (dropDatabase) {\n // TODO: drop database & return as it will drop everything\n return;\n }\n\n await db.connection.transaction(async (trx) => {\n for (const table of schema.tables.reverse()) {\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.dropTable(schemaBuilder, table);\n }\n });\n },\n\n /**\n * Applies a schema diff update in the DB\n * @param {*} schemaDiff\n */\n // TODO: implement force option to disable removal in DB\n async updateSchema(schemaDiff: SchemaDiff['diff']) {\n const forceMigration = db.config.settings?.forceMigration;\n\n await db.dialect.startSchemaUpdate();\n\n // Pre-fetch metadata for all updated tables\n const existingMetadata: Record<string, { indexes: Index[]; foreignKeys: ForeignKey[] }> = {};\n for (const table of schemaDiff.tables.updated) {\n existingMetadata[table.name] = {\n indexes: await db.dialect.schemaInspector.getIndexes(table.name),\n foreignKeys: await db.dialect.schemaInspector.getForeignKeys(table.name),\n };\n }\n\n await db.connection.transaction(async (trx) => {\n await this.createTables(schemaDiff.tables.added, trx);\n\n if (forceMigration) {\n // drop all delete table foreign keys then delete the tables\n for (const table of schemaDiff.tables.removed) {\n debug(`Removing table foreign keys: ${table.name}`);\n\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.dropTableForeignKeys(schemaBuilder, table);\n }\n\n for (const table of schemaDiff.tables.removed) {\n debug(`Removing table: ${table.name}`);\n\n const schemaBuilder = this.getSchemaBuilder(trx);\n await helpers.dropTable(schemaBuilder, table);\n }\n }\n\n for (const table of schemaDiff.tables.updated) {\n debug(`Updating table: ${table.name}`);\n // alter table\n const schemaBuilder = this.getSchemaBuilder(trx);\n\n const { indexes, foreignKeys } = existingMetadata[table.name];\n await helpers.alterTable(schemaBuilder, table, { indexes, foreignKeys });\n }\n });\n\n await db.dialect.endSchemaUpdate();\n },\n };\n};\n\nconst createHelpers = (db: Database) => {\n /**\n * Creates a foreign key on a table\n */\n const createForeignKey = (tableBuilder: Knex.TableBuilder, foreignKey: ForeignKey) => {\n const { name, columns, referencedColumns, referencedTable, onDelete, onUpdate } = foreignKey;\n\n const constraint = tableBuilder\n .foreign(columns, name)\n .references(referencedColumns)\n .inTable(db.getSchemaName() ? `${db.getSchemaName()}.${referencedTable}` : referencedTable);\n\n if (onDelete) {\n constraint.onDelete(onDelete);\n }\n\n if (onUpdate) {\n constraint.onUpdate(onUpdate);\n }\n };\n\n /**\n * Drops a foreign key from a table\n */\n const dropForeignKey = (\n tableBuilder: Knex.TableBuilder,\n foreignKey: ForeignKey,\n existingForeignKeys?: ForeignKey[]\n ) => {\n const { name, columns } = foreignKey;\n\n // Check if the index exists in existingIndexes, and return early if it doesn't\n if (\n existingForeignKeys &&\n !existingForeignKeys.some((existingIndex) => existingIndex?.name === name)\n ) {\n debug(`Foreign Key ${name} not found in existing foreign keys. Skipping drop.`);\n return;\n }\n\n tableBuilder.dropForeign(columns, name);\n };\n\n /**\n * Creates an index on a table\n */\n const createIndex = (tableBuilder: Knex.TableBuilder, index: Index) => {\n const { type, columns, name } = index;\n\n switch (type) {\n case 'primary': {\n return tableBuilder.primary(columns, { constraintName: name });\n }\n case 'unique': {\n return tableBuilder.unique(columns, { indexName: name });\n }\n default: {\n return tableBuilder.index(columns, name, type);\n }\n }\n };\n\n /**\n * Drops an index from table\n * @param {Knex.TableBuilder} tableBuilder\n * @param {Index} index\n */\n const dropIndex = (tableBuilder: Knex.TableBuilder, index: Index, existingIndexes?: Index[]) => {\n if (!db.config.settings?.forceMigration) {\n return;\n }\n\n const { type, columns, name } = index;\n\n // Check if the index exists in existingIndexes, and return early if it doesn't\n if (existingIndexes && !existingIndexes.some((existingIndex) => existingIndex?.name === name)) {\n debug(`Index ${index.name} not found in existingIndexes. Skipping drop.`);\n return;\n }\n\n switch (type) {\n case 'primary': {\n return tableBuilder.dropPrimary(name);\n }\n case 'unique': {\n return tableBuilder.dropUnique(columns, name);\n }\n default: {\n return tableBuilder.dropIndex(columns, name);\n }\n }\n };\n\n /**\n * Creates a column in a table\n */\n const createColumn = (tableBuilder: Knex.TableBuilder, column: Column) => {\n const { type, name, args = [], defaultTo, unsigned, notNullable } = column;\n\n const col = (tableBuilder[type as keyof Knex.TableBuilder] as any)(name, ...args);\n\n if (unsigned === true) {\n col.unsigned();\n }\n\n if (!isNil(defaultTo)) {\n const [value, opts] = castArray(defaultTo);\n\n if (prop('isRaw', opts)) {\n col.defaultTo(db.connection.raw(value), omit('isRaw', opts));\n } else {\n col.defaultTo(value, opts);\n }\n }\n\n if (notNullable === true) {\n col.notNullable();\n } else {\n col.nullable();\n }\n\n return col;\n };\n\n /**\n * Drops a column from a table\n */\n const dropColumn = (tableBuilder: Knex.TableBuilder, column: Column) => {\n if (!db.config.settings?.forceMigration) {\n return;\n }\n\n return tableBuilder.dropColumn(column.name);\n };\n\n /**\n * Creates a table in a database\n */\n const createTable = async (schemaBuilder: Knex.SchemaBuilder, table: Table) => {\n await schemaBuilder.createTable(table.name, (tableBuilder) => {\n // columns\n (table.columns || []).forEach((column) => createColumn(tableBuilder, column));\n\n // indexes\n (table.indexes || []).forEach((index) => createIndex(tableBuilder, index));\n\n // foreign keys\n\n if (!db.dialect.canAlterConstraints()) {\n (table.foreignKeys || []).forEach((foreignKey) =>\n createForeignKey(tableBuilder, foreignKey)\n );\n }\n });\n };\n\n /**\n * Alters a database table by applying a set of schema changes including updates to columns, indexes, and foreign keys.\n * This function ensures proper ordering of operations to avoid conflicts (e.g., foreign key errors) and handles\n * MySQL-specific quirks where dropping a foreign key can implicitly drop an associated index.\n *\n * @param {Knex.SchemaBuilder} schemaBuilder - Knex SchemaBuilder instance to perform schema operations.\n * @param {TableDiff['diff']} table - A diff object representing the schema changes to be applied to the table.\n * @param {{ indexes: Index[]; foreignKeys: ForeignKey[] }} existingMetadata - Metadata about existing indexes and\n * foreign keys in the table. Used to ensure safe operations and avoid unnecessary modifications.\n * - indexes: Array of existing index definitions.\n * - foreignKeys: Array of existing foreign key definitions.\n */\n const alterTable = async (\n schemaBuilder: Knex.SchemaBuilder,\n table: TableDiff['diff'],\n existingMetadata: { indexes: Index[]; foreignKeys: ForeignKey[] } = {\n indexes: [],\n foreignKeys: [],\n }\n ) => {\n let existingIndexes = [...existingMetadata.indexes];\n const existingForeignKeys = [...existingMetadata.foreignKeys];\n\n // Track dropped foreign keys\n const droppedForeignKeyNames: string[] = [];\n\n await schemaBuilder.alterTable(table.name, async (tableBuilder) => {\n // Drop foreign keys first to avoid foreign key errors in the following steps\n for (const removedForeignKey of table.foreignKeys.removed) {\n debug(`Dropping foreign key ${removedForeignKey.name} on ${table.name}`);\n dropForeignKey(tableBuilder, removedForeignKey, existingForeignKeys);\n\n droppedForeignKeyNames.push(removedForeignKey.name);\n }\n\n for (const updatedForeignKey of table.foreignKeys.updated) {\n debug(`Dropping updated foreign key ${updatedForeignKey.name} on ${table.name}`);\n dropForeignKey(tableBuilder, updatedForeignKey.object, existingForeignKeys);\n\n droppedForeignKeyNames.push(updatedForeignKey.object.name);\n }\n\n // In MySQL, dropping a foreign key can also implicitly drop an index with the same name\n // Remove dropped foreign keys from existingIndexes for MySQL\n if (db.config.connection.client === 'mysql') {\n existingIndexes = existingIndexes.filter(\n (index) => !droppedForeignKeyNames.includes(index.name)\n );\n }\n\n for (const removedIndex of table.indexes.removed) {\n debug(`Dropping index ${removedIndex.name} on ${table.name}`);\n dropIndex(tableBuilder, removedIndex, existingIndexes);\n }\n\n for (const updatedIndex of table.indexes.updated) {\n debug(`Dropping updated index ${updatedIndex.name} on ${table.name}`);\n dropIndex(tableBuilder, updatedIndex.object, existingIndexes);\n }\n\n // Drop columns after FKs have been removed to avoid FK errors\n for (const removedColumn of table.columns.removed) {\n debug(`Dropping column ${removedColumn.name} on ${table.name}`);\n dropColumn(tableBuilder, removedColumn);\n }\n\n // Update existing columns\n for (const updatedColumn of table.columns.updated) {\n debug(`Updating column ${updatedColumn.name} on ${table.name}`);\n\n const { object } = updatedColumn;\n\n if (object.type === 'increments') {\n createColumn(tableBuilder, { ...object, type: 'integer' }).alter();\n } else {\n createColumn(tableBuilder, object).alter();\n }\n }\n\n // Add any new columns\n for (const addedColumn of table.columns.added) {\n debug(`Creating column ${addedColumn.name} on ${table.name}`);\n\n if (addedColumn.type === 'increments' && !db.dialect.canAddIncrements()) {\n tableBuilder.integer(addedColumn.name).unsigned();\n tableBuilder.primary([addedColumn.name]);\n } else {\n createColumn(tableBuilder, addedColumn);\n }\n }\n\n // once the columns have all been updated, we can create indexes again\n for (const updatedForeignKey of table.foreignKeys.updated) {\n debug(`Recreating updated foreign key ${updatedForeignKey.name} on ${table.name}`);\n createForeignKey(tableBuilder, updatedForeignKey.object);\n }\n\n for (const updatedIndex of table.indexes.updated) {\n debug(`Recreating updated index ${updatedIndex.name} on ${table.name}`);\n createIndex(tableBuilder, updatedIndex.object);\n }\n\n for (const addedForeignKey of table.foreignKeys.added) {\n debug(`Creating foreign key ${addedForeignKey.name} on ${table.name}`);\n createForeignKey(tableBuilder, addedForeignKey);\n }\n\n for (const addedIndex of table.indexes.added) {\n debug(`Creating index ${addedIndex.name} on ${table.name}`);\n createIndex(tableBuilder, addedIndex);\n }\n });\n };\n\n /**\n * Drops a table from a database\n */\n const dropTable = (schemaBuilder: Knex.SchemaBuilder, table: Table) => {\n if (!db.config.settings.forceMigration) {\n return;\n }\n\n return schemaBuilder.dropTableIfExists(table.name);\n };\n\n /**\n * Creates a table foreign keys constraints\n */\n const createTableForeignKeys = async (schemaBuilder: Knex.SchemaBuilder, table: Table) => {\n // foreign keys\n await schemaBuilder.table(table.name, (tableBuilder) => {\n (table.foreignKeys || []).forEach((foreignKey) => createForeignKey(tableBuilder, foreignKey));\n });\n };\n\n /**\n * Drops a table foreign keys constraints\n */\n const dropTableForeignKeys = async (schemaBuilder: Knex.SchemaBuilder, table: Table) => {\n if (!db.config.settings.forceMigration) {\n return;\n }\n\n // foreign keys\n await schemaBuilder.table(table.name, (tableBuilder) => {\n (table.foreignKeys || []).forEach((foreignKey) => dropForeignKey(tableBuilder, foreignKey));\n });\n };\n\n return {\n createTable,\n alterTable,\n dropTable,\n createTableForeignKeys,\n dropTableForeignKeys,\n };\n};\n","import _ from 'lodash/fp';\nimport type {\n Schema,\n Table,\n SchemaDiff,\n Index,\n ForeignKey,\n Column,\n IndexDiff,\n IndexesDiff,\n ForeignKeyDiff,\n ForeignKeysDiff,\n ColumnDiff,\n TableDiff,\n ColumnsDiff,\n} from './types';\nimport type { Database } from '..';\n\ntype PersistedTable = {\n name: string;\n dependsOn?: Array<{ name: string }>;\n};\n\ntype TableDiffContext = {\n previousTable?: Table;\n databaseTable: Table;\n userSchemaTable: Table;\n};\n\ntype SchemaDiffContext = {\n previousSchema?: Schema;\n databaseSchema: Schema;\n userSchema: Schema;\n};\n\n// TODO: get that list dynamically instead\nconst RESERVED_TABLE_NAMES = [\n 'strapi_migrations',\n 'strapi_migrations_internal',\n 'strapi_database_schema',\n];\n\nconst statuses = {\n CHANGED: 'CHANGED',\n UNCHANGED: 'UNCHANGED',\n} as const;\n\n// NOTE:We could move the schema to use maps of tables & columns instead of arrays to make it easier to diff\n// => this will make the creation a bit more complicated (ordering, Object.values(tables | columns)) -> not a big pbl\n\nconst helpers = {\n hasTable(schema: Schema, tableName: string) {\n return schema.tables.findIndex((table) => table.name === tableName) !== -1;\n },\n findTable(schema: Schema, tableName: string) {\n return schema.tables.find((table) => table.name === tableName);\n },\n hasColumn(table: Table, columnName: string) {\n return table.columns.findIndex((column) => column.name === columnName) !== -1;\n },\n findColumn(table: Table, columnName: string) {\n return table.columns.find((column) => column.name === columnName);\n },\n\n hasIndex(table: Table, columnName: string) {\n return table.indexes.findIndex((column) => column.name === columnName) !== -1;\n },\n findIndex(table: Table, columnName: string) {\n return table.indexes.find((column) => column.name === columnName);\n },\n\n hasForeignKey(table: Table, columnName: string) {\n return table.foreignKeys.findIndex((column) => column.name === columnName) !== -1;\n },\n findForeignKey(table: Table, columnName: string) {\n return table.foreignKeys.find((column) => column.name === columnName);\n },\n};\n\nexport default (db: Database) => {\n const hasChangedStatus = (diff: { status: 'CHANGED' | 'UNCHANGED' }) =>\n diff.status === statuses.CHANGED;\n\n /**\n * Compares two indexes info\n * @param {Object} oldIndex - index info read from DB\n * @param {Object} index - newly generate index info\n */\n const diffIndexes = (oldIndex: Index, index: Index): IndexDiff => {\n const changes: string[] = [];\n\n // use xor to avoid differences in order\n if (_.xor(oldIndex.columns, index.columns).length > 0) {\n changes.push('columns');\n }\n\n if (oldIndex.type && index.type && _.toLower(oldIndex.type) !== _.toLower(index.type)) {\n changes.push('type');\n }\n\n return {\n status: changes.length > 0 ? statuses.CHANGED : statuses.UNCHANGED,\n diff: {\n name: index.name,\n object: index,\n },\n };\n };\n\n /**\n * Compares two foreign keys info\n * @param {Object} oldForeignKey - foreignKey info read from DB\n * @param {Object} foreignKey - newly generate foreignKey info\n */\n const diffForeignKeys = (oldForeignKey: ForeignKey, foreignKey: ForeignKey): ForeignKeyDiff => {\n const changes: string[] = [];\n\n if (_.difference(oldForeignKey.columns, foreignKey.columns).length > 0) {\n changes.push('columns');\n }\n\n if (_.difference(oldForeignKey.referencedColumns, foreignKey.referencedColumns).length > 0) {\n changes.push('referencedColumns');\n }\n\n if (oldForeignKey.referencedTable !== foreignKey.referencedTable) {\n changes.push('referencedTable');\n }\n\n if (_.isNil(oldForeignKey.onDelete) || _.toUpper(oldForeignKey.onDelete) === 'NO ACTION') {\n if (\n !_.isNil(foreignKey.onDelete) &&\n _.toUpper(oldForeignKey.onDelete ?? '') !== 'NO ACTION'\n ) {\n changes.push('onDelete');\n }\n } else if (_.toUpper(oldForeignKey.onDelete) !== _.toUpper(foreignKey.onDelete ?? '')) {\n changes.push('onDelete');\n }\n\n if (_.isNil(oldForeignKey.onUpdate) || _.toUpper(oldForeignKey.onUpdate) === 'NO ACTION') {\n if (\n !_.isNil(foreignKey.onUpdate) &&\n _.toUpper(oldForeignKey.onUpdate ?? '') !== 'NO ACTION'\n ) {\n changes.push('onUpdate');\n }\n } else if (_.toUpper(oldForeignKey.onUpdate) !== _.toUpper(foreignKey.onUpdate ?? '')) {\n changes.push('onUpdate');\n }\n\n return {\n status: changes.length > 0 ? statuses.CHANGED : statuses.UNCHANGED,\n diff: {\n name: foreignKey.name,\n object: foreignKey,\n },\n };\n };\n\n const diffDefault = (oldColumn: Column, column: Column) => {\n const oldDefaultTo = oldColumn.defaultTo;\n const { defaultTo } = column;\n\n if (oldDefaultTo === null || _.toLower(oldDefaultTo) === 'null') {\n return _.isNil(defaultTo) || _.toLower(defaultTo) === 'null';\n }\n\n return (\n _.toLower(oldDefaultTo) === _.toLower(column.defaultTo) ||\n _.toLower(oldDefaultTo) === _.toLower(`'${column.defaultTo}'`)\n );\n };\n\n /**\n * Compares two columns info\n * @param {Object} oldColumn - column info read from DB\n * @param {Object} column - newly generate column info\n */\n const diffColumns = (oldColumn: Column, column: Column): ColumnDiff => {\n const changes: string[] = [];\n\n const isIgnoredType = ['increments'].includes(column.type);\n const oldType = oldColumn.type;\n const type = db.dialect.getSqlType(column.type);\n\n if (oldType !== type && !isIgnoredType) {\n changes.push('type');\n }\n\n // NOTE: compare args at some point and split them into specific properties instead\n\n if (oldColumn.notNullable !== column.notNullable) {\n changes.push('notNullable');\n }\n\n const hasSameDefault = diffDefault(oldColumn, column);\n if (!hasSameDefault) {\n changes.push('defaultTo');\n }\n\n if (oldColumn.unsigned !== column.unsigned && db.dialect.supportsUnsigned()) {\n changes.push('unsigned');\n }\n\n return {\n status: changes.length > 0 ? statuses.CHANGED : statuses.UNCHANGED,\n diff: {\n name: column.name,\n object: column,\n },\n };\n };\n\n const diffTableColumns = (diffCtx: TableDiffContext): ColumnsDiff => {\n const { databaseTable, userSchemaTable, previousTable } = diffCtx;\n\n const addedColumns: Column[] = [];\n const updatedColumns: ColumnDiff['diff'][] = [];\n const unchangedColumns: Column[] = [];\n const removedColumns: Column[] = [];\n\n for (const userSchemaColumn of userSchemaTable.columns) {\n const databaseColumn = helpers.findColumn(databaseTable, userSchemaColumn.name);\n\n if (databaseColumn) {\n const { status, diff } = diffColumns(databaseColumn, userSchemaColumn);\n\n if (status === statuses.CHANGED) {\n updatedColumns.push(diff);\n } else {\n unchangedColumns.push(databaseColumn);\n }\n } else {\n addedColumns.push(userSchemaColumn);\n }\n }\n\n for (const databaseColumn of databaseTable.columns) {\n if (\n !helpers.hasColumn(userSchemaTable, databaseColumn.name) &&\n previousTable &&\n helpers.hasColumn(previousTable, databaseColumn.name)\n ) {\n removedColumns.push(databaseColumn);\n }\n }\n\n const hasChanged = [addedColumns, updatedColumns, removedColumns].some((arr) => arr.length > 0);\n\n return {\n status: hasChanged ? statuses.CHANGED : statuses.UNCHANGED,\n diff: {\n added: addedColumns,\n updated: updatedColumns,\n unchanged: unchangedColumns,\n removed: removedColumns,\n },\n };\n };\n\n const diffTableIndexes = (diffCtx: TableDiffContext): IndexesDiff => {\n const { databaseTable, userSchemaTable, previousTable } = diffCtx;\n\n const addedIndexes: Index[] = [];\n const updatedIndexes: IndexDiff['diff'][] = [];\n const unchangedIndexes: Index[] = [];\n const removedIndexes: Index[] = [];\n\n for (const userSchemaIndex of userSchemaTable.indexes) {\n const databaseIndex = helpers.findIndex(databaseTable, userSchemaIndex.name);\n if (databaseIndex) {\n const { status, diff } = diffIndexes(databaseIndex, userSchemaIndex);\n\n if (status === statuses.CHANGED) {\n updatedIndexes.push(diff);\n } else {\n unchangedIndexes.push(databaseIndex);\n }\n } else {\n addedIndexes.push(userSchemaIndex);\n }\n }\n\n for (const databaseIndex of databaseTable.indexes) {\n if (\n !helpers.hasIndex(userSchemaTable, databaseIndex.name) &&\n previousTable &&\n helpers.hasIndex(previousTable, databaseIndex.name)\n ) {\n removedIndexes.push(databaseIndex);\n }\n }\n\n const hasChanged = [addedIndexes, updatedIndexes, removedIndexes].some((arr) => arr.length > 0);\n\n return {\n status: hasChanged ? statuses.CHANGED : statuses.UNCHANGED,\n diff: {\n added: addedIndexes,\n updated: updatedIndexes,\n unchanged: unchangedIndexes,\n removed: removedIndexes,\n },\n };\n };\n\n const diffTableForeignKeys = (diffCtx: TableDiffContext): ForeignKeysDiff => {\n const { databaseTable, userSchemaTable, previousTable } = diffCtx;\n\n const addedForeignKeys: ForeignKey[] = [];\n const updatedForeignKeys: ForeignKeyDiff['diff'][] = [];\n const unchangedForeignKeys: ForeignKey[] = [];\n const removedForeignKeys: ForeignKey[] = [];\n\n if (!db.dialect.usesForeignKeys()) {\n return {\n status: statuses.UNCHANGED,\n diff: {\n added: addedForeignKeys,\n updated: updatedForeignKeys,\n unchanged: unchangedForeignKeys,\n removed: removedForeignKeys,\n },\n };\n }\n\n for (const userSchemaForeignKeys of userSchemaTable.foreignKeys) {\n const databaseForeignKeys = helpers.findForeignKey(databaseTable, userSchemaForeignKeys.name);\n if (databaseForeignKeys) {\n const { status, diff } = diffForeignKeys(databaseForeignKeys, userSchemaForeignKeys);\n\n if (status === statuses.CHANGED) {\n updatedForeignKeys.push(diff);\n } else {\n unchangedForeignKeys.push(databaseForeignKeys);\n }\n } else {\n addedForeignKeys.push(userSchemaForeignKeys);\n }\n }\n\n for (const databaseForeignKeys of databaseTable.foreignKeys) {\n if (\n !helpers.hasForeignKey(userSchemaTable, databaseForeignKeys.name) &&\n previousTable &&\n helpers.hasForeignKey(previousTable, databaseForeignKeys.name)\n ) {\n removedForeignKeys.push(databaseForeignKeys);\n }\n }\n\n const hasChanged = [addedForeignKeys, updatedForeignKeys, removedForeignKeys].some(\n (arr) => arr.length > 0\n );\n\n return {\n status: hasChanged ? statuses.CHANGED : statuses.UNCHANGED,\n diff: {\n added: addedForeignKeys,\n updated: updatedForeignKeys,\n unchanged: unchangedForeignKeys,\n removed: removedForeignKeys,\n },\n };\n };\n\n const diffTables = (diffCtx: TableDiffContext): TableDiff => {\n const { databaseTable } = diffCtx;\n\n const columnsDiff = diffTableColumns(diffCtx);\n const indexesDiff = diffTableIndexes(diffCtx);\n const foreignKeysDiff = diffTableForeignKeys(diffCtx);\n\n const hasChanged = [columnsDiff, indexesDiff, foreignKeysDiff].some(hasChangedStatus);\n\n return {\n status: hasChanged ? statuses.CHANGED : statuses.UNCHANGED,\n diff: {\n name: databaseTable.name,\n indexes: indexesDiff.diff,\n foreignKeys: foreignKeysDiff.diff,\n columns: columnsDiff.diff,\n },\n };\n };\n\n const diffSchemas = async (schemaDiffCtx: SchemaDiffContext): Promise<SchemaDiff> => {\n const { previousSchema, databaseSchema, userSchema } = schemaDiffCtx;\n\n const addedTables: Table[] = [];\n const updatedTables: TableDiff['diff'][] = [];\n const unchangedTables: Table[] = [];\n const removedTables: Table[] = [];\n\n // for each table in the user schema, check if it already exists in the database schema\n for (const userSchemaTable of userSchema.tables) {\n const databaseTable = helpers.findTable(databaseSchema, userSchemaTable.name);\n const previousTable =\n previousSchema && helpers.findTable(previousSchema, userSchemaTable.name);\n\n if (databaseTable) {\n const { status, diff } = diffTables({\n previousTable,\n databaseTable,\n userSchemaTable,\n });\n\n if (status === statuses.CHANGED) {\n updatedTables.push(diff);\n } else {\n unchangedTables.push(databaseTable);\n }\n } else {\n addedTables.push(userSchemaTable);\n }\n }\n\n // maintain audit logs table from EE -> CE\n const parsePersistedTable = (persistedTable: string | Table) => {\n if (typeof persistedTable === 'string') {\n return persistedTable;\n }\n return persistedTable.name;\n };\n\n const persistedTables = helpers.hasTable(databaseSchema, 'strapi_core_store_settings')\n ? // TODO: replace with low level db query instead\n ((await strapi.store.get({\n type: 'core',\n key: 'persisted_tables',\n })) ?? [])\n : [];\n\n const reservedTables = [...RESERVED_TABLE_NAMES, ...persistedTables.map(parsePersistedTable)];\n\n // for all tables in the database schema, check if they are not in the user schema\n for (const databaseTable of databaseSchema.tables) {\n const isInUserSchema = helpers.hasTable(userSchema, databaseTable.name);\n const wasTracked = previousSchema && helpers.hasTable(previousSchema, databaseTable.name);\n const isReserved = reservedTables.includes(databaseTable.name);\n\n // NOTE: if db table is not in the user schema and is not in the previous stored schema leave it alone. it is a user custom table that we should not touch\n if (!isInUserSchema && !wasTracked) {\n continue;\n }\n\n // if a db table is not in the user schema I want to delete it\n if (!isInUserSchema && wasTracked && !isReserved) {\n const dependencies = persistedTables\n .filter((table: PersistedTable) => {\n const dependsOn = table?.dependsOn;\n\n if (!_.isArray(dependsOn)) {\n return;\n }\n\n return dependsOn.some((table) => table.name === databaseTable.name);\n })\n .map((dependsOnTable: PersistedTable) => {\n return databaseSchema.tables.find(\n (databaseTable) => databaseTable.name === dependsOnTable.name\n );\n })\n // In case the table is not found, filter undefined values\n .filter((table: PersistedTable) => !_.isNil(table));\n\n removedTables.push(databaseTable, ...dependencies);\n }\n }\n\n const hasChanged = [addedTables, updatedTables, removedTables].some((arr) => arr.length > 0);\n\n return {\n status: hasChanged ? statuses.CHANGED : statuses.UNCHANGED,\n diff: {\n tables: {\n added: addedTables,\n updated: updatedTables,\n unchanged: unchangedTables,\n removed: removedTables,\n },\n },\n };\n };\n\n return {\n diff: diffSchemas,\n };\n};\n","import crypto from 'crypto';\n\nimport type { Database } from '..';\nimport type { Schema } from './types';\n\nconst TABLE_NAME = 'strapi_database_schema';\n\nexport default (db: Database) => {\n const hasSchemaTable = () => db.getSchemaConnection().hasTable(TABLE_NAME);\n\n const createSchemaTable = () => {\n return db.getSchemaConnection().createTable(TABLE_NAME, (t) => {\n t.increments('id');\n t.json('schema');\n t.datetime('time', { useTz: false });\n t.string('hash');\n });\n };\n\n const checkTableExists = async () => {\n if (!(await hasSchemaTable())) {\n await createSchemaTable();\n }\n };\n\n return {\n async read(): Promise<{\n id: number;\n time: Date;\n hash: string;\n schema: Schema;\n } | null> {\n await checkTableExists();\n\n const res = await db\n .getConnection()\n .select('*')\n .from(TABLE_NAME)\n .orderBy('time', 'DESC')\n .first();\n\n if (!res) {\n return null;\n }\n\n const parsedSchema = typeof res.schema === 'object' ? res.schema : JSON.parse(res.schema);\n\n return {\n ...res,\n schema: parsedSchema,\n };\n },\n\n hashSchema(schema: Schema) {\n return crypto.createHash('md5').update(JSON.stringify(schema)).digest('hex');\n },\n\n async add(schema: Schema) {\n await checkTableExists();\n\n // NOTE: we can remove this to add history\n await db.getConnection(TABLE_NAME).delete();\n\n const time = new Date();\n\n await db\n .getConnection()\n .insert({\n schema: JSON.stringify(schema),\n hash: this.hashSchema(schema),\n time,\n })\n .into(TABLE_NAME);\n },\n\n async clear() {\n await checkTableExists();\n\n await db.getConnection(TABLE_NAME).truncate();\n },\n };\n};\n","import type { Attribute, ScalarAttribute, RelationalAttribute } from '../types';\n\nconst SCALAR_TYPES = [\n 'increments',\n 'password',\n 'email',\n 'string',\n 'uid',\n 'richtext',\n 'text',\n 'json',\n 'enumeration',\n 'integer',\n 'biginteger',\n 'float',\n 'decimal',\n 'date',\n 'time',\n 'datetime',\n 'timestamp',\n 'boolean',\n 'blocks',\n];\n\nconst STRING_TYPES = ['string', 'text', 'uid', 'email', 'enumeration', 'richtext'];\nconst NUMBER_TYPES = ['biginteger', 'integer', 'decimal', 'float'];\n\nexport const isString = (type: string) => STRING_TYPES.includes(type);\nexport const isNumber = (type: string) => NUMBER_TYPES.includes(type);\nexport const isScalar = (type: string) => SCALAR_TYPES.includes(type);\nexport const isRelation = (type: string) => type === 'relation';\nexport const isScalarAttribute = (attribute: Attribute): attribute is ScalarAttribute =>\n isScalar(attribute.type);\nexport const isRelationalAttribute = (attribute: Attribute): attribute is RelationalAttribute =>\n isRelation(attribute.type);\n","/**\n * @fileoverview This file contains utility functions for shortening identifiers for use in a database schema.\n * The functions in this file are used to generate shorter names for database tables and columns\n * to avoid breaking the constraints of databases.\n *\n * IMPORTANT\n * Any changes here that result in a different output string from any of the naming methods will\n * cause the schema creation to delete data it doesn't recognize because the name\n * is different.\n *\n * If there are any test failures after updating this code, it means there is a breaking change that\n * will cause data loss, so beware; do not update the test to match your changes\n *\n * @internal\n */\n\nimport crypto from 'node:crypto';\nimport { isInteger } from 'lodash/fp';\n\n/**\n * Creates a hash of the given data with the specified string length as a string of hex characters\n *\n * @example\n * createHash(\"myData\", 5); // \"03f85\"\n * createHash(\"myData\", 2); // \"03\"\n * createHash(\"myData\", 1); // \"0\"\n *\n * @param data - The data to be hashed\n * @param len - The length of the hash\n * @returns The generated hash\n * @throws Error if the length is not a positive integer\n * @internal\n */\nexport function createHash(data: string, len: number): string {\n if (!isInteger(len) || len <= 0) {\n throw new Error(`createHash length must be a positive integer, received ${len}`);\n }\n\n const hash = crypto.createHash('shake256', { outputLength: Math.ceil(len / 2) }).update(data);\n return hash.digest('hex').substring(0, len);\n}\n","/**\n * This file contains utility functions for generating names used in the database.\n * These names include table names, column names, join table names, index names, and more.\n * The generated names can be customized with prefixes, suffixes, and maximum length.\n * These utility functions are used throughout the codebase to ensure consistent and standardized naming conventions in the database.\n *\n * The reason for checking maxLength for suffixes and prefixes and using the long ones from Strapi 4 is so that we always\n * have access to the full length names, in particular for migration purposes, but also so that (in theory) the feature\n * could be disabled and stay compatible with v4 database structure.\n */\nimport _, { isInteger, partition, snakeCase, sumBy } from 'lodash/fp';\nimport { createHash } from './hash';\nimport {\n IdentifiersOptions,\n NameInput,\n NameOptions,\n NameToken,\n NameTokenWithAllocation,\n} from './types';\n\nconst IDENTIFIER_MAX_LENGTH = 55 as const;\n\nexport class Identifiers {\n ID_COLUMN = 'id' as const;\n\n ORDER_COLUMN = 'order' as const;\n\n FIELD_COLUMN = 'field' as const;\n\n HASH_LENGTH = 5 as const;\n\n HASH_SEPARATOR = '' as const; // no separator is needed, we will just attach hash directly to shortened name\n\n IDENTIFIER_SEPARATOR = '_' as const;\n\n MIN_TOKEN_LENGTH = 3 as const; // the min characters required at the beginning of a name part\n\n // Fixed compression map for suffixes and prefixes\n #replacementMap = {\n links: 'lnk',\n order_inv_fk: 'oifk',\n order: 'ord',\n morphs: 'mph',\n index: 'idx',\n inv_fk: 'ifk',\n order_fk: 'ofk',\n id_column_index: 'idix',\n order_index: 'oidx',\n unique: 'uq',\n primary: 'pk',\n };\n\n #options: IdentifiersOptions;\n\n constructor(options: { maxLength: number }) {\n this.#options = options;\n }\n\n get replacementMap() {\n return this.#replacementMap;\n }\n\n get options() {\n return this.#options;\n }\n\n mapshortNames = (name: string): string | undefined => {\n if (name in this.replacementMap) {\n return (this.replacementMap as any)[name];\n }\n return undefined;\n };\n\n // Generic name handler that must be used by all helper functions\n /**\n * TODO: we should be requiring snake_case inputs for all names here, but we\n * aren't and it will require some refactoring to make it work. Currently if\n * we get names 'myModel' and 'my_model' they would be converted to the same\n * final string my_model which generally works but is not entirely safe\n * */\n getName = (names: NameInput, options?: NameOptions) => {\n const tokens: NameToken[] = _.castArray(names).map((name) => {\n return {\n name,\n compressible: true,\n };\n });\n\n if (options?.suffix) {\n tokens.push({\n name: options.suffix,\n compressible: false,\n shortName: this.mapshortNames(options.suffix),\n });\n }\n\n if (options?.prefix) {\n tokens.unshift({\n name: options.prefix,\n compressible: false,\n shortName: this.mapshortNames(options.prefix),\n });\n }\n\n return this.getNameFromTokens(tokens);\n };\n\n /**\n * TABLES\n */\n\n getTableName = (name: string, options?: NameOptions) => {\n return this.getName(name, options);\n };\n\n getJoinTableName = (collectionName: string, attributeName: string, options?: NameOptions) => {\n return this.getName([collectionName, attributeName], {\n suffix: 'links',\n ...options,\n });\n };\n\n getMorphTableName = (collectionName: string, attributeName: string, options?: NameOptions) => {\n return this.getName([snakeCase(collectionName), snakeCase(attributeName)], {\n suffix: 'morphs',\n ...options,\n });\n };\n\n /**\n * COLUMNS\n */\n\n getColumnName = (attributeName: string, options?: NameOptions) => {\n return this.getName(attributeName, options);\n };\n\n getJoinColumnAttributeIdName = (attributeName: string, options?: NameOptions) => {\n return this.getName(attributeName, { suffix: 'id', ...options });\n };\n\n getInverseJoinColumnAttributeIdName = (attributeName: string, options?: NameOptions) => {\n return this.getName(snakeCase(attributeName), { suffix: 'id', prefix: 'inv', ...options });\n };\n\n getOrderColumnName = (singularName: string, options?: NameOptions) => {\n return this.getName(singularName, { suffix: 'order', ...options });\n };\n\n getInverseOrderColumnName = (singularName: string, options?: NameOptions) => {\n return this.getName(singularName, {\n suffix: 'order',\n prefix: 'inv',\n ...options,\n });\n };\n\n /**\n * Morph Join Tables\n */\n getMorphColumnJoinTableIdName = (singularName: string, options?: NameOptions) => {\n return this.getName(snakeCase(singularName), { suffix: 'id', ...options });\n };\n\n getMorphColumnAttributeIdName = (attributeName: string, options?: NameOptions) => {\n return this.getName(snakeCase(attributeName), { suffix: 'id', ...options });\n };\n\n getMorphColumnTypeName = (attributeName: string, options?: NameOptions) => {\n return this.getName(snakeCase(attributeName), { suffix: 'type', ...options });\n };\n\n /**\n * INDEXES\n * Note that these methods are generally used to reference full table names + attribute(s), which\n * may already be shortened strings rather than individual parts.\n * That is fine and expected to compress the previously incompressible parts of those strings,\n * because in these cases the relevant information is the table name and we can't really do\n * any better; shortening the individual parts again might make it even more confusing.\n *\n * So for example, the fk for the table `mytable_myattr4567d_localizations` will become\n * mytable_myattr4567d_loc63bf2_fk\n */\n\n // base index types\n getIndexName = (names: NameInput, options?: NameOptions) => {\n return this.getName(names, { suffix: 'index', ...options });\n };\n\n getFkIndexName = (names: NameInput, options?: NameOptions) => {\n return this.getName(names, { suffix: 'fk', ...options });\n };\n\n getUniqueIndexName = (names: NameInput, options?: NameOptions) => {\n return this.getName(names, { suffix: 'unique', ...options });\n };\n\n getPrimaryIndexName = (names: NameInput, options?: NameOptions) => {\n return this.getName(names, { suffix: 'primary', ...options });\n };\n\n // custom index types\n getInverseFkIndexName = (names: NameInput, options?: NameOptions) => {\n return this.getName(names, { suffix: 'inv_fk', ...options });\n };\n\n getOrderFkIndexName = (names: NameInput, options?: NameOptions) => {\n return this.getName(names, { suffix: 'order_fk', ...options });\n };\n\n getOrderInverseFkIndexName = (names: NameInput, options?: NameOptions) => {\n return this.getName(names, { suffix: 'order_inv_fk', ...options });\n };\n\n getIdColumnIndexName = (names: NameInput, options?: NameOptions) => {\n return this.getName(names, { suffix: 'id_column_index', ...options });\n };\n\n getOrderIndexName = (names: NameInput, options?: NameOptions) => {\n return this.getName(names, { suffix: 'order_index', ...options });\n };\n\n /**\n * Generates a string with a max length, appending a hash at the end if necessary to keep it unique\n *\n * @example\n * // if we have strings such as \"longstring1\" and \"longstring2\" with a max length of 9,\n * // we don't want to end up with \"longstrin\" and \"longstrin\"\n * // we want something such as \"longs0b23\" and \"longs953f\"\n * const token1 = generateToken(\"longstring1\", 9); // \"longs0b23\"\n * const token2 = generateToken(\"longstring2\", 9); // \"longs953f\"\n *\n * @param name - The base name\n * @param len - The desired length of the token.\n * @returns The generated token with hash.\n * @throws Error if the length is not a positive integer, or if the length is too short for the token.\n * @internal\n */\n getShortenedName = (name: string, len: number) => {\n if (!isInteger(len) || len <= 0) {\n throw new Error(`tokenWithHash length must be a positive integer, received ${len}`);\n }\n if (name.length <= len) {\n return name;\n }\n if (len < this.MIN_TOKEN_LENGTH + this.HASH_LENGTH) {\n throw new Error(\n `length for part of identifier too short, minimum is hash length (${this.HASH_LENGTH}) plus min token length (${this.MIN_TOKEN_LENGTH}), received ${len} for token ${name}`\n );\n }\n\n const availableLength = len - this.HASH_LENGTH - this.HASH_SEPARATOR.length;\n if (availableLength < this.MIN_TOKEN_LENGTH) {\n throw new Error(\n `length for part of identifier minimum is less than min token length (${this.MIN_TOKEN_LENGTH}), received ${len} for token ${name}`\n );\n }\n\n return `${name.substring(0, availableLength)}${this.HASH_SEPARATOR}${createHash(\n name,\n this.HASH_LENGTH\n )}`;\n };\n\n /**\n * Constructs a name from an array of name tokens within a specified maximum length. It ensures the final name does not exceed\n * this limit by selectively compressing tokens marked as compressible. If the name exceeds the maximum length and cannot be\n * compressed sufficiently, an error is thrown. This function supports dynamic adjustment of token lengths to fit within the\n * maxLength constraint (that is, it will always make use of all available space), while also ensuring the preservation of\n * incompressible tokens.\n * @internal\n */\n getNameFromTokens = (nameTokens: NameToken[]): string => {\n const { maxLength } = this.options;\n\n if (!isInteger(maxLength) || maxLength < 0) {\n throw new Error('maxLength must be a positive integer or 0 (for unlimited length)');\n }\n\n const unshortenedName = nameTokens\n .map((token) => {\n return token.name;\n })\n .join(this.IDENTIFIER_SEPARATOR);\n\n // if maxLength == 0 we want the legacy v4 name without any shortening\n if (maxLength === 0) {\n this.setUnshortenedName(unshortenedName, unshortenedName);\n return unshortenedName;\n }\n\n // check the full length name (but with incompressible tokens using shortNames if available)\n const fullLengthName = nameTokens\n .map((token) => {\n if (token.compressible) {\n return token.name;\n }\n return token.shortName ?? token.name;\n })\n .join(this.IDENTIFIER_SEPARATOR);\n\n if (fullLengthName.length <= maxLength) {\n this.setUnshortenedName(fullLengthName, unshortenedName);\n return fullLengthName;\n }\n\n // Split tokens by compressibility\n const [compressible, incompressible] = partition(\n (token: NameToken) => token.compressible,\n nameTokens\n );\n\n const totalIncompressibleLength = sumBy((token: NameToken) =>\n token.compressible === false && token.shortName !== undefined\n ? token.shortName.length\n : token.name.length\n )(incompressible);\n const totalSeparatorsLength = nameTokens.length * this.IDENTIFIER_SEPARATOR.length - 1;\n const available = maxLength - totalIncompressibleLength - totalSeparatorsLength;\n const availablePerToken = Math.floor(available / compressible.length);\n\n if (\n totalIncompressibleLength + totalSeparatorsLength > maxLength ||\n availablePerToken < this.MIN_TOKEN_LENGTH\n ) {\n throw new Error('Maximum length is too small to accommodate all tokens');\n }\n\n // Calculate the remainder from the division and add it to the surplus\n let surplus = available % compressible.length;\n\n // Check that it's even possible to proceed\n const minHashedLength = this.HASH_LENGTH + this.HASH_SEPARATOR.length + this.MIN_TOKEN_LENGTH;\n const totalLength = nameTokens.reduce(\n (total, token) => {\n if (token.compressible) {\n if (token.name.length < availablePerToken) {\n return total + token.name.length;\n }\n return total + minHashedLength;\n }\n const tokenName = token.shortName ?? token.name;\n return total + tokenName.length;\n },\n nameTokens.length * this.IDENTIFIER_SEPARATOR.length - 1\n );\n\n // TODO: this is the weakest thing of the shortener, but fortunately it can be improved later without a breaking change if it turns out to be a problem (for example, if there is some case we need 6+ name parts in one identifier). We could take this \"shortest string we could generate\" that is too long and apply the hash directly to that, which would work fine even though it would be very difficult to determine what it was actually referring to\n // Check if the maximum length is less than the total length\n if (maxLength < totalLength) {\n throw new Error('Maximum length is too small to accommodate all tokens');\n }\n\n // Calculate total surplus length from shorter strings and total deficit length from longer strings\n let deficits: NameTokenWithAllocation[] = [];\n compressible.forEach((token) => {\n const actualLength = token.name.length;\n if (actualLength < availablePerToken) {\n surplus += availablePerToken - actualLength;\n token.allocatedLength = actualLength;\n } else {\n token.allocatedLength = availablePerToken;\n deficits.push(token as NameTokenWithAllocation);\n }\n });\n\n // Redistribute surplus length to longer strings, one character at a time\n // This way we avoid issues with greed and trying to handle floating points by dividing available length\n function filterAndIncreaseLength(token: NameTokenWithAllocation) {\n if (token.allocatedLength < token.name.length && surplus > 0) {\n token.allocatedLength += 1;\n surplus -= 1;\n // if it hasn't reached its full length, keep it in array for next round\n return token.allocatedLength < token.name.length;\n }\n return false; // Remove this token from the deficits array\n }\n\n // Redistribute surplus length to longer strings, one character at a time\n let previousSurplus = surplus + 1; // infinite loop protection\n while (surplus > 0 && deficits.length > 0) {\n deficits = deficits.filter((token) => filterAndIncreaseLength(token));\n\n // infinite loop protection; if the surplus hasn't changed, there was nothing left to distribute it to\n if (surplus === previousSurplus) {\n break;\n }\n previousSurplus = surplus;\n }\n\n // Build final string\n const shortenedName = nameTokens\n .map((token) => {\n // if it is compressible, shorten it\n if (\n token.compressible &&\n 'allocatedLength' in token &&\n token.allocatedLength !== undefined\n ) {\n return this.getShortenedName(token.name, token.allocatedLength);\n }\n\n // if is is only compressible as a fixed value, use that\n if (token.compressible === false && token.shortName) {\n return token.shortName;\n }\n\n // otherwise return it as-is\n return token.name;\n })\n .join(this.IDENTIFIER_SEPARATOR);\n\n // this should be unreachable, but add a final check for potential edge cases we missed\n if (shortenedName.length > maxLength) {\n throw new Error(\n `name shortening failed to generate a name of the correct maxLength; name ${shortenedName}`\n );\n }\n\n this.setUnshortenedName(shortenedName, unshortenedName);\n return shortenedName;\n };\n\n // We need to be able to find the full-length name for any shortened name, primarily for migration purposes\n // Therefore we store every name that passes through so we can retrieve the original later\n nameMap = new Map<string, string>();\n\n getUnshortenedName = (shortName: string) => {\n return this.nameMap.get(this.serializeKey(shortName)) ?? shortName;\n };\n\n setUnshortenedName = (shortName: string, fullName: string) => {\n // This is protection against cases where a name is shortened twice, for example shortened in a model outside of createMetadata\n // and then run through the shortener against inside createMetadata, which would do nothing at all but replace the original\n // name in this mapping\n if (this.nameMap.get(this.serializeKey(shortName)) && shortName === fullName) {\n return;\n }\n\n // set the name\n this.nameMap.set(this.serializeKey(shortName), fullName);\n };\n\n serializeKey = (shortName: string) => {\n return `${shortName}.${this.options.maxLength}`;\n };\n}\n\n// TODO: instead of instantiating this here as a global metadata should create its own to use\n// However, that would require refactoring all of the metadata methods to be instantiated to keep a centralized identifiers\nexport const identifiers = new Identifiers({ maxLength: IDENTIFIER_MAX_LENGTH });\n","import * as types from '../utils/types';\nimport { identifiers } from '../utils/identifiers';\nimport type { Metadata, Meta } from '../metadata';\nimport type { Column, Schema, Table } from './types';\nimport type { Attribute } from '../types';\n\n/**\n * TODO: This needs to be refactored to support incoming names such as\n * (column, table, index) that are of the form string | NameToken[] so\n * that pieces can be passed through and shortened here.\n *\n * Currently, we are potentially shortening twice, although in reality\n * that won't happen since the shortened attribute column names will\n * fit here because they are already shortened to the max identifier\n * length\n *\n * That is the reason we use getName() here and not getColumnName();\n * we just want the exact shortened name for the value without doing\n * any other potential manipulation to it\n * */\n\nconst createColumn = (name: string, attribute: Attribute): Column => {\n const { type, args = [], ...opts } = getColumnType(attribute);\n\n return {\n name: identifiers.getName(name),\n type,\n args,\n defaultTo: null,\n notNullable: false,\n unsigned: false,\n ...opts,\n ...('column' in attribute ? (attribute.column ?? {}) : {}),\n };\n};\n\nconst createTable = (meta: Meta): Table => {\n const table: Table = {\n name: meta.tableName,\n indexes: meta.indexes || [],\n foreignKeys: meta.foreignKeys || [],\n columns: [],\n };\n\n for (const key of Object.keys(meta.attributes)) {\n const attribute = meta.attributes[key];\n\n // if (types.isRelation(attribute.type)) {\n if (attribute.type === 'relation') {\n if ('morphColumn' in attribute && attribute.morphColumn && attribute.owner) {\n const { idColumn, typeColumn } = attribute.morphColumn;\n\n const idColumnName = identifiers.getName(idColumn.name);\n const typeColumnName = identifiers.getName(typeColumn.name);\n\n table.columns.push(\n createColumn(idColumnName, {\n type: 'integer',\n column: {\n unsigned: true,\n },\n })\n );\n\n table.columns.push(createColumn(typeColumnName, { type: 'string' }));\n } else if (\n 'joinColumn' in attribute &&\n attribute.joinColumn &&\n attribute.owner &&\n attribute.joinColumn.referencedTable\n ) {\n // NOTE: we could pass uniquness for oneToOne to avoid creating more than one to one\n\n const {\n name: columnNameFull,\n referencedColumn,\n referencedTable,\n columnType = 'integer',\n } = attribute.joinColumn;\n\n const columnName = identifiers.getName(columnNameFull);\n\n const column = createColumn(columnName, {\n // TODO: find the column type automatically, or allow passing all the column params\n type: columnType,\n column: {\n unsigned: true,\n },\n });\n\n table.columns.push(column);\n\n const fkName = identifiers.getFkIndexName([table.name, columnName]);\n table.foreignKeys.push({\n name: fkName,\n columns: [column.name],\n referencedTable,\n referencedColumns: [referencedColumn],\n // NOTE: could allow configuration\n onDelete: 'SET NULL',\n });\n\n table.indexes.push({\n name: fkName,\n columns: [column.name],\n });\n }\n } else if (types.isScalarAttribute(attribute)) {\n const columnName = identifiers.getName(attribute.columnName || key);\n\n const column = createColumn(columnName, attribute);\n\n if (column.unique) {\n table.indexes.push({\n type: 'unique',\n name: identifiers.getUniqueIndexName([table.name, column.name]),\n columns: [columnName],\n });\n }\n\n if (column.primary) {\n table.indexes.push({\n type: 'primary',\n name: identifiers.getPrimaryIndexName([table.name, column.name]),\n columns: [columnName],\n });\n }\n\n table.columns.push(column);\n }\n }\n\n return table;\n};\n\nconst getColumnType = (attribute: Attribute) => {\n if ('columnType' in attribute && attribute.columnType) {\n return attribute.columnType;\n }\n\n switch (attribute.type) {\n case 'increments': {\n return {\n type: 'increments',\n args: [{ primary: true, primaryKey: true }],\n notNullable: true,\n };\n }\n\n // We might want to convert email/password to string types before going into the orm with specific validators & transformers\n case 'password':\n case 'email':\n case 'string':\n case 'enumeration': {\n return { type: 'string' };\n }\n case 'uid': {\n return {\n type: 'string',\n };\n }\n case 'richtext':\n case 'text': {\n return {\n type: 'text',\n args: ['longtext'],\n };\n }\n case 'blocks':\n case 'json': {\n return { type: 'jsonb' };\n }\n case 'integer': {\n return { type: 'integer' };\n }\n case 'biginteger': {\n return { type: 'bigInteger' };\n }\n case 'float': {\n return { type: 'double' };\n }\n case 'decimal': {\n return { type: 'decimal', args: [10, 2] };\n }\n case 'date': {\n return { type: 'date' };\n }\n case 'time': {\n return { type: 'time', args: [{ precision: 3 }] };\n }\n case 'datetime': {\n return {\n type: 'datetime',\n args: [\n {\n useTz: false,\n precision: 6,\n },\n ],\n };\n }\n case 'timestamp': {\n return {\n type: 'timestamp',\n args: [\n {\n useTz: false,\n precision: 6,\n },\n ],\n };\n }\n case 'boolean': {\n return { type: 'boolean' };\n }\n default: {\n throw new Error(`Unknown type ${attribute.type}`);\n }\n }\n};\n\nexport const metadataToSchema = (metadata: Metadata): Schema => {\n const schema: Schema = {\n tables: [],\n };\n\n metadata.forEach((metadata) => {\n schema.tables.push(createTable(metadata));\n });\n\n return schema;\n};\n","import createDebug from 'debug';\n\nimport createSchemaBuilder from './builder';\nimport createSchemaDiff from './diff';\nimport createSchemaStorage from './storage';\nimport { metadataToSchema } from './schema';\n\nimport type { Schema, SchemaDiff } from './types';\nimport type { Database } from '..';\n\nexport type * from './types';\n\nconst debug = createDebug('strapi::database');\n\nexport interface SchemaProvider {\n builder: ReturnType<typeof createSchemaBuilder>;\n schemaDiff: ReturnType<typeof createSchemaDiff>;\n schemaStorage: ReturnType<typeof createSchemaStorage>;\n sync(): Promise<SchemaDiff['status']>;\n syncSchema(): Promise<SchemaDiff['status']>;\n reset(): Promise<void>;\n create(): Promise<void>;\n drop(): Promise<void>;\n schema: Schema;\n}\n\ninterface State {\n schema?: Schema;\n}\n\nexport const createSchemaProvider = (db: Database): SchemaProvider => {\n const state: State = {};\n\n return {\n get schema() {\n if (!state.schema) {\n debug('Converting metadata to database schema');\n state.schema = metadataToSchema(db.metadata);\n }\n\n return state.schema;\n },\n builder: createSchemaBuilder(db),\n schemaDiff: createSchemaDiff(db),\n schemaStorage: createSchemaStorage(db),\n\n /**\n * Drops the database schema\n */\n async drop() {\n debug('Dropping database schema');\n\n const DBSchema = await db.dialect.schemaInspector.getSchema();\n await this.builder.dropSchema(DBSchema);\n },\n\n /**\n * Creates the database schema\n */\n async create() {\n debug('Created database schema');\n await this.builder.createSchema(this.schema);\n },\n\n /**\n * Resets the database schema\n */\n async reset() {\n debug('Resetting database schema');\n await this.drop();\n await this.create();\n },\n\n async syncSchema(): Promise<SchemaDiff['status']> {\n debug('Synchronizing database schema');\n\n const databaseSchema = await db.dialect.schemaInspector.getSchema();\n const storedSchema = await this.schemaStorage.read();\n\n /*\n 3way diff - DB schema / previous metadataSchema / new metadataSchema\n\n - When something doesn't exist in the previous metadataSchema -> It's not tracked by us and should be ignored\n - If no previous metadataSchema => use new metadataSchema so we start tracking them and ignore everything else\n - Apply this logic to Tables / Columns / Indexes / FKs ...\n - Handle errors (indexes or fks on incompatible stuff ...)\n\n */\n\n const { status, diff } = await this.schemaDiff.diff({\n previousSchema: storedSchema?.schema,\n databaseSchema,\n userSchema: this.schema,\n });\n\n if (status === 'CHANGED') {\n await this.builder.updateSchema(diff);\n }\n\n await this.schemaStorage.add(this.schema);\n\n return status;\n },\n\n // TODO: support options to migrate softly or forcefully\n // TODO: support option to disable auto migration & run a CLI command instead to avoid doing it at startup\n // TODO: Allow keeping extra indexes / extra tables / extra columns (globally or on a per table basis)\n async sync(): Promise<SchemaDiff['status']> {\n if (await db.migrations.shouldRun()) {\n debug('Found migrations to run');\n await db.migrations.up();\n\n return this.syncSchema();\n }\n\n const oldSchema = await this.schemaStorage.read();\n\n if (!oldSchema) {\n debug('Schema not persisted yet');\n return this.syncSchema();\n }\n\n const { hash: oldHash } = oldSchema;\n const hash = await this.schemaStorage.hashSchema(this.schema);\n\n if (oldHash !== hash) {\n debug('Schema changed');\n\n return this.syncSchema();\n }\n\n debug('Schema unchanged');\n\n return 'UNCHANGED';\n },\n };\n};\n","import _, { snakeCase } from 'lodash/fp';\n\nimport { identifiers } from '../utils/identifiers';\nimport type { Meta, Metadata } from './metadata';\nimport type { RelationalAttribute, Relation, MorphJoinTable } from '../types';\n\ninterface JoinColumnOptions {\n attribute: (Relation.OneToOne | Relation.ManyToOne) & Relation.Owner;\n attributeName: string;\n meta: Meta;\n}\n\ninterface JoinTableOptions {\n attribute: RelationalAttribute & Relation.WithTarget & Relation.Bidirectional;\n attributeName: string;\n meta: Meta;\n}\n\nconst ID = identifiers.ID_COLUMN;\nconst ORDER = identifiers.ORDER_COLUMN;\nconst FIELD = identifiers.FIELD_COLUMN;\n\nconst hasInversedBy = (\n attr: RelationalAttribute\n): attr is RelationalAttribute & { inversedBy: boolean } => 'inversedBy' in attr;\nconst hasMappedBy = (\n attr: RelationalAttribute\n): attr is RelationalAttribute & { inversedBy: boolean } => 'mappedBy' in attr;\n\n// TODO: use strapi/utils relations for all of these\nexport const isPolymorphic = (attribute: RelationalAttribute): attribute is Relation.Morph =>\n ['morphOne', 'morphMany', 'morphToOne', 'morphToMany'].includes(attribute.relation);\n\nexport const isOneToAny = (\n attribute: RelationalAttribute\n): attribute is Relation.OneToOne | Relation.OneToMany =>\n ['oneToOne', 'oneToMany'].includes(attribute.relation);\n\nexport const isManyToAny = (\n attribute: RelationalAttribute\n): attribute is Relation.ManyToOne | Relation.ManyToMany =>\n ['manyToMany', 'manyToOne'].includes(attribute.relation);\n\nexport const isAnyToOne = (\n attribute: RelationalAttribute\n): attribute is Relation.OneToOne | Relation.ManyToOne =>\n ['oneToOne', 'manyToOne'].includes(attribute.relation);\n\nexport const isAnyToMany = (\n attribute: RelationalAttribute\n): attribute is Relation.OneToMany | Relation.ManyToMany =>\n ['oneToMany', 'manyToMany'].includes(attribute.relation);\n\nexport const isBidirectional = (\n attribute: RelationalAttribute\n): attribute is Relation.Bidirectional => hasInversedBy(attribute) || hasMappedBy(attribute);\n\nconst isOwner = (\n attribute: RelationalAttribute\n): attribute is RelationalAttribute & Relation.Owner =>\n !isBidirectional(attribute) || hasInversedBy(attribute);\n\nconst shouldUseJoinTable = (attribute: RelationalAttribute) =>\n !('useJoinTable' in attribute) || attribute.useJoinTable !== false;\n\nexport const hasOrderColumn = (attribute: RelationalAttribute) => isAnyToMany(attribute);\nexport const hasInverseOrderColumn = (attribute: RelationalAttribute) =>\n isBidirectional(attribute) && isManyToAny(attribute);\n\n/**\n * Creates a oneToOne relation metadata\n *\n * if owner then\n * if with join table then\n * create join table\n * else\n * create joinColumn\n * if bidirectional then\n * set inverse attribute joinCol or joinTable info correctly\n * else\n * this property must be set by the owner side\n * verify the owner side is valid // should be done before or at the same time ?\n */\nconst createOneToOne = (\n attributeName: string,\n attribute: Relation.OneToOne,\n meta: Meta,\n metadata: Metadata\n) => {\n if (isOwner(attribute)) {\n if (shouldUseJoinTable(attribute)) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n } else {\n createJoinColumn(metadata, {\n attribute,\n attributeName,\n meta,\n });\n }\n } else {\n // TODO: verify other side is valid\n }\n};\n\n/**\n * Creates a oneToMany relation metadata\n *\n * if unidirectional then\n * create join table\n * if bidirectional then\n * cannot be owning side\n * do nothing\n */\nconst createOneToMany = (\n attributeName: string,\n attribute: Relation.OneToMany,\n meta: Meta,\n metadata: Metadata\n) => {\n if (shouldUseJoinTable(attribute) && !isBidirectional(attribute)) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n } else if (isOwner(attribute)) {\n throw new Error('one side of a oneToMany cannot be the owner side in a bidirectional relation');\n }\n};\n\n/**\n * Creates a manyToOne relation metadata\n *\n * if unidirectional then\n * if with join table then\n * create join table\n * else\n * create join column\n * else\n * must be the owner side\n * if with join table then\n * create join table\n * else\n * create join column\n * set inverse attribute joinCol or joinTable info correctly\n */\nconst createManyToOne = (\n attributeName: string,\n attribute: Relation.ManyToOne,\n meta: Meta,\n metadata: Metadata\n) => {\n if (isBidirectional(attribute) && !isOwner(attribute)) {\n throw new Error('The many side of a manyToOne must be the owning side');\n }\n\n if (shouldUseJoinTable(attribute)) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n } else {\n createJoinColumn(metadata, {\n attribute,\n attributeName,\n meta,\n });\n }\n};\n\n/**\n * Creates a manyToMany relation metadata\n *\n * if unidirectional\n * create join table\n * else\n * if owner then\n * if with join table then\n * create join table\n * else\n * do nothing\n */\nconst createManyToMany = (\n attributeName: string,\n attribute: Relation.ManyToMany,\n meta: Meta,\n metadata: Metadata\n) => {\n if (shouldUseJoinTable(attribute) && (!isBidirectional(attribute) || isOwner(attribute))) {\n createJoinTable(metadata, {\n attribute,\n attributeName,\n meta,\n });\n }\n};\n\n/**\n * Creates a morphToOne relation metadata\n *\n * if with join table then\n * create join table\n * else\n * create join columnsa\n *\n * if bidirectionnal\n * set info in the traget\n */\nconst createMorphToOne = (attributeName: string, attribute: Relation.MorphToOne) => {\n const idColumnName = identifiers.getJoinColumnAttributeIdName('target');\n const typeColumnName = identifiers.getMorphColumnTypeName('target');\n\n Object.assign(attribute, {\n owner: true,\n morphColumn: attribute.morphColumn ?? {\n typeColumn: {\n name: typeColumnName,\n },\n idColumn: {\n name: idColumnName,\n referencedColumn: ID,\n },\n },\n });\n};\n\n/**\n * Creates a morphToMany relation metadata\n */\nconst createMorphToMany = (\n attributeName: string,\n attribute: Relation.MorphToMany,\n meta: Meta,\n metadata: Metadata\n) => {\n if ('joinTable' in attribute && attribute.joinTable && !attribute.joinTable.__internal__) {\n return;\n }\n\n const joinTableName = identifiers.getMorphTableName(meta.tableName, attributeName);\n const joinColumnName = identifiers.getMorphColumnJoinTableIdName(snakeCase(meta.singularName));\n const idColumnName = identifiers.getMorphColumnAttributeIdName(attributeName);\n const typeColumnName = identifiers.getMorphColumnTypeName(attributeName);\n\n const fkIndexName = identifiers.getFkIndexName(joinTableName);\n\n metadata.add({\n singularName: joinTableName,\n uid: joinTableName,\n tableName: joinTableName,\n attributes: {\n [ID]: {\n type: 'increments',\n },\n [joinColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n // This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened\n columnName: joinColumnName,\n },\n [idColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n },\n [typeColumnName]: {\n type: 'string',\n },\n [FIELD]: {\n type: 'string',\n },\n [ORDER]: {\n type: 'float',\n column: {\n unsigned: true,\n },\n },\n },\n indexes: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n },\n {\n name: identifiers.getOrderIndexName(joinTableName),\n columns: [ORDER],\n },\n {\n name: identifiers.getIdColumnIndexName(joinTableName),\n columns: [idColumnName],\n },\n ],\n foreignKeys: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n referencedColumns: [ID],\n referencedTable: meta.tableName,\n onDelete: 'CASCADE',\n },\n ],\n lifecycles: {},\n columnToAttribute: {},\n });\n\n const joinTable: MorphJoinTable = {\n __internal__: true,\n name: joinTableName,\n joinColumn: {\n name: joinColumnName,\n referencedColumn: ID,\n },\n morphColumn: {\n typeColumn: {\n name: typeColumnName,\n },\n idColumn: {\n name: idColumnName,\n referencedColumn: ID,\n },\n },\n orderBy: {\n order: 'asc' as const,\n },\n pivotColumns: [joinColumnName, typeColumnName, idColumnName],\n };\n\n attribute.joinTable = joinTable;\n};\n\n/**\n * Creates a morphOne relation metadata\n */\nconst createMorphOne = (\n attributeName: string,\n attribute: Relation.MorphOne,\n meta: Meta,\n metadata: Metadata\n) => {\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Morph target not found. Looking for ${attribute.target}`);\n }\n\n if (attribute.morphBy && !_.has(attribute.morphBy, targetMeta.attributes)) {\n throw new Error(`Morph target attribute not found. Looking for ${attribute.morphBy}`);\n }\n};\n\n/**\n * Creates a morphMany relation metadata\n */\nconst createMorphMany = (\n attributeName: string,\n attribute: Relation.MorphMany,\n meta: Meta,\n metadata: Metadata\n) => {\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Morph target not found. Looking for ${attribute.target}`);\n }\n\n if (attribute.morphBy && !_.has(attribute.morphBy, targetMeta.attributes)) {\n throw new Error(`Morph target attribute not found. Looking for ${attribute.morphBy}`);\n }\n};\n\n/**\n * Creates a join column info and add them to the attribute meta\n */\nconst createJoinColumn = (metadata: Metadata, { attribute, attributeName }: JoinColumnOptions) => {\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Unknown target ${attribute.target}`);\n }\n\n const joinColumnName = identifiers.getJoinColumnAttributeIdName(snakeCase(attributeName));\n const joinColumn = {\n name: joinColumnName,\n referencedColumn: ID,\n referencedTable: targetMeta.tableName,\n };\n\n if ('joinColumn' in attribute) {\n Object.assign(joinColumn, attribute.joinColumn);\n }\n\n Object.assign(attribute, { owner: true, joinColumn });\n\n if (isBidirectional(attribute)) {\n const inverseAttribute = targetMeta.attributes[attribute.inversedBy];\n\n Object.assign(inverseAttribute, {\n joinColumn: {\n name: joinColumn.referencedColumn,\n referencedColumn: joinColumnName,\n },\n });\n }\n};\n\n/**\n * Creates a join table and add it to the attribute meta\n */\nconst createJoinTable = (\n metadata: Metadata,\n { attributeName, attribute, meta }: JoinTableOptions\n) => {\n if (!shouldUseJoinTable(attribute)) {\n throw new Error('Attempted to create join table when useJoinTable is false');\n }\n\n const targetMeta = metadata.get(attribute.target);\n\n if (!targetMeta) {\n throw new Error(`Unknown target ${attribute.target}`);\n }\n\n // TODO: implement overwrite logic instead\n if ('joinTable' in attribute && attribute.joinTable && !attribute.joinTable.__internal__) {\n return;\n }\n\n const joinTableName = identifiers.getJoinTableName(\n snakeCase(meta.tableName),\n snakeCase(attributeName)\n );\n\n const joinColumnName = identifiers.getJoinColumnAttributeIdName(snakeCase(meta.singularName));\n\n let inverseJoinColumnName = identifiers.getJoinColumnAttributeIdName(\n snakeCase(targetMeta.singularName)\n );\n\n // if relation is self referencing\n if (joinColumnName === inverseJoinColumnName) {\n inverseJoinColumnName = identifiers.getInverseJoinColumnAttributeIdName(\n snakeCase(targetMeta.singularName)\n );\n }\n\n const orderColumnName = identifiers.getOrderColumnName(snakeCase(targetMeta.singularName));\n // TODO: should this plus the conditional below be rolled into one method?\n let inverseOrderColumnName = identifiers.getOrderColumnName(snakeCase(meta.singularName));\n\n // if relation is self referencing\n if (attribute.relation === 'manyToMany' && orderColumnName === inverseOrderColumnName) {\n inverseOrderColumnName = identifiers.getInverseOrderColumnName(snakeCase(meta.singularName));\n }\n\n const fkIndexName = identifiers.getFkIndexName(joinTableName);\n const invFkIndexName = identifiers.getInverseFkIndexName(joinTableName);\n\n const metadataSchema: Meta = {\n singularName: joinTableName,\n uid: joinTableName,\n tableName: joinTableName,\n attributes: {\n [ID]: {\n type: 'increments',\n },\n [joinColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n // This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened\n columnName: joinColumnName,\n },\n [inverseJoinColumnName]: {\n type: 'integer',\n column: {\n unsigned: true,\n },\n // This must be set explicitly so that it is used instead of shortening the attribute name, which is already shortened\n columnName: inverseJoinColumnName,\n },\n // TODO: add extra pivot attributes -> user should use an intermediate entity\n },\n indexes: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n },\n {\n name: invFkIndexName,\n columns: [inverseJoinColumnName],\n },\n {\n name: identifiers.getUniqueIndexName(joinTableName),\n columns: [joinColumnName, inverseJoinColumnName],\n type: 'unique',\n },\n ],\n foreignKeys: [\n {\n name: fkIndexName,\n columns: [joinColumnName],\n referencedColumns: [ID],\n referencedTable: meta.tableName,\n onDelete: 'CASCADE',\n },\n {\n name: invFkIndexName,\n columns: [inverseJoinColumnName],\n referencedColumns: [ID],\n referencedTable: targetMeta.tableName,\n onDelete: 'CASCADE',\n },\n ],\n lifecycles: {},\n columnToAttribute: {},\n };\n\n const joinTable = {\n __internal__: true,\n name: joinTableName,\n joinColumn: {\n name: joinColumnName,\n referencedColumn: ID,\n referencedTable: meta.tableName,\n },\n inverseJoinColumn: {\n name: inverseJoinColumnName,\n referencedColumn: ID,\n referencedTable: targetMeta.tableName,\n },\n pivotColumns: [joinColumnName, inverseJoinColumnName],\n } as any;\n\n // order\n if (isAnyToMany(attribute)) {\n metadataSchema.attributes[orderColumnName] = {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n columnName: orderColumnName,\n };\n metadataSchema.indexes.push({\n name: identifiers.getOrderFkIndexName(joinTableName),\n columns: [orderColumnName],\n });\n joinTable.orderColumnName = orderColumnName;\n joinTable.orderBy = { [orderColumnName]: 'asc' };\n }\n\n // inv order\n if (isBidirectional(attribute) && isManyToAny(attribute)) {\n metadataSchema.attributes[inverseOrderColumnName] = {\n type: 'float',\n column: {\n unsigned: true,\n defaultTo: null,\n },\n columnName: inverseOrderColumnName,\n };\n\n metadataSchema.indexes.push({\n name: identifiers.getOrderInverseFkIndexName(joinTableName),\n columns: [inverseOrderColumnName],\n });\n\n joinTable.inverseOrderColumnName = inverseOrderColumnName;\n }\n\n metadata.add(metadataSchema);\n\n attribute.joinTable = joinTable;\n\n if (isBidirectional(attribute)) {\n const inverseAttribute = attribute.inversedBy\n ? (targetMeta.attributes[attribute.inversedBy] as Relation.Bidirectional)\n : null;\n\n if (!inverseAttribute) {\n throw new Error(\n `inversedBy attribute ${attribute.inversedBy} not found target ${targetMeta.uid}`\n );\n }\n\n if (inverseAttribute.type !== 'relation') {\n throw new Error(\n `inversedBy attribute ${attribute.inversedBy} targets non relational attribute in ${targetMeta.uid}`\n );\n }\n\n inverseAttribute.joinTable = {\n __internal__: true,\n name: joinTableName,\n joinColumn: joinTable.inverseJoinColumn,\n inverseJoinColumn: joinTable.joinColumn,\n pivotColumns: joinTable.pivotColumns,\n } as any;\n\n if (isManyToAny(attribute)) {\n inverseAttribute.joinTable.orderColumnName = inverseOrderColumnName;\n inverseAttribute.joinTable.orderBy = { [inverseOrderColumnName]: 'asc' };\n }\n if (isAnyToMany(attribute)) {\n inverseAttribute.joinTable.inverseOrderColumnName = orderColumnName;\n }\n }\n};\n\n/**\n * Creates a relation metadata\n */\nexport const createRelation = (\n attributeName: string,\n attribute: RelationalAttribute,\n meta: Meta,\n metadata: Metadata\n) => {\n switch (attribute.relation) {\n case 'oneToOne':\n return createOneToOne(attributeName, attribute, meta, metadata);\n case 'oneToMany':\n return createOneToMany(attributeName, attribute, meta, metadata);\n case 'manyToOne':\n return createManyToOne(attributeName, attribute, meta, metadata);\n case 'manyToMany':\n return createManyToMany(attributeName, attribute, meta, metadata);\n case 'morphToOne':\n return createMorphToOne(attributeName, attribute);\n case 'morphToMany':\n return createMorphToMany(attributeName, attribute, meta, metadata);\n case 'morphOne':\n return createMorphOne(attributeName, attribute, meta, metadata);\n case 'morphMany':\n return createMorphMany(attributeName, attribute, meta, metadata);\n default: {\n throw new Error(`Unknown relation`);\n }\n }\n};\n","import { cloneDeep, snakeCase } from 'lodash/fp';\nimport { identifiers } from '../utils/identifiers';\nimport * as types from '../utils/types';\nimport { createRelation } from './relations';\nimport type { Attribute, Model } from '../types';\nimport type { ForeignKey, Index } from '../schema/types';\nimport type { Action, SubscriberFn } from '../lifecycles';\n\nexport interface Meta extends Model {\n columnToAttribute: Record<string, string>;\n indexes: Index[];\n foreignKeys: ForeignKey[];\n lifecycles: Partial<Record<Action, SubscriberFn>>;\n}\n\nexport class Metadata extends Map<string, Meta> {\n // TODO: we expose the global identifiers in this way so that in the future we can instantiate our own\n // However, it should NOT be done until all the methods used by metadata can be part of this metadata object\n // and access this one; currently they all access the global identifiers directly.\n get identifiers() {\n return identifiers;\n }\n\n get(key: string): Meta {\n if (!super.has(key)) {\n throw new Error(`Metadata for \"${key}\" not found`);\n }\n\n return super.get(key) as Meta;\n }\n\n add(meta: Meta) {\n return this.set(meta.uid, meta);\n }\n\n /**\n * Validate the DB metadata, throwing an error if a duplicate DB table name is detected\n */\n validate() {\n const seenTables = new Map();\n for (const meta of this.values()) {\n if (seenTables.get(meta.tableName)) {\n throw new Error(\n `DB table \"${meta.tableName}\" already exists. Change the collectionName of the related content type.`\n );\n }\n seenTables.set(meta.tableName, true);\n }\n }\n\n loadModels(models: Model[]) {\n // init pass\n for (const model of cloneDeep(models ?? [])) {\n const tableName = identifiers.getTableName(model.tableName);\n this.add({\n ...model,\n tableName,\n attributes: {\n ...model.attributes,\n },\n lifecycles: model.lifecycles ?? {},\n indexes: model.indexes ?? [],\n foreignKeys: model.foreignKeys ?? [],\n columnToAttribute: {},\n });\n }\n\n // build compos / relations\n for (const meta of this.values()) {\n for (const [attributeName, attribute] of Object.entries(meta.attributes)) {\n try {\n if (attribute.unstable_virtual) {\n continue;\n }\n\n if (types.isRelationalAttribute(attribute)) {\n createRelation(attributeName, attribute, meta, this);\n continue;\n }\n\n createAttribute(attributeName, attribute);\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(\n `Error on attribute ${attributeName} in model ${meta.singularName}(${meta.uid}): ${error.message}`\n );\n }\n }\n }\n }\n\n for (const meta of this.values()) {\n const columnToAttribute = Object.keys(meta.attributes).reduce((acc, key) => {\n const attribute = meta.attributes[key];\n if ('columnName' in attribute) {\n return Object.assign(acc, { [attribute.columnName || key]: key });\n }\n\n return Object.assign(acc, { [key]: key });\n }, {});\n\n meta.columnToAttribute = columnToAttribute;\n }\n\n this.validate();\n }\n}\n\nconst createAttribute = (attributeName: string, attribute: Attribute) => {\n // if the attribute has already set its own column name, use that\n // this will prevent us from shortening a name twice\n if ('columnName' in attribute && attribute.columnName) {\n return;\n }\n\n const columnName = identifiers.getColumnName(snakeCase(attributeName));\n\n Object.assign(attribute, { columnName });\n};\n","import {\n isPolymorphic,\n isBidirectional,\n isAnyToOne,\n isOneToAny,\n hasOrderColumn,\n hasInverseOrderColumn,\n isManyToAny,\n} from './relations';\nimport { Metadata, Meta } from './metadata';\nimport type { Model } from '../types';\n\nexport type { Metadata, Meta };\nexport {\n isPolymorphic,\n isBidirectional,\n isAnyToOne,\n isOneToAny,\n hasOrderColumn,\n hasInverseOrderColumn,\n isManyToAny,\n};\n\n// TODO: check if there isn't an attribute with an id already\n/**\n * Create Metadata from models configurations\n */\nexport const createMetadata = (models: Model[]): Metadata => {\n const metadata = new Metadata();\n\n if (models.length) {\n metadata.loadModels(models);\n }\n\n return metadata;\n};\n","export default class Field {\n config: unknown;\n\n constructor(config: unknown) {\n this.config = config;\n }\n\n toDB(value: unknown) {\n return value;\n }\n\n fromDB(value: unknown) {\n return value;\n }\n}\n","import { toString } from 'lodash/fp';\nimport Field from './field';\n\nexport default class StringField extends Field {\n toDB(value: unknown) {\n return toString(value);\n }\n\n fromDB(value: unknown) {\n return toString(value);\n }\n}\n","import Field from './field';\n\nexport default class JSONField extends Field {\n toDB(value: unknown) {\n if (value == null) {\n return null;\n }\n\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n\n return value;\n }\n\n fromDB(value: unknown) {\n try {\n if (typeof value === 'string') {\n const parsedValue = JSON.parse(value);\n\n /**\n * On Strapi 5 until 5.0.0-rc.7, the values were accidentally stringified twice when saved,\n * so in those cases we need to parse them twice to retrieve the actual value.\n */\n if (typeof parsedValue === 'string') {\n return JSON.parse(parsedValue);\n }\n\n return parsedValue;\n }\n } catch (error) {\n // Just return the value if it's not a valid JSON string\n return value;\n }\n\n return value;\n }\n}\n","import StringField from './string';\n\nexport default class BigIntegerField extends StringField {}\n","import { toNumber } from 'lodash/fp';\nimport Field from './field';\n\nexport default class NumberField extends Field {\n toDB(value: unknown) {\n const numberValue = toNumber(value);\n\n if (Number.isNaN(numberValue)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return numberValue;\n }\n\n fromDB(value: unknown) {\n return toNumber(value);\n }\n}\n","import { padCharsEnd, isString, toString } from 'lodash/fp';\nimport * as dateFns from 'date-fns';\n\nimport { InvalidDateTimeError, InvalidDateError, InvalidTimeError } from '../../errors';\n\nconst isDate = (value: unknown): value is Date => {\n return dateFns.isDate(value);\n};\n\nconst DATE_REGEX = /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;\nconst PARTIAL_DATE_REGEX = /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])/g;\nconst TIME_REGEX = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]{1,3})?$/;\n\nexport const parseDateTimeOrTimestamp = (value: unknown): Date => {\n if (isDate(value)) {\n return value;\n }\n\n try {\n const date = dateFns.parseISO(toString(value));\n if (dateFns.isValid(date)) {\n return date;\n }\n\n const milliUnixDate = dateFns.parse(toString(value), 'T', new Date());\n if (dateFns.isValid(milliUnixDate)) {\n return milliUnixDate;\n }\n\n throw new InvalidDateTimeError(`Invalid format, expected a timestamp or an ISO date`);\n } catch (error) {\n throw new InvalidDateTimeError(`Invalid format, expected a timestamp or an ISO date`);\n }\n};\n\nexport const parseDate = (value: unknown) => {\n if (isDate(value)) {\n return dateFns.format(value, 'yyyy-MM-dd');\n }\n\n const found = isString(value) ? value.match(PARTIAL_DATE_REGEX) || [] : [];\n const extractedValue = found[0];\n\n if (extractedValue && !DATE_REGEX.test(toString(value))) {\n // TODO V5: throw an error when format yyyy-MM-dd is not respected\n // throw new InvalidDateError(`Invalid format, expected yyyy-MM-dd`);\n process.emitWarning(\n `[deprecated] Using a date format other than YYYY-MM-DD will be removed in future versions. Date received: ${value}. Date stored: ${extractedValue}.`\n );\n }\n\n if (!extractedValue) {\n throw new InvalidDateError(`Invalid format, expected yyyy-MM-dd`);\n }\n\n const date = dateFns.parseISO(extractedValue);\n if (!dateFns.isValid(date)) {\n throw new InvalidDateError(`Invalid date`);\n }\n\n return extractedValue;\n};\n\nexport const parseTime = (value: unknown) => {\n if (isDate(value)) {\n return dateFns.format(value, 'HH:mm:ss.SSS');\n }\n\n if (typeof value !== 'string') {\n throw new InvalidTimeError(`Expected a string, got a ${typeof value}`);\n }\n\n const result = value.match(TIME_REGEX);\n\n if (result === null) {\n throw new InvalidTimeError('Invalid time format, expected HH:mm:ss.SSS');\n }\n\n const [, hours, minutes, seconds, fraction = '.000'] = result;\n const fractionPart = padCharsEnd('0', 3, fraction.slice(1));\n\n return `${hours}:${minutes}:${seconds}.${fractionPart}`;\n};\n","import { parseDate } from './shared/parsers';\nimport Field from './field';\n\nexport default class DateField extends Field {\n toDB(value: unknown) {\n return parseDate(value);\n }\n\n fromDB(value: unknown) {\n return value;\n }\n}\n","import { parseTime } from './shared/parsers';\nimport Field from './field';\n\nexport default class TimeField extends Field {\n toDB(value: unknown) {\n return parseTime(value);\n }\n\n fromDB(value: unknown) {\n // make sure that's a string with valid format ?\n return value;\n }\n}\n","import * as dateFns from 'date-fns';\n\nimport { parseDateTimeOrTimestamp } from './shared/parsers';\nimport Field from './field';\n\nexport default class DatetimeField extends Field {\n toDB(value: unknown) {\n return parseDateTimeOrTimestamp(value);\n }\n\n fromDB(value: unknown) {\n const cast = new Date(value as any);\n return dateFns.isValid(cast) ? cast.toISOString() : null;\n }\n}\n","import * as dateFns from 'date-fns';\n\nimport { parseDateTimeOrTimestamp } from './shared/parsers';\nimport Field from './field';\n\nexport default class TimestampField extends Field {\n toDB(value: unknown) {\n return parseDateTimeOrTimestamp(value);\n }\n\n fromDB(value: unknown) {\n const cast = new Date(value as any);\n return dateFns.isValid(cast) ? dateFns.format(cast, 'T') : null;\n }\n}\n","import { toString } from 'lodash/fp';\nimport Field from './field';\n\nfunction isStringOrNumber(value: unknown): value is string | number {\n return typeof value === 'string' || typeof value === 'number';\n}\n\nexport default class BooleanField extends Field {\n toDB(value: unknown) {\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (isStringOrNumber(value) && ['true', 't', '1', 1].includes(value)) {\n return true;\n }\n\n if (isStringOrNumber(value) && ['false', 'f', '0', 0].includes(value)) {\n return false;\n }\n\n return Boolean(value);\n }\n\n fromDB(value: unknown) {\n if (typeof value === 'boolean') {\n return value;\n }\n\n const strVal = toString(value);\n\n if (strVal === '1') {\n return true;\n }\n if (strVal === '0') {\n return false;\n }\n return null;\n }\n}\n","import _ from 'lodash/fp';\n\nimport Field from './field';\nimport StringField from './string';\nimport JSONField from './json';\nimport BigIntegerField from './biginteger';\nimport NumberField from './number';\nimport DateField from './date';\nimport TimeField from './time';\nimport DatetimeField from './datetime';\nimport TimestampField from './timestamp';\nimport BooleanField from './boolean';\n\nimport type { Attribute } from '../types';\n\nconst typeToFieldMap: Record<string, typeof Field> = {\n increments: Field,\n password: StringField,\n email: StringField,\n string: StringField,\n uid: StringField,\n richtext: StringField,\n text: StringField,\n enumeration: StringField,\n json: JSONField,\n biginteger: BigIntegerField,\n integer: NumberField,\n float: NumberField,\n decimal: NumberField,\n date: DateField,\n time: TimeField,\n datetime: DatetimeField,\n timestamp: TimestampField,\n boolean: BooleanField,\n blocks: JSONField,\n};\n\nexport const createField = (attribute: Attribute): Field => {\n const { type } = attribute;\n\n if (_.has(type, typeToFieldMap)) {\n return new typeToFieldMap[type]({});\n }\n\n throw new Error(`Undefined field for type ${type}`);\n};\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { Knex } from 'knex';\n\nexport type Callback = (...args: any[]) => Promise<any> | any;\n\nexport interface TransactionObject {\n commit: () => Promise<void>;\n rollback: () => Promise<void>;\n get: () => Knex.Transaction;\n}\nexport interface Store {\n trx: Knex.Transaction | null;\n commitCallbacks: Callback[];\n rollbackCallbacks: Callback[];\n}\n\nconst storage = new AsyncLocalStorage<Store>();\n\nconst transactionCtx = {\n async run<TCallback extends Callback>(trx: Knex.Transaction, cb: TCallback) {\n const store = storage.getStore();\n return storage.run<ReturnType<TCallback>, void[]>(\n {\n trx,\n // Fill with existing callbacks if nesting transactions\n commitCallbacks: store?.commitCallbacks || [],\n rollbackCallbacks: store?.rollbackCallbacks || [],\n },\n cb\n );\n },\n\n get() {\n const store = storage.getStore();\n return store?.trx;\n },\n\n async commit(trx: Knex.Transaction) {\n const store = storage.getStore();\n\n // Clear transaction from store\n if (store?.trx) {\n store.trx = null;\n }\n\n // Commit transaction\n await trx.commit();\n\n if (!store?.commitCallbacks.length) {\n return;\n }\n\n // Run callbacks\n store.commitCallbacks.forEach((cb) => cb());\n store.commitCallbacks = [];\n },\n\n async rollback(trx: Knex.Transaction) {\n const store = storage.getStore();\n\n // Clear transaction from store\n if (store?.trx) {\n store.trx = null;\n }\n\n // Rollback transaction\n await trx.rollback();\n\n if (!store?.rollbackCallbacks.length) {\n return;\n }\n\n // Run callbacks\n store.rollbackCallbacks.forEach((cb) => cb());\n store.rollbackCallbacks = [];\n },\n\n onCommit(cb: Callback) {\n const store = storage.getStore();\n if (store?.commitCallbacks) {\n store.commitCallbacks.push(cb);\n }\n },\n\n onRollback(cb: Callback) {\n const store = storage.getStore();\n if (store?.rollbackCallbacks) {\n store.rollbackCallbacks.push(cb);\n }\n },\n};\n\nexport { transactionCtx };\n","import type { Knex } from 'knex';\n\nimport KnexBuilder from 'knex/lib/query/querybuilder';\nimport KnexRaw from 'knex/lib/raw';\n\nimport type { Database } from '..';\n\n/**\n * @internal\n */\nexport function isKnexQuery(value: unknown): value is Knex.Raw | Knex.QueryBuilder {\n return value instanceof KnexBuilder || value instanceof KnexRaw;\n}\n\n/**\n * Adds the name of the schema to the table name if the schema was defined by the user.\n * Users can set the db schema only for Postgres in strapi database config.\n */\nexport const addSchema = (db: Database, tableName: string): string => {\n const schemaName = db.getSchemaName();\n return schemaName ? `${schemaName}.${tableName}` : tableName;\n};\n","import _ from 'lodash/fp';\n\nimport * as types from '../../utils/types';\nimport { createField } from '../../fields';\n\nimport type { Meta } from '../../metadata';\n\ntype Row = Record<string, unknown> | null;\nexport type Rec = Record<string, unknown> | null;\n\nconst fromSingleRow = (meta: Meta, row: Row): Rec => {\n const { attributes } = meta;\n\n if (_.isNil(row)) {\n return null;\n }\n\n const obj: Rec = {};\n\n for (const column in row) {\n if (!_.has(column, meta.columnToAttribute)) {\n continue;\n }\n\n const attributeName = meta.columnToAttribute[column];\n const attribute = attributes[attributeName];\n\n if (types.isScalar(attribute.type)) {\n const field = createField(attribute);\n\n const val = row[column] === null ? null : field.fromDB(row[column]);\n\n obj[attributeName] = val;\n }\n\n if (types.isRelation(attribute.type)) {\n obj[attributeName] = row[column];\n }\n }\n\n return obj;\n};\n\nconst fromRow = (meta: Meta, row: Row | Row[] | undefined) => {\n if (_.isNil(row)) {\n return null;\n }\n\n if (Array.isArray(row)) {\n return row.map((singleRow) => fromSingleRow(meta, singleRow));\n }\n\n return fromSingleRow(meta, row);\n};\n\nconst toSingleRow = (meta: Meta, data: Rec = {}): Row => {\n if (_.isNil(data)) {\n return data;\n }\n\n const { attributes } = meta;\n\n for (const key of Object.keys(data)) {\n const attribute = attributes[key];\n\n if (\n !attribute ||\n !('columnName' in attribute) ||\n !attribute.columnName ||\n attribute.columnName === key\n ) {\n continue;\n }\n\n data[attribute.columnName] = data[key];\n delete data[key];\n }\n\n return data;\n};\n\nfunction toRow<TData extends Rec | Rec[] | null>(\n meta: Meta,\n data: TData\n): TData extends null ? null : TData extends Rec[] ? Row[] : Rec;\nfunction toRow(meta: Meta, data: Rec | Rec[] | null): Row | Row[] | null {\n if (_.isNil(data)) {\n return data;\n }\n\n if (_.isArray(data)) {\n return data.map((datum) => toSingleRow(meta, datum));\n }\n\n return toSingleRow(meta, data);\n}\n\nconst toColumnName = (meta: Meta, name: null | string) => {\n if (!name) {\n throw new Error('Name cannot be null');\n }\n\n const attribute = meta.attributes[name];\n\n if (!attribute) {\n return name;\n }\n\n return ('columnName' in attribute && attribute.columnName) || name;\n};\n\nexport { toRow, fromRow, toColumnName };\n","import _ from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport * as types from '../../utils/types';\nimport { toColumnName } from './transform';\nimport type { Ctx } from '../types';\n\nexport const applySearch = (knex: Knex.QueryBuilder, query: string, ctx: Ctx) => {\n const { qb, uid, db } = ctx;\n const meta = db.metadata.get(uid);\n\n const { attributes } = meta;\n\n const searchColumns = ['id'];\n\n const stringColumns = Object.keys(attributes).filter((attributeName) => {\n const attribute = attributes[attributeName];\n return (\n types.isScalarAttribute(attribute) &&\n types.isString(attribute.type) &&\n attribute.searchable !== false\n );\n });\n\n searchColumns.push(...stringColumns);\n\n if (!_.isNaN(_.toNumber(query))) {\n const numberColumns = Object.keys(attributes).filter((attributeName) => {\n const attribute = attributes[attributeName];\n return (\n types.isScalarAttribute(attribute) &&\n types.isNumber(attribute.type) &&\n attribute.searchable !== false\n );\n });\n\n searchColumns.push(...numberColumns);\n }\n\n switch (db.dialect.client) {\n case 'postgres': {\n searchColumns.forEach((attr) => {\n const columnName = toColumnName(meta, attr);\n return knex.orWhereRaw(`??::text ILIKE ?`, [\n qb.aliasColumn(columnName),\n `%${escapeQuery(query, '*%\\\\')}%`,\n ]);\n });\n\n break;\n }\n case 'sqlite': {\n searchColumns.forEach((attr) => {\n const columnName = toColumnName(meta, attr);\n return knex.orWhereRaw(`?? LIKE ? ESCAPE '\\\\'`, [\n qb.aliasColumn(columnName),\n `%${escapeQuery(query, '*%\\\\')}%`,\n ]);\n });\n break;\n }\n case 'mysql': {\n searchColumns.forEach((attr) => {\n const columnName = toColumnName(meta, attr);\n return knex.orWhereRaw(`?? LIKE ?`, [\n qb.aliasColumn(columnName),\n `%${escapeQuery(query, '*%\\\\')}%`,\n ]);\n });\n break;\n }\n default: {\n // do nothing\n }\n }\n};\n\nconst escapeQuery = (query: string, charsToEscape: string, escapeChar = '\\\\') => {\n return query\n .split('')\n .reduce(\n (escapedQuery, char) =>\n charsToEscape.includes(char)\n ? `${escapedQuery}${escapeChar}${char}`\n : `${escapedQuery}${char}`,\n ''\n );\n};\n","import type { Knex } from 'knex';\nimport type { Ctx } from '../types';\n\nexport interface Join {\n method?: 'leftJoin' | 'innerJoin';\n alias: string;\n referencedTable: string;\n referencedColumn: string;\n rootColumn: string;\n rootTable?: string;\n on?: Record<string, any>;\n orderBy?: Record<string, 'asc' | 'desc'>;\n}\n\ninterface JoinOptions {\n alias: string;\n refAlias?: string;\n attributeName: string;\n attribute: any;\n}\n\ninterface PivotJoinOptions {\n alias: string;\n refAlias?: string;\n joinTable: any;\n targetMeta: any;\n}\n\nconst createPivotJoin = (\n ctx: Ctx,\n { alias, refAlias, joinTable, targetMeta }: PivotJoinOptions\n) => {\n const { qb } = ctx;\n const joinAlias = qb.getAlias();\n qb.join({\n alias: joinAlias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.joinColumn.name,\n rootColumn: joinTable.joinColumn.referencedColumn,\n rootTable: alias,\n on: joinTable.on,\n });\n\n const subAlias = refAlias || qb.getAlias();\n qb.join({\n alias: subAlias,\n referencedTable: targetMeta.tableName,\n referencedColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootColumn: joinTable.inverseJoinColumn.name,\n rootTable: joinAlias,\n });\n\n return subAlias;\n};\n\nconst createJoin = (ctx: Ctx, { alias, refAlias, attributeName, attribute }: JoinOptions) => {\n const { db, qb, uid } = ctx;\n\n if (attribute.type !== 'relation') {\n throw new Error(`Cannot join on non relational field ${attributeName}`);\n }\n\n const targetMeta = db.metadata.get(attribute.target);\n\n if (['morphOne', 'morphMany'].includes(attribute.relation)) {\n const targetAttribute = targetMeta.attributes[attribute.morphBy];\n\n // @ts-expect-error - morphBy is not defined on the attribute\n const { joinTable, morphColumn } = targetAttribute;\n\n if (morphColumn) {\n const subAlias = refAlias || qb.getAlias();\n\n qb.join({\n alias: subAlias,\n referencedTable: targetMeta.tableName,\n referencedColumn: morphColumn.idColumn.name,\n rootColumn: morphColumn.idColumn.referencedColumn,\n rootTable: alias,\n on: {\n [morphColumn.typeColumn.name]: uid,\n ...morphColumn.on,\n },\n });\n\n return subAlias;\n }\n\n if (joinTable) {\n const joinAlias = qb.getAlias();\n\n qb.join({\n alias: joinAlias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.morphColumn.idColumn.name,\n rootColumn: joinTable.morphColumn.idColumn.referencedColumn,\n rootTable: alias,\n on: {\n [joinTable.morphColumn.typeColumn.name]: uid,\n field: attributeName,\n },\n });\n\n const subAlias = refAlias || qb.getAlias();\n\n qb.join({\n alias: subAlias,\n referencedTable: targetMeta.tableName,\n referencedColumn: joinTable.joinColumn.referencedColumn,\n rootColumn: joinTable.joinColumn.name,\n rootTable: joinAlias,\n });\n\n return subAlias;\n }\n\n return alias;\n }\n\n const { joinColumn } = attribute;\n\n if (joinColumn) {\n const subAlias = refAlias || qb.getAlias();\n qb.join({\n alias: subAlias,\n referencedTable: targetMeta.tableName,\n referencedColumn: joinColumn.referencedColumn,\n rootColumn: joinColumn.name,\n rootTable: alias,\n });\n return subAlias;\n }\n\n const { joinTable } = attribute;\n if (joinTable) {\n return createPivotJoin(ctx, { alias, refAlias, joinTable, targetMeta });\n }\n\n return alias;\n};\n\n// TODO: toColumnName for orderBy & on\nconst applyJoin = (qb: Knex.QueryBuilder, join: Join) => {\n const {\n method = 'leftJoin',\n alias,\n referencedTable,\n referencedColumn,\n rootColumn,\n // FIXME: qb.alias can't exist here\n rootTable, // = qb.alias\n on,\n orderBy,\n } = join;\n\n qb[method](`${referencedTable} as ${alias}`, (inner) => {\n inner.on(`${rootTable}.${rootColumn}`, `${alias}.${referencedColumn}`);\n\n if (on) {\n for (const key of Object.keys(on)) {\n inner.onVal(`${alias}.${key}`, on[key]);\n }\n }\n });\n\n if (orderBy) {\n Object.keys(orderBy).forEach((column) => {\n const direction = orderBy[column];\n qb.orderBy(`${alias}.${column}`, direction);\n });\n }\n};\n\nconst applyJoins = (qb: Knex.QueryBuilder, joins: Join[]) => {\n return joins.forEach((join) => applyJoin(qb, join));\n};\n\nexport { createJoin, createPivotJoin, applyJoins, applyJoin };\n","import _ from 'lodash/fp';\nimport knex from 'knex';\n\nimport * as types from '../../utils/types';\nimport { createJoin } from './join';\nimport { toColumnName } from './transform';\n\nimport type { Ctx } from '../types';\n\ntype OrderByCtx = Ctx & { alias?: string };\ntype OrderBy = string | { [key: string]: 'asc' | 'desc' } | OrderBy[];\ntype OrderByValue = { column: string; order?: 'asc' | 'desc' };\n\nconst COL_STRAPI_ROW_NUMBER = '__strapi_row_number';\nconst COL_STRAPI_ORDER_BY_PREFIX = '__strapi_order_by';\n\nexport const processOrderBy = (orderBy: OrderBy, ctx: OrderByCtx): OrderByValue[] => {\n const { db, uid, qb, alias } = ctx;\n const meta = db.metadata.get(uid);\n const { attributes } = meta;\n\n if (typeof orderBy === 'string') {\n const attribute = attributes[orderBy];\n\n if (!attribute) {\n throw new Error(`Attribute ${orderBy} not found on model ${uid}`);\n }\n\n const columnName = toColumnName(meta, orderBy);\n\n return [{ column: qb.aliasColumn(columnName, alias) }];\n }\n\n if (Array.isArray(orderBy)) {\n return orderBy.flatMap((value) => processOrderBy(value, ctx));\n }\n\n if (_.isPlainObject(orderBy)) {\n return Object.entries(orderBy).flatMap(([key, direction]) => {\n const value = orderBy[key];\n const attribute = attributes[key];\n\n if (!attribute) {\n throw new Error(`Attribute ${key} not found on model ${uid}`);\n }\n\n if (types.isScalar(attribute.type)) {\n const columnName = toColumnName(meta, key);\n\n return { column: qb.aliasColumn(columnName, alias), order: direction };\n }\n\n if (attribute.type === 'relation' && 'target' in attribute) {\n const subAlias = createJoin(ctx, {\n alias: alias || qb.alias,\n attributeName: key,\n attribute,\n });\n\n return processOrderBy(value, {\n db,\n qb,\n alias: subAlias,\n uid: attribute.target,\n });\n }\n\n throw new Error(`You cannot order on ${attribute.type} types`);\n });\n }\n\n throw new Error('Invalid orderBy syntax');\n};\n\nexport const getStrapiOrderColumnAlias = (column: string) => {\n const trimmedColumnName = column.replaceAll('.', '_');\n\n return `${COL_STRAPI_ORDER_BY_PREFIX}__${trimmedColumnName}`;\n};\n\n/**\n * Wraps the original Knex query with deep sorting functionality.\n *\n * The function takes an original query and an OrderByCtx object as parameters and returns a new Knex query with deep sorting applied.\n */\nexport const wrapWithDeepSort = (originalQuery: knex.Knex.QueryBuilder, ctx: OrderByCtx) => {\n /**\n * Notes:\n * - The generated query has the following flow: baseQuery (filtered unsorted data) -> T (partitioned/sorted data) --> resultQuery (distinct, paginated, sorted data)\n * - Pagination and selection are transferred from the original query to the outer one to avoid pruning rows too early\n * - Filtering (where) has to be done in the deepest sub query possible to avoid processing invalid rows and corrupting the final results\n * - We assume that all necessary joins are done in the original query (`originalQuery`), and every needed column is available with the right name and alias.\n */\n\n const { db, qb, uid } = ctx;\n\n const { tableName } = db.metadata.get(uid);\n\n // The orderBy is cloned to avoid unwanted mutations of the original object\n const orderBy = _.cloneDeep<OrderByValue[]>(qb.state.orderBy);\n\n // 0. Init a new Knex query instance (referenced as resultQuery) using the DB connection\n // The connection reuse the original table name (aliased if needed)\n const resultQueryAlias = qb.getAlias();\n const aliasedTableName = qb.mustUseAlias() ? alias(resultQueryAlias, tableName) : tableName;\n\n const resultQuery = db.getConnection(aliasedTableName);\n\n // 1. Clone the original query to create the sub-query (referenced as baseQuery) and avoid any mutation on the initial object\n const baseQuery = originalQuery.clone();\n const baseQueryAlias = qb.getAlias();\n\n // Clear unwanted statements from the sub-query 'baseQuery'\n // Note: `first()` is cleared through the combination of `baseQuery.clear('limit')` and calling `baseQuery.select(...)` again\n // Note: Those statements will be re-applied when duplicates are removed from the final selection\n baseQuery\n // Columns selection\n .clear('select')\n // Pagination and sorting\n .clear('order')\n .clear('limit')\n .clear('offset');\n\n // Override the initial select and return only the columns needed for the partitioning.\n baseQuery.select(\n // Always select the row id for future manipulation\n prefix(qb.alias, 'id'),\n // Select every column used in an order by clause, but alias it for future reference\n // i.e. if t2.name is present in an order by clause:\n // Then, \"t2.name\" will become \"t2.name as __strapi_order_by__t2_name\"\n ...orderBy.map((orderByClause) =>\n alias(getStrapiOrderColumnAlias(orderByClause.column), orderByClause.column)\n )\n );\n\n // 2. Create a sub-query callback to extract and sort the partitions using row number\n const partitionedQueryAlias = qb.getAlias();\n\n const selectRowsAsNumberedPartitions = (partitionedQuery: knex.Knex.QueryBuilder) => {\n // Transform order by clause to their alias to reference them from baseQuery\n const prefixedOrderBy = orderBy.map((orderByClause) => ({\n column: prefix(baseQueryAlias, getStrapiOrderColumnAlias(orderByClause.column)),\n order: orderByClause.order,\n }));\n\n // partitionedQuery select must contain every column used for sorting\n const orderByColumns = prefixedOrderBy.map<string>(_.prop('column'));\n\n partitionedQuery\n .select(\n // Always select baseQuery.id\n prefix(baseQueryAlias, 'id'),\n // Sort columns\n ...orderByColumns\n )\n // The row number is used to assign an index to every row in every partition\n .rowNumber(COL_STRAPI_ROW_NUMBER, (subQuery) => {\n for (const orderByClause of prefixedOrderBy) {\n subQuery.orderBy(orderByClause.column, orderByClause.order, 'last');\n }\n\n // And each partition/group is created based on baseQuery.id\n subQuery.partitionBy(`${baseQueryAlias}.id`);\n })\n .from(baseQuery.as(baseQueryAlias))\n .as(partitionedQueryAlias);\n };\n\n // 3. Create the final resultQuery query, that select and sort the wanted data using T\n\n const originalSelect = _.difference(\n qb.state.select,\n // Remove order by columns from the initial select\n qb.state.orderBy.map(_.prop('column'))\n )\n // Alias everything in resultQuery\n .map(prefix(resultQueryAlias));\n\n resultQuery\n .select(originalSelect)\n // Join T to resultQuery to access sorted data\n // Notes:\n // - Only select the first row for each partition\n // - Since we're applying the \"where\" statement directly on baseQuery (and not on resultQuery), we're using an inner join to avoid unwanted rows\n .innerJoin(selectRowsAsNumberedPartitions, function () {\n this\n // Only select rows that are returned by T\n .on(`${partitionedQueryAlias}.id`, `${resultQueryAlias}.id`)\n // By only selecting the rows number equal to 1, we make sure we don't have duplicate, and that\n // we're selecting rows in the correct order amongst the groups created by the \"partition by\"\n .andOnVal(`${partitionedQueryAlias}.${COL_STRAPI_ROW_NUMBER}`, '=', 1);\n });\n\n // Re-apply pagination params\n\n if (qb.state.limit) {\n resultQuery.limit(qb.state.limit);\n }\n\n if (qb.state.offset) {\n resultQuery.offset(qb.state.offset);\n }\n\n if (qb.state.first) {\n resultQuery.first();\n }\n\n // Re-apply the sort using T values\n resultQuery.orderBy([\n // Transform \"order by\" clause to their T alias and prefix them with T alias\n ...orderBy.map((orderByClause) => ({\n column: prefix(partitionedQueryAlias, getStrapiOrderColumnAlias(orderByClause.column)),\n order: orderByClause.order,\n })),\n // Add T.id to the order by clause to get consistent results in case several rows have the exact same order\n { column: `${partitionedQueryAlias}.id`, order: 'asc' },\n ]);\n\n return resultQuery;\n};\n\n// Utils\nconst alias = _.curry((alias: string, value: string) => `${value} as ${alias}`);\nconst prefix = _.curry((prefix: string, value: string) => `${prefix}.${value}`);\n","import _ from 'lodash/fp';\n\nimport { fromRow } from '../transform';\nimport type { QueryBuilder } from '../../query-builder';\nimport type { Database } from '../../..';\nimport type { Meta } from '../../../metadata';\nimport { ID, RelationalAttribute, Relation } from '../../../types';\n\n// We must select the join column id, however whatever it is named will overwrite an attribute of the same name\n// Therefore, we will prefix with something unlikely to conflict with a user attribute\n// TODO: ...and completely restrict the strapi_ prefix for an attribute name in the future\nconst joinColPrefix = '__strapi' as const;\n\ntype Context = {\n db: Database;\n qb: QueryBuilder;\n uid: string;\n};\n\ntype Input<TRelationAttribute extends RelationalAttribute = RelationalAttribute> = {\n attribute: TRelationAttribute;\n attributeName: string;\n results: Row[];\n populateValue: {\n on?: Record<string, Record<string, unknown>>;\n } & Record<string, unknown>;\n\n isCount: boolean;\n};\n\ntype InputWithTarget<TRelationAttribute extends RelationalAttribute = RelationalAttribute> =\n Input<TRelationAttribute> & {\n targetMeta: Meta;\n };\n\ntype MorphIdMap = Record<string, Record<ID, Row[]>>;\n\ntype Row = Record<string, unknown>;\n\n/**\n * Populate oneToOne and manyToOne relation\n * @param {*} input\n * @param {*} ctx\n * @returns\n */\nconst XtoOne = async (\n input: InputWithTarget<Relation.OneToOne | Relation.ManyToOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const { name: joinColumnName, referencedColumn: referencedColumnName } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({ [referencedColumnName]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row[]>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[joinColumnName] as string]));\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: joinTable.orderBy,\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(_.first(map[result[referencedColumnName] as string]));\n });\n }\n};\n\nconst oneToMany = async (input: InputWithTarget<Relation.OneToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db, qb } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n if ('joinColumn' in attribute && attribute.joinColumn) {\n const {\n name: joinColumnName,\n referencedColumn: referencedColumnName,\n on,\n } = attribute.joinColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(targetMeta.uid)\n .init(populateValue)\n .addSelect(`${qb.alias}.${referencedColumnName}`)\n .where({\n [referencedColumnName]: referencedValues,\n ...(on && typeof on === 'function' ? on({ populateValue, results }) : {}),\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(referencedColumnName)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[joinColumnName] as string] || []);\n });\n\n return;\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n const { joinTable } = attribute;\n\n const qb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = qb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n })\n .select([joinColSelect, qb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColRenameAs]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: qb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((r) => {\n r[attributeName] = fromTargetRow(map[r[referencedColumnName] as string] || []);\n });\n }\n};\n\nconst manyToMany = async (input: InputWithTarget<Relation.ManyToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue, targetMeta, isCount } = input;\n const { db } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { joinTable } = attribute;\n\n const populateQb = db.entityManager.createQueryBuilder(targetMeta.uid);\n\n const { name: joinColumnName, referencedColumn: referencedColumnName } = joinTable.joinColumn;\n\n const alias = populateQb.getAlias();\n const joinColAlias = `${alias}.${joinColumnName}`;\n const joinColRenameAs = `${joinColPrefix}${joinColumnName}`;\n const joinColSelect = `${joinColAlias} as ${joinColRenameAs}`;\n\n const referencedValues = _.uniq(\n results.map((r) => r[referencedColumnName]).filter((value) => !_.isNil(value))\n );\n\n if (isCount) {\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = { count: 0 };\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n })\n .select([joinColAlias, populateQb.raw('count(*) AS count')])\n .where({ [joinColAlias]: referencedValues })\n .groupBy(joinColAlias)\n .execute<Array<{ count: number } & { [key: string]: string }>>({ mapResults: false });\n\n const map = rows.reduce(\n (map, row) => {\n map[row[joinColumnName]] = { count: Number(row.count) };\n return map;\n },\n {} as Record<string, { count: number }>\n );\n\n results.forEach((result) => {\n result[attributeName] = map[result[referencedColumnName] as string] || { count: 0 };\n });\n\n return;\n }\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = [];\n });\n return;\n }\n\n const rows = await populateQb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinTable.inverseJoinColumn.name,\n rootColumn: joinTable.inverseJoinColumn.referencedColumn,\n rootTable: populateQb.alias,\n on: joinTable.on,\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect(joinColSelect)\n .where({ [joinColAlias]: referencedValues })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(joinColRenameAs)(rows);\n\n results.forEach((result) => {\n result[attributeName] = fromTargetRow(map[result[referencedColumnName] as string] || []);\n });\n};\n\nconst morphX = async (\n input: InputWithTarget<Relation.MorphMany | Relation.MorphOne>,\n ctx: Context\n) => {\n const { attribute, attributeName, results, populateValue, targetMeta } = input;\n const { db, uid } = ctx;\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = null;\n });\n\n return;\n }\n\n const rows = await db.entityManager\n .createQueryBuilder(target)\n .init(populateValue)\n // .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.name]: referencedValues, [typeColumn.name]: uid })\n .execute<Row>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n } else if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToMany') {\n const { joinTable } = targetAttribute;\n\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n const referencedValues = _.uniq(\n results.map((r) => r[idColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n if (_.isEmpty(referencedValues)) {\n results.forEach((result) => {\n result[attributeName] = attribute.relation === 'morphOne' ? null : [];\n });\n\n return;\n }\n\n // find with join table\n const qb = db.entityManager.createQueryBuilder(target);\n\n const alias = qb.getAlias();\n\n const rows = await qb\n .init(populateValue)\n .join({\n alias,\n referencedTable: joinTable.name,\n referencedColumn: joinColumn.name,\n rootColumn: joinColumn.referencedColumn,\n rootTable: qb.alias,\n on: {\n ...(joinTable.on || {}),\n field: attributeName,\n },\n orderBy: _.mapValues((v) => populateValue.ordering || v, joinTable.orderBy),\n })\n .addSelect([`${alias}.${idColumn.name}`, `${alias}.${typeColumn.name}`])\n .where({\n [`${alias}.${idColumn.name}`]: referencedValues,\n [`${alias}.${typeColumn.name}`]: uid,\n })\n .execute<Row[]>({ mapResults: false });\n\n const map = _.groupBy<Row>(idColumn.name)(rows);\n\n results.forEach((result) => {\n const matchingRows = map[result[idColumn.referencedColumn] as string];\n\n const matchingValue =\n attribute.relation === 'morphOne' ? _.first(matchingRows) : matchingRows;\n\n result[attributeName] = fromTargetRow(matchingValue);\n });\n }\n};\n\nconst morphToMany = async (input: Input<Relation.MorphToMany>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n // find with join table\n const { joinTable } = attribute;\n\n const { joinColumn, morphColumn } = joinTable;\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n // fetch join table to create the ids map then do the same as morphToOne without the first\n\n const referencedValues = _.uniq(\n results.map((r) => r[joinColumn.referencedColumn]).filter((value) => !_.isNil(value))\n );\n\n const qb = db.entityManager.createQueryBuilder(joinTable.name);\n\n const joinRows = await qb\n .where({\n [joinColumn.name]: referencedValues,\n ...(joinTable.on || {}),\n // If the populateValue contains an \"on\" property,\n // only populate the types defined in it\n ...('on' in populateValue\n ? { [morphColumn.typeColumn.name]: Object.keys(populateValue.on ?? {}) }\n : {}),\n })\n .orderBy([joinColumn.name, 'order'])\n .execute<Row[]>({ mapResults: false });\n\n const joinMap = _.groupBy(joinColumn.name, joinRows);\n\n const idsByType = joinRows.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!_.has(typeValue, acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n\n continue;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n }\n\n results.forEach((result) => {\n const joinResults = joinMap[result[joinColumn.referencedColumn] as string] || [];\n\n const matchingRows = joinResults.flatMap((joinResult) => {\n const id = joinResult[idColumn.name] as ID;\n const type = joinResult[typeColumn.name] as string;\n\n const targetMeta = db.metadata.get(type);\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) => fromRow(targetMeta, rowOrRows);\n\n return (map[type][id] || []).map((row) => {\n return {\n [typeField]: type,\n ...fromTargetRow(row),\n };\n });\n });\n\n result[attributeName] = matchingRows;\n });\n};\n\nconst morphToOne = async (input: Input<Relation.MorphToOne>, ctx: Context) => {\n const { attribute, attributeName, results, populateValue } = input;\n const { db } = ctx;\n\n const { morphColumn } = attribute;\n const { idColumn, typeColumn } = morphColumn;\n\n // make a map for each type what ids to return\n // make a nested map per id\n\n const idsByType = results.reduce<Record<string, ID[]>>((acc, result) => {\n const idValue = result[morphColumn.idColumn.name] as ID;\n const typeValue = result[morphColumn.typeColumn.name] as string;\n\n if (!idValue || !typeValue) {\n return acc;\n }\n\n if (!(typeValue in acc)) {\n acc[typeValue] = [];\n }\n\n acc[typeValue].push(idValue);\n\n return acc;\n }, {});\n\n const map: MorphIdMap = {};\n const { on, ...typePopulate } = populateValue;\n\n for (const type of Object.keys(idsByType)) {\n const ids = idsByType[type];\n\n // type was removed but still in morph relation\n if (!db.metadata.get(type)) {\n map[type] = {};\n return;\n }\n\n const qb = db.entityManager.createQueryBuilder(type);\n\n const rows = await qb\n .init(on?.[type] ?? typePopulate)\n .addSelect(`${qb.alias}.${idColumn.referencedColumn}`)\n .where({ [idColumn.referencedColumn]: ids })\n .execute<Row[]>({ mapResults: false });\n\n map[type] = _.groupBy<Row>(idColumn.referencedColumn)(rows);\n }\n\n results.forEach((result) => {\n const id = result[idColumn.name] as ID;\n const type = result[typeColumn.name] as string;\n\n if (!type || !id) {\n result[attributeName] = null;\n return;\n }\n\n const matchingRows = map[type][id];\n\n const fromTargetRow = (rowOrRows: Row | Row[] | undefined) =>\n fromRow(db.metadata.get(type), rowOrRows);\n\n result[attributeName] = fromTargetRow(_.first(matchingRows));\n });\n};\n\n// TODO: Omit limit & offset to avoid needing a query per result to avoid making too many queries\nconst pickPopulateParams = (populate: Record<string, unknown>) => {\n const fieldsToPick = [\n 'select',\n 'count',\n 'where',\n 'populate',\n 'orderBy',\n 'filters',\n 'ordering',\n 'on',\n ];\n\n if (populate.count !== true) {\n fieldsToPick.push('limit', 'offset');\n }\n\n return _.pick(fieldsToPick, populate);\n};\n\nconst applyPopulate = async (results: Row[], populate: Record<string, any>, ctx: Context) => {\n const { db, uid, qb } = ctx;\n const meta = db.metadata.get(uid);\n\n if (_.isEmpty(results)) {\n return results;\n }\n\n for (const attributeName of Object.keys(populate)) {\n const attribute = meta.attributes[attributeName];\n\n if (attribute.type !== 'relation') {\n throw new Error(`Invalid populate attribute ${attributeName}`);\n }\n\n const populateValue = {\n filters: qb.state.filters,\n ...pickPopulateParams(populate[attributeName]),\n };\n\n const isCount = 'count' in populateValue && populateValue.count === true;\n\n switch (attribute.relation) {\n case 'oneToOne':\n case 'manyToOne': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await XtoOne(input, ctx);\n break;\n }\n case 'oneToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await oneToMany(input, ctx);\n break;\n }\n case 'manyToMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await manyToMany(input, ctx);\n break;\n }\n case 'morphOne':\n case 'morphMany': {\n const targetMeta = db.metadata.get(attribute.target);\n const input = { attribute, attributeName, results, populateValue, targetMeta, isCount };\n await morphX(input, ctx);\n break;\n }\n case 'morphToMany': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToMany(input, ctx);\n break;\n }\n case 'morphToOne': {\n const input = { attribute, attributeName, results, populateValue, isCount };\n await morphToOne(input, ctx);\n break;\n }\n default: {\n break;\n }\n }\n }\n};\n\nexport default applyPopulate;\n","import _ from 'lodash/fp';\n\nimport * as types from '../../../utils/types';\nimport type { Meta } from '../../../metadata';\nimport type { QueryBuilder } from '../../query-builder';\nimport type { Database } from '../../..';\n\nconst getRootLevelPopulate = (meta: Meta) => {\n const populate: PopulateMap = {};\n\n for (const attributeName of Object.keys(meta.attributes)) {\n const attribute = meta.attributes[attributeName];\n if (attribute.type === 'relation') {\n populate[attributeName] = true;\n }\n }\n\n return populate;\n};\n\ntype Context = {\n qb: QueryBuilder;\n db: Database;\n uid: string;\n};\n\ntype PopulateMap = {\n [key: string]:\n | true\n | {\n populate?: PopulateMap | true | string[];\n };\n};\n\n/**\n * Converts and prepares the query for populate\n *\n * @param {boolean|string[]|object} populate populate param\n * @param {object} ctx query context\n * @param {object} ctx.db database instance\n * @param {object} ctx.qb query builder instance\n * @param {string} ctx.uid model uid\n */\nconst processPopulate = (populate: unknown, ctx: Context) => {\n const { qb, db, uid } = ctx;\n const meta = db.metadata.get(uid);\n\n let populateMap: PopulateMap = {};\n\n if (populate === false || _.isNil(populate)) {\n return null;\n }\n\n if (populate === true) {\n populateMap = getRootLevelPopulate(meta);\n } else if (Array.isArray(populate)) {\n for (const key of populate) {\n const [root, ...rest] = key.split('.');\n\n if (rest.length > 0) {\n const subPopulate = rest.join('.');\n if (populateMap[root]) {\n const populateValue = populateMap[root];\n\n if (populateValue === true) {\n populateMap[root] = {\n populate: [subPopulate],\n };\n } else {\n populateValue.populate = [subPopulate].concat(populateValue.populate ?? []);\n }\n } else {\n populateMap[root] = {\n populate: [subPopulate],\n };\n }\n } else {\n populateMap[root] = populateMap[root] ? populateMap[root] : true;\n }\n }\n } else {\n populateMap = populate as PopulateMap;\n }\n\n if (!_.isPlainObject(populateMap)) {\n throw new Error('Populate must be an object');\n }\n\n const finalPopulate: PopulateMap = {};\n for (const key of Object.keys(populateMap)) {\n const attribute = meta.attributes[key];\n\n if (!attribute) {\n continue;\n }\n\n if (!types.isRelation(attribute.type)) {\n continue;\n }\n\n // Make sure to query the join column value if needed,\n // so that we can apply the populate later on\n if ('joinColumn' in attribute && attribute.joinColumn) {\n qb.addSelect(attribute.joinColumn.name);\n }\n\n // Make sure id is present for future populate queries\n if (_.has('id', meta.attributes)) {\n qb.addSelect('id');\n }\n\n finalPopulate[key] = populateMap[key];\n }\n\n return finalPopulate;\n};\n\nexport default processPopulate;\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { isArray, castArray, isPlainObject } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport { isOperator, isOperatorOfType } from '@strapi/utils';\nimport * as types from '../../utils/types';\nimport { createField } from '../../fields';\nimport { createJoin } from './join';\nimport { toColumnName } from './transform';\nimport { isKnexQuery } from '../../utils/knex';\n\nimport type { Ctx } from '../types';\nimport type { Attribute } from '../../types';\n\ntype WhereCtx = Ctx & { alias?: string; isGroupRoot?: boolean };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => isPlainObject(value);\n\nconst castValue = (value: unknown, attribute: Attribute | null) => {\n if (!attribute) {\n return value;\n }\n\n if (types.isScalar(attribute.type) && !isKnexQuery(value)) {\n const field = createField(attribute);\n\n return value === null ? null : field.toDB(value);\n }\n\n return value;\n};\n\nconst processSingleAttributeWhere = (\n attribute: Attribute | null,\n where: unknown,\n operator = '$eq'\n) => {\n if (!isRecord(where)) {\n if (isOperatorOfType('cast', operator)) {\n return castValue(where, attribute);\n }\n\n return where;\n }\n\n const filters: Record<string, unknown> = {};\n\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n if (!isOperatorOfType('where', key)) {\n throw new Error(`Undefined attribute level operator ${key}`);\n }\n\n filters[key] = processAttributeWhere(attribute, value, key);\n }\n\n return filters;\n};\n\nconst processAttributeWhere = (attribute: Attribute | null, where: unknown, operator = '$eq') => {\n if (isArray(where)) {\n return where.map((sub) => processSingleAttributeWhere(attribute, sub, operator));\n }\n\n return processSingleAttributeWhere(attribute, where, operator);\n};\n\nconst processNested = (where: unknown, ctx: WhereCtx) => {\n if (!isRecord(where)) {\n return where;\n }\n\n return processWhere(where, ctx);\n};\n\nconst processRelationWhere = (where: unknown, ctx: WhereCtx) => {\n const { qb, alias } = ctx;\n\n const idAlias = qb.aliasColumn('id', alias);\n if (!isRecord(where)) {\n return { [idAlias]: where };\n }\n\n const keys = Object.keys(where);\n const operatorKeys = keys.filter((key) => isOperator(key));\n\n if (operatorKeys.length > 0 && operatorKeys.length !== keys.length) {\n throw new Error(`Operator and non-operator keys cannot be mixed in a relation where clause`);\n }\n\n if (operatorKeys.length > 1) {\n throw new Error(\n `Only one operator key is allowed in a relation where clause, but found: ${operatorKeys}`\n );\n }\n\n if (operatorKeys.length === 1) {\n const operator = operatorKeys[0];\n\n if (isOperatorOfType('group', operator)) {\n return processWhere(where, ctx);\n }\n\n return { [idAlias]: { [operator]: processNested(where[operator], ctx) } };\n }\n\n return processWhere(where, ctx);\n};\n\n/**\n * Process where parameter\n */\nfunction processWhere(where: Record<string, unknown>, ctx: WhereCtx): Record<string, unknown>;\nfunction processWhere(where: Record<string, unknown>[], ctx: WhereCtx): Record<string, unknown>[];\nfunction processWhere(\n where: Record<string, unknown> | Record<string, unknown>[],\n ctx: WhereCtx\n): Record<string, unknown> | Record<string, unknown>[] {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return where.map((sub) => processWhere(sub, ctx));\n }\n\n const { db, uid, qb, alias } = ctx;\n const meta = db.metadata.get(uid);\n\n const filters: Record<string, unknown> = {};\n\n // for each key in where\n for (const key of Object.keys(where)) {\n const value = where[key];\n\n // if operator $and $or -> process recursively\n if (isOperatorOfType('group', key)) {\n if (!Array.isArray(value)) {\n throw new Error(`Operator ${key} must be an array`);\n }\n\n filters[key] = value.map((sub) => processNested(sub, ctx));\n continue;\n }\n\n if (key === '$not') {\n filters[key] = processNested(value, ctx);\n continue;\n }\n\n if (isOperatorOfType('where', key)) {\n throw new Error(\n `Only $and, $or and $not can only be used as root level operators. Found ${key}.`\n );\n }\n\n const attribute = meta.attributes[key];\n\n if (!attribute) {\n filters[qb.aliasColumn(key, alias)] = processAttributeWhere(null, value);\n continue;\n }\n\n if (types.isRelation(attribute.type) && 'target' in attribute) {\n // attribute\n const subAlias = createJoin(ctx, {\n alias: alias || qb.alias,\n attributeName: key,\n attribute,\n });\n\n const nestedWhere = processRelationWhere(value, {\n db,\n qb,\n alias: subAlias,\n uid: attribute.target,\n });\n\n // TODO: use a better merge logic (push to $and when collisions)\n Object.assign(filters, nestedWhere);\n\n continue;\n }\n\n if (types.isScalar(attribute.type)) {\n const columnName = toColumnName(meta, key);\n const aliasedColumnName = qb.aliasColumn(columnName, alias);\n\n filters[aliasedColumnName] = processAttributeWhere(attribute, value);\n\n continue;\n }\n\n throw new Error(`You cannot filter on ${attribute.type} types`);\n }\n\n return filters;\n}\n\ntype Operator =\n | '$eq'\n | '$ne'\n | '$nei'\n | '$in'\n | '$notIn'\n | '$lt'\n | '$lte'\n | '$gt'\n | '$gte'\n | '$between'\n | '$contains'\n | '$notContains'\n | '$containsi'\n | '$notContainsi'\n | '$startsWith'\n | '$endsWith'\n | '$null'\n | '$notNull'\n | '$not'\n | '$eqi'\n | '$startsWithi'\n | '$endsWithi'\n | '$jsonSupersetOf';\n\n// TODO: add type casting per operator at some point\nconst applyOperator = (qb: Knex.QueryBuilder, column: any, operator: Operator, value: any) => {\n if (Array.isArray(value) && !isOperatorOfType('array', operator)) {\n return qb.where((subQB) => {\n value.forEach((subValue) =>\n subQB.orWhere((innerQB) => {\n applyOperator(innerQB, column, operator, subValue);\n })\n );\n });\n }\n\n switch (operator) {\n case '$not': {\n qb.whereNot((qb) => applyWhereToColumn(qb, column, value));\n break;\n }\n\n case '$in': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$notIn': {\n // @ts-ignore\n // TODO: fix in v5\n qb.whereNotIn(column, isKnexQuery(value) ? value : castArray(value));\n break;\n }\n\n case '$eq': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n\n qb.where(column, value);\n break;\n }\n\n case '$eqi': {\n if (value === null) {\n qb.whereNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$ne': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n\n qb.where(column, '<>', value);\n break;\n }\n case '$nei': {\n if (value === null) {\n qb.whereNotNull(column);\n break;\n }\n qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)`, [column, `${value}`]);\n break;\n }\n case '$gt': {\n qb.where(column, '>', value);\n break;\n }\n case '$gte': {\n qb.where(column, '>=', value);\n break;\n }\n case '$lt': {\n qb.where(column, '<', value);\n break;\n }\n case '$lte': {\n qb.where(column, '<=', value);\n break;\n }\n case '$null': {\n if (value) {\n qb.whereNull(column);\n } else {\n qb.whereNotNull(column);\n }\n break;\n }\n case '$notNull': {\n if (value) {\n qb.whereNotNull(column);\n } else {\n qb.whereNull(column);\n }\n break;\n }\n case '$between': {\n qb.whereBetween(column, value);\n break;\n }\n case '$startsWith': {\n qb.where(column, 'like', `${value}%`);\n break;\n }\n case '$startsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `${value}%`]);\n break;\n }\n case '$endsWith': {\n qb.where(column, 'like', `%${value}`);\n break;\n }\n case '$endsWithi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `%${value}`]);\n break;\n }\n case '$contains': {\n qb.where(column, 'like', `%${value}%`);\n break;\n }\n\n case '$notContains': {\n qb.whereNot(column, 'like', `%${value}%`);\n break;\n }\n\n case '$containsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [column, `%${value}%`]);\n break;\n }\n\n case '$notContainsi': {\n qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)`, [column, `%${value}%`]);\n break;\n }\n\n // Experimental, only for internal use\n // Only on MySQL, PostgreSQL and CockroachDB.\n // https://knexjs.org/guide/query-builder.html#wherejsonsupersetof\n case '$jsonSupersetOf': {\n qb.whereJsonSupersetOf(column, value);\n break;\n }\n\n // TODO: Add more JSON operators: whereJsonObject, whereJsonPath, whereJsonSubsetOf\n\n // TODO: relational operators every/some/exists/size ...\n\n default: {\n throw new Error(`Undefined attribute level operator ${operator}`);\n }\n }\n};\n\nconst applyWhereToColumn = (\n qb: Knex.QueryBuilder,\n column: string,\n columnWhere: Record<Operator, unknown> | Array<Record<Operator, unknown>>\n) => {\n if (!isRecord(columnWhere)) {\n if (Array.isArray(columnWhere)) {\n return qb.whereIn(column, columnWhere);\n }\n\n return qb.where(column, columnWhere);\n }\n\n const keys = Object.keys(columnWhere) as Operator[];\n\n keys.forEach((operator) => {\n const value = columnWhere[operator];\n\n applyOperator(qb, column, operator, value);\n });\n};\n\ntype Where =\n | {\n $and?: Where[];\n $or?: Where[];\n $not?: Where;\n [key: string]: any;\n }\n | Array<Where>;\n\nconst applyWhere = (qb: Knex.QueryBuilder, where: Where) => {\n if (!isArray(where) && !isRecord(where)) {\n throw new Error('Where must be an array or an object');\n }\n\n if (isArray(where)) {\n return qb.where((subQB: Knex.QueryBuilder) =>\n where.forEach((subWhere) => applyWhere(subQB, subWhere))\n );\n }\n\n Object.keys(where).forEach((key) => {\n if (key === '$and') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => applyWhere(subQB, v));\n });\n }\n\n if (key === '$or') {\n const value = where[key] ?? [];\n\n return qb.where((subQB: Knex.QueryBuilder) => {\n value.forEach((v) => subQB.orWhere((inner) => applyWhere(inner, v)));\n });\n }\n\n if (key === '$not') {\n const value = where[key] ?? {};\n\n return qb.whereNot((qb) => applyWhere(qb, value));\n }\n\n applyWhereToColumn(qb, key, where[key]);\n });\n};\n\nconst fieldLowerFn = (qb: Knex.QueryBuilder) => {\n // Postgres requires string to be passed\n if (qb.client.dialect === 'postgresql') {\n return 'LOWER(CAST(?? AS VARCHAR))';\n }\n\n return 'LOWER(??)';\n};\n\nexport { applyWhere, processWhere };\n","import { Readable } from 'stream';\nimport { isFinite } from 'lodash/fp';\nimport type { Knex } from 'knex';\nimport type { QueryBuilder } from '../../query-builder';\nimport type { Database } from '../../..';\n\nimport { applyPopulate } from '../populate';\nimport { fromRow } from '../transform';\nimport { Meta } from '../../../metadata';\n\nconst knexQueryDone = Symbol('knexQueryDone');\nconst knexPerformingQuery = Symbol('knexPerformingQuery');\n\ninterface ReadableStrapiQueryOptions {\n qb: QueryBuilder;\n uid: string;\n db: Database;\n mapResults?: boolean;\n batchSize?: number;\n}\n\nclass ReadableStrapiQuery extends Readable {\n _offset: number;\n\n _limit: number | null;\n\n _fetched: number;\n\n _query: Knex.QueryBuilder;\n\n _qb: QueryBuilder;\n\n _db: Database;\n\n _uid: string;\n\n _meta: Meta;\n\n _batchSize: number;\n\n _mapResults: boolean;\n\n [knexPerformingQuery]: boolean;\n\n constructor({ qb, db, uid, mapResults = true, batchSize = 500 }: ReadableStrapiQueryOptions) {\n super({ objectMode: true, highWaterMark: batchSize });\n\n // Extract offset & limit from the query-builder's state\n const { offset, limit } = qb.state;\n\n // Original offset value\n this._offset = isFinite(offset) ? Number(offset) : 0;\n\n // Max amount of entities to fetch, force null as undefined value\n this._limit = isFinite(limit) ? Number(limit) : null;\n\n // Total amount of entities fetched\n this._fetched = 0;\n\n /**\n * Original query\n */\n this._query = qb.getKnexQuery();\n\n // Query Builder instance\n this._qb = qb;\n\n // Database related properties\n this._db = db;\n this._uid = uid;\n this._meta = db.metadata.get(uid);\n\n // Stream params\n this._batchSize = batchSize;\n this._mapResults = mapResults;\n\n // States\n this[knexPerformingQuery] = false;\n }\n\n _destroy(err: Error, cb: (err?: Error) => void) {\n // If the stream is destroyed while a query is being made, then wait for a\n // kQueryDone event to be emitted before actually destroying the stream\n if (this[knexPerformingQuery]) {\n this.once(knexQueryDone, (er) => cb(err || er));\n } else {\n cb(err);\n }\n }\n\n /**\n * Custom ._read() implementation\n *\n * NOTE: Here \"size\" means the number of entities to be read from the database.\n * Not the actual byte size, as it would mean that we need to return partial entities.\n *\n */\n async _read(size: number) {\n const query = this._query;\n\n // Remove the original offset & limit properties from the query\n // Theoretically, they would be replaced by calling them again, but this is just to be sure\n query.clear('limit').clear('offset');\n\n // Define the maximum read size based on the limit and the requested size\n // NOTE: size is equal to _batchSize by default. Since we want to allow customizing it on\n // the fly, we need to use its value instead of batchSize when computing the maxReadSize value\n const maxReadSize =\n // if no limit is defined in the query, use the given size,\n // otherwise, use the smallest value between the two\n this._limit === null ? size : Math.min(size, this._limit);\n\n // Compute the limit for the next query\n const limit =\n // If a limit is defined\n this._limit !== null &&\n // And reading `maxReadSize` would fetch too many entities (> _limit)\n this._fetched + maxReadSize > this._limit\n ? // Then adjust the limit so that it only get the remaining entities\n this._limit - this._fetched\n : // Else, use the max read size\n maxReadSize;\n\n // If we don't have anything left to read (_limit === _fetched),\n // don't bother making the query and end the stream by pushing null\n if (limit <= 0) {\n this.push(null);\n return;\n }\n\n // Compute the offset (base offset + number of entities already fetched)\n const offset = this._offset + this._fetched;\n\n // Update the query with the new values (offset + limit)\n query.offset(offset).limit(limit);\n\n // Lock the ._destroy()\n this[knexPerformingQuery] = true;\n\n let results;\n let count;\n let err;\n\n try {\n // Execute the query and store the results & count\n results = await query;\n\n const { populate } = this._qb.state;\n\n // Applies the populate if needed\n if (populate) {\n await applyPopulate(results, populate, { qb: this._qb, uid: this._uid, db: this._db });\n }\n\n // Map results if asked to\n if (this._mapResults) {\n results = fromRow(this._meta, results);\n }\n\n count = results.length;\n } catch (e) {\n err = e;\n }\n\n // Unlock the ._destroy()\n this[knexPerformingQuery] = false;\n\n // Tell ._destroy() that it's now safe to close the db connection\n if (this.destroyed) {\n this.emit(knexQueryDone);\n return;\n }\n\n // If there is an error, destroy with the given error\n if (err) {\n this.destroy(err as Error);\n return;\n }\n\n // Update the amount of fetched entities\n this._fetched += count;\n\n // While there is at least one value to unpack\n for (const result of results) {\n this.push(result);\n }\n\n // If the amount of fetched entities is smaller than the\n // maximum read size, Then push null to close the stream\n if (this._fetched === this._limit || count < this._batchSize) {\n this.push(null);\n }\n }\n}\n\nexport default ReadableStrapiQuery;\n","import type { Knex } from 'knex';\nimport _ from 'lodash/fp';\n\nimport type { Database } from '..';\n\nimport { DatabaseError } from '../errors';\nimport { transactionCtx } from '../transaction-context';\nimport { isKnexQuery } from '../utils/knex';\nimport * as helpers from './helpers';\nimport type { Join } from './helpers/join';\n\ninterface State {\n type: 'select' | 'insert' | 'update' | 'delete' | 'count' | 'max' | 'truncate';\n select: Array<string | Knex.Raw>;\n count: string | null;\n max: string | null;\n first: boolean;\n data: Record<string, unknown> | (null | Record<string, unknown>)[] | null;\n where: Record<string, unknown>[];\n joins: Join[];\n populate: object | null;\n limit: number | null;\n offset: number | null;\n transaction: any;\n forUpdate: boolean;\n onConflict: any;\n merge: any;\n ignore: boolean;\n orderBy: any[];\n groupBy: any[];\n increments: any[];\n decrements: any[];\n aliasCounter: number;\n filters: any;\n search: string;\n processed: boolean;\n}\n\nexport interface QueryBuilder {\n alias: string;\n state: State;\n raw: Knex.RawBuilder;\n\n getAlias(): string;\n\n clone(): QueryBuilder;\n\n select(args: string | Array<string | Knex.Raw>): QueryBuilder;\n\n addSelect(args: string | string[]): QueryBuilder;\n\n insert<TData extends Record<string, unknown> | Record<string, unknown>[]>(\n data: TData\n ): QueryBuilder;\n\n onConflict(args: any): QueryBuilder;\n\n merge(args: any): QueryBuilder;\n\n ignore(): QueryBuilder;\n\n delete(): QueryBuilder;\n\n ref(name: string): any;\n\n update<TData extends Record<string, unknown>>(data: TData): QueryBuilder;\n\n increment(column: string, amount?: number): QueryBuilder;\n\n decrement(column: string, amount?: number): QueryBuilder;\n\n count(count?: string): QueryBuilder;\n\n max(column: string): QueryBuilder;\n\n where(where?: object): QueryBuilder;\n\n limit(limit: number): QueryBuilder;\n\n offset(offset: number): QueryBuilder;\n\n orderBy(orderBy: any): QueryBuilder;\n\n groupBy(groupBy: any): QueryBuilder;\n\n populate(populate: any): QueryBuilder;\n\n search(query: string): QueryBuilder;\n\n transacting(transaction: any): QueryBuilder;\n\n forUpdate(): QueryBuilder;\n\n init(params?: any): QueryBuilder;\n\n filters(filters: any): void;\n\n first(): QueryBuilder;\n\n join(join: any): QueryBuilder;\n\n mustUseAlias(): boolean;\n\n aliasColumn(key: any, alias?: string): any;\n\n shouldUseSubQuery(): boolean;\n\n runSubQuery(): any;\n\n processState(): void;\n\n shouldUseDistinct(): boolean;\n\n shouldUseDeepSort(): boolean;\n\n processSelect(): void;\n\n getKnexQuery(): Knex.QueryBuilder;\n\n execute<T>(options?: { mapResults?: boolean }): Promise<T>;\n\n stream(options?: { mapResults?: boolean }): helpers.ReadableQuery;\n}\n\nconst createQueryBuilder = (\n uid: string,\n db: Database,\n initialState: Partial<State> = {}\n): QueryBuilder => {\n const meta = db.metadata.get(uid);\n const { tableName } = meta;\n\n const state: State = _.defaults(\n {\n type: 'select',\n select: [],\n count: null,\n max: null,\n first: false,\n data: null,\n where: [],\n joins: [],\n populate: null,\n limit: null,\n offset: null,\n transaction: null,\n forUpdate: false,\n onConflict: null,\n merge: null,\n ignore: false,\n orderBy: [],\n groupBy: [],\n increments: [],\n decrements: [],\n aliasCounter: 0,\n filters: null,\n search: null,\n processed: false,\n },\n initialState\n );\n\n const getAlias = () => {\n const alias = `t${state.aliasCounter}`;\n\n state.aliasCounter += 1;\n\n return alias;\n };\n\n return {\n alias: getAlias(),\n getAlias,\n state,\n\n clone() {\n return createQueryBuilder(uid, db, state);\n },\n\n select(args) {\n state.type = 'select';\n state.select = _.uniq(_.castArray(args));\n\n return this;\n },\n\n addSelect(args) {\n state.select = _.uniq([...state.select, ..._.castArray(args)]);\n\n return this;\n },\n\n insert(data) {\n state.type = 'insert';\n state.data = data;\n\n return this;\n },\n\n onConflict(args) {\n state.onConflict = args;\n\n return this;\n },\n\n merge(args) {\n state.merge = args;\n\n return this;\n },\n\n ignore() {\n state.ignore = true;\n\n return this;\n },\n\n delete() {\n state.type = 'delete';\n\n return this;\n },\n\n ref(name) {\n return db.connection.ref(helpers.toColumnName(meta, name));\n },\n\n update(data) {\n state.type = 'update';\n state.data = data;\n\n return this;\n },\n\n increment(column, amount = 1) {\n state.type = 'update';\n state.increments.push({ column, amount });\n\n return this;\n },\n\n decrement(column, amount = 1) {\n state.type = 'update';\n state.decrements.push({ column, amount });\n\n return this;\n },\n\n count(count = 'id') {\n state.type = 'count';\n state.count = count;\n\n return this;\n },\n\n max(column: string) {\n state.type = 'max';\n state.max = column;\n\n return this;\n },\n\n where(where: Record<string, unknown> = {}) {\n if (!_.isPlainObject(where)) {\n throw new Error('Where must be an object');\n }\n\n state.where.push(where);\n\n return this;\n },\n\n limit(limit) {\n state.limit = limit;\n return this;\n },\n\n offset(offset) {\n state.offset = offset;\n return this;\n },\n\n orderBy(orderBy) {\n state.orderBy = orderBy;\n return this;\n },\n\n groupBy(groupBy) {\n state.groupBy = groupBy;\n return this;\n },\n\n populate(populate) {\n state.populate = populate;\n return this;\n },\n\n search(query) {\n state.search = query;\n return this;\n },\n\n transacting(transaction) {\n state.transaction = transaction;\n return this;\n },\n\n forUpdate() {\n state.forUpdate = true;\n return this;\n },\n\n init(params = {}) {\n const { _q, filters, where, select, limit, offset, orderBy, groupBy, populate } = params;\n\n if (!_.isNil(where)) {\n this.where(where);\n }\n\n if (!_.isNil(_q)) {\n this.search(_q);\n }\n\n if (!_.isNil(select)) {\n this.select(select);\n } else {\n this.select('*');\n }\n\n if (!_.isNil(limit)) {\n this.limit(limit);\n }\n\n if (!_.isNil(offset)) {\n this.offset(offset);\n }\n\n if (!_.isNil(orderBy)) {\n this.orderBy(orderBy);\n }\n\n if (!_.isNil(groupBy)) {\n this.groupBy(groupBy);\n }\n\n if (!_.isNil(populate)) {\n this.populate(populate);\n }\n\n if (!_.isNil(filters)) {\n this.filters(filters);\n }\n\n return this;\n },\n\n filters(filters) {\n state.filters = filters;\n },\n\n first() {\n state.first = true;\n return this;\n },\n\n join(join) {\n if (!join.targetField) {\n state.joins.push(join);\n return this;\n }\n\n const model = db.metadata.get(uid);\n const attribute = model.attributes[join.targetField];\n\n helpers.createJoin(\n { db, qb: this, uid },\n {\n alias: this.alias,\n refAlias: join.alias,\n attributeName: join.targetField,\n attribute,\n }\n );\n\n return this;\n },\n\n mustUseAlias() {\n return ['select', 'count'].includes(state.type);\n },\n\n aliasColumn(key: string | unknown, alias: string): string | unknown {\n if (typeof key !== 'string') {\n return key;\n }\n\n if (key.indexOf('.') >= 0) {\n return key;\n }\n\n if (!_.isNil(alias)) {\n return `${alias}.${key}`;\n }\n\n return this.mustUseAlias() ? `${this.alias}.${key}` : key;\n },\n\n raw: db.connection.raw.bind(db.connection),\n\n shouldUseSubQuery() {\n return ['delete', 'update'].includes(state.type) && state.joins.length > 0;\n },\n\n runSubQuery() {\n const originalType = state.type;\n\n this.select('id');\n const subQB = this.getKnexQuery();\n\n const nestedSubQuery = db.getConnection().select('id').from(subQB.as('subQuery'));\n const connection = db.getConnection(tableName);\n\n return (connection[originalType] as Knex)().whereIn('id', nestedSubQuery);\n },\n\n processState() {\n if (this.state.processed) {\n return;\n }\n\n state.orderBy = helpers.processOrderBy(state.orderBy, { qb: this, uid, db });\n\n if (!_.isNil(state.filters)) {\n if (_.isFunction(state.filters)) {\n const filters = state.filters({ qb: this, uid, meta, db });\n\n if (!_.isNil(filters)) {\n state.where.push(filters);\n }\n } else {\n state.where.push(state.filters);\n }\n }\n\n state.where = helpers.processWhere(state.where, { qb: this, uid, db });\n state.populate = helpers.processPopulate(state.populate, { qb: this, uid, db });\n\n state.data = helpers.toRow(meta, state.data);\n\n this.processSelect();\n\n this.state.processed = true;\n },\n\n shouldUseDistinct() {\n return state.joins.length > 0 && _.isEmpty(state.groupBy);\n },\n\n shouldUseDeepSort() {\n return (\n state.orderBy\n .filter(({ column }) => column.indexOf('.') >= 0)\n .filter(({ column }) => {\n const col = column.split('.');\n\n for (let i = 0; i < col.length - 1; i += 1) {\n const el = col[i];\n\n // order by \"rel\".\"xxx\"\n const isRelationAttribute = meta.attributes[el]?.type === 'relation';\n\n // order by \"t2\".\"xxx\"\n const isAliasedRelation = Object.values(state.joins)\n .map((join) => join.alias)\n .includes(el);\n\n if (isRelationAttribute || isAliasedRelation) {\n return true;\n }\n }\n\n return false;\n }).length > 0\n );\n },\n\n processSelect() {\n state.select = state.select.map((field) => {\n if (isKnexQuery(field)) {\n return field;\n }\n\n return helpers.toColumnName(meta, field);\n });\n\n if (this.shouldUseDistinct()) {\n const joinsOrderByColumns = state.joins.flatMap((join) => {\n return _.keys(join.orderBy).map((key) => this.aliasColumn(key, join.alias));\n });\n const orderByColumns = state.orderBy.map(({ column }) => column);\n\n state.select = _.uniq([...joinsOrderByColumns, ...orderByColumns, ...state.select]);\n }\n },\n\n getKnexQuery() {\n if (!state.type) {\n this.select('*');\n }\n\n const aliasedTableName = this.mustUseAlias() ? `${tableName} as ${this.alias}` : tableName;\n\n const qb = db.getConnection(aliasedTableName);\n\n // The state should always be processed before calling shouldUseSubQuery as it\n // relies on the presence or absence of joins to determine the need of a subquery\n this.processState();\n\n if (this.shouldUseSubQuery()) {\n return this.runSubQuery();\n }\n\n switch (state.type) {\n case 'select': {\n qb.select(state.select.map((column) => this.aliasColumn(column)));\n\n if (this.shouldUseDistinct()) {\n qb.distinct();\n }\n\n break;\n }\n case 'count': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.count));\n\n if (this.shouldUseDistinct()) {\n qb.countDistinct({ count: dbColumnName });\n } else {\n qb.count({ count: dbColumnName });\n }\n break;\n }\n case 'max': {\n const dbColumnName = this.aliasColumn(helpers.toColumnName(meta, state.max));\n qb.max({ max: dbColumnName });\n break;\n }\n case 'insert': {\n qb.insert(state.data);\n\n if (db.dialect.useReturning() && _.has('id', meta.attributes)) {\n qb.returning('id');\n }\n\n break;\n }\n case 'update': {\n if (state.data) {\n qb.update(state.data);\n }\n break;\n }\n case 'delete': {\n qb.delete();\n\n break;\n }\n case 'truncate': {\n qb.truncate();\n break;\n }\n default: {\n throw new Error('Unknown query type');\n }\n }\n\n if (state.transaction) {\n qb.transacting(state.transaction);\n }\n\n if (state.forUpdate) {\n qb.forUpdate();\n }\n\n if (!_.isEmpty(state.increments)) {\n state.increments.forEach((incr) => qb.increment(incr.column, incr.amount));\n }\n\n if (!_.isEmpty(state.decrements)) {\n state.decrements.forEach((decr) => qb.decrement(decr.column, decr.amount));\n }\n\n if (state.onConflict) {\n if (state.merge) {\n qb.onConflict(state.onConflict).merge(state.merge);\n } else if (state.ignore) {\n qb.onConflict(state.onConflict).ignore();\n }\n }\n\n if (state.limit) {\n qb.limit(state.limit);\n }\n\n if (state.offset) {\n qb.offset(state.offset);\n }\n\n if (state.orderBy.length > 0) {\n qb.orderBy(state.orderBy);\n }\n\n if (state.first) {\n qb.first();\n }\n\n if (state.groupBy.length > 0) {\n qb.groupBy(state.groupBy);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.where) {\n helpers.applyWhere(qb, state.where);\n }\n\n // if there are joins and it is a delete or update use a sub query\n if (state.search) {\n qb.where((subQb) => {\n helpers.applySearch(subQb, state.search, { qb: this, db, uid });\n });\n }\n\n if (state.joins.length > 0) {\n helpers.applyJoins(qb, state.joins);\n }\n\n if (this.shouldUseDeepSort()) {\n return helpers.wrapWithDeepSort(qb, { qb: this, db, uid });\n }\n\n return qb;\n },\n\n async execute({ mapResults = true } = {}) {\n try {\n const qb = this.getKnexQuery();\n\n const transaction = transactionCtx.get();\n if (transaction) {\n qb.transacting(transaction);\n }\n\n const rows = await qb;\n\n if (state.populate && !_.isNil(rows)) {\n await helpers.applyPopulate(_.castArray(rows), state.populate, {\n qb: this,\n uid,\n db,\n });\n }\n\n let results = rows;\n if (mapResults && state.type === 'select') {\n results = helpers.fromRow(meta, rows);\n }\n\n return results;\n } catch (error) {\n if (error instanceof Error) {\n db.dialect.transformErrors(error);\n } else {\n throw error;\n }\n }\n },\n\n stream({ mapResults = true } = {}) {\n if (state.type === 'select') {\n return new helpers.ReadableQuery({ qb: this, db, uid, mapResults });\n }\n\n throw new DatabaseError(\n `query-builder.stream() has been called with an unsupported query type: \"${state.type}\"`\n );\n },\n };\n};\n\nexport default createQueryBuilder;\n","import { isString } from 'lodash/fp';\nimport type { Database } from '..';\nimport type { Repository, Params } from './types';\n\nconst withDefaultPagination = (params: Params) => {\n const { page = 1, pageSize = 10, ...rest } = params;\n\n return {\n page: Number(page),\n pageSize: Number(pageSize),\n ...rest,\n };\n};\n\ntype ParamsWithLimits = Omit<Params, 'page' | 'pageSize'> & {\n limit: number;\n offset: number;\n};\n\nconst withOffsetLimit = (\n params: Params\n): [ParamsWithLimits, { page: number; pageSize: number }] => {\n const { page, pageSize, ...rest } = withDefaultPagination(params);\n\n const offset = Math.max(page - 1, 0) * pageSize;\n const limit = pageSize;\n\n const query = {\n ...rest,\n limit,\n offset,\n };\n\n return [query, { page, pageSize }];\n};\n\nexport const createRepository = (uid: string, db: Database): Repository => {\n return {\n findOne(params = {}) {\n return db.entityManager.findOne(uid, params);\n },\n\n findMany(params = {}) {\n return db.entityManager.findMany(uid, params);\n },\n\n findWithCount(params = {}) {\n return Promise.all([\n db.entityManager.findMany(uid, params),\n db.entityManager.count(uid, params),\n ]);\n },\n\n async findPage(params) {\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, total] = await Promise.all([\n db.entityManager.findMany(uid, query),\n db.entityManager.count(uid, query),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n\n create(params) {\n return db.entityManager.create(uid, params);\n },\n\n createMany(params) {\n return db.entityManager.createMany(uid, params);\n },\n\n update(params) {\n return db.entityManager.update(uid, params);\n },\n\n updateMany(params) {\n return db.entityManager.updateMany(uid, params);\n },\n\n delete(params) {\n return db.entityManager.delete(uid, params);\n },\n\n deleteMany(params = {}) {\n return db.entityManager.deleteMany(uid, params);\n },\n\n count(params) {\n return db.entityManager.count(uid, params);\n },\n\n attachRelations(id, data) {\n return db.entityManager.attachRelations(uid, id, data);\n },\n\n async updateRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.updateRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n deleteRelations(id) {\n return db.entityManager.deleteRelations(uid, id);\n },\n\n populate(entity, populate) {\n return db.entityManager.populate(uid, entity, populate);\n },\n\n load(entity, fields, params) {\n return db.entityManager.load(uid, entity, fields, params);\n },\n\n async loadPages(entity, field, params) {\n if (!isString(field)) {\n throw new Error(`Invalid load. Expected ${field} to be a string`);\n }\n\n const { attributes } = db.metadata.get(uid);\n const attribute = attributes[field];\n\n if (\n !attribute ||\n attribute.type !== 'relation' ||\n !attribute.relation ||\n !['oneToMany', 'manyToMany'].includes(attribute.relation)\n ) {\n throw new Error(`Invalid load. Expected ${field} to be an anyToMany relational attribute`);\n }\n\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, { count: total }] = await Promise.all([\n db.entityManager.load(uid, entity, field, query),\n db.entityManager.load(uid, entity, field, { ...query, count: true }),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n };\n};\n","/* eslint-disable @typescript-eslint/naming-convention */ // allow __type\nimport { curry, groupBy, pipe, mapValues, map, isEmpty } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport { createQueryBuilder } from '../query';\nimport type { Database } from '..';\nimport type { MorphJoinTable, Relation } from '../types';\n\ntype Rows = Record<string, unknown>[];\n\nconst getMorphToManyRowsLinkedToMorphOne = (\n rows: Rows,\n {\n uid,\n attributeName,\n typeColumn,\n db,\n }: {\n uid: string;\n attributeName: string;\n typeColumn: { name: string };\n db: Database;\n }\n) =>\n rows.filter((row) => {\n const relatedType = row[typeColumn.name] as string;\n const field = row.field as any;\n\n const targetAttribute = db.metadata.get(relatedType).attributes[field] as Relation.MorphOne;\n\n // ensure targeted field is the right one + check if it is a morphOne\n return (\n targetAttribute?.target === uid &&\n targetAttribute?.morphBy === attributeName &&\n targetAttribute?.relation === 'morphOne'\n );\n });\n\nexport const deleteRelatedMorphOneRelationsAfterMorphToManyUpdate = async (\n rows: Rows,\n {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n }: {\n uid: string;\n attributeName: string;\n joinTable: MorphJoinTable;\n db: Database;\n transaction?: Knex.Transaction;\n }\n) => {\n const { morphColumn } = joinTable;\n const { idColumn, typeColumn } = morphColumn;\n\n const morphOneRows = getMorphToManyRowsLinkedToMorphOne(rows, {\n uid,\n attributeName,\n typeColumn,\n db,\n });\n\n const groupByType = groupBy(typeColumn.name);\n const groupByField = groupBy('field');\n\n const typeAndFieldIdsGrouped = pipe(groupByType, mapValues(groupByField))(morphOneRows);\n\n const orWhere: object[] = [];\n\n for (const [type, v] of Object.entries(typeAndFieldIdsGrouped)) {\n for (const [field, arr] of Object.entries(v)) {\n orWhere.push({\n [typeColumn.name]: type,\n field,\n [idColumn.name]: { $in: map(idColumn.name, arr) },\n });\n }\n }\n\n if (!isEmpty(orWhere)) {\n await createQueryBuilder(joinTable.name, db)\n .delete()\n .where({ $or: orWhere })\n .transacting(trx)\n .execute();\n }\n};\n\n/**\n * Encoding utilities for polymorphic relations.\n *\n * In some scenarios is useful to encode both the id & __type of the relation\n * to have a unique identifier for the relation. (e.g. relations reordering)\n */\n\nexport const encodePolymorphicId = (id: number | string, __type: string) => {\n return `${id}:::${__type}`;\n};\n\nexport const encodePolymorphicRelation = curry(({ idColumn, typeColumn }, relation?: any): any => {\n // Encode the id of the relation and the positional argument if it exist\n const newRelation = {\n ...relation,\n [idColumn]: encodePolymorphicId(relation[idColumn], relation[typeColumn]),\n };\n\n if (relation.position) {\n const { before, after } = relation.position;\n const __type = relation.position.__type || relation.__type;\n\n newRelation.position = { ...relation.position };\n\n if (before) newRelation.position.before = encodePolymorphicId(before, __type);\n if (after) newRelation.position.after = encodePolymorphicId(after, __type);\n }\n\n return newRelation;\n});\n","/* eslint-disable @typescript-eslint/no-namespace */\nimport { map, isEmpty } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport {\n isBidirectional,\n isOneToAny,\n isManyToAny,\n isAnyToOne,\n hasOrderColumn,\n hasInverseOrderColumn,\n} from '../metadata';\nimport { createQueryBuilder } from '../query';\nimport { addSchema } from '../utils/knex';\nimport type { Database } from '..';\nimport type { ID, Relation, Model } from '../types';\n\ndeclare module 'knex' {\n namespace Knex {\n interface ChainableInterface {\n transacting(trx?: Knex.Transaction): this;\n }\n }\n}\n\n// TODO: This is a short term solution, to not steal relations from the same document.\nconst getDocumentSiblingIdsQuery = (tableName: string, id: ID) => {\n // Find if the model is a content type or something else (e.g. component)\n // to only get the documentId if it's a content type\n const models: Model[] = Array.from(strapi.db.metadata.values());\n\n const isContentType = models.find((model) => {\n return model.tableName === tableName && model.attributes.documentId;\n });\n\n if (!isContentType) {\n return [id];\n }\n\n // NOTE: SubQueries are wrapped in a function to not reuse the same connection,\n // which causes infinite self references\n return function (query) {\n query\n .select('id')\n .from(tableName)\n // Get all child ids of the document id\n .whereIn('document_id', (documentIDSubQuery) => {\n documentIDSubQuery\n .from(tableName)\n // get document id related to the current id\n .select('document_id')\n .where('id', id);\n });\n } satisfies Knex.QueryCallback;\n};\n\n/**\n * If some relations currently exist for this oneToX relation, on the one side, this function removes them and update the inverse order if needed.\n */\nconst deletePreviousOneToAnyRelations = async ({\n id,\n attribute,\n relIdsToadd,\n db,\n transaction: trx,\n}: {\n id: ID;\n attribute: Relation.Bidirectional;\n relIdsToadd: ID[];\n db: Database;\n transaction?: Knex.Transaction;\n}) => {\n if (!(isBidirectional(attribute) && isOneToAny(attribute))) {\n throw new Error(\n 'deletePreviousOneToAnyRelations can only be called for bidirectional oneToAny relations'\n );\n }\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn } = joinTable;\n\n const con = db.getConnection();\n\n await con\n .delete()\n .from(joinTable.name)\n // Exclude the ids of the current document\n .whereNotIn(joinColumn.name, getDocumentSiblingIdsQuery(joinColumn.referencedTable!, id))\n // Include all the ids that are being connected\n .whereIn(inverseJoinColumn.name, relIdsToadd)\n .where(joinTable.on || {})\n .transacting(trx);\n\n await cleanOrderColumns({ attribute, db, inverseRelIds: relIdsToadd, transaction: trx });\n};\n\n/**\n * If a relation currently exists for this xToOne relations, this function removes it and update the inverse order if needed.\n */\nconst deletePreviousAnyToOneRelations = async ({\n id,\n attribute,\n relIdToadd,\n db,\n transaction: trx,\n}: {\n id: ID;\n attribute: Relation.Bidirectional;\n relIdToadd: ID;\n db: Database;\n transaction?: Knex.Transaction;\n}) => {\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn } = joinTable;\n const con = db.getConnection();\n\n if (!isAnyToOne(attribute)) {\n throw new Error('deletePreviousAnyToOneRelations can only be called for anyToOne relations');\n }\n // handling manyToOne\n if (isManyToAny(attribute)) {\n // if the database integrity was not broken relsToDelete is supposed to be of length 1\n const relsToDelete = await con\n .select(inverseJoinColumn.name)\n .from(joinTable.name)\n .where(joinColumn.name, id)\n .whereNotIn(\n inverseJoinColumn.name,\n getDocumentSiblingIdsQuery(inverseJoinColumn.referencedTable!, relIdToadd)\n )\n .where(joinTable.on || {})\n .transacting(trx);\n\n const relIdsToDelete = map(inverseJoinColumn.name, relsToDelete);\n\n await createQueryBuilder(joinTable.name, db)\n .delete()\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $in: relIdsToDelete },\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute();\n\n await cleanOrderColumns({ attribute, db, inverseRelIds: relIdsToDelete, transaction: trx });\n\n // handling oneToOne\n } else {\n await con\n .delete()\n .from(joinTable.name)\n .where(joinColumn.name, id)\n // Exclude the ids of the current document\n .whereNotIn(\n inverseJoinColumn.name,\n getDocumentSiblingIdsQuery(inverseJoinColumn.referencedTable!, relIdToadd)\n )\n .where(joinTable.on || {})\n .transacting(trx);\n }\n};\n\n/**\n * Delete all or some relations of entity field\n */\nconst deleteRelations = async ({\n id,\n attribute,\n db,\n relIdsToNotDelete = [],\n relIdsToDelete = [],\n transaction: trx,\n}: {\n id: ID;\n attribute: Relation.Bidirectional;\n db: Database;\n relIdsToNotDelete?: ID[];\n relIdsToDelete?: ID[] | 'all';\n transaction?: Knex.Transaction;\n}) => {\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn } = joinTable;\n const all = relIdsToDelete === 'all';\n\n if (hasOrderColumn(attribute) || hasInverseOrderColumn(attribute)) {\n let lastId: ID = 0;\n let done = false;\n const batchSize = 100;\n\n while (!done) {\n const batchToDelete: { id: ID }[] = await createQueryBuilder(joinTable.name, db)\n .select(inverseJoinColumn.name)\n .where({\n [joinColumn.name]: id,\n id: { $gt: lastId },\n [inverseJoinColumn.name]: { $notIn: relIdsToNotDelete },\n ...(all ? {} : { [inverseJoinColumn.name]: { $in: relIdsToDelete } }),\n })\n .where(joinTable.on || {})\n .orderBy('id')\n .limit(batchSize)\n .transacting(trx)\n .execute();\n\n done = batchToDelete.length < batchSize;\n lastId = batchToDelete[batchToDelete.length - 1]?.id || 0;\n\n const batchIds = map(inverseJoinColumn.name, batchToDelete);\n\n await createQueryBuilder(joinTable.name, db)\n .delete()\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $in: batchIds },\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute();\n\n await cleanOrderColumns({ attribute, db, id, inverseRelIds: batchIds, transaction: trx });\n }\n } else {\n await createQueryBuilder(joinTable.name, db)\n .delete()\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $notIn: relIdsToNotDelete },\n ...(all ? {} : { [inverseJoinColumn.name]: { $in: relIdsToDelete } }),\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute();\n }\n};\n\n/**\n * Clean the order columns by ensuring the order value are continuous (ex: 1, 2, 3 and not 1, 5, 10)\n */\nconst cleanOrderColumns = async ({\n id,\n attribute,\n db,\n inverseRelIds = [],\n transaction: trx,\n}: {\n id?: ID;\n attribute: Relation.Bidirectional;\n db: Database;\n inverseRelIds?: ID[];\n transaction?: Knex.Transaction;\n}) => {\n if (\n !(hasOrderColumn(attribute) && id) &&\n !(hasInverseOrderColumn(attribute) && !isEmpty(inverseRelIds))\n ) {\n return;\n }\n\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn, orderColumnName, inverseOrderColumnName } = joinTable;\n\n /**\n UPDATE :joinTable: as a,\n (\n SELECT\n id,\n ROW_NUMBER() OVER ( PARTITION BY :joinColumn: ORDER BY :orderColumn:) AS src_order,\n FROM :joinTable:\n WHERE :joinColumn: = :id\n ) AS b\n SET :orderColumn: = b.src_order\n WHERE b.id = a.id;\n */\n const updateOrderColumn = async () => {\n if (!hasOrderColumn(attribute) || !id) {\n return;\n }\n\n const selectRowsToOrder = (joinTableName: string) =>\n db\n .connection(joinTableName)\n .select('id')\n .rowNumber('src_order', orderColumnName, joinColumn.name)\n .where(joinColumn.name, id)\n .toSQL();\n\n switch (strapi.db.dialect.client) {\n case 'mysql': {\n // Here it's MariaDB and MySQL 8\n const select = selectRowsToOrder(joinTable.name);\n\n await db\n .getConnection()\n .raw(\n `UPDATE ?? as a, ( ${select.sql} ) AS b\n SET ?? = b.src_order\n WHERE b.id = a.id`,\n [joinTable.name, ...select.bindings, orderColumnName]\n )\n .transacting(trx);\n\n break;\n }\n default: {\n const joinTableName = addSchema(db, joinTable.name);\n const select = selectRowsToOrder(joinTableName);\n\n // raw query as knex doesn't allow updating from a subquery\n await db.connection\n .raw(\n `UPDATE ?? as a\n SET ?? = b.src_order\n FROM ( ${select.sql} ) AS b\n WHERE b.id = a.id`,\n [joinTableName, orderColumnName, ...select.bindings]\n )\n .transacting(trx);\n }\n }\n };\n\n /**\n UPDATE :joinTable: as a,\n (\n SELECT\n id,\n ROW_NUMBER() OVER ( PARTITION BY :inverseJoinColumn: ORDER BY :inverseOrderColumn:) AS inv_order\n FROM :joinTable:\n WHERE :inverseJoinColumn: IN (:inverseRelIds)\n ) AS b\n SET :inverseOrderColumn: = b.inv_order\n WHERE b.id = a.id;\n */\n const updateInverseOrderColumn = async () => {\n if (!hasInverseOrderColumn(attribute) || isEmpty(inverseRelIds)) return;\n\n const selectRowsToOrder = (joinTableName: string) =>\n db\n .connection(joinTableName)\n .select('id')\n .rowNumber('inv_order', inverseOrderColumnName, inverseJoinColumn.name)\n .where(inverseJoinColumn.name, 'in', inverseRelIds)\n .toSQL();\n\n switch (strapi.db.dialect.client) {\n case 'mysql': {\n // Here it's MariaDB and MySQL 8\n const select = selectRowsToOrder(joinTable.name);\n\n await db\n .getConnection()\n .raw(\n `UPDATE ?? as a, ( ${select.sql} ) AS b\n SET ?? = b.inv_order\n WHERE b.id = a.id`,\n [joinTable.name, ...select.bindings, inverseOrderColumnName]\n )\n .transacting(trx);\n break;\n }\n default: {\n const joinTableName = addSchema(db, joinTable.name);\n const select = selectRowsToOrder(joinTableName);\n\n // raw query as knex doesn't allow updating from a subquery\n await db.connection\n .raw(\n `UPDATE ?? as a\n SET ?? = b.inv_order\n FROM ( ${select.sql} ) AS b\n WHERE b.id = a.id`,\n [joinTableName, inverseOrderColumnName, ...select.bindings]\n )\n .transacting(trx);\n }\n }\n };\n\n return Promise.all([updateOrderColumn(), updateInverseOrderColumn()]);\n};\n\nexport {\n deletePreviousOneToAnyRelations,\n deletePreviousAnyToOneRelations,\n deleteRelations,\n cleanOrderColumns,\n};\n","import { castArray, maxBy } from 'lodash/fp';\nimport _ from 'lodash';\n\nimport { InvalidRelationError } from '../errors';\nimport type { ID } from '../types';\n\ninterface Link {\n id: ID;\n position?: { before?: ID; after?: ID; start?: true; end?: true };\n order?: number;\n __component?: string;\n}\n\ninterface OrderedLink extends Link {\n init?: boolean;\n order: number;\n}\n\n/**\n * When connecting relations, the order you connect them matters.\n *\n * Example, if you connect the following relations:\n * { id: 5, position: { before: 1 } }\n * { id: 1, position: { before: 2 } }\n * { id: 2, position: { end: true } }\n *\n * Going through the connect array, id 5 has to be connected before id 1,\n * so the order of id5 = id1 - 1. But the order value of id 1 is unknown.\n * The only way to know the order of id 1 is to connect it first.\n *\n * This function makes sure the relations are connected in the right order:\n * { id: 2, position: { end: true } }\n * { id: 1, position: { before: 2 } }\n * { id: 5, position: { before: 1 } }\n *\n */\nconst sortConnectArray = (connectArr: Link[], initialArr: Link[] = [], strictSort = true) => {\n const sortedConnect: Link[] = [];\n // Boolean to know if we have to recalculate the order of the relations\n let needsSorting = false;\n // Map to validate if relation is already in sortedConnect or DB.\n const relationInInitialArray = initialArr.reduce(\n (acc, rel) => ({ ...acc, [rel.id]: true }),\n {} as Record<ID, boolean>\n );\n // Map to store the first index where a relation id is connected\n const mappedRelations = connectArr.reduce(\n (mapper, relation: Link) => {\n const adjacentRelId = relation.position?.before || relation.position?.after;\n\n if (!adjacentRelId || (!relationInInitialArray[adjacentRelId] && !mapper[adjacentRelId])) {\n needsSorting = true;\n }\n\n /**\n * We do not allow duplicate relations to be connected, so we need to check for uniqueness with components\n * Note that the id here includes the uid for polymorphic relations\n *\n * So for normal relations, the same id means the same relation\n * For component relations, it means the unique combo of (id, component name)\n */\n\n // Check if there's an existing relation with this id\n const existingRelation = mapper[relation.id];\n\n // Check if existing relation has a component or not\n const hasNoComponent = existingRelation && !('__component' in existingRelation);\n\n // Check if the existing relation has the same component as the new relation\n const hasSameComponent =\n existingRelation && existingRelation.__component === relation.__component;\n\n // If we have an existing relation that is not unique (no component or same component) we won't accept it\n if (existingRelation && (hasNoComponent || hasSameComponent)) {\n throw new InvalidRelationError(\n `The relation with id ${relation.id} is already connected. ` +\n 'You cannot connect the same relation twice.'\n );\n }\n\n return {\n [relation.id]: { ...relation, computed: false },\n ...mapper,\n };\n },\n {} as Record<ID, Link & { computed: boolean }>\n );\n\n // If we don't need to sort the connect array, we can return it as is\n if (!needsSorting) return connectArr;\n\n // Recursively compute in which order the relation should be connected\n const computeRelation = (relation: Link, relationsSeenInBranch: Record<ID, boolean>) => {\n const adjacentRelId = relation.position?.before || relation.position?.after;\n const adjacentRelation = mappedRelations[adjacentRelId as ID];\n\n // If the relation has already been seen in the current branch,\n // it means there is a circular reference\n if (adjacentRelId && relationsSeenInBranch[adjacentRelId]) {\n throw new InvalidRelationError(\n 'A circular reference was found in the connect array. ' +\n 'One relation is trying to connect before/after another one that is trying to connect before/after it'\n );\n }\n\n // This relation has already been computed\n if (mappedRelations[relation.id]?.computed) {\n return;\n }\n\n mappedRelations[relation.id].computed = true;\n\n // Relation does not have a before or after attribute or is in the initial array\n if (!adjacentRelId || relationInInitialArray[adjacentRelId]) {\n sortedConnect.push(relation);\n return;\n }\n\n // Look if id is referenced elsewhere in the array\n if (mappedRelations[adjacentRelId]) {\n computeRelation(adjacentRelation, { ...relationsSeenInBranch, [relation.id]: true });\n sortedConnect.push(relation);\n } else if (strictSort) {\n // If we reach this point, it means that the adjacent relation is not in the connect array\n // and it is not in the database.\n throw new InvalidRelationError(\n `There was a problem connecting relation with id ${\n relation.id\n } at position ${JSON.stringify(\n relation.position\n )}. The relation with id ${adjacentRelId} needs to be connected first.`\n );\n } else {\n // We are in non-strict mode so we can push the relation.\n sortedConnect.push({ id: relation.id, position: { end: true } });\n }\n };\n\n // Iterate over connectArr and populate sortedConnect\n connectArr.forEach((relation) => computeRelation(relation, {}));\n\n return sortedConnect;\n};\n\n/**\n * Responsible for calculating the relations order when connecting them.\n *\n * The connect method takes an array of relations with positional attributes:\n * - before: the id of the relation to connect before\n * - after: the id of the relation to connect after\n * - end: it should be at the end\n * - start: it should be at the start\n *\n * Example:\n * - Having a connect array like:\n * [ { id: 4, before: 2 }, { id: 4, before: 3}, {id: 5, before: 4} ]\n * - With the initial relations:\n * [ { id: 2, order: 4 }, { id: 3, order: 10 } ]\n * - Step by step, going through the connect array, the array of relations would be:\n * [ { id: 4, order: 3.5 }, { id: 2, order: 4 }, { id: 3, order: 10 } ]\n * [ { id: 2, order: 4 }, { id: 4, order: 3.5 }, { id: 3, order: 10 } ]\n * [ { id: 2, order: 4 }, { id: 5, order: 3.5 }, { id: 4, order: 3.5 }, { id: 3, order: 10 } ]\n * - The final step would be to recalculate fractional order values.\n * [ { id: 2, order: 4 }, { id: 5, order: 3.33 }, { id: 4, order: 3.66 }, { id: 3, order: 10 } ]\n *\n * @param {Array<*>} initArr - array of relations to initialize the class with\n * @param {string} idColumn - the column name of the id\n * @param {string} orderColumn - the column name of the order\n * @param {boolean} strict - if true, will throw an error if a relation is connected adjacent to\n * another one that does not exist\n * @return {*}\n */\nconst relationsOrderer = <TRelation extends Record<string, ID | number | null>>(\n initArr: TRelation[],\n idColumn: keyof TRelation,\n orderColumn: keyof TRelation,\n strict?: boolean\n) => {\n const computedRelations: OrderedLink[] = castArray(initArr ?? []).map((r) => ({\n init: true,\n id: r[idColumn] as ID,\n order: Number(r[orderColumn]) || 1,\n }));\n\n const maxOrder = maxBy('order', computedRelations)?.order || 0;\n\n const findRelation = (id: ID) => {\n const idx = computedRelations.findIndex((r) => r.id === id);\n return { idx, relation: computedRelations[idx] };\n };\n\n const removeRelation = (r: Link) => {\n const { idx } = findRelation(r.id);\n if (idx >= 0) {\n computedRelations.splice(idx, 1);\n }\n };\n\n const insertRelation = (r: Link) => {\n let idx;\n\n if (r.position?.before) {\n const { idx: _idx, relation } = findRelation(r.position.before);\n if (relation.init) {\n r.order = relation.order - 0.5;\n } else {\n r.order = relation.order;\n }\n idx = _idx;\n } else if (r.position?.after) {\n const { idx: _idx, relation } = findRelation(r.position.after);\n if (relation.init) {\n r.order = relation.order + 0.5;\n } else {\n r.order = relation.order;\n }\n\n idx = _idx + 1;\n } else if (r.position?.start) {\n r.order = 0.5;\n idx = 0;\n } else {\n r.order = maxOrder + 0.5;\n idx = computedRelations.length;\n }\n\n // Insert the relation in the array\n computedRelations.splice(idx, 0, r as OrderedLink);\n };\n\n return {\n disconnect(relations: Link | Link[]) {\n castArray(relations).forEach((relation) => {\n removeRelation(relation);\n });\n return this;\n },\n connect(relations: Link | Link[]) {\n sortConnectArray(castArray(relations), computedRelations, strict).forEach((relation) => {\n this.disconnect(relation);\n\n try {\n insertRelation(relation);\n } catch (err) {\n throw new Error(\n `There was a problem connecting relation with id ${\n relation.id\n } at position ${JSON.stringify(\n relation.position\n )}. The list of connect relations is not valid`\n );\n }\n });\n return this;\n },\n get() {\n return computedRelations;\n },\n /**\n * Get a map between the relation id and its order\n */\n getOrderMap() {\n return _(computedRelations)\n .groupBy('order')\n .reduce(\n (acc, relations) => {\n if (relations[0]?.init) return acc;\n relations.forEach((relation, idx) => {\n acc[relation.id] = Math.floor(relation.order) + (idx + 1) / (relations.length + 1);\n });\n return acc;\n },\n {} as Record<ID, number>\n );\n },\n };\n};\n\nexport { relationsOrderer, sortConnectArray };\n","import {\n castArray,\n compact,\n difference,\n differenceWith,\n has,\n isArray,\n isEmpty,\n isEqual,\n isInteger,\n isNil,\n isNull,\n isNumber,\n isObject,\n isPlainObject,\n isString,\n isUndefined,\n map,\n pick,\n uniqBy,\n uniqWith,\n} from 'lodash/fp';\n\nimport * as types from '../utils/types';\nimport { createField } from '../fields';\nimport { createQueryBuilder } from '../query';\nimport { createRepository } from './entity-repository';\nimport {\n deleteRelatedMorphOneRelationsAfterMorphToManyUpdate,\n encodePolymorphicRelation,\n encodePolymorphicId,\n} from './morph-relations';\nimport {\n isBidirectional,\n isAnyToOne,\n isOneToAny,\n hasOrderColumn,\n hasInverseOrderColumn,\n} from '../metadata';\nimport {\n deletePreviousOneToAnyRelations,\n deletePreviousAnyToOneRelations,\n deleteRelations,\n cleanOrderColumns,\n} from './regular-relations';\nimport { relationsOrderer } from './relations-orderer';\nimport type { Database } from '..';\nimport type { Meta } from '../metadata';\nimport type { ID } from '../types';\nimport { EntityManager, Repository, Entity } from './types';\n\nexport * from './types';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n isObject(value) && !isNil(value);\n\nconst toId = (value: unknown | { id: unknown }): ID => {\n if (isRecord(value) && 'id' in value && isValidId(value.id)) {\n return value.id;\n }\n\n if (isValidId(value)) {\n return value;\n }\n\n throw new Error(`Invalid id, expected a string or integer, got ${JSON.stringify(value)}`);\n};\nconst toIds = (value: unknown): ID[] => castArray(value || []).map(toId);\n\nconst isValidId = (value: unknown): value is ID => isString(value) || isInteger(value);\n\nconst isValidObjectId = (value: unknown): value is Entity =>\n isRecord(value) && 'id' in value && isValidId(value.id);\n\nconst toIdArray = (\n data: unknown\n): {\n id: ID;\n __pivot?: { [key: string]: any };\n [key: string]: any;\n}[] => {\n const array = castArray(data)\n .filter((datum) => !isNil(datum))\n .map((datum) => {\n // if it is a string or an integer return an obj with id = to datum\n if (isValidId(datum)) {\n return { id: datum, __pivot: {} };\n }\n\n // if it is an object check it has at least a valid id\n if (!isValidObjectId(datum)) {\n throw new Error(`Invalid id, expected a string or integer, got ${datum}`);\n }\n\n return datum;\n });\n\n return uniqWith(isEqual, array);\n};\n\ntype ScalarAssoc = string | number | null;\ntype Assocs =\n | ScalarAssoc\n | { id: ScalarAssoc | Array<ScalarAssoc> }\n | Array<ScalarAssoc>\n | {\n set?: Array<ScalarAssoc> | null;\n options?: { strict?: boolean };\n connect?: Array<{\n id: ScalarAssoc;\n position?: { start?: boolean; end?: boolean; before?: ID; after?: ID };\n __pivot?: any;\n __type?: any;\n }> | null;\n disconnect?: Array<ScalarAssoc> | null;\n };\n\nconst toAssocs = (data: Assocs) => {\n if (\n isArray(data) ||\n isString(data) ||\n isNumber(data) ||\n isNull(data) ||\n (isRecord(data) && 'id' in data)\n ) {\n return {\n set: isNull(data) ? data : toIdArray(data),\n };\n }\n\n if (data?.set) {\n return {\n set: isNull(data.set) ? data.set : toIdArray(data.set),\n };\n }\n\n return {\n options: {\n strict: data?.options?.strict,\n },\n connect: toIdArray(data?.connect).map((elm) => ({\n id: elm.id,\n position: elm.position ? elm.position : { end: true },\n __pivot: elm.__pivot ?? {},\n __type: elm.__type,\n })),\n disconnect: toIdArray(data?.disconnect),\n };\n};\n\nconst processData = (\n metadata: Meta,\n data: Record<string, unknown> = {},\n { withDefaults = false } = {}\n) => {\n const { attributes } = metadata;\n\n const obj: Record<string, unknown> = {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (types.isScalarAttribute(attribute)) {\n const field = createField(attribute);\n\n if (isUndefined(data[attributeName])) {\n if (!isUndefined(attribute.default) && withDefaults) {\n if (typeof attribute.default === 'function') {\n obj[attributeName] = attribute.default();\n } else {\n obj[attributeName] = attribute.default;\n }\n }\n continue;\n }\n\n if (\n 'validate' in field &&\n typeof field.validate === 'function' &&\n data[attributeName] !== null\n ) {\n field.validate(data[attributeName]);\n }\n\n const val = data[attributeName] === null ? null : field.toDB(data[attributeName]);\n\n obj[attributeName] = val;\n }\n\n if (types.isRelationalAttribute(attribute)) {\n // oneToOne & manyToOne\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n const joinColumnName = attribute.joinColumn.name;\n\n // allow setting to null\n const attrValue = !isUndefined(data[attributeName])\n ? data[attributeName]\n : data[joinColumnName];\n\n if (isNull(attrValue)) {\n obj[joinColumnName] = attrValue;\n } else if (!isUndefined(attrValue)) {\n obj[joinColumnName] = toId(attrValue);\n }\n\n continue;\n }\n\n if ('morphColumn' in attribute && attribute.morphColumn && attribute.owner) {\n const { idColumn, typeColumn, typeField = '__type' } = attribute.morphColumn;\n\n const value = data[attributeName] as Record<string, unknown>;\n\n if (value === null) {\n Object.assign(obj, {\n [idColumn.name]: null,\n [typeColumn.name]: null,\n });\n\n continue;\n }\n\n if (!isUndefined(value)) {\n if (!has('id', value) || !has(typeField, value)) {\n throw new Error(`Expects properties ${typeField} an id to make a morph association`);\n }\n\n Object.assign(obj, {\n [idColumn.name]: value.id,\n [typeColumn.name]: value[typeField],\n });\n }\n }\n }\n }\n\n return obj;\n};\nexport const createEntityManager = (db: Database): EntityManager => {\n const repoMap: Record<string, Repository> = {};\n\n return {\n async findOne(uid, params) {\n const states = await db.lifecycles.run('beforeFindOne', uid, { params });\n\n const result = await this.createQueryBuilder(uid)\n .init(params)\n .first()\n .execute<Entity | null>();\n\n await db.lifecycles.run('afterFindOne', uid, { params, result }, states);\n\n return result;\n },\n\n // should we name it findOne because people are used to it ?\n async findMany(uid, params) {\n const states = await db.lifecycles.run('beforeFindMany', uid, { params });\n\n const result = await this.createQueryBuilder(uid).init(params).execute<any[]>();\n\n await db.lifecycles.run('afterFindMany', uid, { params, result }, states);\n\n return result;\n },\n\n async count(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCount', uid, { params });\n\n const res = await this.createQueryBuilder(uid)\n .init(pick(['_q', 'where', 'filters'], params))\n .count()\n .first()\n .execute<{ count: number }>();\n\n const result = Number(res.count);\n\n await db.lifecycles.run('afterCount', uid, { params, result }, states);\n\n return result;\n },\n\n async create(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCreate', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { data } = params;\n\n if (!isPlainObject(data)) {\n throw new Error('Create expects a data object');\n }\n\n const dataToInsert = processData(metadata, data, { withDefaults: true });\n\n const res = await this.createQueryBuilder(uid)\n .insert(dataToInsert)\n .execute<Array<ID | { id: ID }>>();\n\n const id = isRecord(res[0]) ? res[0].id : res[0];\n\n const trx = await strapi.db.transaction();\n try {\n await this.attachRelations(uid, id, data, { transaction: trx.get() });\n\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n await this.createQueryBuilder(uid).where({ id }).delete().execute();\n throw e;\n }\n\n // TODO: in case there is no select or populate specified return the inserted data ?\n // TODO: do not trigger the findOne lifecycles ?\n const result = await this.findOne(uid, {\n where: { id },\n select: params.select,\n populate: params.populate,\n filters: params.filters,\n });\n\n await db.lifecycles.run('afterCreate', uid, { params, result }, states);\n\n return result;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async createMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeCreateMany', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { data } = params;\n\n if (!isArray(data)) {\n throw new Error('CreateMany expects data to be an array');\n }\n\n const dataToInsert = data.map((datum) =>\n processData(metadata, datum, { withDefaults: true })\n );\n\n if (isEmpty(dataToInsert)) {\n throw new Error('Nothing to insert');\n }\n\n const createdEntries = await this.createQueryBuilder(uid)\n .insert(dataToInsert)\n .execute<Array<ID | { id: ID }>>();\n\n const result = {\n count: data.length,\n ids: createdEntries.map((entry) => (typeof entry === 'object' ? entry?.id : entry)),\n };\n\n await db.lifecycles.run('afterCreateMany', uid, { params, result }, states);\n\n return result;\n },\n\n async update(uid, params = {}) {\n const states = await db.lifecycles.run('beforeUpdate', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { where, data } = params;\n\n if (!isPlainObject(data)) {\n throw new Error('Update requires a data object');\n }\n\n if (isEmpty(where)) {\n throw new Error('Update requires a where parameter');\n }\n\n const entity = await this.createQueryBuilder(uid)\n .select('*')\n .where(where)\n .first()\n .execute<{ id: ID }>({ mapResults: false });\n\n if (!entity) {\n return null;\n }\n\n const { id } = entity;\n\n const dataToUpdate = processData(metadata, data);\n\n if (!isEmpty(dataToUpdate)) {\n await this.createQueryBuilder(uid).where({ id }).update(dataToUpdate).execute();\n }\n\n const trx = await strapi.db.transaction();\n try {\n await this.updateRelations(uid, id, data, { transaction: trx.get() });\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n await this.createQueryBuilder(uid).where({ id }).update(entity).execute();\n throw e;\n }\n\n // TODO: do not trigger the findOne lifecycles ?\n const result = await this.findOne(uid, {\n where: { id },\n select: params.select,\n populate: params.populate,\n filters: params.filters,\n });\n\n await db.lifecycles.run('afterUpdate', uid, { params, result }, states);\n\n return result;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async updateMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeUpdateMany', uid, { params });\n\n const metadata = db.metadata.get(uid);\n const { where, data } = params;\n\n const dataToUpdate = processData(metadata, data);\n\n if (isEmpty(dataToUpdate)) {\n throw new Error('Update requires data');\n }\n\n const updatedRows = await this.createQueryBuilder(uid)\n .where(where)\n .update(dataToUpdate)\n .execute<number>();\n\n const result = { count: updatedRows };\n\n await db.lifecycles.run('afterUpdateMany', uid, { params, result }, states);\n\n return result;\n },\n\n async delete(uid, params = {}) {\n const states = await db.lifecycles.run('beforeDelete', uid, { params });\n\n const { where, select, populate } = params;\n\n if (isEmpty(where)) {\n throw new Error('Delete requires a where parameter');\n }\n\n // TODO: do not trigger the findOne lifecycles ?\n const entity = await this.findOne(uid, {\n select: select && ['id'].concat(select),\n where,\n populate,\n });\n\n if (!entity) {\n return null;\n }\n\n const { id } = entity;\n\n await this.createQueryBuilder(uid).where({ id }).delete().execute();\n\n const trx = await strapi.db.transaction();\n try {\n await this.deleteRelations(uid, id, { transaction: trx.get() });\n\n await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n\n await db.lifecycles.run('afterDelete', uid, { params, result: entity }, states);\n\n return entity;\n },\n\n // TODO: where do we handle relation processing for many queries ?\n async deleteMany(uid, params = {}) {\n const states = await db.lifecycles.run('beforeDeleteMany', uid, { params });\n\n const { where } = params;\n\n const deletedRows = await this.createQueryBuilder(uid)\n .where(where)\n .delete()\n .execute<number>({ mapResults: false });\n\n const result = { count: deletedRows };\n\n await db.lifecycles.run('afterDeleteMany', uid, { params, result }, states);\n\n return result;\n },\n\n /**\n * Attach relations to a new entity\n */\n async attachRelations(uid, id, data, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n const isValidLink = has(attributeName, data) && !isNil(data[attributeName]);\n\n if (attribute.type !== 'relation' || !isValidLink) {\n continue;\n }\n\n const cleanRelationData = toAssocs(data[attributeName]);\n\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\n /**\n * morphOne and morphMany relations\n */\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n if (targetAttribute.type !== 'relation') {\n throw new Error(\n `Expected target attribute ${target}.${morphBy} to be a relation attribute`\n );\n }\n\n if (targetAttribute.relation === 'morphToOne') {\n // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n const relId = toId(cleanRelationData.set?.[0]);\n\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: id, [typeColumn.name]: uid })\n .where({ id: relId })\n .transacting(trx)\n .execute();\n } else if (targetAttribute.relation === 'morphToMany') {\n const { joinTable } = targetAttribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n if (isEmpty(cleanRelationData.set)) {\n continue;\n }\n\n const rows =\n cleanRelationData.set?.map((data, idx) => {\n return {\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n field: attributeName,\n };\n }) ?? [];\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n }\n\n continue;\n } else if (attribute.relation === 'morphToOne') {\n /**\n * morphToOne\n */\n // handled on the entry itself\n continue;\n } else if (attribute.relation === 'morphToMany') {\n /**\n * morphToMany\n */\n const { joinTable } = attribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n if (isEmpty(cleanRelationData.set) && isEmpty(cleanRelationData.connect)) {\n continue;\n }\n\n // set happens before connect/disconnect\n const dataset = cleanRelationData.set || cleanRelationData.connect || [];\n\n const rows = dataset.map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField as '__type'],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })) satisfies Record<string, any>[];\n\n const orderMap = relationsOrderer(\n [],\n morphColumn.idColumn.name,\n 'order',\n true // Always make a strict connect when inserting\n )\n .connect(\n // Merge id & __type to get a single id key\n dataset.map(encodePolymorphicRelation({ idColumn: 'id', typeColumn: typeField }))\n )\n .get()\n // set the order based on the order of the ids\n .reduce((acc, rel, idx) => ({ ...acc, [rel.id]: idx + 1 }), {} as Record<ID, number>);\n\n rows.forEach((row: Record<string, unknown>) => {\n const rowId = row[morphColumn.idColumn.name] as ID;\n const rowType = row[morphColumn.typeColumn.name] as string;\n const encodedId = encodePolymorphicId(rowId, rowType);\n\n row.order = orderMap[encodedId];\n });\n\n // delete previous relations\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows as any, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n\n continue;\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n const relIdsToAdd = toIds(cleanRelationData.set);\n if (\n attribute.relation === 'oneToOne' &&\n isBidirectional(attribute) &&\n relIdsToAdd.length\n ) {\n await this.createQueryBuilder(uid)\n .where({ [attribute.joinColumn.name]: relIdsToAdd, id: { $ne: id } })\n .update({ [attribute.joinColumn.name]: null })\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n // oneToOne oneToMany on the non owning side\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n // TODO: check it is an id & the entity exists (will throw due to FKs otherwise so not a big pbl in SQL)\n const relIdsToAdd = toIds(cleanRelationData.set);\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n\n await this.createQueryBuilder(target)\n .update({ [attribute.joinColumn.referencedColumn]: id })\n // NOTE: works if it is an array or a single id\n .where({ id: relIdsToAdd })\n .transacting(trx)\n .execute();\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n // need to set the column on the target\n\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn, orderColumnName, inverseOrderColumnName } =\n joinTable;\n\n const relsToAdd = (cleanRelationData.set || cleanRelationData.connect) ?? [];\n const relIdsToadd = toIds(relsToAdd);\n\n if (isBidirectional(attribute) && isOneToAny(attribute)) {\n await deletePreviousOneToAnyRelations({\n id,\n attribute,\n relIdsToadd,\n db,\n transaction: trx,\n });\n }\n\n // prepare new relations to insert\n const insert = uniqBy('id', relsToAdd).map((data) => {\n return {\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: data.id,\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n };\n }) satisfies Record<string, any>[];\n\n // add order value\n if (cleanRelationData.set && hasOrderColumn(attribute)) {\n insert.forEach((data: Record<string, unknown>, idx) => {\n data[orderColumnName] = idx + 1;\n });\n } else if (cleanRelationData.connect && hasOrderColumn(attribute)) {\n // use position attributes to calculate order\n const orderMap = relationsOrderer(\n [],\n inverseJoinColumn.name,\n joinTable.orderColumnName,\n true // Always make an strict connect when inserting\n )\n .connect(relsToAdd)\n .get()\n // set the order based on the order of the ids\n .reduce((acc, rel, idx) => ({ ...acc, [rel.id]: idx }), {} as Record<ID, number>);\n\n insert.forEach((row: Record<string, unknown>) => {\n row[orderColumnName] = orderMap[row[inverseJoinColumn.name] as number];\n });\n }\n\n // add inv_order value\n if (hasInverseOrderColumn(attribute)) {\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, relIdsToadd)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {} as Record<string, number>\n );\n\n insert.forEach((rel) => {\n rel[inverseOrderColumnName] = (maxMap[rel[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n if (insert.length === 0) {\n continue;\n }\n\n // insert new relations\n await this.createQueryBuilder(joinTable.name).insert(insert).transacting(trx).execute();\n }\n }\n },\n\n /**\n * Updates relations of an existing entity\n */\n // TODO: check relation exists (handled by FKs except for polymorphics)\n async updateRelations(uid, id, data, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (attribute.type !== 'relation' || !has(attributeName, data)) {\n continue;\n }\n const cleanRelationData = toAssocs(data[attributeName]);\n\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n // update instead of deleting because the relation is directly on the entity table\n // and not in a join table\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: null, [typeColumn.name]: null })\n .where({ [idColumn.name]: id, [typeColumn.name]: uid })\n .transacting(trx)\n .execute();\n\n if (!isNull(cleanRelationData.set)) {\n const relId = toIds(cleanRelationData.set?.[0]);\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: id, [typeColumn.name]: uid })\n .where({ id: relId })\n .transacting(trx)\n .execute();\n }\n } else if (\n targetAttribute.type === 'relation' &&\n targetAttribute.relation === 'morphToMany'\n ) {\n const { joinTable } = targetAttribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n const hasSet = !isEmpty(cleanRelationData.set);\n const hasConnect = !isEmpty(cleanRelationData.connect);\n const hasDisconnect = !isEmpty(cleanRelationData.disconnect);\n\n // for connect/disconnect without a set, only modify those relations\n if (!hasSet && (hasConnect || hasDisconnect)) {\n // delete disconnects and connects (to prevent duplicates when we add them later)\n const idsToDelete = [\n ...(cleanRelationData.disconnect || []),\n ...(cleanRelationData.connect || []),\n ];\n\n if (!isEmpty(idsToDelete)) {\n const where = {\n $or: idsToDelete.map((item: any) => {\n return {\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n [joinColumn.name]: item.id,\n ...(joinTable.on || {}),\n field: attributeName,\n };\n }),\n };\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where(where)\n .transacting(trx)\n .execute();\n }\n\n // connect relations\n if (hasConnect) {\n // Query database to find the order of the last relation\n const start = await this.createQueryBuilder(joinTable.name)\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n })\n .max('order')\n .first()\n .transacting(trx)\n .execute();\n\n const startOrder = (start as any)?.max || 0;\n\n const rows = (cleanRelationData.connect ?? []).map((data, idx) => ({\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: startOrder + idx + 1,\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n await this.createQueryBuilder(joinTable.name)\n .insert(rows)\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n // delete all relations\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n field: attributeName,\n })\n .transacting(trx)\n .execute();\n\n if (hasSet) {\n const rows = (cleanRelationData.set ?? []).map((data, idx) => ({\n [joinColumn.name]: data.id,\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n }\n }\n\n continue;\n }\n\n if (attribute.relation === 'morphToOne') {\n // handled on the entry itself\n continue;\n }\n\n if (attribute.relation === 'morphToMany') {\n const { joinTable } = attribute;\n const { joinColumn, morphColumn } = joinTable;\n\n const { idColumn, typeColumn, typeField = '__type' } = morphColumn;\n\n const hasSet = !isEmpty(cleanRelationData.set);\n const hasConnect = !isEmpty(cleanRelationData.connect);\n const hasDisconnect = !isEmpty(cleanRelationData.disconnect);\n\n // for connect/disconnect without a set, only modify those relations\n if (!hasSet && (hasConnect || hasDisconnect)) {\n // delete disconnects and connects (to prevent duplicates when we add them later)\n const idsToDelete = [\n ...(cleanRelationData.disconnect || []),\n ...(cleanRelationData.connect || []),\n ];\n\n const rowsToDelete = [\n ...(cleanRelationData.disconnect ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })),\n ...(cleanRelationData.connect ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n // @ts-expect-error TODO\n [typeColumn.name]: data[typeField],\n ...(('on' in joinTable && joinTable.on) || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })),\n ];\n\n const adjacentRelations = await this.createQueryBuilder(joinTable.name)\n .where({\n $or: [\n {\n [joinColumn.name]: id,\n [idColumn.name]: {\n $in: compact(\n cleanRelationData.connect?.map(\n (r) => r.position?.after || r.position?.before\n )\n ),\n },\n },\n {\n [joinColumn.name]: id,\n order: this.createQueryBuilder(joinTable.name)\n .max('order')\n .where({ [joinColumn.name]: id })\n .where(joinTable.on || {})\n .transacting(trx)\n .getKnexQuery(),\n },\n ],\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, any>>>();\n\n if (!isEmpty(idsToDelete)) {\n const where = {\n $or: idsToDelete.map((item: any) => {\n return {\n [idColumn.name]: item.id,\n [typeColumn.name]: item[typeField],\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n };\n }),\n };\n\n // delete previous relations\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where(where)\n .transacting(trx)\n .execute();\n\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rowsToDelete as any, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n }\n\n // connect relations\n if (hasConnect) {\n const dataset = cleanRelationData.connect || [];\n\n const rows = dataset.map((data) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField as '__type'],\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n field: attributeName,\n })) satisfies Record<string, any>[];\n\n const orderMap = relationsOrderer(\n // Merge id & __type to get a single id key\n adjacentRelations.map(\n encodePolymorphicRelation({\n idColumn: idColumn.name,\n typeColumn: typeColumn.name,\n })\n ),\n idColumn.name,\n 'order',\n cleanRelationData.options?.strict\n )\n .connect(\n // Merge id & __type to get a single id key\n dataset.map(encodePolymorphicRelation({ idColumn: 'id', typeColumn: '__type' }))\n )\n .getOrderMap();\n\n rows.forEach((row: Record<string, unknown>) => {\n const rowId = row[idColumn.name] as number;\n const rowType = row[typeColumn.name] as string;\n const encodedId = encodePolymorphicId(rowId, rowType);\n\n row.order = orderMap[encodedId];\n });\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n }\n\n continue;\n }\n\n if (hasSet) {\n // delete all relations for this entity\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n })\n .transacting(trx)\n .execute();\n\n const rows = (cleanRelationData.set ?? []).map((data, idx) => ({\n [joinColumn.name]: id,\n [idColumn.name]: data.id,\n [typeColumn.name]: data[typeField],\n field: attributeName,\n ...(joinTable.on || {}),\n ...(data.__pivot || {}),\n order: idx + 1,\n })) satisfies Record<string, any>[];\n\n await deleteRelatedMorphOneRelationsAfterMorphToManyUpdate(rows, {\n uid,\n attributeName,\n joinTable,\n db,\n transaction: trx,\n });\n\n await this.createQueryBuilder(joinTable.name).insert(rows).transacting(trx).execute();\n }\n\n continue;\n }\n\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n // handled in the row itself\n continue;\n }\n\n // oneToOne oneToMany on the non owning side.\n // Since it is a join column no need to remove previous relations\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n\n if (!isNull(cleanRelationData.set)) {\n const relIdsToAdd = toIds(cleanRelationData.set);\n await this.createQueryBuilder(target)\n .where({ id: relIdsToAdd })\n .update({ [attribute.joinColumn.referencedColumn]: id })\n .transacting(trx)\n .execute();\n }\n }\n\n if (attribute.joinTable) {\n const { joinTable } = attribute;\n const { joinColumn, inverseJoinColumn, orderColumnName, inverseOrderColumnName } =\n joinTable;\n const select = [joinColumn.name, inverseJoinColumn.name];\n if (hasOrderColumn(attribute)) {\n select.push(orderColumnName);\n }\n if (hasInverseOrderColumn(attribute)) {\n select.push(inverseOrderColumnName);\n }\n\n // only delete relations\n if (isNull(cleanRelationData.set)) {\n await deleteRelations({ id, attribute, db, relIdsToDelete: 'all', transaction: trx });\n } else {\n const isPartialUpdate = !has('set', cleanRelationData);\n let relIdsToaddOrMove: ID[];\n\n if (isPartialUpdate) {\n if (isAnyToOne(attribute)) {\n // TODO: V5 find a fix to connect multiple versions of a document at the same time on xToOne relations\n // cleanRelationData.connect = cleanRelationData.connect?.slice(-1);\n }\n relIdsToaddOrMove = toIds(cleanRelationData.connect);\n const relIdsToDelete = toIds(\n differenceWith(\n isEqual,\n cleanRelationData.disconnect,\n cleanRelationData.connect ?? []\n )\n );\n\n if (!isEmpty(relIdsToDelete)) {\n await deleteRelations({ id, attribute, db, relIdsToDelete, transaction: trx });\n }\n\n if (isEmpty(cleanRelationData.connect)) {\n continue;\n }\n\n // Fetch current relations to handle ordering\n let currentMovingRels: Record<string, ID>[] = [];\n\n if (hasOrderColumn(attribute) || hasInverseOrderColumn(attribute)) {\n currentMovingRels = await this.createQueryBuilder(joinTable.name)\n .select(select)\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $in: relIdsToaddOrMove },\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute();\n }\n\n // prepare relations to insert\n const insert = uniqBy('id', cleanRelationData.connect).map((relToAdd) => ({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: relToAdd.id,\n ...(joinTable.on || {}),\n ...(relToAdd.__pivot || {}),\n }));\n\n if (hasOrderColumn(attribute)) {\n // Get all adjacent relations and the one with the highest order\n const adjacentRelations = await this.createQueryBuilder(joinTable.name)\n .where({\n $or: [\n {\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: {\n $in: compact(\n cleanRelationData.connect?.map(\n (r) => r.position?.after || r.position?.before\n )\n ),\n },\n },\n {\n [joinColumn.name]: id,\n [orderColumnName]: this.createQueryBuilder(joinTable.name)\n .max(orderColumnName)\n .where({ [joinColumn.name]: id })\n .where(joinTable.on || {})\n .transacting(trx)\n .getKnexQuery(),\n },\n ],\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, any>>>();\n\n const orderMap = relationsOrderer(\n adjacentRelations,\n inverseJoinColumn.name,\n joinTable.orderColumnName,\n cleanRelationData.options?.strict\n )\n .connect(cleanRelationData.connect ?? [])\n .getOrderMap();\n\n insert.forEach((row) => {\n row[orderColumnName] = orderMap[row[inverseJoinColumn.name]];\n });\n }\n\n // add inv order value\n if (hasInverseOrderColumn(attribute)) {\n const nonExistingRelsIds: ID[] = difference(\n relIdsToaddOrMove,\n map(inverseJoinColumn.name, currentMovingRels)\n );\n\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, nonExistingRelsIds)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {}\n );\n\n insert.forEach((row) => {\n row[inverseOrderColumnName] = (maxMap[row[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n // insert rows\n const query = this.createQueryBuilder(joinTable.name)\n .insert(insert)\n .onConflict(joinTable.pivotColumns)\n .transacting(trx);\n\n if (hasOrderColumn(attribute)) {\n query.merge([orderColumnName]);\n } else {\n query.ignore();\n }\n\n await query.execute();\n\n // remove gap between orders\n await cleanOrderColumns({ attribute, db, id, transaction: trx });\n } else {\n if (isAnyToOne(attribute)) {\n cleanRelationData.set = cleanRelationData.set?.slice(-1);\n }\n // overwrite all relations\n relIdsToaddOrMove = toIds(cleanRelationData.set);\n await deleteRelations({\n id,\n attribute,\n db,\n relIdsToDelete: 'all',\n relIdsToNotDelete: relIdsToaddOrMove,\n transaction: trx,\n });\n\n if (isEmpty(cleanRelationData.set)) {\n continue;\n }\n\n const insert = uniqBy('id', cleanRelationData.set).map((relToAdd) => ({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: relToAdd.id,\n ...(joinTable.on || {}),\n ...(relToAdd.__pivot || {}),\n }));\n\n // add order value\n if (hasOrderColumn(attribute)) {\n insert.forEach((row, idx) => {\n row[orderColumnName] = idx + 1;\n });\n }\n\n // add inv order value\n if (hasInverseOrderColumn(attribute)) {\n const existingRels = await this.createQueryBuilder(joinTable.name)\n .select(inverseJoinColumn.name)\n .where({\n [joinColumn.name]: id,\n [inverseJoinColumn.name]: { $in: relIdsToaddOrMove },\n })\n .where(joinTable.on || {})\n .transacting(trx)\n .execute<Array<Record<string, ID>>>();\n\n const inverseRelsIds = map(inverseJoinColumn.name, existingRels);\n\n const nonExistingRelsIds = difference(relIdsToaddOrMove, inverseRelsIds);\n\n const maxResults = await db\n .getConnection()\n .select(inverseJoinColumn.name)\n .max(inverseOrderColumnName, { as: 'max' })\n .whereIn(inverseJoinColumn.name, nonExistingRelsIds)\n .where(joinTable.on || {})\n .groupBy(inverseJoinColumn.name)\n .from(joinTable.name)\n .transacting(trx);\n\n const maxMap = maxResults.reduce(\n (acc, res) => Object.assign(acc, { [res[inverseJoinColumn.name]]: res.max }),\n {}\n );\n\n insert.forEach((row: any) => {\n row[inverseOrderColumnName] = (maxMap[row[inverseJoinColumn.name]] || 0) + 1;\n });\n }\n\n // insert rows\n const query = this.createQueryBuilder(joinTable.name)\n .insert(insert)\n .onConflict(joinTable.pivotColumns)\n .transacting(trx);\n\n if (hasOrderColumn(attribute)) {\n query.merge([orderColumnName]);\n } else {\n query.ignore();\n }\n\n await query.execute();\n }\n\n // Delete the previous relations for oneToAny relations\n if (isBidirectional(attribute) && isOneToAny(attribute)) {\n await deletePreviousOneToAnyRelations({\n id,\n attribute,\n relIdsToadd: relIdsToaddOrMove,\n db,\n transaction: trx,\n });\n }\n\n // Delete the previous relations for anyToOne relations\n if (isAnyToOne(attribute)) {\n await deletePreviousAnyToOneRelations({\n id,\n attribute,\n relIdToadd: relIdsToaddOrMove[0],\n db,\n transaction: trx,\n });\n }\n }\n }\n }\n },\n\n /**\n * Delete relational associations of an existing entity\n * This removes associations but doesn't do cascade deletions for components for example. This will be handled on the entity service layer instead\n * NOTE: Most of the deletion should be handled by ON DELETE CASCADE for dialects that have FKs\n *\n * @param {EntityManager} em - entity manager instance\n * @param {Metadata} metadata - model metadta\n * @param {ID} id - entity ID\n */\n async deleteRelations(uid, id, options) {\n const { attributes } = db.metadata.get(uid);\n const { transaction: trx } = options ?? {};\n\n for (const attributeName of Object.keys(attributes)) {\n const attribute = attributes[attributeName];\n\n if (attribute.type !== 'relation') {\n continue;\n }\n\n /*\n if morphOne | morphMany\n if morphBy is morphToOne\n set null\n if morphBy is morphToOne\n delete links\n */\n if (attribute.relation === 'morphOne' || attribute.relation === 'morphMany') {\n const { target, morphBy } = attribute;\n\n const targetAttribute = db.metadata.get(target).attributes[morphBy];\n\n if (targetAttribute.type === 'relation' && targetAttribute.relation === 'morphToOne') {\n // set columns\n const { idColumn, typeColumn } = targetAttribute.morphColumn;\n\n await this.createQueryBuilder(target)\n .update({ [idColumn.name]: null, [typeColumn.name]: null })\n .where({ [idColumn.name]: id, [typeColumn.name]: uid })\n .transacting(trx)\n .execute();\n } else if (\n targetAttribute.type === 'relation' &&\n targetAttribute.relation === 'morphToMany'\n ) {\n const { joinTable } = targetAttribute;\n const { morphColumn } = joinTable;\n\n const { idColumn, typeColumn } = morphColumn;\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [idColumn.name]: id,\n [typeColumn.name]: uid,\n ...(joinTable.on || {}),\n field: attributeName,\n })\n .transacting(trx)\n .execute();\n }\n\n continue;\n }\n\n /*\n if morphToOne\n nothing to do\n */\n if (attribute.relation === 'morphToOne') {\n // do nothing\n }\n\n /*\n if morphToMany\n delete links\n */\n if (attribute.relation === 'morphToMany') {\n const { joinTable } = attribute;\n const { joinColumn } = joinTable;\n\n await this.createQueryBuilder(joinTable.name)\n .delete()\n .where({\n [joinColumn.name]: id,\n ...(joinTable.on || {}),\n })\n .transacting(trx)\n .execute();\n\n continue;\n }\n\n // do not need to delete links when using foreign keys\n if (db.dialect.usesForeignKeys()) {\n return;\n }\n\n // NOTE: we do not remove existing associations with the target as it should handled by unique FKs instead\n if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {\n // nothing to do => relation already added on the table\n continue;\n }\n\n // oneToOne oneToMany on the non owning side.\n if ('joinColumn' in attribute && attribute.joinColumn && !attribute.owner) {\n // need to set the column on the target\n const { target } = attribute;\n\n await this.createQueryBuilder(target)\n .where({ [attribute.joinColumn.referencedColumn]: id })\n .update({ [attribute.joinColumn.referencedColumn]: null })\n .transacting(trx)\n .execute();\n }\n\n if ('joinTable' in attribute && attribute.joinTable) {\n await deleteRelations({ id, attribute, db, relIdsToDelete: 'all', transaction: trx });\n }\n }\n },\n\n // TODO: add lifecycle events\n async populate(uid, entity, populate) {\n const entry = await this.findOne(uid, {\n select: ['id'],\n where: { id: entity.id },\n populate,\n });\n\n return { ...entity, ...entry };\n },\n\n // TODO: add lifecycle events\n async load(uid, entity, fields, populate) {\n const { attributes } = db.metadata.get(uid);\n\n const fieldsArr = castArray(fields);\n fieldsArr.forEach((field) => {\n const attribute = attributes[field];\n\n if (!attribute || attribute.type !== 'relation') {\n throw new Error(`Invalid load. Expected ${field} to be a relational attribute`);\n }\n });\n\n const entry = await this.findOne(uid, {\n select: ['id'],\n where: { id: entity.id },\n populate: fieldsArr.reduce(\n (acc, field) => {\n acc[field] = populate || true;\n return acc;\n },\n {} as Record<string, unknown>\n ),\n });\n\n if (!entry) {\n return null;\n }\n\n if (Array.isArray(fields)) {\n return pick(fields, entry);\n }\n\n return entry[fields];\n },\n\n // cascading\n // aggregations\n // -> avg\n // -> min\n // -> max\n // -> grouping\n\n // formulas\n // custom queries\n\n // utilities\n // -> map result\n // -> map input\n\n // extra features\n // -> virtuals\n // -> private\n\n createQueryBuilder(uid) {\n return createQueryBuilder(uid, db);\n },\n\n getRepository(uid) {\n if (!repoMap[uid]) {\n repoMap[uid] = createRepository(uid, db);\n }\n\n return repoMap[uid];\n },\n };\n};\n","import type { Database } from '..';\n\nexport interface Options {\n db: Database;\n tableName: string;\n}\n\nexport const createStorage = (opts: Options) => {\n const { db, tableName } = opts;\n\n const hasMigrationTable = () => db.getSchemaConnection().hasTable(tableName);\n\n const createMigrationTable = () => {\n return db.getSchemaConnection().createTable(tableName, (table) => {\n table.increments('id');\n table.string('name');\n table.datetime('time', { useTz: false });\n });\n };\n\n return {\n async logMigration({ name }: { name: string }) {\n await db\n .getConnection()\n .insert({\n name,\n time: new Date(),\n })\n .into(tableName);\n },\n\n async unlogMigration({ name }: { name: string }) {\n await db.getConnection(tableName).del().where({ name });\n },\n\n async executed() {\n if (!(await hasMigrationTable())) {\n await createMigrationTable();\n return [];\n }\n\n const logs = await db.getConnection(tableName).select().from(tableName).orderBy('time');\n\n return logs.map((log: { name: string }) => log.name);\n },\n };\n};\n","import type { Resolver } from 'umzug';\nimport type { Knex } from 'knex';\n\nimport type { Database } from '..';\n\nexport interface UserMigrationProvider {\n shouldRun(): Promise<boolean>;\n up(): Promise<void>;\n down(): Promise<void>;\n}\n\nexport interface InternalMigrationProvider {\n register(migration: Migration): void;\n shouldRun(): Promise<boolean>;\n up(): Promise<void>;\n down(): Promise<void>;\n}\nexport interface MigrationProvider {\n providers: { internal: InternalMigrationProvider };\n shouldRun(): Promise<boolean>;\n up(): Promise<void>;\n down(): Promise<void>;\n}\n\nexport type Context = { db: Database };\n\nexport type MigrationResolver = Resolver<Context>;\n\nexport type MigrationFn = (knex: Knex.Transaction, db: Database) => Promise<void>;\n\nexport type Migration = {\n name: string;\n up: MigrationFn;\n down: MigrationFn;\n};\n\nexport const wrapTransaction = (db: Database) => (fn: MigrationFn) => () => {\n return db.transaction(({ trx }) => Promise.resolve(fn(trx, db)));\n};\n","export const transformLogMessage = (level: string, message: unknown) => {\n if (typeof message === 'string') {\n return { level, message };\n }\n\n if (typeof message === 'object' && message !== null) {\n if ('event' in message && 'name' in message) {\n return {\n level,\n message: `[internal migration]: ${message.event} ${message?.name}`,\n timestamp: Date.now(),\n };\n }\n }\n\n // NOTE: the message typing are too loose so in practice we should never arrive here.\n return '';\n};\n","import fse from 'fs-extra';\nimport { Umzug } from 'umzug';\n\nimport { createStorage } from './storage';\nimport { wrapTransaction } from './common';\nimport { transformLogMessage } from './logger';\n\nimport type { MigrationResolver, UserMigrationProvider } from './common';\nimport type { Database } from '..';\n\n// TODO: check multiple commands in one sql statement\nconst migrationResolver: MigrationResolver = ({ name, path, context }) => {\n const { db } = context;\n\n if (!path) {\n throw new Error(`Migration ${name} has no path`);\n }\n\n // if sql file run with knex raw\n if (path.match(/\\.sql$/)) {\n const sql = fse.readFileSync(path, 'utf8');\n\n return {\n name,\n up: wrapTransaction(db)((knex) => knex.raw(sql)),\n async down() {\n throw new Error('Down migration is not supported for sql files');\n },\n };\n }\n\n // NOTE: we can add some ts register if we want to handle ts migration files at some point\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const migration = require(path);\n return {\n name,\n up: wrapTransaction(db)(migration.up),\n down: wrapTransaction(db)(migration.down),\n };\n};\n\nexport const createUserMigrationProvider = (db: Database): UserMigrationProvider => {\n const dir = db.config.settings.migrations.dir;\n\n fse.ensureDirSync(dir);\n\n const context = { db };\n\n const umzugProvider = new Umzug({\n storage: createStorage({ db, tableName: 'strapi_migrations' }),\n logger: {\n info(message) {\n // NOTE: only log internal migration in debug mode\n db.logger.info(transformLogMessage('info', message));\n },\n warn(message) {\n db.logger.warn(transformLogMessage('warn', message));\n },\n error(message) {\n db.logger.error(transformLogMessage('error', message));\n },\n debug(message) {\n db.logger.debug(transformLogMessage('debug', message));\n },\n },\n context,\n migrations: {\n glob: ['*.{js,sql}', { cwd: dir }],\n resolve: migrationResolver,\n },\n });\n\n return {\n async shouldRun() {\n const pendingMigrations = await umzugProvider.pending();\n return pendingMigrations.length > 0 && db.config?.settings?.runMigrations === true;\n },\n async up() {\n await umzugProvider.up();\n },\n async down() {\n await umzugProvider.down();\n },\n };\n};\n","/**\n * NOTE: This migration avoids using the `identifiers` utility.\n * As the `5.0.0-01-convert-identifiers-long-than-max-length`\n * migration does not convert the `localizations` join tables, as they are not\n * tables that exist anymore in v5 and are not in the db metadata.\n *\n * This migration therefore relies on the fact that those tables still exist, and\n * references them directly.\n *\n * Database join table name: `categories_localizations_links`\n * Actual `identifiers` returned join table name: `categories_localizations_lnk`\n *\n */\nimport { createId } from '@paralleldrive/cuid2';\nimport { snakeCase } from 'lodash/fp';\nimport type { Knex } from 'knex';\n\nimport type { Migration } from '../common';\nimport type { Database } from '../..';\nimport type { Meta } from '../../metadata';\n\ninterface Params {\n joinColumn: string;\n inverseJoinColumn: string;\n tableName: string;\n joinTableName: string;\n}\n\nconst QUERIES = {\n async postgres(knex: Knex, params: Params) {\n const res = await knex.raw(\n `\n SELECT :tableName:.id as id, string_agg(DISTINCT :inverseJoinColumn:::character varying, ',') as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :tableName:.id, :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n\n return res.rows;\n },\n async mysql(knex: Knex, params: Params) {\n const [res] = await knex.raw(\n `\n SELECT :tableName:.id as id, group_concat(DISTINCT :inverseJoinColumn:) as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :tableName:.id, :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n\n return res;\n },\n async sqlite(knex: Knex, params: Params) {\n return knex.raw(\n `\n SELECT :tableName:.id as id, group_concat(DISTINCT :inverseJoinColumn:) as other_ids\n FROM :tableName:\n LEFT JOIN :joinTableName: ON :tableName:.id = :joinTableName:.:joinColumn:\n WHERE :tableName:.document_id IS NULL\n GROUP BY :joinTableName:.:joinColumn:\n LIMIT 1;\n `,\n params\n );\n },\n};\n\nconst getNextIdsToCreateDocumentId = async (\n db: Database,\n knex: Knex,\n {\n joinColumn,\n inverseJoinColumn,\n tableName,\n joinTableName,\n }: {\n joinColumn: string;\n inverseJoinColumn: string;\n tableName: string;\n joinTableName: string;\n }\n): Promise<number[]> => {\n const res = await QUERIES[db.dialect.client as keyof typeof QUERIES](knex, {\n joinColumn,\n inverseJoinColumn,\n tableName,\n joinTableName,\n });\n\n if (res.length > 0) {\n const row = res[0];\n const otherIds = row.other_ids\n ? row.other_ids.split(',').map((v: string) => parseInt(v, 10))\n : [];\n\n return [row.id, ...otherIds];\n }\n\n return [];\n};\n\n// Migrate document ids for tables that have localizations\nconst migrateDocumentIdsWithLocalizations = async (db: Database, knex: Knex, meta: Meta) => {\n const singularName = meta.singularName.toLowerCase();\n const joinColumn = snakeCase(`${singularName}_id`);\n const inverseJoinColumn = snakeCase(`inv_${singularName}_id`);\n let ids: number[];\n\n do {\n ids = await getNextIdsToCreateDocumentId(db, knex, {\n joinColumn,\n inverseJoinColumn,\n tableName: meta.tableName,\n joinTableName: snakeCase(`${meta.tableName}_localizations_links`),\n });\n\n if (ids.length > 0) {\n await knex(meta.tableName).update({ document_id: createId() }).whereIn('id', ids);\n }\n } while (ids.length > 0);\n};\n\n// Migrate document ids for tables that don't have localizations\nconst migrationDocumentIds = async (db: Database, knex: Knex, meta: Meta) => {\n let updatedRows: number;\n\n do {\n updatedRows = await knex(meta.tableName)\n .update({ document_id: createId() })\n .whereIn(\n 'id',\n knex(meta.tableName)\n .select('id')\n .from(knex(meta.tableName).select('id').whereNull('document_id').limit(1).as('sub_query'))\n );\n } while (updatedRows > 0);\n};\n\nconst createDocumentIdColumn = async (knex: Knex, tableName: string) => {\n await knex.schema.alterTable(tableName, (table) => {\n table.string('document_id');\n });\n};\n\nconst hasLocalizationsJoinTable = async (knex: Knex, tableName: string) => {\n const joinTableName = snakeCase(`${tableName}_localizations_links`);\n return knex.schema.hasTable(joinTableName);\n};\n\nexport const createdDocumentId: Migration = {\n name: '5.0.0-02-created-document-id',\n async up(knex, db) {\n // do sth\n for (const meta of db.metadata.values()) {\n const hasTable = await knex.schema.hasTable(meta.tableName);\n\n if (!hasTable) {\n continue;\n }\n\n if ('documentId' in meta.attributes) {\n // add column if doesn't exist\n const hasDocumentIdColumn = await knex.schema.hasColumn(meta.tableName, 'document_id');\n\n if (hasDocumentIdColumn) {\n continue;\n }\n\n await createDocumentIdColumn(knex, meta.tableName);\n\n if (await hasLocalizationsJoinTable(knex, meta.tableName)) {\n await migrateDocumentIdsWithLocalizations(db, knex, meta);\n } else {\n await migrationDocumentIds(db, knex, meta);\n }\n }\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n","import type { Knex } from 'knex';\nimport createDebug from 'debug';\nimport type { Migration } from '../common';\nimport type { Metadata } from '../../metadata';\nimport { type Database } from '../..';\nimport { identifiers } from '../../utils/identifiers';\n\nconst debug = createDebug('strapi::database::migration');\n\ntype NameDiff<T> = {\n short: T;\n full: T;\n};\n\ntype IndexDiff = NameDiff<{ index: number; key: string; tableName: string; indexName: string }>;\n\n// key isn't really used except for debugging, but it's helpful to track down problems\ntype IdentifierDiffs = {\n indexes: IndexDiff[];\n tables: NameDiff<{ index: number; key: string; tableName: string }>[];\n columns: NameDiff<{ index: number; key: string; tableName: string; columnName: string }>[];\n};\n\nexport const renameIdentifiersLongerThanMaxLength: Migration = {\n name: '5.0.0-rename-identifiers-longer-than-max-length',\n async up(knex, db) {\n const md = db.metadata;\n\n const diffs = findDiffs(md);\n // migrate indexes before tables so we know to target the original tableName\n for (const indexDiff of diffs.indexes) {\n await renameIndex(knex, db, indexDiff);\n }\n\n // migrate columns before table names so we know to target the original tableName\n for (const columnDiff of diffs.columns) {\n const { full, short } = columnDiff;\n const tableName = full.tableName;\n\n const hasTable = await knex.schema.hasTable(tableName);\n\n if (hasTable) {\n // tablebuilder methods MUST be synchronous and so you cannot use async inside it, which is why we check the column here\n const hasColumn = await knex.schema.hasColumn(tableName, full.columnName);\n\n if (hasColumn) {\n await knex.schema.alterTable(tableName, async (table) => {\n debug(`renaming column ${full.columnName} to ${short.columnName}`);\n table.renameColumn(full.columnName, short.columnName);\n });\n }\n }\n }\n\n // migrate table names\n for (const tableDiff of diffs.tables) {\n const hasTable = await knex.schema.hasTable(tableDiff.full.tableName);\n\n if (hasTable) {\n debug(`renaming table ${tableDiff.full.tableName} to ${tableDiff.short.tableName}`);\n await knex.schema.renameTable(tableDiff.full.tableName, tableDiff.short.tableName);\n }\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n\nconst renameIndex = async (knex: Knex, db: Database, diff: IndexDiff) => {\n const client = db.config.connection.client;\n const short = diff.short;\n const full = diff.full;\n\n if (full.indexName === short.indexName) {\n debug(`not renaming index ${full.indexName} because name hasn't changed`);\n return;\n }\n\n // fk indexes can't be easily renamed, and will be recreated by db sync\n // if this misses something due to the loose string matching, it's not critical, it just means index will be rebuilt in db sync\n if (short.indexName.endsWith('fk') || full.indexName.endsWith('fk')) {\n return;\n }\n\n debug(`renaming index from ${full.indexName} to ${short.indexName}`);\n\n // If schema creation has never actually run before, none of these will exist, and they will throw an error\n // we have no way of running an \"if exists\" other than a per-dialect manual check, which we won't do\n // because even if it fails for some other reason, the schema sync will recreate them anyway\n // Therefore, we wrap this in a nested transaction (considering we are running this migration in a transaction)\n // so that we can suppress the error\n try {\n await knex.transaction(async (trx) => {\n if (client === 'mysql' || client === 'mariadb') {\n await knex\n .raw('ALTER TABLE ?? RENAME INDEX ?? TO ??', [\n full.tableName,\n full.indexName,\n short.indexName,\n ])\n .transacting(trx);\n } else if (client === 'pg' || client === 'postgres') {\n await knex\n .raw('ALTER INDEX ?? RENAME TO ??', [full.indexName, short.indexName])\n .transacting(trx);\n } else if (['sqlite', 'sqlite3', 'better-sqlite3'].includes(client as any)) {\n // SQLite doesn't support renaming, so rather than trying to drop/recreate we'll let db sync handle it\n debug(`SQLite does not support index renaming, not renaming index ${full.indexName}`);\n } else {\n debug(`No db client name matches, not renaming index ${full.indexName}`);\n }\n });\n } catch (err) {\n debug(`error creating index: ${JSON.stringify(err)}`);\n }\n};\n\nconst findDiffs = (shortMap: Metadata) => {\n const diffs = {\n tables: [],\n columns: [],\n indexes: [],\n } as IdentifierDiffs;\n\n const shortArr = Array.from(shortMap.entries());\n\n shortArr.forEach(([, shortObj], index) => {\n const fullTableName = identifiers.getUnshortenedName(shortObj.tableName);\n if (!fullTableName) {\n throw new Error(`Missing full table name for ${shortObj.tableName}`);\n }\n\n // find table name diffs\n if (shortObj.tableName !== fullTableName) {\n diffs.tables.push({\n full: {\n index,\n key: 'tableName',\n tableName: fullTableName,\n },\n short: {\n index,\n key: 'tableName',\n tableName: shortObj.tableName,\n },\n });\n }\n\n // find column name diffs\n // eslint-disable-next-line guard-for-in\n for (const attrKey in shortObj.attributes) {\n if (shortObj.attributes[attrKey].type === 'relation') {\n continue;\n }\n\n // TODO: add more type checks so we don't need any\n const attr = shortObj.attributes[attrKey] as any;\n const shortColumnName = attr.columnName;\n const longColumnName = identifiers.getUnshortenedName(shortColumnName);\n\n if (!shortColumnName || !longColumnName) {\n throw new Error(`missing column name(s) for attribute ${JSON.stringify(attr, null, 2)}`);\n }\n if (shortColumnName && longColumnName && shortColumnName !== longColumnName) {\n diffs.columns.push({\n short: {\n index,\n tableName: fullTableName, // NOTE: this means that we must rename columns before tables\n key: `attributes.${attrKey}`,\n columnName: shortColumnName,\n },\n full: {\n index,\n tableName: fullTableName,\n key: `attributes.${attrKey}`,\n columnName: longColumnName,\n },\n });\n }\n }\n\n // find index name diffs\n // eslint-disable-next-line guard-for-in\n for (const attrKey in shortObj.indexes) {\n const shortIndexName = shortObj.indexes[attrKey].name;\n const longIndexName = identifiers.getUnshortenedName(shortIndexName);\n if (!longIndexName) {\n throw new Error(`Missing full index name for ${shortIndexName}`);\n }\n\n if (shortIndexName && longIndexName && shortIndexName !== longIndexName) {\n diffs.indexes.push({\n short: {\n index,\n tableName: fullTableName, // NOTE: this means that we must rename columns before tables\n key: `indexes.${attrKey}`,\n indexName: shortIndexName,\n },\n full: {\n index,\n tableName: fullTableName,\n key: `indexes.${attrKey}`,\n indexName: longIndexName,\n },\n });\n }\n }\n });\n\n return diffs;\n};\n","import type { Knex } from 'knex';\n\nimport type { Migration } from '../common';\n\n/**\n * In v4, content types with disabled i18n did not have any locale column.\n * In v5, we need to add a `locale` column to all content types.\n * Other downstream migrations will make use of this column.\n *\n * This function creates the `locale` column if it doesn't exist.\n */\nconst createLocaleColumn = async (db: Knex, tableName: string) => {\n await db.schema.alterTable(tableName, (table) => {\n table.string('locale');\n });\n};\n\nexport const createdLocale: Migration = {\n name: '5.0.0-03-created-locale',\n async up(knex, db) {\n for (const meta of db.metadata.values()) {\n const hasTable = await knex.schema.hasTable(meta.tableName);\n\n if (!hasTable) {\n continue;\n }\n\n // Ignore non-content types\n const uid = meta.uid;\n const model = strapi.getModel(uid);\n if (!model) {\n continue;\n }\n\n // Create locale column if it doesn't exist\n const hasLocaleColumn = await knex.schema.hasColumn(meta.tableName, 'locale');\n\n if (meta.attributes.locale && !hasLocaleColumn) {\n await createLocaleColumn(knex, meta.tableName);\n }\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n","import type { Knex } from 'knex';\n\nimport type { Migration } from '../common';\n\n/**\n * In v4, content types with disabled D&P did not have any `published_at` column.\n * In v5, we need to add a `published_at` column to all content types.\n * Other downstream migrations will make use of this column.\n *\n * This function creates the `published_at` column if it doesn't exist.\n */\nconst createPublishedAtColumn = async (db: Knex, tableName: string) => {\n await db.schema.alterTable(tableName, (table) => {\n table.string('published_at');\n });\n\n // Non DP content types should have their `published_at` column set to a date\n await db(tableName).update({ published_at: new Date() });\n};\n\nexport const createdPublishedAt: Migration = {\n name: '5.0.0-04-created-published-at',\n async up(knex, db) {\n for (const meta of db.metadata.values()) {\n const hasTable = await knex.schema.hasTable(meta.tableName);\n\n if (!hasTable) {\n continue;\n }\n\n // Ignore non-content types\n const uid = meta.uid;\n const model = strapi.getModel(uid);\n if (!model) {\n continue;\n }\n\n // Create publishedAt column if it doesn't exist\n const hasPublishedAtColumn = await knex.schema.hasColumn(meta.tableName, 'published_at');\n\n if (meta.attributes.publishedAt && !hasPublishedAtColumn) {\n await createPublishedAtColumn(knex, meta.tableName);\n }\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n","/**\n * In V4 slug fields contained a unique index.\n * In V5 slug fields should not have a unique index.\n *\n * This migration drops existing unique indexes from slug fields so downstream migrations\n * can work on the data without violating the unique index.\n */\nimport type { Knex } from 'knex';\n\nimport type { Migration } from '../common';\n\nconst dropIndex = async (knex: Knex, tableName: string, columnName: string) => {\n try {\n await knex.schema.alterTable(tableName, (table) => {\n // NOTE: Can not use \"identifiers\" utility, as the 5.0.0-01 migration does not rename this particular index\n // to `tableName_columnName_uq`.\n table.dropUnique([columnName], `${tableName}_${columnName}_unique`);\n });\n } catch (error) {\n // If unique index does not exist, do nothing\n }\n};\n\nexport const dropSlugFieldsIndex: Migration = {\n name: '5.0.0-05-drop-slug-fields-index',\n async up(knex, db) {\n for (const meta of db.metadata.values()) {\n const hasTable = await knex.schema.hasTable(meta.tableName);\n if (!hasTable) {\n continue;\n }\n\n for (const attribute of Object.values(meta.attributes)) {\n if (attribute.type === 'uid' && attribute.columnName) {\n await dropIndex(knex, meta.tableName, attribute.columnName);\n }\n }\n }\n },\n async down() {\n throw new Error('not implemented');\n },\n};\n","import type { Migration } from '../common';\nimport { createdDocumentId } from './5.0.0-02-document-id';\nimport { renameIdentifiersLongerThanMaxLength } from './5.0.0-01-convert-identifiers-long-than-max-length';\nimport { createdLocale } from './5.0.0-03-locale';\nimport { createdPublishedAt } from './5.0.0-04-published-at';\nimport { dropSlugFieldsIndex } from './5.0.0-05-drop-slug-unique-index';\n\n/**\n * List of all the internal migrations. The array order will be the order in which they are executed.\n *\n * {\n * name: 'some-name',\n * async up(knex: Knex, db: Database) {},\n * async down(knex: Knex, db: Database) {},\n * },\n */\nexport const internalMigrations: Migration[] = [\n renameIdentifiersLongerThanMaxLength,\n createdDocumentId,\n createdLocale,\n createdPublishedAt,\n dropSlugFieldsIndex,\n];\n","import { Umzug } from 'umzug';\n\nimport { wrapTransaction } from './common';\nimport { internalMigrations } from './internal-migrations';\nimport { createStorage } from './storage';\nimport { transformLogMessage } from './logger';\n\nimport type { InternalMigrationProvider, Migration } from './common';\nimport type { Database } from '..';\n\nexport const createInternalMigrationProvider = (db: Database): InternalMigrationProvider => {\n const context = { db };\n const migrations: Migration[] = [...internalMigrations];\n\n const umzugProvider = new Umzug({\n storage: createStorage({ db, tableName: 'strapi_migrations_internal' }),\n logger: {\n info(message) {\n // NOTE: only log internal migration in debug mode\n db.logger.debug(transformLogMessage('info', message));\n },\n warn(message) {\n db.logger.warn(transformLogMessage('warn', message));\n },\n error(message) {\n db.logger.error(transformLogMessage('error', message));\n },\n debug(message) {\n db.logger.debug(transformLogMessage('debug', message));\n },\n },\n context,\n migrations: () =>\n migrations.map((migration) => {\n return {\n name: migration.name,\n up: wrapTransaction(context.db)(migration.up),\n down: wrapTransaction(context.db)(migration.down),\n };\n }),\n });\n\n return {\n async register(migration: Migration) {\n migrations.push(migration);\n },\n async shouldRun() {\n const pendingMigrations = await umzugProvider.pending();\n return pendingMigrations.length > 0;\n },\n async up() {\n await umzugProvider.up();\n },\n async down() {\n await umzugProvider.down();\n },\n };\n};\n","import { createUserMigrationProvider } from './users';\nimport { createInternalMigrationProvider } from './internal';\n\nimport type { MigrationProvider, Migration } from './common';\nimport type { Database } from '..';\n\nexport type { MigrationProvider, Migration };\n\nexport const createMigrationsProvider = (db: Database): MigrationProvider => {\n const userProvider = createUserMigrationProvider(db);\n const internalProvider = createInternalMigrationProvider(db);\n const providers = [userProvider, internalProvider];\n\n return {\n providers: {\n internal: internalProvider,\n },\n async shouldRun() {\n const shouldRunResponses = await Promise.all(\n providers.map((provider) => provider.shouldRun())\n );\n\n return shouldRunResponses.some((shouldRun) => shouldRun);\n },\n async up() {\n for (const provider of providers) {\n if (await provider.shouldRun()) {\n await provider.up();\n }\n }\n },\n async down() {\n for (const provider of providers) {\n if (await provider.shouldRun()) {\n await provider.down();\n }\n }\n },\n };\n};\n","import type { Subscriber } from '../types';\n\n/**\n * For each model try to run it's lifecycles function if any is defined\n */\nexport const modelsLifecyclesSubscriber: Subscriber = async (event) => {\n const { model } = event;\n\n if (model.lifecycles && event.action in model.lifecycles) {\n await model.lifecycles[event.action]?.(event);\n }\n};\n","import _ from 'lodash';\nimport type { Event, Subscriber } from '../types';\n\n// NOTE: we could add onCreate & onUpdate on field level to do this instead\nexport const timestampsLifecyclesSubscriber: Subscriber = {\n /**\n * Init createdAt & updatedAt before create\n */\n beforeCreate(event: Event) {\n const { data } = event.params;\n\n const now = new Date();\n _.defaults(data, { createdAt: now, updatedAt: now });\n },\n\n /**\n * Init createdAt & updatedAt before create\n * @param {Event} event\n */\n beforeCreateMany(event) {\n const { data } = event.params;\n\n const now = new Date();\n if (_.isArray(data)) {\n data.forEach((data) => _.defaults(data, { createdAt: now, updatedAt: now }));\n }\n },\n\n /**\n * Update updatedAt before update\n * @param {Event} event\n */\n beforeUpdate(event) {\n const { data } = event.params;\n\n const now = new Date();\n _.assign(data, { updatedAt: now });\n },\n\n /**\n * Update updatedAt before update\n * @param {Event} event\n */\n beforeUpdateMany(event) {\n const { data } = event.params;\n\n const now = new Date();\n if (_.isArray(data)) {\n data.forEach((data) => _.assign(data, { updatedAt: now }));\n }\n },\n};\n","import type { Subscriber } from '../types';\n\nexport const isValidSubscriber = (subscriber: Subscriber) => {\n return (\n typeof subscriber === 'function' || (typeof subscriber === 'object' && subscriber !== null)\n );\n};\n\nexport { modelsLifecyclesSubscriber } from './models-lifecycles';\nexport { timestampsLifecyclesSubscriber } from './timestamps';\n","import { strict as assert } from 'assert';\n\nimport * as subscriberUtils from './subscribers';\n\nimport type { Action, Event, Params, Subscriber } from './types';\nimport type { Database } from '..';\n\nexport type * from './types';\n\nexport type State = Record<string, unknown>;\nexport type States = Map<Subscriber, State>;\n\nexport interface Properties {\n params: Params;\n result?: unknown;\n}\n\nexport interface LifecycleProvider {\n subscribe(subscriber: Subscriber): () => void;\n clear(): void;\n run(action: Action, uid: string, properties: Properties, states?: States): Promise<States>;\n createEvent(action: Action, uid: string, properties: Properties, state: State): Event;\n disable(): void;\n enable(): void;\n}\n\nexport const createLifecyclesProvider = (db: Database): LifecycleProvider => {\n let subscribers = [\n subscriberUtils.timestampsLifecyclesSubscriber,\n subscriberUtils.modelsLifecyclesSubscriber,\n ];\n\n let isLifecycleHooksDisabled = false;\n\n return {\n subscribe(subscriber) {\n assert(\n subscriberUtils.isValidSubscriber(subscriber),\n 'Invalid subscriber. Expected function or object'\n );\n\n subscribers.push(subscriber);\n\n return () => subscribers.splice(subscribers.indexOf(subscriber), 1);\n },\n\n clear() {\n subscribers = [];\n },\n\n disable() {\n isLifecycleHooksDisabled = true;\n },\n\n enable() {\n isLifecycleHooksDisabled = false;\n },\n\n createEvent(action, uid, properties, state): Event {\n const model = db.metadata.get(uid);\n\n return {\n action,\n model,\n state,\n ...properties,\n };\n },\n\n /**\n * @param {string} action\n * @param {string} uid\n * @param {{ params?: any, result?: any }} properties\n * @param {Map<any, any>} states\n */\n async run(action, uid, properties, states = new Map()) {\n if (isLifecycleHooksDisabled) return states;\n for (let i = 0; i < subscribers.length; i += 1) {\n const subscriber = subscribers[i];\n if (typeof subscriber === 'function') {\n const state = states.get(subscriber) || {};\n const event = this.createEvent(action, uid, properties, state);\n await subscriber(event);\n if (event.state) {\n states.set(subscriber, event.state || state);\n }\n continue;\n }\n\n const hasAction = action in subscriber;\n const hasModel = !subscriber.models || subscriber.models.includes(uid);\n\n if (hasAction && hasModel) {\n const state = states.get(subscriber) || {};\n const event = this.createEvent(action, uid, properties, state);\n\n await subscriber[action]?.(event);\n if (event.state) {\n states.set(subscriber, event.state);\n }\n }\n }\n\n return states;\n },\n };\n};\n","import knex from 'knex';\nimport type { Knex } from 'knex';\n\nconst clientMap = {\n sqlite: 'better-sqlite3',\n mysql: 'mysql2',\n postgres: 'pg',\n};\n\nfunction isClientValid(config: { client?: unknown }): config is { client: keyof typeof clientMap } {\n return Object.keys(clientMap).includes(config.client as string);\n}\n\nexport const createConnection = (userConfig: Knex.Config, strapiConfig?: Partial<Knex.Config>) => {\n if (!isClientValid(userConfig)) {\n throw new Error(`Unsupported database client ${userConfig.client}`);\n }\n\n const knexConfig: Knex.Config = { ...userConfig, client: (clientMap as any)[userConfig.client] };\n\n // initialization code to run upon opening a new connection\n if (strapiConfig?.pool?.afterCreate) {\n knexConfig.pool = knexConfig.pool || {};\n // if the user has set their own afterCreate in config, we will replace it and call it\n const userAfterCreate = knexConfig.pool?.afterCreate;\n const strapiAfterCreate = strapiConfig.pool.afterCreate;\n knexConfig.pool.afterCreate = (\n conn: unknown,\n done: (err: Error | null | undefined, connection: any) => void\n ) => {\n strapiAfterCreate(conn, (err: Error | null | undefined, nativeConn: any) => {\n if (err) {\n return done(err, nativeConn);\n }\n if (userAfterCreate) {\n return userAfterCreate(nativeConn, done);\n }\n return done(null, nativeConn);\n });\n };\n }\n\n return knex(knexConfig);\n};\n","import { snakeCase } from 'lodash/fp';\nimport type { Database } from '../..';\nimport type { Relation } from '../../types';\nimport { identifiers } from '../../utils/identifiers';\n\ntype Link = {\n relation: Relation.Bidirectional & { inversedBy: string };\n invRelation: Relation.Bidirectional & { inversedBy: string };\n};\n\nconst getLinksWithoutMappedBy = (db: Database): Array<Link> => {\n const relationsToUpdate: Record<string, Link> = {};\n\n db.metadata.forEach((modelMetadata) => {\n const attributes = modelMetadata.attributes;\n\n // For each relation attribute, add the joinTable name to tablesToUpdate\n Object.values(attributes).forEach((attribute) => {\n if (attribute.type !== 'relation') {\n return;\n }\n\n if ('inversedBy' in attribute && attribute.inversedBy) {\n const invRelation = db.metadata.get(attribute.target).attributes[attribute.inversedBy];\n\n // Both relations use inversedBy.\n if ('inversedBy' in invRelation && invRelation.inversedBy) {\n relationsToUpdate[attribute.joinTable.name] = {\n relation: attribute as Relation.Bidirectional & { inversedBy: string },\n invRelation: invRelation as Relation.Bidirectional & { inversedBy: string },\n };\n }\n }\n });\n });\n\n return Object.values(relationsToUpdate);\n};\n\nconst isLinkTableEmpty = async (db: Database, linkTableName: string) => {\n // If the table doesn't exist, it's empty\n const exists = await db.getSchemaConnection().hasTable(linkTableName);\n if (!exists) return true;\n\n const result = await db.getConnection().from(linkTableName).count('* as count');\n return Number(result[0].count) === 0;\n};\n\n/**\n * Validates bidirectional relations before starting the server.\n * - If both sides use inversedBy, one of the sides must switch to mappedBy.\n * When this happens, two join tables exist in the database.\n * This makes sure you switch the side which does not delete any data.\n *\n * @param {*} db\n * @return {*}\n */\nexport const validateBidirectionalRelations = async (db: Database) => {\n const invalidLinks = getLinksWithoutMappedBy(db);\n\n for (const { relation, invRelation } of invalidLinks) {\n const modelMetadata = db.metadata.get(invRelation.target);\n const invModelMetadata = db.metadata.get(relation.target);\n\n // Generate the join table name based on the relation target table and attribute name.\n const joinTableName = identifiers.getJoinTableName(\n snakeCase(modelMetadata.tableName),\n snakeCase(invRelation.inversedBy)\n );\n const inverseJoinTableName = identifiers.getJoinTableName(\n snakeCase(invModelMetadata.tableName),\n snakeCase(relation.inversedBy)\n );\n\n const joinTableEmpty = await isLinkTableEmpty(db, joinTableName);\n const inverseJoinTableEmpty = await isLinkTableEmpty(db, inverseJoinTableName);\n\n if (joinTableEmpty) {\n process.emitWarning(\n `Error on attribute \"${invRelation.inversedBy}\" in model \"${modelMetadata.singularName}\" (${modelMetadata.uid}).` +\n ` Please modify your ${modelMetadata.singularName} schema by renaming the key \"inversedBy\" to \"mappedBy\".` +\n ` Ex: { \"inversedBy\": \"${relation.inversedBy}\" } -> { \"mappedBy\": \"${relation.inversedBy}\" }`\n );\n } else if (inverseJoinTableEmpty) {\n // Its safe to delete the inverse join table\n process.emitWarning(\n `Error on attribute \"${relation.inversedBy}\" in model \"${invModelMetadata.singularName}\" (${invModelMetadata.uid}).` +\n ` Please modify your ${invModelMetadata.singularName} schema by renaming the key \"inversedBy\" to \"mappedBy\".` +\n ` Ex: { \"inversedBy\": \"${invRelation.inversedBy}\" } -> { \"mappedBy\": \"${invRelation.inversedBy}\" }`\n );\n } else {\n // Both sides have data in the join table\n }\n }\n};\n","import { validateBidirectionalRelations } from './bidirectional';\n\nimport type { Database } from '../..';\n\n/**\n * Validates if relations data and tables are in a valid state before\n * starting the server.\n */\nexport const validateRelations = async (db: Database) => {\n await validateBidirectionalRelations(db);\n};\n","import { validateRelations } from './relations';\n\nimport type { Database } from '..';\n\n/**\n * Validate if the database is in a valid state before starting the server.\n */\nexport async function validateDatabase(db: Database) {\n await validateRelations(db);\n}\n","import type { Database } from '../..';\nimport type { Attribute, MorphRelationalAttribute } from '../../types';\n\nexport interface RemoveOrphanMorphTypeOptions {\n pivot: string;\n}\n\nconst isMorphRelationWithPivot = (\n attribute: Attribute,\n pivot: string\n): attribute is MorphRelationalAttribute => {\n return (\n attribute.type === 'relation' &&\n 'relation' in attribute &&\n 'joinTable' in attribute &&\n 'name' in attribute.joinTable &&\n 'pivotColumns' in attribute.joinTable &&\n attribute.joinTable.pivotColumns.includes(pivot)\n );\n};\n\nconst filterMorphRelationalAttributes = (\n attributes: Record<string, Attribute>,\n pivot: string\n): MorphRelationalAttribute[] => {\n return Object.values(attributes).filter((attribute): attribute is MorphRelationalAttribute =>\n isMorphRelationWithPivot(attribute, pivot)\n );\n};\n\n/**\n * Removes morph relation data with invalid or non-existent morph type.\n *\n * This function iterates over the database metadata to identify morph relationships\n * (relations with a `joinTable` containing the specified pivot column) and removes\n * any entries in the relation's join table where the morph type is invalid.\n *\n * Note: This function does not check for orphaned IDs, only orphaned morph types.\n *\n * @param db - The database object containing metadata and a Knex connection.\n * @param options.pivot - The name of the column in the join table representing the morph type.\n */\nexport const removeOrphanMorphType = async (\n db: Database,\n { pivot }: RemoveOrphanMorphTypeOptions\n) => {\n db.logger.debug(`Removing orphaned morph type: ${JSON.stringify(pivot)}`);\n\n const mdValues = db.metadata.values();\n for (const model of mdValues) {\n const attributes = filterMorphRelationalAttributes(model.attributes || {}, pivot);\n\n for (const attribute of attributes) {\n const joinTableName = attribute.joinTable.name;\n\n // Query distinct morph types from the join table\n const morphTypes = await db.connection(joinTableName).distinct(pivot).pluck(pivot);\n\n for (const morphType of morphTypes) {\n // Check if metadata for the morph type exists\n const deleteComponentType = await (async () => {\n try {\n return !db.metadata.get(morphType); // If no metadata found, mark for deletion\n } catch {\n db.logger.debug(\n `Metadata for morph type \"${morphType}\" in table \"${joinTableName}\" not found`\n );\n return true; // Return true to delete if metadata is missing\n }\n })();\n\n if (deleteComponentType) {\n db.logger.debug(\n `Removing invalid morph type \"${morphType}\" from table \"${joinTableName}\".`\n );\n try {\n await db.connection(joinTableName).where(pivot, morphType).del();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n db.logger.error(\n `Failed to remove invalid morph type \"${morphType}\" from table \"${joinTableName}\": ${errorMessage}`\n );\n }\n }\n }\n }\n }\n};\n","// lodash/fp curry does not handle async functions properly, and creates very \"ugly\" types,\n// so we will use our own version to ensure curried functions are typed correctly\n// TODO: Export this from root @strapi/utils so we don't have copies of it between packages\n\n/**\n * @internal\n */\nexport const asyncCurry = <Args extends any[], R>(\n fn: (...args: Args) => Promise<R>\n): CurriedAsyncFunction<Args, R> => {\n const curried = (...args: any[]): any => {\n if (args.length >= fn.length) {\n return fn(...(args as Args));\n }\n return (...moreArgs: any[]) => curried(...args, ...moreArgs);\n };\n\n return curried as CurriedAsyncFunction<Args, R>;\n};\n\n/**\n * @internal\n */\nexport type CurriedAsyncFunction<Args extends any[], R> = Args extends [infer First, ...infer Rest]\n ? Rest extends []\n ? (arg: First) => Promise<R>\n : (arg: First) => CurriedAsyncFunction<Rest, R>\n : () => Promise<R>;\n","import type { Database } from '..';\nimport { removeOrphanMorphType as removeOrphanMorphTypeFunc } from './operations/remove-orphan-morph-types';\nimport { asyncCurry } from '../utils/async-curry';\n\nexport const createRepairManager = (db: Database) => {\n return {\n removeOrphanMorphType: asyncCurry(removeOrphanMorphTypeFunc)(db),\n };\n};\n\nexport type RepairManager = ReturnType<typeof createRepairManager>;\n","import type { Knex } from 'knex';\n\nimport path from 'node:path';\nimport { Dialect, getDialect } from './dialects';\nimport { createSchemaProvider, SchemaProvider } from './schema';\nimport { createMetadata, Metadata } from './metadata';\nimport { createEntityManager, EntityManager } from './entity-manager';\nimport { createMigrationsProvider, MigrationProvider, type Migration } from './migrations';\nimport { createLifecyclesProvider, LifecycleProvider } from './lifecycles';\nimport { createConnection } from './connection';\nimport * as errors from './errors';\nimport { Callback, transactionCtx, TransactionObject } from './transaction-context';\nimport { validateDatabase } from './validations';\nimport type { Model } from './types';\nimport type { Identifiers } from './utils/identifiers';\nimport { createRepairManager, type RepairManager } from './repairs';\n\nexport { isKnexQuery } from './utils/knex';\n\ninterface Settings {\n forceMigration?: boolean;\n runMigrations?: boolean;\n migrations: {\n dir: string;\n };\n [key: string]: unknown;\n}\n\nexport type Logger = Record<\n 'info' | 'warn' | 'error' | 'debug',\n (message: string | Record<string, unknown>) => void\n>;\n\nexport interface DatabaseConfig {\n connection: Knex.Config;\n settings: Settings;\n logger?: Logger;\n}\n\nconst afterCreate =\n (db: Database) =>\n (\n nativeConnection: unknown,\n done: (error: Error | null, nativeConnection: unknown) => Promise<void>\n ) => {\n // run initialize for it since commands such as postgres SET and sqlite PRAGMA are per-connection\n db.dialect.initialize(nativeConnection).then(() => {\n return done(null, nativeConnection);\n });\n };\n\nclass Database {\n connection: Knex;\n\n dialect: Dialect;\n\n config: DatabaseConfig;\n\n metadata: Metadata;\n\n schema: SchemaProvider;\n\n migrations: MigrationProvider;\n\n lifecycles: LifecycleProvider;\n\n entityManager: EntityManager;\n\n repair: RepairManager;\n\n logger: Logger;\n\n constructor(config: DatabaseConfig) {\n this.config = {\n ...config,\n settings: {\n forceMigration: true,\n runMigrations: true,\n ...(config.settings ?? {}),\n },\n };\n\n this.logger = config.logger ?? console;\n\n this.dialect = getDialect(this);\n\n let knexConfig: Knex.Config = this.config.connection;\n\n // for object connections, we can configure the dialect synchronously\n if (typeof this.config.connection.connection !== 'function') {\n this.dialect.configure();\n }\n // for connection functions, we wrap it so that we can modify it with dialect configure before it reaches knex\n else {\n this.logger.warn(\n 'Knex connection functions are currently experimental. Attempting to access the connection object before database initialization will result in errors.'\n );\n\n knexConfig = {\n ...this.config.connection,\n connection: async () => {\n // @ts-expect-error confirmed it was a function above\n const conn = await this.config.connection.connection();\n this.dialect.configure(conn);\n return conn;\n },\n };\n }\n\n this.metadata = createMetadata([]);\n\n this.connection = createConnection(knexConfig, {\n pool: { afterCreate: afterCreate(this) },\n });\n\n this.schema = createSchemaProvider(this);\n\n this.migrations = createMigrationsProvider(this);\n this.lifecycles = createLifecyclesProvider(this);\n\n this.entityManager = createEntityManager(this);\n\n this.repair = createRepairManager(this);\n }\n\n async init({ models }: { models: Model[] }) {\n if (typeof this.config.connection.connection === 'function') {\n /*\n * User code needs to be able to access `connection.connection` directly as if\n * it were always an object. For a connection function, that doesn't happen\n * until the pool is created, so we need to do that here\n *\n * TODO: In the next major version, we need to replace all internal code that\n * directly references `connection.connection` prior to init, and make a breaking\n * change that it cannot be relied on to exist before init so that we can call\n * this feature stable.\n */\n this.logger.debug('Forcing Knex to make real connection to db');\n\n // sqlite does not support connection pooling so acquireConnection doesn't work\n if (this.config.connection.client === 'sqlite') {\n await this.connection.raw('SELECT 1');\n } else {\n await this.connection.client.acquireConnection();\n }\n }\n\n this.metadata.loadModels(models);\n await validateDatabase(this);\n return this;\n }\n\n query(uid: string) {\n if (!this.metadata.has(uid)) {\n throw new Error(`Model ${uid} not found`);\n }\n\n return this.entityManager.getRepository(uid);\n }\n\n inTransaction() {\n return !!transactionCtx.get();\n }\n\n transaction(): Promise<TransactionObject>;\n transaction<TCallback extends Callback>(c: TCallback): Promise<ReturnType<TCallback>>;\n async transaction<TCallback extends Callback>(\n cb?: TCallback\n ): Promise<ReturnType<TCallback> | TransactionObject> {\n const notNestedTransaction = !transactionCtx.get();\n const trx = notNestedTransaction\n ? await this.connection.transaction()\n : (transactionCtx.get() as Knex.Transaction);\n\n async function commit() {\n if (notNestedTransaction) {\n await transactionCtx.commit(trx);\n }\n }\n\n async function rollback() {\n if (notNestedTransaction) {\n await transactionCtx.rollback(trx);\n }\n }\n\n if (!cb) {\n return { commit, rollback, get: () => trx };\n }\n\n return transactionCtx.run(trx, async () => {\n try {\n const callbackParams = {\n trx,\n commit,\n rollback,\n onCommit: transactionCtx.onCommit,\n onRollback: transactionCtx.onRollback,\n };\n const res = await cb(callbackParams);\n await commit();\n return res;\n } catch (error) {\n await rollback();\n throw error;\n }\n });\n }\n\n getSchemaName(): string | undefined {\n return this.connection.client.connectionSettings.schema;\n }\n\n getConnection(): Knex;\n getConnection(tableName?: string): Knex.QueryBuilder;\n getConnection(tableName?: string): Knex | Knex.QueryBuilder {\n const schema = this.getSchemaName();\n const connection = tableName ? this.connection(tableName) : this.connection;\n return schema ? connection.withSchema(schema) : connection;\n }\n\n // Returns basic info about the database connection\n getInfo() {\n const connectionSettings = this.connection?.client?.connectionSettings || {};\n const client = this.dialect?.client || '';\n\n let displayName = '';\n let schema;\n\n // For SQLite, get the relative filename\n if (client === 'sqlite') {\n const absolutePath = connectionSettings?.filename;\n if (absolutePath) {\n displayName = path.relative(process.cwd(), absolutePath);\n }\n }\n // For other dialects, get the database name\n else {\n displayName = connectionSettings?.database;\n schema = connectionSettings?.schema;\n }\n\n return {\n displayName,\n schema,\n client,\n };\n }\n\n getSchemaConnection(trx = this.connection) {\n const schema = this.getSchemaName();\n return schema ? trx.schema.withSchema(schema) : trx.schema;\n }\n\n queryBuilder(uid: string) {\n return this.entityManager.createQueryBuilder(uid);\n }\n\n async destroy() {\n await this.lifecycles.clear();\n await this.connection.destroy();\n }\n}\n\nexport { Database, errors };\nexport type { Model, Identifiers, Migration };\n"],"names":["Dialect","configure","conn","initialize","_nativeConnection","getTables","Error","getSqlType","type","canAlterConstraints","usesForeignKeys","useReturning","supportsUnsigned","supportsOperator","startSchemaUpdate","endSchemaUpdate","transformErrors","error","message","canAddIncrements","constructor","db","client","schemaInspector","DatabaseError","details","name","NotNullError","column","stack","InvalidTimeError","InvalidDateError","InvalidDateTimeError","InvalidRelationError","SQL_QUERIES","TABLE_LIST","LIST_COLUMNS","INDEX_LIST","FOREIGN_KEY_LIST","FOREIGN_KEY_REFERENCES","FOREIGN_KEY_REFERENCES_CONSTRAIN","FOREIGN_KEY_REFERENCES_CONSTRAIN_RFERENCE","toStrapiType","rootType","data_type","toLowerCase","match","args","character_maximum_length","useTz","precision","getIndexType","index","is_primary","is_unique","PostgresqlSchemaInspector","getSchema","schema","tables","Promise","all","map","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","getDatabaseSchema","getSchemaName","rows","connection","raw","row","table_name","rest","defaultTo","column_default","includes","column_name","notNullable","is_nullable","unsigned","ret","indexrelid","index_name","push","Object","values","fk","constraint_name","referencedColumns","referencedTable","onUpdate","onDelete","constraintNames","keys","dbSchema","length","fkReferences","fkReference","fkReferencesConstraint","fkReferenceC","fkReferencesConstraintReferece","unique_constraint_name","fkReferenceConst","foreign_table","fk_column_name","on_update","toUpperCase","on_delete","PostgresDialect","nativeConnection","driver","types","setTypeParser","builtins","DATE","v","JSONB","NUMERIC","parseFloat","schemaName","code","errors","undefined","FOREIGN_KEY_REFERENTIALS_CONSTRAINTS","column_key","primary","primaryKey","MysqlSchemaInspector","column_type","endsWith","Column_name","Key_name","indexInfo","Non_unique","contraintNames","referenced_table_name","referenced_column_name","fkReferentialConstraints","fkReferentialConstraint","MYSQL","MARIADB","VERSION","MysqlDatabaseInspector","getInformation","database","versionNumber","results","versionSplit","version","split","databaseName","e","MysqlDialect","config","supportBigNumbers","bigNumberStrings","typeCast","field","next","value","string","Number","err","info","databaseInspector","TABLE_INFO","INDEX_INFO","pk","slice","SqliteSchemaInspector","dflt_value","notnull","Boolean","filter","startsWith","res","unique","fks","id","from","to","table","UNSUPPORTED_OPERATORS","SqliteDialect","filename","path","resolve","dbDir","dirname","fse","ensureDirSync","operator","errno","getDialectClass","PostgresClass","MysqlClass","SqliteClass","getDialectName","getDialect","dialectName","dialect","debug","createDebug","helpers","createHelpers","getSchemaBuilder","trx","getSchemaConnection","createSchema","transaction","createTables","schemaBuilder","createTable","createTableForeignKeys","dropSchema","dropDatabase","reverse","dropTable","updateSchema","schemaDiff","forceMigration","settings","existingMetadata","updated","added","removed","dropTableForeignKeys","alterTable","createForeignKey","tableBuilder","foreignKey","constraint","foreign","references","inTable","dropForeignKey","existingForeignKeys","some","existingIndex","dropForeign","createIndex","constraintName","indexName","dropIndex","existingIndexes","dropPrimary","dropUnique","createColumn","col","isNil","opts","castArray","prop","omit","nullable","dropColumn","forEach","droppedForeignKeyNames","removedForeignKey","updatedForeignKey","object","removedIndex","updatedIndex","removedColumn","updatedColumn","alter","addedColumn","integer","addedForeignKey","addedIndex","dropTableIfExists","RESERVED_TABLE_NAMES","statuses","CHANGED","UNCHANGED","hasTable","findIndex","findTable","find","hasColumn","columnName","findColumn","hasIndex","hasForeignKey","findForeignKey","hasChangedStatus","diff","status","diffIndexes","oldIndex","changes","_","xor","toLower","diffForeignKeys","oldForeignKey","difference","toUpper","diffDefault","oldColumn","oldDefaultTo","diffColumns","isIgnoredType","oldType","hasSameDefault","diffTableColumns","diffCtx","databaseTable","userSchemaTable","previousTable","addedColumns","updatedColumns","unchangedColumns","removedColumns","userSchemaColumn","databaseColumn","hasChanged","arr","unchanged","diffTableIndexes","addedIndexes","updatedIndexes","unchangedIndexes","removedIndexes","userSchemaIndex","databaseIndex","diffTableForeignKeys","addedForeignKeys","updatedForeignKeys","unchangedForeignKeys","removedForeignKeys","userSchemaForeignKeys","databaseForeignKeys","diffTables","columnsDiff","indexesDiff","foreignKeysDiff","diffSchemas","schemaDiffCtx","previousSchema","databaseSchema","userSchema","addedTables","updatedTables","unchangedTables","removedTables","parsePersistedTable","persistedTable","persistedTables","strapi","store","get","key","reservedTables","isInUserSchema","wasTracked","isReserved","dependencies","dependsOn","isArray","dependsOnTable","TABLE_NAME","hasSchemaTable","createSchemaTable","t","increments","json","datetime","checkTableExists","read","getConnection","select","orderBy","first","parsedSchema","JSON","parse","hashSchema","crypto","createHash","update","stringify","digest","add","delete","time","Date","insert","hash","into","clear","truncate","SCALAR_TYPES","STRING_TYPES","NUMBER_TYPES","isString","isNumber","isScalar","isRelation","isScalarAttribute","attribute","isRelationalAttribute","data","len","isInteger","outputLength","Math","ceil","substring","IDENTIFIER_MAX_LENGTH","Identifiers","replacementMap","options","ID_COLUMN","ORDER_COLUMN","FIELD_COLUMN","HASH_LENGTH","HASH_SEPARATOR","IDENTIFIER_SEPARATOR","MIN_TOKEN_LENGTH","links","order_inv_fk","order","morphs","inv_fk","order_fk","id_column_index","order_index","mapshortNames","getName","names","tokens","compressible","suffix","shortName","prefix","unshift","getNameFromTokens","getTableName","getJoinTableName","collectionName","attributeName","getMorphTableName","snakeCase","getColumnName","getJoinColumnAttributeIdName","getInverseJoinColumnAttributeIdName","getOrderColumnName","singularName","getInverseOrderColumnName","getMorphColumnJoinTableIdName","getMorphColumnAttributeIdName","getMorphColumnTypeName","getIndexName","getFkIndexName","getUniqueIndexName","getPrimaryIndexName","getInverseFkIndexName","getOrderFkIndexName","getOrderInverseFkIndexName","getIdColumnIndexName","getOrderIndexName","getShortenedName","availableLength","nameTokens","maxLength","unshortenedName","token","join","setUnshortenedName","fullLengthName","incompressible","partition","totalIncompressibleLength","sumBy","totalSeparatorsLength","available","availablePerToken","floor","surplus","minHashedLength","totalLength","reduce","total","tokenName","deficits","actualLength","allocatedLength","filterAndIncreaseLength","previousSurplus","shortenedName","nameMap","Map","getUnshortenedName","serializeKey","fullName","set","identifiers","getColumnType","meta","attributes","morphColumn","owner","idColumn","typeColumn","idColumnName","typeColumnName","joinColumn","columnNameFull","referencedColumn","columnType","fkName","metadataToSchema","metadata","createSchemaProvider","state","builder","createSchemaBuilder","createSchemaDiff","schemaStorage","createSchemaStorage","drop","DBSchema","create","reset","syncSchema","storedSchema","sync","migrations","shouldRun","up","oldSchema","oldHash","ID","ORDER","FIELD","hasInversedBy","attr","hasMappedBy","isOneToAny","relation","isManyToAny","isAnyToOne","isAnyToMany","isBidirectional","isOwner","shouldUseJoinTable","useJoinTable","hasOrderColumn","hasInverseOrderColumn","createOneToOne","createJoinTable","createJoinColumn","createOneToMany","createManyToOne","createManyToMany","createMorphToOne","assign","createMorphToMany","joinTable","__internal__","joinTableName","joinColumnName","fkIndexName","uid","lifecycles","columnToAttribute","pivotColumns","createMorphOne","targetMeta","target","morphBy","has","createMorphMany","inverseAttribute","inversedBy","inverseJoinColumnName","orderColumnName","inverseOrderColumnName","invFkIndexName","metadataSchema","inverseJoinColumn","createRelation","Metadata","validate","seenTables","loadModels","models","model","cloneDeep","entries","unstable_virtual","createAttribute","acc","createMetadata","Field","toDB","fromDB","StringField","toString","JSONField","parsedValue","BigIntegerField","NumberField","numberValue","toNumber","isNaN","isDate","dateFns","DATE_REGEX","PARTIAL_DATE_REGEX","TIME_REGEX","parseDateTimeOrTimestamp","date","parseISO","isValid","milliUnixDate","parseDate","format","found","extractedValue","test","process","emitWarning","parseTime","result","hours","minutes","seconds","fraction","fractionPart","padCharsEnd","DateField","TimeField","DatetimeField","cast","toISOString","TimestampField","isStringOrNumber","BooleanField","strVal","typeToFieldMap","password","email","richtext","text","enumeration","biginteger","float","decimal","timestamp","boolean","blocks","createField","storage","AsyncLocalStorage","transactionCtx","run","cb","getStore","commitCallbacks","rollbackCallbacks","commit","rollback","onCommit","onRollback","isKnexQuery","KnexBuilder","KnexRaw","addSchema","fromSingleRow","obj","val","fromRow","Array","singleRow","toSingleRow","toRow","datum","toColumnName","applySearch","knex","query","ctx","qb","searchColumns","stringColumns","searchable","numberColumns","orWhereRaw","aliasColumn","escapeQuery","charsToEscape","escapeChar","escapedQuery","char","createPivotJoin","alias","refAlias","joinAlias","getAlias","rootColumn","rootTable","on","subAlias","createJoin","targetAttribute","applyJoin","method","inner","onVal","direction","applyJoins","joins","COL_STRAPI_ROW_NUMBER","COL_STRAPI_ORDER_BY_PREFIX","processOrderBy","flatMap","isPlainObject","getStrapiOrderColumnAlias","trimmedColumnName","replaceAll","wrapWithDeepSort","originalQuery","resultQueryAlias","aliasedTableName","mustUseAlias","resultQuery","baseQuery","clone","baseQueryAlias","orderByClause","partitionedQueryAlias","selectRowsAsNumberedPartitions","partitionedQuery","prefixedOrderBy","orderByColumns","rowNumber","subQuery","partitionBy","as","originalSelect","innerJoin","andOnVal","limit","offset","curry","joinColPrefix","XtoOne","input","populateValue","isCount","fromTargetRow","rowOrRows","referencedColumnName","referencedValues","uniq","r","isEmpty","entityManager","createQueryBuilder","init","addSelect","where","execute","mapResults","groupBy","joinColAlias","joinColRenameAs","joinColSelect","count","oneToMany","mapValues","ordering","manyToMany","populateQb","morphX","matchingRows","matchingValue","morphToMany","typeField","joinRows","joinMap","idsByType","idValue","typeValue","typePopulate","ids","joinResults","joinResult","morphToOne","pickPopulateParams","populate","fieldsToPick","pick","applyPopulate","filters","getRootLevelPopulate","processPopulate","populateMap","root","subPopulate","concat","finalPopulate","isRecord","castValue","processSingleAttributeWhere","isOperatorOfType","processAttributeWhere","sub","processNested","processWhere","processRelationWhere","idAlias","operatorKeys","isOperator","nestedWhere","aliasedColumnName","applyOperator","subQB","subValue","orWhere","innerQB","whereNot","applyWhereToColumn","whereIn","whereNotIn","whereNull","whereRaw","fieldLowerFn","whereNotNull","whereBetween","whereJsonSupersetOf","columnWhere","applyWhere","subWhere","knexQueryDone","Symbol","knexPerformingQuery","ReadableStrapiQuery","Readable","_destroy","once","er","_read","size","_query","maxReadSize","_limit","min","_fetched","_offset","_qb","_uid","_db","_mapResults","_meta","destroyed","emit","destroy","_batchSize","batchSize","objectMode","highWaterMark","isFinite","getKnexQuery","initialState","defaults","max","forUpdate","onConflict","merge","ignore","decrements","aliasCounter","search","processed","ref","increment","amount","decrement","transacting","params","_q","targetField","indexOf","bind","shouldUseSubQuery","runSubQuery","originalType","nestedSubQuery","processState","isFunction","processSelect","shouldUseDistinct","shouldUseDeepSort","i","el","isRelationAttribute","isAliasedRelation","joinsOrderByColumns","distinct","dbColumnName","countDistinct","returning","incr","decr","subQb","stream","withDefaultPagination","page","pageSize","withOffsetLimit","createRepository","findOne","findMany","findWithCount","findPage","pagination","pageCount","createMany","updateMany","deleteMany","attachRelations","updateRelations","deleteRelations","entity","load","fields","loadPages","getMorphToManyRowsLinkedToMorphOne","relatedType","deleteRelatedMorphOneRelationsAfterMorphToManyUpdate","morphOneRows","groupByType","groupByField","typeAndFieldIdsGrouped","pipe","$in","$or","encodePolymorphicId","__type","encodePolymorphicRelation","newRelation","position","before","after","getDocumentSiblingIdsQuery","isContentType","documentId","documentIDSubQuery","deletePreviousOneToAnyRelations","relIdsToadd","con","cleanOrderColumns","inverseRelIds","deletePreviousAnyToOneRelations","relIdToadd","relsToDelete","relIdsToDelete","relIdsToNotDelete","lastId","done","batchToDelete","$gt","$notIn","batchIds","updateOrderColumn","selectRowsToOrder","toSQL","sql","bindings","updateInverseOrderColumn","sortConnectArray","connectArr","initialArr","strictSort","sortedConnect","needsSorting","relationInInitialArray","rel","mappedRelations","mapper","adjacentRelId","existingRelation","hasNoComponent","hasSameComponent","__component","computed","computeRelation","relationsSeenInBranch","adjacentRelation","end","relationsOrderer","initArr","orderColumn","strict","computedRelations","maxOrder","maxBy","findRelation","idx","removeRelation","splice","insertRelation","_idx","start","disconnect","relations","connect","getOrderMap","isObject","toId","isValidId","toIds","isValidObjectId","toIdArray","array","__pivot","uniqWith","isEqual","toAssocs","isNull","elm","processData","withDefaults","isUndefined","default","attrValue","createEntityManager","repoMap","states","dataToInsert","createdEntries","entry","dataToUpdate","updatedRows","deletedRows","isValidLink","cleanRelationData","relId","dataset","orderMap","rowId","rowType","encodedId","relIdsToAdd","$ne","relsToAdd","uniqBy","maxResults","maxMap","hasSet","hasConnect","hasDisconnect","idsToDelete","item","startOrder","rowsToDelete","adjacentRelations","compact","isPartialUpdate","relIdsToaddOrMove","differenceWith","currentMovingRels","relToAdd","nonExistingRelsIds","existingRels","inverseRelsIds","fieldsArr","getRepository","createStorage","hasMigrationTable","createMigrationTable","logMigration","unlogMigration","del","executed","logs","log","wrapTransaction","fn","transformLogMessage","level","event","now","migrationResolver","context","readFileSync","down","migration","require","createUserMigrationProvider","dir","umzugProvider","Umzug","logger","warn","glob","cwd","pendingMigrations","pending","runMigrations","QUERIES","postgres","mysql","sqlite","getNextIdsToCreateDocumentId","otherIds","other_ids","parseInt","migrateDocumentIdsWithLocalizations","document_id","createId","migrationDocumentIds","createDocumentIdColumn","hasLocalizationsJoinTable","createdDocumentId","hasDocumentIdColumn","renameIdentifiersLongerThanMaxLength","md","diffs","findDiffs","indexDiff","renameIndex","columnDiff","full","short","renameColumn","tableDiff","renameTable","shortMap","shortArr","shortObj","fullTableName","attrKey","shortColumnName","longColumnName","shortIndexName","longIndexName","createLocaleColumn","createdLocale","getModel","hasLocaleColumn","locale","createPublishedAtColumn","published_at","createdPublishedAt","hasPublishedAtColumn","publishedAt","dropSlugFieldsIndex","internalMigrations","createInternalMigrationProvider","register","createMigrationsProvider","userProvider","internalProvider","providers","internal","shouldRunResponses","provider","modelsLifecyclesSubscriber","action","timestampsLifecyclesSubscriber","beforeCreate","createdAt","updatedAt","beforeCreateMany","beforeUpdate","beforeUpdateMany","isValidSubscriber","subscriber","createLifecyclesProvider","subscribers","subscriberUtils","isLifecycleHooksDisabled","subscribe","assert","disable","enable","createEvent","properties","hasAction","hasModel","clientMap","isClientValid","createConnection","userConfig","strapiConfig","knexConfig","pool","afterCreate","userAfterCreate","strapiAfterCreate","nativeConn","getLinksWithoutMappedBy","relationsToUpdate","modelMetadata","invRelation","isLinkTableEmpty","linkTableName","exists","validateBidirectionalRelations","invalidLinks","invModelMetadata","inverseJoinTableName","joinTableEmpty","inverseJoinTableEmpty","validateRelations","validateDatabase","isMorphRelationWithPivot","pivot","filterMorphRelationalAttributes","removeOrphanMorphType","mdValues","morphTypes","pluck","morphType","deleteComponentType","errorMessage","String","asyncCurry","curried","moreArgs","createRepairManager","removeOrphanMorphTypeFunc","then","Database","acquireConnection","inTransaction","notNestedTransaction","callbackParams","connectionSettings","withSchema","getInfo","displayName","absolutePath","relative","queryBuilder","console","repair"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { Knex } from 'knex';\n\nimport path from 'node:path';\nimport { Dialect, getDialect } from './dialects';\nimport { createSchemaProvider, SchemaProvider } from './schema';\nimport { createMetadata, Metadata } from './metadata';\nimport { createEntityManager, EntityManager } from './entity-manager';\nimport { createMigrationsProvider, MigrationProvider, type Migration } from './migrations';\nimport { createLifecyclesProvider, LifecycleProvider } from './lifecycles';\nimport { createConnection } from './connection';\nimport * as errors from './errors';\nimport { Callback, transactionCtx, TransactionObject } from './transaction-context';\nimport { validateDatabase } from './validations';\nimport type { Model } from './types';\nimport type { Identifiers } from './utils/identifiers';\nimport { createRepairManager, type RepairManager } from './repairs';\n\nexport { isKnexQuery } from './utils/knex';\n\ninterface Settings {\n forceMigration?: boolean;\n runMigrations?: boolean;\n migrations: {\n dir: string;\n };\n [key: string]: unknown;\n}\n\nexport type Logger = Record<\n 'info' | 'warn' | 'error' | 'debug',\n (message: string | Record<string, unknown>) => void\n>;\n\nexport interface DatabaseConfig {\n connection: Knex.Config;\n settings: Settings;\n logger?: Logger;\n}\n\nconst afterCreate =\n (db: Database) =>\n (\n nativeConnection: unknown,\n done: (error: Error | null, nativeConnection: unknown) => Promise<void>\n ) => {\n // run initialize for it since commands such as postgres SET and sqlite PRAGMA are per-connection\n db.dialect.initialize(nativeConnection).then(() => {\n return done(null, nativeConnection);\n });\n };\n\nclass Database {\n connection: Knex;\n\n dialect: Dialect;\n\n config: DatabaseConfig;\n\n metadata: Metadata;\n\n schema: SchemaProvider;\n\n migrations: MigrationProvider;\n\n lifecycles: LifecycleProvider;\n\n entityManager: EntityManager;\n\n repair: RepairManager;\n\n logger: Logger;\n\n constructor(config: DatabaseConfig) {\n this.config = {\n ...config,\n settings: {\n forceMigration: true,\n runMigrations: true,\n ...(config.settings ?? {}),\n },\n };\n\n this.logger = config.logger ?? console;\n\n this.dialect = getDialect(this);\n\n let knexConfig: Knex.Config = this.config.connection;\n\n // for object connections, we can configure the dialect synchronously\n if (typeof this.config.connection.connection !== 'function') {\n this.dialect.configure();\n }\n // for connection functions, we wrap it so that we can modify it with dialect configure before it reaches knex\n else {\n this.logger.warn(\n 'Knex connection functions are currently experimental. Attempting to access the connection object before database initialization will result in errors.'\n );\n\n knexConfig = {\n ...this.config.connection,\n connection: async () => {\n // @ts-expect-error confirmed it was a function above\n const conn = await this.config.connection.connection();\n this.dialect.configure(conn);\n return conn;\n },\n };\n }\n\n this.metadata = createMetadata([]);\n\n this.connection = createConnection(knexConfig, {\n pool: { afterCreate: afterCreate(this) },\n });\n\n this.schema = createSchemaProvider(this);\n\n this.migrations = createMigrationsProvider(this);\n this.lifecycles = createLifecyclesProvider(this);\n\n this.entityManager = createEntityManager(this);\n\n this.repair = createRepairManager(this);\n }\n\n async init({ models }: { models: Model[] }) {\n if (typeof this.config.connection.connection === 'function') {\n /*\n * User code needs to be able to access `connection.connection` directly as if\n * it were always an object. For a connection function, that doesn't happen\n * until the pool is created, so we need to do that here\n *\n * TODO: In the next major version, we need to replace all internal code that\n * directly references `connection.connection` prior to init, and make a breaking\n * change that it cannot be relied on to exist before init so that we can call\n * this feature stable.\n */\n this.logger.debug('Forcing Knex to make real connection to db');\n\n // sqlite does not support connection pooling so acquireConnection doesn't work\n if (this.config.connection.client === 'sqlite') {\n await this.connection.raw('SELECT 1');\n } else {\n await this.connection.client.acquireConnection();\n }\n }\n\n this.metadata.loadModels(models);\n await validateDatabase(this);\n return this;\n }\n\n query(uid: string) {\n if (!this.metadata.has(uid)) {\n throw new Error(`Model ${uid} not found`);\n }\n\n return this.entityManager.getRepository(uid);\n }\n\n inTransaction() {\n return !!transactionCtx.get();\n }\n\n transaction(): Promise<TransactionObject>;\n transaction<TCallback extends Callback>(c: TCallback): Promise<ReturnType<TCallback>>;\n async transaction<TCallback extends Callback>(\n cb?: TCallback\n ): Promise<ReturnType<TCallback> | TransactionObject> {\n const notNestedTransaction = !transactionCtx.get();\n const trx = notNestedTransaction\n ? await this.connection.transaction()\n : (transactionCtx.get() as Knex.Transaction);\n\n async function commit() {\n if (notNestedTransaction) {\n await transactionCtx.commit(trx);\n }\n }\n\n async function rollback() {\n if (notNestedTransaction) {\n await transactionCtx.rollback(trx);\n }\n }\n\n if (!cb) {\n return { commit, rollback, get: () => trx };\n }\n\n return transactionCtx.run(trx, async () => {\n try {\n const callbackParams = {\n trx,\n commit,\n rollback,\n onCommit: transactionCtx.onCommit,\n onRollback: transactionCtx.onRollback,\n };\n const res = await cb(callbackParams);\n await commit();\n return res;\n } catch (error) {\n await rollback();\n throw error;\n }\n });\n }\n\n getSchemaName(): string | undefined {\n return this.connection.client.connectionSettings.schema;\n }\n\n getConnection(): Knex;\n getConnection(tableName?: string): Knex.QueryBuilder;\n getConnection(tableName?: string): Knex | Knex.QueryBuilder {\n const schema = this.getSchemaName();\n const connection = tableName ? this.connection(tableName) : this.connection;\n return schema ? connection.withSchema(schema) : connection;\n }\n\n // Returns basic info about the database connection\n getInfo() {\n const connectionSettings = this.connection?.client?.connectionSettings || {};\n const client = this.dialect?.client || '';\n\n let displayName = '';\n let schema;\n\n // For SQLite, get the relative filename\n if (client === 'sqlite') {\n const absolutePath = connectionSettings?.filename;\n if (absolutePath) {\n displayName = path.relative(process.cwd(), absolutePath);\n }\n }\n // For other dialects, get the database name\n else {\n displayName = connectionSettings?.database;\n schema = connectionSettings?.schema;\n }\n\n return {\n displayName,\n schema,\n client,\n };\n }\n\n getSchemaConnection(trx = this.connection) {\n const schema = this.getSchemaName();\n return schema ? trx.schema.withSchema(schema) : trx.schema;\n }\n\n queryBuilder(uid: string) {\n return this.entityManager.createQueryBuilder(uid);\n }\n\n async destroy() {\n await this.lifecycles.clear();\n await this.connection.destroy();\n }\n}\n\nexport { Database, errors };\nexport type { Model, Identifiers, Migration };\n"],"names":["afterCreate","db","nativeConnection","done","dialect","initialize","then","Database","init","models","config","connection","logger","debug","client","raw","acquireConnection","metadata","loadModels","validateDatabase","query","uid","has","Error","entityManager","getRepository","inTransaction","transactionCtx","get","transaction","cb","notNestedTransaction","trx","commit","rollback","run","callbackParams","onCommit","onRollback","res","error","getSchemaName","connectionSettings","schema","getConnection","tableName","withSchema","getInfo","displayName","absolutePath","filename","path","relative","process","cwd","database","getSchemaConnection","queryBuilder","createQueryBuilder","destroy","lifecycles","clear","constructor","settings","forceMigration","runMigrations","console","getDialect","knexConfig","configure","warn","conn","createMetadata","createConnection","pool","createSchemaProvider","migrations","createMigrationsProvider","createLifecyclesProvider","createEntityManager","repair","createRepairManager"],"mappings":"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"}