@strapi/database 5.12.0 → 5.12.2

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,211 @@
1
+ 'use strict';
2
+
3
+ const SQL_QUERIES = {
4
+ TABLE_LIST: `select name from sqlite_master where type = 'table' and name NOT LIKE 'sqlite%'`,
5
+ TABLE_INFO: `pragma table_info(??)`,
6
+ INDEX_LIST: 'pragma index_list(??)',
7
+ INDEX_INFO: 'pragma index_info(??)',
8
+ FOREIGN_KEY_LIST: 'pragma foreign_key_list(??)'
9
+ };
10
+ const toStrapiType = (column)=>{
11
+ const { type } = column;
12
+ const rootType = type.toLowerCase().match(/[^(), ]+/)?.[0];
13
+ switch(rootType){
14
+ case 'integer':
15
+ {
16
+ if (column.pk) {
17
+ return {
18
+ type: 'increments',
19
+ args: [
20
+ {
21
+ primary: true,
22
+ primaryKey: true
23
+ }
24
+ ]
25
+ };
26
+ }
27
+ return {
28
+ type: 'integer'
29
+ };
30
+ }
31
+ case 'float':
32
+ {
33
+ return {
34
+ type: 'float',
35
+ args: [
36
+ 10,
37
+ 2
38
+ ]
39
+ };
40
+ }
41
+ case 'bigint':
42
+ {
43
+ return {
44
+ type: 'bigInteger'
45
+ };
46
+ }
47
+ case 'varchar':
48
+ {
49
+ const length = type.slice(8, type.length - 1);
50
+ return {
51
+ type: 'string',
52
+ args: [
53
+ Number(length)
54
+ ]
55
+ };
56
+ }
57
+ case 'text':
58
+ {
59
+ return {
60
+ type: 'text',
61
+ args: [
62
+ 'longtext'
63
+ ]
64
+ };
65
+ }
66
+ case 'json':
67
+ {
68
+ return {
69
+ type: 'jsonb'
70
+ };
71
+ }
72
+ case 'boolean':
73
+ {
74
+ return {
75
+ type: 'boolean'
76
+ };
77
+ }
78
+ case 'datetime':
79
+ {
80
+ return {
81
+ type: 'datetime',
82
+ args: [
83
+ {
84
+ useTz: false,
85
+ precision: 6
86
+ }
87
+ ]
88
+ };
89
+ }
90
+ case 'date':
91
+ {
92
+ return {
93
+ type: 'date'
94
+ };
95
+ }
96
+ case 'time':
97
+ {
98
+ return {
99
+ type: 'time',
100
+ args: [
101
+ {
102
+ precision: 3
103
+ }
104
+ ]
105
+ };
106
+ }
107
+ default:
108
+ {
109
+ return {
110
+ type: 'specificType',
111
+ args: [
112
+ column.data_type
113
+ ]
114
+ };
115
+ }
116
+ }
117
+ };
118
+ class SqliteSchemaInspector {
119
+ async getSchema() {
120
+ const schema = {
121
+ tables: []
122
+ };
123
+ const tables = await this.getTables();
124
+ for (const tableName of tables){
125
+ const columns = await this.getColumns(tableName);
126
+ const indexes = await this.getIndexes(tableName);
127
+ const foreignKeys = await this.getForeignKeys(tableName);
128
+ schema.tables.push({
129
+ name: tableName,
130
+ columns,
131
+ indexes,
132
+ foreignKeys
133
+ });
134
+ }
135
+ return schema;
136
+ }
137
+ async getTables() {
138
+ const rows = await this.db.connection.raw(SQL_QUERIES.TABLE_LIST);
139
+ return rows.map((row)=>row.name);
140
+ }
141
+ async getColumns(tableName) {
142
+ const rows = await this.db.connection.raw(SQL_QUERIES.TABLE_INFO, [
143
+ tableName
144
+ ]);
145
+ return rows.map((row)=>{
146
+ const { type, args = [], ...rest } = toStrapiType(row);
147
+ return {
148
+ type,
149
+ args,
150
+ name: row.name,
151
+ defaultTo: row.dflt_value,
152
+ notNullable: row.notnull !== null ? Boolean(row.notnull) : null,
153
+ unsigned: false,
154
+ ...rest
155
+ };
156
+ });
157
+ }
158
+ async getIndexes(tableName) {
159
+ const indexes = await this.db.connection.raw(SQL_QUERIES.INDEX_LIST, [
160
+ tableName
161
+ ]);
162
+ const ret = [];
163
+ for (const index of indexes.filter((index)=>!index.name.startsWith('sqlite_'))){
164
+ const res = await this.db.connection.raw(SQL_QUERIES.INDEX_INFO, [
165
+ index.name
166
+ ]);
167
+ const indexInfo = {
168
+ columns: res.map((row)=>row.name),
169
+ name: index.name
170
+ };
171
+ if (index.unique) {
172
+ indexInfo.type = 'unique';
173
+ }
174
+ ret.push(indexInfo);
175
+ }
176
+ return ret;
177
+ }
178
+ async getForeignKeys(tableName) {
179
+ const fks = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_LIST, [
180
+ tableName
181
+ ]);
182
+ const ret = {};
183
+ for (const fk of fks){
184
+ if (!ret[fk.id]) {
185
+ ret[fk.id] = {
186
+ // TODO: name, // find name
187
+ name: '',
188
+ columns: [
189
+ fk.from
190
+ ],
191
+ referencedColumns: [
192
+ fk.to
193
+ ],
194
+ referencedTable: fk.table,
195
+ onUpdate: fk.on_update.toUpperCase(),
196
+ onDelete: fk.on_delete.toUpperCase()
197
+ };
198
+ } else {
199
+ ret[fk.id].columns.push(fk.from);
200
+ ret[fk.id].referencedColumns.push(fk.to);
201
+ }
202
+ }
203
+ return Object.values(ret);
204
+ }
205
+ constructor(db){
206
+ this.db = db;
207
+ }
208
+ }
209
+
210
+ module.exports = SqliteSchemaInspector;
211
+ //# sourceMappingURL=schema-inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-inspector.js","sources":["../../../src/dialects/sqlite/schema-inspector.ts"],"sourcesContent":["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"],"names":["SQL_QUERIES","TABLE_LIST","TABLE_INFO","INDEX_LIST","INDEX_INFO","FOREIGN_KEY_LIST","toStrapiType","column","type","rootType","toLowerCase","match","pk","args","primary","primaryKey","length","slice","Number","useTz","precision","data_type","SqliteSchemaInspector","getSchema","schema","tables","getTables","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","push","name","rows","db","connection","raw","map","row","rest","defaultTo","dflt_value","notNullable","notnull","Boolean","unsigned","ret","index","filter","startsWith","res","indexInfo","unique","fks","fk","id","from","referencedColumns","to","referencedTable","table","onUpdate","on_update","toUpperCase","onDelete","on_delete","Object","values","constructor"],"mappings":";;AAIA,MAAMA,WAAc,GAAA;IAClBC,UAAY,EAAA,CAAC,+EAA+E,CAAC;IAC7FC,UAAY,EAAA,CAAC,qBAAqB,CAAC;IACnCC,UAAY,EAAA,uBAAA;IACZC,UAAY,EAAA,uBAAA;IACZC,gBAAkB,EAAA;AACpB,CAAA;AA6CA,MAAMC,eAAe,CAACC,MAAAA,GAAAA;IACpB,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAAA;IAEjB,MAAME,QAAAA,GAAWD,KAAKE,WAAW,EAAA,CAAGC,KAAK,CAAC,UAAA,CAAA,GAAc,CAAE,CAAA;IAE1D,OAAQF,QAAAA;QACN,KAAK,SAAA;AAAW,YAAA;gBACd,IAAIF,MAAAA,CAAOK,EAAE,EAAE;oBACb,OAAO;wBAAEJ,IAAM,EAAA,YAAA;wBAAcK,IAAM,EAAA;AAAC,4BAAA;gCAAEC,OAAS,EAAA,IAAA;gCAAMC,UAAY,EAAA;AAAK;AAAE;AAAC,qBAAA;AAC3E;gBAEA,OAAO;oBAAEP,IAAM,EAAA;AAAU,iBAAA;AAC3B;QACA,KAAK,OAAA;AAAS,YAAA;gBACZ,OAAO;oBAAEA,IAAM,EAAA,OAAA;oBAASK,IAAM,EAAA;AAAC,wBAAA,EAAA;AAAI,wBAAA;AAAE;AAAC,iBAAA;AACxC;QACA,KAAK,QAAA;AAAU,YAAA;gBACb,OAAO;oBAAEL,IAAM,EAAA;AAAa,iBAAA;AAC9B;QACA,KAAK,SAAA;AAAW,YAAA;AACd,gBAAA,MAAMQ,SAASR,IAAKS,CAAAA,KAAK,CAAC,CAAGT,EAAAA,IAAAA,CAAKQ,MAAM,GAAG,CAAA,CAAA;gBAE3C,OAAO;oBAAER,IAAM,EAAA,QAAA;oBAAUK,IAAM,EAAA;wBAACK,MAAOF,CAAAA,MAAAA;AAAQ;AAAC,iBAAA;AAClD;QACA,KAAK,MAAA;AAAQ,YAAA;gBACX,OAAO;oBAAER,IAAM,EAAA,MAAA;oBAAQK,IAAM,EAAA;AAAC,wBAAA;AAAW;AAAC,iBAAA;AAC5C;QACA,KAAK,MAAA;AAAQ,YAAA;gBACX,OAAO;oBAAEL,IAAM,EAAA;AAAQ,iBAAA;AACzB;QACA,KAAK,SAAA;AAAW,YAAA;gBACd,OAAO;oBAAEA,IAAM,EAAA;AAAU,iBAAA;AAC3B;QACA,KAAK,UAAA;AAAY,YAAA;gBACf,OAAO;oBAAEA,IAAM,EAAA,UAAA;oBAAYK,IAAM,EAAA;AAAC,wBAAA;4BAAEM,KAAO,EAAA,KAAA;4BAAOC,SAAW,EAAA;AAAE;AAAE;AAAC,iBAAA;AACpE;QACA,KAAK,MAAA;AAAQ,YAAA;gBACX,OAAO;oBAAEZ,IAAM,EAAA;AAAO,iBAAA;AACxB;QACA,KAAK,MAAA;AAAQ,YAAA;gBACX,OAAO;oBAAEA,IAAM,EAAA,MAAA;oBAAQK,IAAM,EAAA;AAAC,wBAAA;4BAAEO,SAAW,EAAA;AAAE;AAAE;AAAC,iBAAA;AAClD;AACA,QAAA;AAAS,YAAA;gBACP,OAAO;oBAAEZ,IAAM,EAAA,cAAA;oBAAgBK,IAAM,EAAA;AAACN,wBAAAA,MAAAA,CAAOc;AAAU;AAAC,iBAAA;AAC1D;AACF;AACF,CAAA;AAEe,MAAMC,qBAAAA,CAAAA;AAOnB,IAAA,MAAMC,SAAY,GAAA;AAChB,QAAA,MAAMC,MAAiB,GAAA;AAAEC,YAAAA,MAAAA,EAAQ;AAAG,SAAA;AACpC,QAAA,MAAMA,MAAS,GAAA,MAAM,IAAI,CAACC,SAAS,EAAA;QAEnC,KAAK,MAAMC,aAAaF,MAAQ,CAAA;AAC9B,YAAA,MAAMG,OAAU,GAAA,MAAM,IAAI,CAACC,UAAU,CAACF,SAAAA,CAAAA;AACtC,YAAA,MAAMG,OAAU,GAAA,MAAM,IAAI,CAACC,UAAU,CAACJ,SAAAA,CAAAA;AACtC,YAAA,MAAMK,WAAc,GAAA,MAAM,IAAI,CAACC,cAAc,CAACN,SAAAA,CAAAA;YAE9CH,MAAOC,CAAAA,MAAM,CAACS,IAAI,CAAC;gBACjBC,IAAMR,EAAAA,SAAAA;AACNC,gBAAAA,OAAAA;AACAE,gBAAAA,OAAAA;AACAE,gBAAAA;AACF,aAAA,CAAA;AACF;QAEA,OAAOR,MAAAA;AACT;AAEA,IAAA,MAAME,SAA+B,GAAA;QACnC,MAAMU,IAAAA,GAAO,MAAM,IAAI,CAACC,EAAE,CAACC,UAAU,CAACC,GAAG,CAAavC,WAAAA,CAAYC,UAAU,CAAA;AAE5E,QAAA,OAAOmC,KAAKI,GAAG,CAAC,CAACC,GAAAA,GAAQA,IAAIN,IAAI,CAAA;AACnC;IAEA,MAAMN,UAAAA,CAAWF,SAAiB,EAAqB;AACrD,QAAA,MAAMS,IAAO,GAAA,MAAM,IAAI,CAACC,EAAE,CAACC,UAAU,CAACC,GAAG,CAAcvC,WAAYE,CAAAA,UAAU,EAAE;AAACyB,YAAAA;AAAU,SAAA,CAAA;QAE1F,OAAOS,IAAAA,CAAKI,GAAG,CAAC,CAACC,GAAAA,GAAAA;YACf,MAAM,EAAEjC,IAAI,EAAEK,IAAAA,GAAO,EAAE,EAAE,GAAG6B,IAAM,EAAA,GAAGpC,YAAamC,CAAAA,GAAAA,CAAAA;YAElD,OAAO;AACLjC,gBAAAA,IAAAA;AACAK,gBAAAA,IAAAA;AACAsB,gBAAAA,IAAAA,EAAMM,IAAIN,IAAI;AACdQ,gBAAAA,SAAAA,EAAWF,IAAIG,UAAU;AACzBC,gBAAAA,WAAAA,EAAaJ,IAAIK,OAAO,KAAK,OAAOC,OAAQN,CAAAA,GAAAA,CAAIK,OAAO,CAAI,GAAA,IAAA;gBAC3DE,QAAU,EAAA,KAAA;AACV,gBAAA,GAAGN;AACL,aAAA;AACF,SAAA,CAAA;AACF;IAEA,MAAMX,UAAAA,CAAWJ,SAAiB,EAAoB;AACpD,QAAA,MAAMG,OAAU,GAAA,MAAM,IAAI,CAACO,EAAE,CAACC,UAAU,CAACC,GAAG,CAAavC,WAAYG,CAAAA,UAAU,EAAE;AAACwB,YAAAA;AAAU,SAAA,CAAA;AAE5F,QAAA,MAAMsB,MAAe,EAAE;AAEvB,QAAA,KAAK,MAAMC,KAAAA,IAASpB,OAAQqB,CAAAA,MAAM,CAAC,CAACD,KAAU,GAAA,CAACA,KAAMf,CAAAA,IAAI,CAACiB,UAAU,CAAC,SAAa,CAAA,CAAA,CAAA;AAChF,YAAA,MAAMC,GAAM,GAAA,MAAM,IAAI,CAAChB,EAAE,CAACC,UAAU,CAACC,GAAG,CAAiBvC,WAAYI,CAAAA,UAAU,EAAE;AAC/E8C,gBAAAA,KAAAA,CAAMf;AACP,aAAA,CAAA;AAED,YAAA,MAAMmB,SAAmB,GAAA;AACvB1B,gBAAAA,OAAAA,EAASyB,IAAIb,GAAG,CAAC,CAACC,GAAAA,GAAQA,IAAIN,IAAI,CAAA;AAClCA,gBAAAA,IAAAA,EAAMe,MAAMf;AACd,aAAA;YAEA,IAAIe,KAAAA,CAAMK,MAAM,EAAE;AAChBD,gBAAAA,SAAAA,CAAU9C,IAAI,GAAG,QAAA;AACnB;AAEAyC,YAAAA,GAAAA,CAAIf,IAAI,CAACoB,SAAAA,CAAAA;AACX;QAEA,OAAOL,GAAAA;AACT;IAEA,MAAMhB,cAAAA,CAAeN,SAAiB,EAAyB;AAC7D,QAAA,MAAM6B,GAAM,GAAA,MAAM,IAAI,CAACnB,EAAE,CAACC,UAAU,CAACC,GAAG,CAAkBvC,WAAYK,CAAAA,gBAAgB,EAAE;AACtFsB,YAAAA;AACD,SAAA,CAAA;AAED,QAAA,MAAMsB,MAA+C,EAAC;QAEtD,KAAK,MAAMQ,MAAMD,GAAK,CAAA;AACpB,YAAA,IAAI,CAACP,GAAG,CAACQ,EAAGC,CAAAA,EAAE,CAAC,EAAE;AACfT,gBAAAA,GAAG,CAACQ,EAAAA,CAAGC,EAAE,CAAC,GAAG;;oBAEXvB,IAAM,EAAA,EAAA;oBACNP,OAAS,EAAA;AAAC6B,wBAAAA,EAAAA,CAAGE;AAAK,qBAAA;oBAClBC,iBAAmB,EAAA;AAACH,wBAAAA,EAAAA,CAAGI;AAAG,qBAAA;AAC1BC,oBAAAA,eAAAA,EAAiBL,GAAGM,KAAK;oBACzBC,QAAUP,EAAAA,EAAAA,CAAGQ,SAAS,CAACC,WAAW,EAAA;oBAClCC,QAAUV,EAAAA,EAAAA,CAAGW,SAAS,CAACF,WAAW;AACpC,iBAAA;aACK,MAAA;gBACLjB,GAAG,CAACQ,EAAGC,CAAAA,EAAE,CAAC,CAAC9B,OAAO,CAACM,IAAI,CAACuB,EAAAA,CAAGE,IAAI,CAAA;gBAC/BV,GAAG,CAACQ,EAAGC,CAAAA,EAAE,CAAC,CAACE,iBAAiB,CAAC1B,IAAI,CAACuB,EAAAA,CAAGI,EAAE,CAAA;AACzC;AACF;QAEA,OAAOQ,MAAAA,CAAOC,MAAM,CAACrB,GAAAA,CAAAA;AACvB;AAlGAsB,IAAAA,WAAAA,CAAYlC,EAAY,CAAE;QACxB,IAAI,CAACA,EAAE,GAAGA,EAAAA;AACZ;AAiGF;;;;"}
@@ -0,0 +1,209 @@
1
+ const SQL_QUERIES = {
2
+ TABLE_LIST: `select name from sqlite_master where type = 'table' and name NOT LIKE 'sqlite%'`,
3
+ TABLE_INFO: `pragma table_info(??)`,
4
+ INDEX_LIST: 'pragma index_list(??)',
5
+ INDEX_INFO: 'pragma index_info(??)',
6
+ FOREIGN_KEY_LIST: 'pragma foreign_key_list(??)'
7
+ };
8
+ const toStrapiType = (column)=>{
9
+ const { type } = column;
10
+ const rootType = type.toLowerCase().match(/[^(), ]+/)?.[0];
11
+ switch(rootType){
12
+ case 'integer':
13
+ {
14
+ if (column.pk) {
15
+ return {
16
+ type: 'increments',
17
+ args: [
18
+ {
19
+ primary: true,
20
+ primaryKey: true
21
+ }
22
+ ]
23
+ };
24
+ }
25
+ return {
26
+ type: 'integer'
27
+ };
28
+ }
29
+ case 'float':
30
+ {
31
+ return {
32
+ type: 'float',
33
+ args: [
34
+ 10,
35
+ 2
36
+ ]
37
+ };
38
+ }
39
+ case 'bigint':
40
+ {
41
+ return {
42
+ type: 'bigInteger'
43
+ };
44
+ }
45
+ case 'varchar':
46
+ {
47
+ const length = type.slice(8, type.length - 1);
48
+ return {
49
+ type: 'string',
50
+ args: [
51
+ Number(length)
52
+ ]
53
+ };
54
+ }
55
+ case 'text':
56
+ {
57
+ return {
58
+ type: 'text',
59
+ args: [
60
+ 'longtext'
61
+ ]
62
+ };
63
+ }
64
+ case 'json':
65
+ {
66
+ return {
67
+ type: 'jsonb'
68
+ };
69
+ }
70
+ case 'boolean':
71
+ {
72
+ return {
73
+ type: 'boolean'
74
+ };
75
+ }
76
+ case 'datetime':
77
+ {
78
+ return {
79
+ type: 'datetime',
80
+ args: [
81
+ {
82
+ useTz: false,
83
+ precision: 6
84
+ }
85
+ ]
86
+ };
87
+ }
88
+ case 'date':
89
+ {
90
+ return {
91
+ type: 'date'
92
+ };
93
+ }
94
+ case 'time':
95
+ {
96
+ return {
97
+ type: 'time',
98
+ args: [
99
+ {
100
+ precision: 3
101
+ }
102
+ ]
103
+ };
104
+ }
105
+ default:
106
+ {
107
+ return {
108
+ type: 'specificType',
109
+ args: [
110
+ column.data_type
111
+ ]
112
+ };
113
+ }
114
+ }
115
+ };
116
+ class SqliteSchemaInspector {
117
+ async getSchema() {
118
+ const schema = {
119
+ tables: []
120
+ };
121
+ const tables = await this.getTables();
122
+ for (const tableName of tables){
123
+ const columns = await this.getColumns(tableName);
124
+ const indexes = await this.getIndexes(tableName);
125
+ const foreignKeys = await this.getForeignKeys(tableName);
126
+ schema.tables.push({
127
+ name: tableName,
128
+ columns,
129
+ indexes,
130
+ foreignKeys
131
+ });
132
+ }
133
+ return schema;
134
+ }
135
+ async getTables() {
136
+ const rows = await this.db.connection.raw(SQL_QUERIES.TABLE_LIST);
137
+ return rows.map((row)=>row.name);
138
+ }
139
+ async getColumns(tableName) {
140
+ const rows = await this.db.connection.raw(SQL_QUERIES.TABLE_INFO, [
141
+ tableName
142
+ ]);
143
+ return rows.map((row)=>{
144
+ const { type, args = [], ...rest } = toStrapiType(row);
145
+ return {
146
+ type,
147
+ args,
148
+ name: row.name,
149
+ defaultTo: row.dflt_value,
150
+ notNullable: row.notnull !== null ? Boolean(row.notnull) : null,
151
+ unsigned: false,
152
+ ...rest
153
+ };
154
+ });
155
+ }
156
+ async getIndexes(tableName) {
157
+ const indexes = await this.db.connection.raw(SQL_QUERIES.INDEX_LIST, [
158
+ tableName
159
+ ]);
160
+ const ret = [];
161
+ for (const index of indexes.filter((index)=>!index.name.startsWith('sqlite_'))){
162
+ const res = await this.db.connection.raw(SQL_QUERIES.INDEX_INFO, [
163
+ index.name
164
+ ]);
165
+ const indexInfo = {
166
+ columns: res.map((row)=>row.name),
167
+ name: index.name
168
+ };
169
+ if (index.unique) {
170
+ indexInfo.type = 'unique';
171
+ }
172
+ ret.push(indexInfo);
173
+ }
174
+ return ret;
175
+ }
176
+ async getForeignKeys(tableName) {
177
+ const fks = await this.db.connection.raw(SQL_QUERIES.FOREIGN_KEY_LIST, [
178
+ tableName
179
+ ]);
180
+ const ret = {};
181
+ for (const fk of fks){
182
+ if (!ret[fk.id]) {
183
+ ret[fk.id] = {
184
+ // TODO: name, // find name
185
+ name: '',
186
+ columns: [
187
+ fk.from
188
+ ],
189
+ referencedColumns: [
190
+ fk.to
191
+ ],
192
+ referencedTable: fk.table,
193
+ onUpdate: fk.on_update.toUpperCase(),
194
+ onDelete: fk.on_delete.toUpperCase()
195
+ };
196
+ } else {
197
+ ret[fk.id].columns.push(fk.from);
198
+ ret[fk.id].referencedColumns.push(fk.to);
199
+ }
200
+ }
201
+ return Object.values(ret);
202
+ }
203
+ constructor(db){
204
+ this.db = db;
205
+ }
206
+ }
207
+
208
+ export { SqliteSchemaInspector as default };
209
+ //# sourceMappingURL=schema-inspector.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-inspector.mjs","sources":["../../../src/dialects/sqlite/schema-inspector.ts"],"sourcesContent":["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"],"names":["SQL_QUERIES","TABLE_LIST","TABLE_INFO","INDEX_LIST","INDEX_INFO","FOREIGN_KEY_LIST","toStrapiType","column","type","rootType","toLowerCase","match","pk","args","primary","primaryKey","length","slice","Number","useTz","precision","data_type","SqliteSchemaInspector","getSchema","schema","tables","getTables","tableName","columns","getColumns","indexes","getIndexes","foreignKeys","getForeignKeys","push","name","rows","db","connection","raw","map","row","rest","defaultTo","dflt_value","notNullable","notnull","Boolean","unsigned","ret","index","filter","startsWith","res","indexInfo","unique","fks","fk","id","from","referencedColumns","to","referencedTable","table","onUpdate","on_update","toUpperCase","onDelete","on_delete","Object","values","constructor"],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ 'use strict';
2
+
3
+ var _ = require('lodash/fp');
4
+
5
+ const withDefaultPagination = (params)=>{
6
+ const { page = 1, pageSize = 10, ...rest } = params;
7
+ return {
8
+ page: Number(page),
9
+ pageSize: Number(pageSize),
10
+ ...rest
11
+ };
12
+ };
13
+ const withOffsetLimit = (params)=>{
14
+ const { page, pageSize, ...rest } = withDefaultPagination(params);
15
+ const offset = Math.max(page - 1, 0) * pageSize;
16
+ const limit = pageSize;
17
+ const query = {
18
+ ...rest,
19
+ limit,
20
+ offset
21
+ };
22
+ return [
23
+ query,
24
+ {
25
+ page,
26
+ pageSize
27
+ }
28
+ ];
29
+ };
30
+ const createRepository = (uid, db)=>{
31
+ return {
32
+ findOne (params = {}) {
33
+ return db.entityManager.findOne(uid, params);
34
+ },
35
+ findMany (params = {}) {
36
+ return db.entityManager.findMany(uid, params);
37
+ },
38
+ findWithCount (params = {}) {
39
+ return Promise.all([
40
+ db.entityManager.findMany(uid, params),
41
+ db.entityManager.count(uid, params)
42
+ ]);
43
+ },
44
+ async findPage (params) {
45
+ const [query, { page, pageSize }] = withOffsetLimit(params);
46
+ const [results, total] = await Promise.all([
47
+ db.entityManager.findMany(uid, query),
48
+ db.entityManager.count(uid, query)
49
+ ]);
50
+ return {
51
+ results,
52
+ pagination: {
53
+ page,
54
+ pageSize,
55
+ pageCount: Math.ceil(total / pageSize),
56
+ total
57
+ }
58
+ };
59
+ },
60
+ create (params) {
61
+ return db.entityManager.create(uid, params);
62
+ },
63
+ createMany (params) {
64
+ return db.entityManager.createMany(uid, params);
65
+ },
66
+ update (params) {
67
+ return db.entityManager.update(uid, params);
68
+ },
69
+ updateMany (params) {
70
+ return db.entityManager.updateMany(uid, params);
71
+ },
72
+ delete (params) {
73
+ return db.entityManager.delete(uid, params);
74
+ },
75
+ deleteMany (params = {}) {
76
+ return db.entityManager.deleteMany(uid, params);
77
+ },
78
+ count (params) {
79
+ return db.entityManager.count(uid, params);
80
+ },
81
+ attachRelations (id, data) {
82
+ return db.entityManager.attachRelations(uid, id, data);
83
+ },
84
+ async updateRelations (id, data) {
85
+ const trx = await db.transaction();
86
+ try {
87
+ await db.entityManager.updateRelations(uid, id, data, {
88
+ transaction: trx.get()
89
+ });
90
+ return await trx.commit();
91
+ } catch (e) {
92
+ await trx.rollback();
93
+ throw e;
94
+ }
95
+ },
96
+ deleteRelations (id) {
97
+ return db.entityManager.deleteRelations(uid, id);
98
+ },
99
+ populate (entity, populate) {
100
+ return db.entityManager.populate(uid, entity, populate);
101
+ },
102
+ load (entity, fields, params) {
103
+ return db.entityManager.load(uid, entity, fields, params);
104
+ },
105
+ async loadPages (entity, field, params) {
106
+ if (!_.isString(field)) {
107
+ throw new Error(`Invalid load. Expected ${field} to be a string`);
108
+ }
109
+ const { attributes } = db.metadata.get(uid);
110
+ const attribute = attributes[field];
111
+ if (!attribute || attribute.type !== 'relation' || !attribute.relation || ![
112
+ 'oneToMany',
113
+ 'manyToMany'
114
+ ].includes(attribute.relation)) {
115
+ throw new Error(`Invalid load. Expected ${field} to be an anyToMany relational attribute`);
116
+ }
117
+ const [query, { page, pageSize }] = withOffsetLimit(params);
118
+ const [results, { count: total }] = await Promise.all([
119
+ db.entityManager.load(uid, entity, field, query),
120
+ db.entityManager.load(uid, entity, field, {
121
+ ...query,
122
+ count: true
123
+ })
124
+ ]);
125
+ return {
126
+ results,
127
+ pagination: {
128
+ page,
129
+ pageSize,
130
+ pageCount: Math.ceil(total / pageSize),
131
+ total
132
+ }
133
+ };
134
+ }
135
+ };
136
+ };
137
+
138
+ exports.createRepository = createRepository;
139
+ //# sourceMappingURL=entity-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-repository.js","sources":["../../src/entity-manager/entity-repository.ts"],"sourcesContent":["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"],"names":["withDefaultPagination","params","page","pageSize","rest","Number","withOffsetLimit","offset","Math","max","limit","query","createRepository","uid","db","findOne","entityManager","findMany","findWithCount","Promise","all","count","findPage","results","total","pagination","pageCount","ceil","create","createMany","update","updateMany","delete","deleteMany","attachRelations","id","data","updateRelations","trx","transaction","get","commit","e","rollback","deleteRelations","populate","entity","load","fields","loadPages","field","isString","Error","attributes","metadata","attribute","type","relation","includes"],"mappings":"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"}