@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
@@ -0,0 +1,61 @@
1
+ import { Umzug } from 'umzug';
2
+ import { wrapTransaction } from './common.mjs';
3
+ import { internalMigrations } from './internal-migrations/index.mjs';
4
+ import { createStorage } from './storage.mjs';
5
+ import { transformLogMessage } from './logger.mjs';
6
+
7
+ const createInternalMigrationProvider = (db)=>{
8
+ const context = {
9
+ db
10
+ };
11
+ const migrations = [
12
+ ...internalMigrations
13
+ ];
14
+ const umzugProvider = new Umzug({
15
+ storage: createStorage({
16
+ db,
17
+ tableName: 'strapi_migrations_internal'
18
+ }),
19
+ logger: {
20
+ info (message) {
21
+ // NOTE: only log internal migration in debug mode
22
+ db.logger.debug(transformLogMessage('info', message));
23
+ },
24
+ warn (message) {
25
+ db.logger.warn(transformLogMessage('warn', message));
26
+ },
27
+ error (message) {
28
+ db.logger.error(transformLogMessage('error', message));
29
+ },
30
+ debug (message) {
31
+ db.logger.debug(transformLogMessage('debug', message));
32
+ }
33
+ },
34
+ context,
35
+ migrations: ()=>migrations.map((migration)=>{
36
+ return {
37
+ name: migration.name,
38
+ up: wrapTransaction(context.db)(migration.up),
39
+ down: wrapTransaction(context.db)(migration.down)
40
+ };
41
+ })
42
+ });
43
+ return {
44
+ async register (migration) {
45
+ migrations.push(migration);
46
+ },
47
+ async shouldRun () {
48
+ const pendingMigrations = await umzugProvider.pending();
49
+ return pendingMigrations.length > 0;
50
+ },
51
+ async up () {
52
+ await umzugProvider.up();
53
+ },
54
+ async down () {
55
+ await umzugProvider.down();
56
+ }
57
+ };
58
+ };
59
+
60
+ export { createInternalMigrationProvider };
61
+ //# sourceMappingURL=internal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.mjs","sources":["../../src/migrations/internal.ts"],"sourcesContent":["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"],"names":["createInternalMigrationProvider","db","context","migrations","internalMigrations","umzugProvider","Umzug","storage","createStorage","tableName","logger","info","message","debug","transformLogMessage","warn","error","map","migration","name","up","wrapTransaction","down","register","push","shouldRun","pendingMigrations","pending","length"],"mappings":";;;;;;AAUO,MAAMA,kCAAkC,CAACC,EAAAA,GAAAA;AAC9C,IAAA,MAAMC,OAAU,GAAA;AAAED,QAAAA;AAAG,KAAA;AACrB,IAAA,MAAME,UAA0B,GAAA;AAAIC,QAAAA,GAAAA;AAAmB,KAAA;IAEvD,MAAMC,aAAAA,GAAgB,IAAIC,KAAM,CAAA;AAC9BC,QAAAA,OAAAA,EAASC,aAAc,CAAA;AAAEP,YAAAA,EAAAA;YAAIQ,SAAW,EAAA;AAA6B,SAAA,CAAA;QACrEC,MAAQ,EAAA;AACNC,YAAAA,IAAAA,CAAAA,CAAKC,OAAO,EAAA;;AAEVX,gBAAAA,EAAAA,CAAGS,MAAM,CAACG,KAAK,CAACC,oBAAoB,MAAQF,EAAAA,OAAAA,CAAAA,CAAAA;AAC9C,aAAA;AACAG,YAAAA,IAAAA,CAAAA,CAAKH,OAAO,EAAA;AACVX,gBAAAA,EAAAA,CAAGS,MAAM,CAACK,IAAI,CAACD,oBAAoB,MAAQF,EAAAA,OAAAA,CAAAA,CAAAA;AAC7C,aAAA;AACAI,YAAAA,KAAAA,CAAAA,CAAMJ,OAAO,EAAA;AACXX,gBAAAA,EAAAA,CAAGS,MAAM,CAACM,KAAK,CAACF,oBAAoB,OAASF,EAAAA,OAAAA,CAAAA,CAAAA;AAC/C,aAAA;AACAC,YAAAA,KAAAA,CAAAA,CAAMD,OAAO,EAAA;AACXX,gBAAAA,EAAAA,CAAGS,MAAM,CAACG,KAAK,CAACC,oBAAoB,OAASF,EAAAA,OAAAA,CAAAA,CAAAA;AAC/C;AACF,SAAA;AACAV,QAAAA,OAAAA;AACAC,QAAAA,UAAAA,EAAY,IACVA,UAAAA,CAAWc,GAAG,CAAC,CAACC,SAAAA,GAAAA;gBACd,OAAO;AACLC,oBAAAA,IAAAA,EAAMD,UAAUC,IAAI;AACpBC,oBAAAA,EAAAA,EAAIC,eAAgBnB,CAAAA,OAAAA,CAAQD,EAAE,CAAA,CAAEiB,UAAUE,EAAE,CAAA;AAC5CE,oBAAAA,IAAAA,EAAMD,eAAgBnB,CAAAA,OAAAA,CAAQD,EAAE,CAAA,CAAEiB,UAAUI,IAAI;AAClD,iBAAA;AACF,aAAA;AACJ,KAAA,CAAA;IAEA,OAAO;AACL,QAAA,MAAMC,UAASL,SAAoB,EAAA;AACjCf,YAAAA,UAAAA,CAAWqB,IAAI,CAACN,SAAAA,CAAAA;AAClB,SAAA;QACA,MAAMO,SAAAA,CAAAA,GAAAA;YACJ,MAAMC,iBAAAA,GAAoB,MAAMrB,aAAAA,CAAcsB,OAAO,EAAA;YACrD,OAAOD,iBAAAA,CAAkBE,MAAM,GAAG,CAAA;AACpC,SAAA;QACA,MAAMR,EAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMf,cAAce,EAAE,EAAA;AACxB,SAAA;QACA,MAAME,IAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMjB,cAAciB,IAAI,EAAA;AAC1B;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ const transformLogMessage = (level, message)=>{
4
+ if (typeof message === 'string') {
5
+ return {
6
+ level,
7
+ message
8
+ };
9
+ }
10
+ if (typeof message === 'object' && message !== null) {
11
+ if ('event' in message && 'name' in message) {
12
+ return {
13
+ level,
14
+ message: `[internal migration]: ${message.event} ${message?.name}`,
15
+ timestamp: Date.now()
16
+ };
17
+ }
18
+ }
19
+ // NOTE: the message typing are too loose so in practice we should never arrive here.
20
+ return '';
21
+ };
22
+
23
+ exports.transformLogMessage = transformLogMessage;
24
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sources":["../../src/migrations/logger.ts"],"sourcesContent":["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"],"names":["transformLogMessage","level","message","event","name","timestamp","Date","now"],"mappings":";;AAAO,MAAMA,mBAAsB,GAAA,CAACC,KAAeC,EAAAA,OAAAA,GAAAA;IACjD,IAAI,OAAOA,YAAY,QAAU,EAAA;QAC/B,OAAO;AAAED,YAAAA,KAAAA;AAAOC,YAAAA;AAAQ,SAAA;AAC1B;AAEA,IAAA,IAAI,OAAOA,OAAAA,KAAY,QAAYA,IAAAA,OAAAA,KAAY,IAAM,EAAA;QACnD,IAAI,OAAA,IAAWA,OAAW,IAAA,MAAA,IAAUA,OAAS,EAAA;YAC3C,OAAO;AACLD,gBAAAA,KAAAA;gBACAC,OAAS,EAAA,CAAC,sBAAsB,EAAEA,OAAQC,CAAAA,KAAK,CAAC,CAAC,EAAED,OAASE,EAAAA,IAAAA,CAAK,CAAC;AAClEC,gBAAAA,SAAAA,EAAWC,KAAKC,GAAG;AACrB,aAAA;AACF;AACF;;IAGA,OAAO,EAAA;AACT;;;;"}
@@ -0,0 +1,22 @@
1
+ const transformLogMessage = (level, message)=>{
2
+ if (typeof message === 'string') {
3
+ return {
4
+ level,
5
+ message
6
+ };
7
+ }
8
+ if (typeof message === 'object' && message !== null) {
9
+ if ('event' in message && 'name' in message) {
10
+ return {
11
+ level,
12
+ message: `[internal migration]: ${message.event} ${message?.name}`,
13
+ timestamp: Date.now()
14
+ };
15
+ }
16
+ }
17
+ // NOTE: the message typing are too loose so in practice we should never arrive here.
18
+ return '';
19
+ };
20
+
21
+ export { transformLogMessage };
22
+ //# sourceMappingURL=logger.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.mjs","sources":["../../src/migrations/logger.ts"],"sourcesContent":["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"],"names":["transformLogMessage","level","message","event","name","timestamp","Date","now"],"mappings":"AAAO,MAAMA,mBAAsB,GAAA,CAACC,KAAeC,EAAAA,OAAAA,GAAAA;IACjD,IAAI,OAAOA,YAAY,QAAU,EAAA;QAC/B,OAAO;AAAED,YAAAA,KAAAA;AAAOC,YAAAA;AAAQ,SAAA;AAC1B;AAEA,IAAA,IAAI,OAAOA,OAAAA,KAAY,QAAYA,IAAAA,OAAAA,KAAY,IAAM,EAAA;QACnD,IAAI,OAAA,IAAWA,OAAW,IAAA,MAAA,IAAUA,OAAS,EAAA;YAC3C,OAAO;AACLD,gBAAAA,KAAAA;gBACAC,OAAS,EAAA,CAAC,sBAAsB,EAAEA,OAAQC,CAAAA,KAAK,CAAC,CAAC,EAAED,OAASE,EAAAA,IAAAA,CAAK,CAAC;AAClEC,gBAAAA,SAAAA,EAAWC,KAAKC,GAAG;AACrB,aAAA;AACF;AACF;;IAGA,OAAO,EAAA;AACT;;;;"}
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ const createStorage = (opts)=>{
4
+ const { db, tableName } = opts;
5
+ const hasMigrationTable = ()=>db.getSchemaConnection().hasTable(tableName);
6
+ const createMigrationTable = ()=>{
7
+ return db.getSchemaConnection().createTable(tableName, (table)=>{
8
+ table.increments('id');
9
+ table.string('name');
10
+ table.datetime('time', {
11
+ useTz: false
12
+ });
13
+ });
14
+ };
15
+ return {
16
+ async logMigration ({ name }) {
17
+ await db.getConnection().insert({
18
+ name,
19
+ time: new Date()
20
+ }).into(tableName);
21
+ },
22
+ async unlogMigration ({ name }) {
23
+ await db.getConnection(tableName).del().where({
24
+ name
25
+ });
26
+ },
27
+ async executed () {
28
+ if (!await hasMigrationTable()) {
29
+ await createMigrationTable();
30
+ return [];
31
+ }
32
+ const logs = await db.getConnection(tableName).select().from(tableName).orderBy('time');
33
+ return logs.map((log)=>log.name);
34
+ }
35
+ };
36
+ };
37
+
38
+ exports.createStorage = createStorage;
39
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sources":["../../src/migrations/storage.ts"],"sourcesContent":["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"],"names":["createStorage","opts","db","tableName","hasMigrationTable","getSchemaConnection","hasTable","createMigrationTable","createTable","table","increments","string","datetime","useTz","logMigration","name","getConnection","insert","time","Date","into","unlogMigration","del","where","executed","logs","select","from","orderBy","map","log"],"mappings":";;AAOO,MAAMA,gBAAgB,CAACC,IAAAA,GAAAA;AAC5B,IAAA,MAAM,EAAEC,EAAE,EAAEC,SAAS,EAAE,GAAGF,IAAAA;AAE1B,IAAA,MAAMG,oBAAoB,IAAMF,EAAAA,CAAGG,mBAAmB,EAAA,CAAGC,QAAQ,CAACH,SAAAA,CAAAA;AAElE,IAAA,MAAMI,oBAAuB,GAAA,IAAA;AAC3B,QAAA,OAAOL,GAAGG,mBAAmB,EAAA,CAAGG,WAAW,CAACL,WAAW,CAACM,KAAAA,GAAAA;AACtDA,YAAAA,KAAAA,CAAMC,UAAU,CAAC,IAAA,CAAA;AACjBD,YAAAA,KAAAA,CAAME,MAAM,CAAC,MAAA,CAAA;YACbF,KAAMG,CAAAA,QAAQ,CAAC,MAAQ,EAAA;gBAAEC,KAAO,EAAA;AAAM,aAAA,CAAA;AACxC,SAAA,CAAA;AACF,KAAA;IAEA,OAAO;QACL,MAAMC,YAAAA,CAAAA,CAAa,EAAEC,IAAI,EAAoB,EAAA;AAC3C,YAAA,MAAMb,EACHc,CAAAA,aAAa,EACbC,CAAAA,MAAM,CAAC;AACNF,gBAAAA,IAAAA;AACAG,gBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,aAAA,CAAA,CACCC,IAAI,CAACjB,SAAAA,CAAAA;AACV,SAAA;QAEA,MAAMkB,cAAAA,CAAAA,CAAe,EAAEN,IAAI,EAAoB,EAAA;AAC7C,YAAA,MAAMb,GAAGc,aAAa,CAACb,WAAWmB,GAAG,EAAA,CAAGC,KAAK,CAAC;AAAER,gBAAAA;AAAK,aAAA,CAAA;AACvD,SAAA;QAEA,MAAMS,QAAAA,CAAAA,GAAAA;YACJ,IAAI,CAAE,MAAMpB,iBAAsB,EAAA,EAAA;gBAChC,MAAMG,oBAAAA,EAAAA;AACN,gBAAA,OAAO,EAAE;AACX;AAEA,YAAA,MAAMkB,IAAO,GAAA,MAAMvB,EAAGc,CAAAA,aAAa,CAACb,SAAAA,CAAAA,CAAWuB,MAAM,EAAA,CAAGC,IAAI,CAACxB,SAAWyB,CAAAA,CAAAA,OAAO,CAAC,MAAA,CAAA;AAEhF,YAAA,OAAOH,KAAKI,GAAG,CAAC,CAACC,GAAAA,GAA0BA,IAAIf,IAAI,CAAA;AACrD;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,37 @@
1
+ const createStorage = (opts)=>{
2
+ const { db, tableName } = opts;
3
+ const hasMigrationTable = ()=>db.getSchemaConnection().hasTable(tableName);
4
+ const createMigrationTable = ()=>{
5
+ return db.getSchemaConnection().createTable(tableName, (table)=>{
6
+ table.increments('id');
7
+ table.string('name');
8
+ table.datetime('time', {
9
+ useTz: false
10
+ });
11
+ });
12
+ };
13
+ return {
14
+ async logMigration ({ name }) {
15
+ await db.getConnection().insert({
16
+ name,
17
+ time: new Date()
18
+ }).into(tableName);
19
+ },
20
+ async unlogMigration ({ name }) {
21
+ await db.getConnection(tableName).del().where({
22
+ name
23
+ });
24
+ },
25
+ async executed () {
26
+ if (!await hasMigrationTable()) {
27
+ await createMigrationTable();
28
+ return [];
29
+ }
30
+ const logs = await db.getConnection(tableName).select().from(tableName).orderBy('time');
31
+ return logs.map((log)=>log.name);
32
+ }
33
+ };
34
+ };
35
+
36
+ export { createStorage };
37
+ //# sourceMappingURL=storage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.mjs","sources":["../../src/migrations/storage.ts"],"sourcesContent":["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"],"names":["createStorage","opts","db","tableName","hasMigrationTable","getSchemaConnection","hasTable","createMigrationTable","createTable","table","increments","string","datetime","useTz","logMigration","name","getConnection","insert","time","Date","into","unlogMigration","del","where","executed","logs","select","from","orderBy","map","log"],"mappings":"AAOO,MAAMA,gBAAgB,CAACC,IAAAA,GAAAA;AAC5B,IAAA,MAAM,EAAEC,EAAE,EAAEC,SAAS,EAAE,GAAGF,IAAAA;AAE1B,IAAA,MAAMG,oBAAoB,IAAMF,EAAAA,CAAGG,mBAAmB,EAAA,CAAGC,QAAQ,CAACH,SAAAA,CAAAA;AAElE,IAAA,MAAMI,oBAAuB,GAAA,IAAA;AAC3B,QAAA,OAAOL,GAAGG,mBAAmB,EAAA,CAAGG,WAAW,CAACL,WAAW,CAACM,KAAAA,GAAAA;AACtDA,YAAAA,KAAAA,CAAMC,UAAU,CAAC,IAAA,CAAA;AACjBD,YAAAA,KAAAA,CAAME,MAAM,CAAC,MAAA,CAAA;YACbF,KAAMG,CAAAA,QAAQ,CAAC,MAAQ,EAAA;gBAAEC,KAAO,EAAA;AAAM,aAAA,CAAA;AACxC,SAAA,CAAA;AACF,KAAA;IAEA,OAAO;QACL,MAAMC,YAAAA,CAAAA,CAAa,EAAEC,IAAI,EAAoB,EAAA;AAC3C,YAAA,MAAMb,EACHc,CAAAA,aAAa,EACbC,CAAAA,MAAM,CAAC;AACNF,gBAAAA,IAAAA;AACAG,gBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,aAAA,CAAA,CACCC,IAAI,CAACjB,SAAAA,CAAAA;AACV,SAAA;QAEA,MAAMkB,cAAAA,CAAAA,CAAe,EAAEN,IAAI,EAAoB,EAAA;AAC7C,YAAA,MAAMb,GAAGc,aAAa,CAACb,WAAWmB,GAAG,EAAA,CAAGC,KAAK,CAAC;AAAER,gBAAAA;AAAK,aAAA,CAAA;AACvD,SAAA;QAEA,MAAMS,QAAAA,CAAAA,GAAAA;YACJ,IAAI,CAAE,MAAMpB,iBAAsB,EAAA,EAAA;gBAChC,MAAMG,oBAAAA,EAAAA;AACN,gBAAA,OAAO,EAAE;AACX;AAEA,YAAA,MAAMkB,IAAO,GAAA,MAAMvB,EAAGc,CAAAA,aAAa,CAACb,SAAAA,CAAAA,CAAWuB,MAAM,EAAA,CAAGC,IAAI,CAACxB,SAAWyB,CAAAA,CAAAA,OAAO,CAAC,MAAA,CAAA;AAEhF,YAAA,OAAOH,KAAKI,GAAG,CAAC,CAACC,GAAAA,GAA0BA,IAAIf,IAAI,CAAA;AACrD;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,87 @@
1
+ 'use strict';
2
+
3
+ var fse = require('fs-extra');
4
+ var umzug = require('umzug');
5
+ var storage = require('./storage.js');
6
+ var common = require('./common.js');
7
+ var logger = require('./logger.js');
8
+
9
+ // TODO: check multiple commands in one sql statement
10
+ const migrationResolver = ({ name, path, context })=>{
11
+ const { db } = context;
12
+ if (!path) {
13
+ throw new Error(`Migration ${name} has no path`);
14
+ }
15
+ // if sql file run with knex raw
16
+ if (path.match(/\.sql$/)) {
17
+ const sql = fse.readFileSync(path, 'utf8');
18
+ return {
19
+ name,
20
+ up: common.wrapTransaction(db)((knex)=>knex.raw(sql)),
21
+ async down () {
22
+ throw new Error('Down migration is not supported for sql files');
23
+ }
24
+ };
25
+ }
26
+ // NOTE: we can add some ts register if we want to handle ts migration files at some point
27
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
28
+ const migration = require(path);
29
+ return {
30
+ name,
31
+ up: common.wrapTransaction(db)(migration.up),
32
+ down: common.wrapTransaction(db)(migration.down)
33
+ };
34
+ };
35
+ const createUserMigrationProvider = (db)=>{
36
+ const dir = db.config.settings.migrations.dir;
37
+ fse.ensureDirSync(dir);
38
+ const context = {
39
+ db
40
+ };
41
+ const umzugProvider = new umzug.Umzug({
42
+ storage: storage.createStorage({
43
+ db,
44
+ tableName: 'strapi_migrations'
45
+ }),
46
+ logger: {
47
+ info (message) {
48
+ // NOTE: only log internal migration in debug mode
49
+ db.logger.info(logger.transformLogMessage('info', message));
50
+ },
51
+ warn (message) {
52
+ db.logger.warn(logger.transformLogMessage('warn', message));
53
+ },
54
+ error (message) {
55
+ db.logger.error(logger.transformLogMessage('error', message));
56
+ },
57
+ debug (message) {
58
+ db.logger.debug(logger.transformLogMessage('debug', message));
59
+ }
60
+ },
61
+ context,
62
+ migrations: {
63
+ glob: [
64
+ '*.{js,sql}',
65
+ {
66
+ cwd: dir
67
+ }
68
+ ],
69
+ resolve: migrationResolver
70
+ }
71
+ });
72
+ return {
73
+ async shouldRun () {
74
+ const pendingMigrations = await umzugProvider.pending();
75
+ return pendingMigrations.length > 0 && db.config?.settings?.runMigrations === true;
76
+ },
77
+ async up () {
78
+ await umzugProvider.up();
79
+ },
80
+ async down () {
81
+ await umzugProvider.down();
82
+ }
83
+ };
84
+ };
85
+
86
+ exports.createUserMigrationProvider = createUserMigrationProvider;
87
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sources":["../../src/migrations/users.ts"],"sourcesContent":["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"],"names":["migrationResolver","name","path","context","db","Error","match","sql","fse","readFileSync","up","wrapTransaction","knex","raw","down","migration","require","createUserMigrationProvider","dir","config","settings","migrations","ensureDirSync","umzugProvider","Umzug","storage","createStorage","tableName","logger","info","message","transformLogMessage","warn","error","debug","glob","cwd","resolve","shouldRun","pendingMigrations","pending","length","runMigrations"],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import fse from 'fs-extra';
2
+ import { Umzug } from 'umzug';
3
+ import { createStorage } from './storage.mjs';
4
+ import { wrapTransaction } from './common.mjs';
5
+ import { transformLogMessage } from './logger.mjs';
6
+
7
+ // TODO: check multiple commands in one sql statement
8
+ const migrationResolver = ({ name, path, context })=>{
9
+ const { db } = context;
10
+ if (!path) {
11
+ throw new Error(`Migration ${name} has no path`);
12
+ }
13
+ // if sql file run with knex raw
14
+ if (path.match(/\.sql$/)) {
15
+ const sql = fse.readFileSync(path, 'utf8');
16
+ return {
17
+ name,
18
+ up: wrapTransaction(db)((knex)=>knex.raw(sql)),
19
+ async down () {
20
+ throw new Error('Down migration is not supported for sql files');
21
+ }
22
+ };
23
+ }
24
+ // NOTE: we can add some ts register if we want to handle ts migration files at some point
25
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
26
+ const migration = require(path);
27
+ return {
28
+ name,
29
+ up: wrapTransaction(db)(migration.up),
30
+ down: wrapTransaction(db)(migration.down)
31
+ };
32
+ };
33
+ const createUserMigrationProvider = (db)=>{
34
+ const dir = db.config.settings.migrations.dir;
35
+ fse.ensureDirSync(dir);
36
+ const context = {
37
+ db
38
+ };
39
+ const umzugProvider = new Umzug({
40
+ storage: createStorage({
41
+ db,
42
+ tableName: 'strapi_migrations'
43
+ }),
44
+ logger: {
45
+ info (message) {
46
+ // NOTE: only log internal migration in debug mode
47
+ db.logger.info(transformLogMessage('info', message));
48
+ },
49
+ warn (message) {
50
+ db.logger.warn(transformLogMessage('warn', message));
51
+ },
52
+ error (message) {
53
+ db.logger.error(transformLogMessage('error', message));
54
+ },
55
+ debug (message) {
56
+ db.logger.debug(transformLogMessage('debug', message));
57
+ }
58
+ },
59
+ context,
60
+ migrations: {
61
+ glob: [
62
+ '*.{js,sql}',
63
+ {
64
+ cwd: dir
65
+ }
66
+ ],
67
+ resolve: migrationResolver
68
+ }
69
+ });
70
+ return {
71
+ async shouldRun () {
72
+ const pendingMigrations = await umzugProvider.pending();
73
+ return pendingMigrations.length > 0 && db.config?.settings?.runMigrations === true;
74
+ },
75
+ async up () {
76
+ await umzugProvider.up();
77
+ },
78
+ async down () {
79
+ await umzugProvider.down();
80
+ }
81
+ };
82
+ };
83
+
84
+ export { createUserMigrationProvider };
85
+ //# sourceMappingURL=users.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.mjs","sources":["../../src/migrations/users.ts"],"sourcesContent":["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"],"names":["migrationResolver","name","path","context","db","Error","match","sql","fse","readFileSync","up","wrapTransaction","knex","raw","down","migration","require","createUserMigrationProvider","dir","config","settings","migrations","ensureDirSync","umzugProvider","Umzug","storage","createStorage","tableName","logger","info","message","transformLogMessage","warn","error","debug","glob","cwd","resolve","shouldRun","pendingMigrations","pending","length","runMigrations"],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ 'use strict';
2
+
3
+ const createPivotJoin = (ctx, { alias, refAlias, joinTable, targetMeta })=>{
4
+ const { qb } = ctx;
5
+ const joinAlias = qb.getAlias();
6
+ qb.join({
7
+ alias: joinAlias,
8
+ referencedTable: joinTable.name,
9
+ referencedColumn: joinTable.joinColumn.name,
10
+ rootColumn: joinTable.joinColumn.referencedColumn,
11
+ rootTable: alias,
12
+ on: joinTable.on
13
+ });
14
+ const subAlias = refAlias || qb.getAlias();
15
+ qb.join({
16
+ alias: subAlias,
17
+ referencedTable: targetMeta.tableName,
18
+ referencedColumn: joinTable.inverseJoinColumn.referencedColumn,
19
+ rootColumn: joinTable.inverseJoinColumn.name,
20
+ rootTable: joinAlias
21
+ });
22
+ return subAlias;
23
+ };
24
+ const createJoin = (ctx, { alias, refAlias, attributeName, attribute })=>{
25
+ const { db, qb, uid } = ctx;
26
+ if (attribute.type !== 'relation') {
27
+ throw new Error(`Cannot join on non relational field ${attributeName}`);
28
+ }
29
+ const targetMeta = db.metadata.get(attribute.target);
30
+ if ([
31
+ 'morphOne',
32
+ 'morphMany'
33
+ ].includes(attribute.relation)) {
34
+ const targetAttribute = targetMeta.attributes[attribute.morphBy];
35
+ // @ts-expect-error - morphBy is not defined on the attribute
36
+ const { joinTable, morphColumn } = targetAttribute;
37
+ if (morphColumn) {
38
+ const subAlias = refAlias || qb.getAlias();
39
+ qb.join({
40
+ alias: subAlias,
41
+ referencedTable: targetMeta.tableName,
42
+ referencedColumn: morphColumn.idColumn.name,
43
+ rootColumn: morphColumn.idColumn.referencedColumn,
44
+ rootTable: alias,
45
+ on: {
46
+ [morphColumn.typeColumn.name]: uid,
47
+ ...morphColumn.on
48
+ }
49
+ });
50
+ return subAlias;
51
+ }
52
+ if (joinTable) {
53
+ const joinAlias = qb.getAlias();
54
+ qb.join({
55
+ alias: joinAlias,
56
+ referencedTable: joinTable.name,
57
+ referencedColumn: joinTable.morphColumn.idColumn.name,
58
+ rootColumn: joinTable.morphColumn.idColumn.referencedColumn,
59
+ rootTable: alias,
60
+ on: {
61
+ [joinTable.morphColumn.typeColumn.name]: uid,
62
+ field: attributeName
63
+ }
64
+ });
65
+ const subAlias = refAlias || qb.getAlias();
66
+ qb.join({
67
+ alias: subAlias,
68
+ referencedTable: targetMeta.tableName,
69
+ referencedColumn: joinTable.joinColumn.referencedColumn,
70
+ rootColumn: joinTable.joinColumn.name,
71
+ rootTable: joinAlias
72
+ });
73
+ return subAlias;
74
+ }
75
+ return alias;
76
+ }
77
+ const { joinColumn } = attribute;
78
+ if (joinColumn) {
79
+ const subAlias = refAlias || qb.getAlias();
80
+ qb.join({
81
+ alias: subAlias,
82
+ referencedTable: targetMeta.tableName,
83
+ referencedColumn: joinColumn.referencedColumn,
84
+ rootColumn: joinColumn.name,
85
+ rootTable: alias
86
+ });
87
+ return subAlias;
88
+ }
89
+ const { joinTable } = attribute;
90
+ if (joinTable) {
91
+ return createPivotJoin(ctx, {
92
+ alias,
93
+ refAlias,
94
+ joinTable,
95
+ targetMeta
96
+ });
97
+ }
98
+ return alias;
99
+ };
100
+ // TODO: toColumnName for orderBy & on
101
+ const applyJoin = (qb, join)=>{
102
+ const { method = 'leftJoin', alias, referencedTable, referencedColumn, rootColumn, // FIXME: qb.alias can't exist here
103
+ rootTable, on, orderBy } = join;
104
+ qb[method](`${referencedTable} as ${alias}`, (inner)=>{
105
+ inner.on(`${rootTable}.${rootColumn}`, `${alias}.${referencedColumn}`);
106
+ if (on) {
107
+ for (const key of Object.keys(on)){
108
+ inner.onVal(`${alias}.${key}`, on[key]);
109
+ }
110
+ }
111
+ });
112
+ if (orderBy) {
113
+ Object.keys(orderBy).forEach((column)=>{
114
+ const direction = orderBy[column];
115
+ qb.orderBy(`${alias}.${column}`, direction);
116
+ });
117
+ }
118
+ };
119
+ const applyJoins = (qb, joins)=>{
120
+ return joins.forEach((join)=>applyJoin(qb, join));
121
+ };
122
+
123
+ exports.applyJoin = applyJoin;
124
+ exports.applyJoins = applyJoins;
125
+ exports.createJoin = createJoin;
126
+ exports.createPivotJoin = createPivotJoin;
127
+ //# sourceMappingURL=join.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join.js","sources":["../../../src/query/helpers/join.ts"],"sourcesContent":["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"],"names":["createPivotJoin","ctx","alias","refAlias","joinTable","targetMeta","qb","joinAlias","getAlias","join","referencedTable","name","referencedColumn","joinColumn","rootColumn","rootTable","on","subAlias","tableName","inverseJoinColumn","createJoin","attributeName","attribute","db","uid","type","Error","metadata","get","target","includes","relation","targetAttribute","attributes","morphBy","morphColumn","idColumn","typeColumn","field","applyJoin","method","orderBy","inner","key","Object","keys","onVal","forEach","column","direction","applyJoins","joins"],"mappings":"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"}