@simonbackx/simple-database 1.35.0 → 1.36.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 (230) hide show
  1. package/dist/_virtual/_@oxc-project_runtime@0.115.0/helpers/decorate.cjs +9 -0
  2. package/dist/_virtual/_@oxc-project_runtime@0.115.0/helpers/decorate.mjs +9 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  4. package/dist/index.cjs +22 -0
  5. package/dist/index.d.cts +10 -0
  6. package/dist/index.d.mts +10 -0
  7. package/dist/index.mjs +10 -0
  8. package/dist/src/classes/Column.cjs +134 -0
  9. package/dist/src/classes/Column.d.cts +34 -0
  10. package/dist/src/classes/Column.d.cts.map +1 -0
  11. package/dist/src/classes/Column.d.mts +34 -0
  12. package/dist/src/classes/Column.d.mts.map +1 -0
  13. package/dist/src/classes/Column.mjs +135 -0
  14. package/dist/src/classes/Column.mjs.map +1 -0
  15. package/dist/src/classes/ColumnType.d.cts +5 -0
  16. package/dist/src/classes/ColumnType.d.cts.map +1 -0
  17. package/dist/src/classes/ColumnType.d.mts +5 -0
  18. package/dist/src/classes/ColumnType.d.mts.map +1 -0
  19. package/dist/src/classes/Database.cjs +157 -0
  20. package/dist/src/classes/Database.d.cts +59 -0
  21. package/dist/src/classes/Database.d.cts.map +1 -0
  22. package/dist/src/classes/Database.d.mts +59 -0
  23. package/dist/src/classes/Database.d.mts.map +1 -0
  24. package/dist/src/classes/Database.mjs +155 -0
  25. package/dist/src/classes/Database.mjs.map +1 -0
  26. package/dist/src/classes/DatabaseStoredValue.d.cts +5 -0
  27. package/dist/src/classes/DatabaseStoredValue.d.cts.map +1 -0
  28. package/dist/src/classes/DatabaseStoredValue.d.mts +5 -0
  29. package/dist/src/classes/DatabaseStoredValue.d.mts.map +1 -0
  30. package/dist/src/classes/Factory.cjs +48 -0
  31. package/dist/src/classes/Factory.d.cts +17 -0
  32. package/dist/src/classes/Factory.d.cts.map +1 -0
  33. package/dist/src/classes/Factory.d.mts +17 -0
  34. package/dist/src/classes/Factory.d.mts.map +1 -0
  35. package/dist/src/classes/Factory.mjs +50 -0
  36. package/dist/src/classes/Factory.mjs.map +1 -0
  37. package/dist/src/classes/ManyToManyRelation.cjs +193 -0
  38. package/dist/src/classes/ManyToManyRelation.d.cts +83 -0
  39. package/dist/src/classes/ManyToManyRelation.d.cts.map +1 -0
  40. package/dist/src/classes/ManyToManyRelation.d.mts +83 -0
  41. package/dist/src/classes/ManyToManyRelation.d.mts.map +1 -0
  42. package/dist/src/classes/ManyToManyRelation.mjs +195 -0
  43. package/dist/src/classes/ManyToManyRelation.mjs.map +1 -0
  44. package/dist/src/classes/ManyToOneRelation.cjs +41 -0
  45. package/dist/src/classes/ManyToOneRelation.d.cts +26 -0
  46. package/dist/src/classes/ManyToOneRelation.d.cts.map +1 -0
  47. package/dist/src/classes/ManyToOneRelation.d.mts +26 -0
  48. package/dist/src/classes/ManyToOneRelation.d.mts.map +1 -0
  49. package/dist/src/classes/ManyToOneRelation.mjs +43 -0
  50. package/dist/src/classes/ManyToOneRelation.mjs.map +1 -0
  51. package/dist/src/classes/Migration.cjs +123 -0
  52. package/dist/src/classes/Migration.d.cts +16 -0
  53. package/dist/src/classes/Migration.d.cts.map +1 -0
  54. package/dist/src/classes/Migration.d.mts +16 -0
  55. package/dist/src/classes/Migration.d.mts.map +1 -0
  56. package/dist/src/classes/Migration.mjs +123 -0
  57. package/dist/src/classes/Migration.mjs.map +1 -0
  58. package/dist/src/classes/Model.cjs +459 -0
  59. package/dist/src/classes/Model.d.cts +162 -0
  60. package/dist/src/classes/Model.d.cts.map +1 -0
  61. package/dist/src/classes/Model.d.mts +162 -0
  62. package/dist/src/classes/Model.d.mts.map +1 -0
  63. package/dist/src/classes/Model.mjs +460 -0
  64. package/dist/src/classes/Model.mjs.map +1 -0
  65. package/dist/src/classes/OneToManyRelation.cjs +66 -0
  66. package/dist/src/classes/OneToManyRelation.d.cts +42 -0
  67. package/dist/src/classes/OneToManyRelation.d.cts.map +1 -0
  68. package/dist/src/classes/OneToManyRelation.d.mts +42 -0
  69. package/dist/src/classes/OneToManyRelation.d.mts.map +1 -0
  70. package/dist/src/classes/OneToManyRelation.mjs +68 -0
  71. package/dist/src/classes/OneToManyRelation.mjs.map +1 -0
  72. package/dist/src/classes/data/boys.cjs +1005 -0
  73. package/dist/src/classes/data/boys.mjs +1007 -0
  74. package/dist/src/classes/data/boys.mjs.map +1 -0
  75. package/dist/src/classes/data/family-names.cjs +1005 -0
  76. package/dist/src/classes/data/family-names.mjs +1007 -0
  77. package/dist/src/classes/data/family-names.mjs.map +1 -0
  78. package/dist/src/classes/data/girls.cjs +1004 -0
  79. package/dist/src/classes/data/girls.mjs +1006 -0
  80. package/dist/src/classes/data/girls.mjs.map +1 -0
  81. package/dist/src/decorators/Column.cjs +26 -0
  82. package/dist/src/decorators/Column.d.cts +22 -0
  83. package/dist/src/decorators/Column.d.cts.map +1 -0
  84. package/dist/src/decorators/Column.d.mts +22 -0
  85. package/dist/src/decorators/Column.d.mts.map +1 -0
  86. package/dist/src/decorators/Column.mjs +28 -0
  87. package/dist/src/decorators/Column.mjs.map +1 -0
  88. package/dist/src/models/Migration.cjs +37 -0
  89. package/dist/src/models/Migration.mjs +39 -0
  90. package/dist/src/models/Migration.mjs.map +1 -0
  91. package/package.json +16 -13
  92. package/dist/cjs/index.d.ts +0 -10
  93. package/dist/cjs/index.d.ts.map +0 -1
  94. package/dist/cjs/index.js +0 -13
  95. package/dist/cjs/index.js.map +0 -1
  96. package/dist/cjs/package.json +0 -1
  97. package/dist/cjs/src/classes/Column.d.ts +0 -30
  98. package/dist/cjs/src/classes/Column.d.ts.map +0 -1
  99. package/dist/cjs/src/classes/Column.js +0 -183
  100. package/dist/cjs/src/classes/Column.js.map +0 -1
  101. package/dist/cjs/src/classes/ColumnType.d.ts +0 -2
  102. package/dist/cjs/src/classes/ColumnType.d.ts.map +0 -1
  103. package/dist/cjs/src/classes/ColumnType.js +0 -3
  104. package/dist/cjs/src/classes/ColumnType.js.map +0 -1
  105. package/dist/cjs/src/classes/Database.d.ts +0 -59
  106. package/dist/cjs/src/classes/Database.d.ts.map +0 -1
  107. package/dist/cjs/src/classes/Database.js +0 -176
  108. package/dist/cjs/src/classes/Database.js.map +0 -1
  109. package/dist/cjs/src/classes/DatabaseStoredValue.d.ts +0 -2
  110. package/dist/cjs/src/classes/DatabaseStoredValue.d.ts.map +0 -1
  111. package/dist/cjs/src/classes/DatabaseStoredValue.js +0 -3
  112. package/dist/cjs/src/classes/DatabaseStoredValue.js.map +0 -1
  113. package/dist/cjs/src/classes/Factory.d.ts +0 -14
  114. package/dist/cjs/src/classes/Factory.d.ts.map +0 -1
  115. package/dist/cjs/src/classes/Factory.js +0 -56
  116. package/dist/cjs/src/classes/Factory.js.map +0 -1
  117. package/dist/cjs/src/classes/ManyToManyRelation.d.ts +0 -79
  118. package/dist/cjs/src/classes/ManyToManyRelation.d.ts.map +0 -1
  119. package/dist/cjs/src/classes/ManyToManyRelation.js +0 -258
  120. package/dist/cjs/src/classes/ManyToManyRelation.js.map +0 -1
  121. package/dist/cjs/src/classes/ManyToOneRelation.d.ts +0 -22
  122. package/dist/cjs/src/classes/ManyToOneRelation.d.ts.map +0 -1
  123. package/dist/cjs/src/classes/ManyToOneRelation.js +0 -51
  124. package/dist/cjs/src/classes/ManyToOneRelation.js.map +0 -1
  125. package/dist/cjs/src/classes/Migration.d.ts +0 -14
  126. package/dist/cjs/src/classes/Migration.d.ts.map +0 -1
  127. package/dist/cjs/src/classes/Migration.js +0 -206
  128. package/dist/cjs/src/classes/Migration.js.map +0 -1
  129. package/dist/cjs/src/classes/Model.d.ts +0 -159
  130. package/dist/cjs/src/classes/Model.d.ts.map +0 -1
  131. package/dist/cjs/src/classes/Model.js +0 -640
  132. package/dist/cjs/src/classes/Model.js.map +0 -1
  133. package/dist/cjs/src/classes/OneToManyRelation.d.ts +0 -38
  134. package/dist/cjs/src/classes/OneToManyRelation.d.ts.map +0 -1
  135. package/dist/cjs/src/classes/OneToManyRelation.js +0 -79
  136. package/dist/cjs/src/classes/OneToManyRelation.js.map +0 -1
  137. package/dist/cjs/src/classes/data/boys.d.ts +0 -3
  138. package/dist/cjs/src/classes/data/boys.d.ts.map +0 -1
  139. package/dist/cjs/src/classes/data/boys.js +0 -1005
  140. package/dist/cjs/src/classes/data/boys.js.map +0 -1
  141. package/dist/cjs/src/classes/data/family-names.d.ts +0 -3
  142. package/dist/cjs/src/classes/data/family-names.d.ts.map +0 -1
  143. package/dist/cjs/src/classes/data/family-names.js +0 -1005
  144. package/dist/cjs/src/classes/data/family-names.js.map +0 -1
  145. package/dist/cjs/src/classes/data/girls.d.ts +0 -3
  146. package/dist/cjs/src/classes/data/girls.d.ts.map +0 -1
  147. package/dist/cjs/src/classes/data/girls.js +0 -1004
  148. package/dist/cjs/src/classes/data/girls.js.map +0 -1
  149. package/dist/cjs/src/classes/data/streets.d.ts +0 -3
  150. package/dist/cjs/src/classes/data/streets.d.ts.map +0 -1
  151. package/dist/cjs/src/classes/data/streets.js +0 -296
  152. package/dist/cjs/src/classes/data/streets.js.map +0 -1
  153. package/dist/cjs/src/decorators/Column.d.ts +0 -18
  154. package/dist/cjs/src/decorators/Column.d.ts.map +0 -1
  155. package/dist/cjs/src/decorators/Column.js +0 -39
  156. package/dist/cjs/src/decorators/Column.js.map +0 -1
  157. package/dist/cjs/src/models/Migration.d.ts +0 -11
  158. package/dist/cjs/src/models/Migration.d.ts.map +0 -1
  159. package/dist/cjs/src/models/Migration.js +0 -52
  160. package/dist/cjs/src/models/Migration.js.map +0 -1
  161. package/dist/cjs/tsconfig.cjs.tsbuildinfo +0 -1
  162. package/dist/esm/index.d.ts +0 -10
  163. package/dist/esm/index.d.ts.map +0 -1
  164. package/dist/esm/index.js +0 -10
  165. package/dist/esm/index.js.map +0 -1
  166. package/dist/esm/src/classes/Column.d.ts +0 -30
  167. package/dist/esm/src/classes/Column.d.ts.map +0 -1
  168. package/dist/esm/src/classes/Column.js +0 -179
  169. package/dist/esm/src/classes/Column.js.map +0 -1
  170. package/dist/esm/src/classes/ColumnType.d.ts +0 -2
  171. package/dist/esm/src/classes/ColumnType.d.ts.map +0 -1
  172. package/dist/esm/src/classes/ColumnType.js +0 -2
  173. package/dist/esm/src/classes/ColumnType.js.map +0 -1
  174. package/dist/esm/src/classes/Database.d.ts +0 -59
  175. package/dist/esm/src/classes/Database.d.ts.map +0 -1
  176. package/dist/esm/src/classes/Database.js +0 -171
  177. package/dist/esm/src/classes/Database.js.map +0 -1
  178. package/dist/esm/src/classes/DatabaseStoredValue.d.ts +0 -2
  179. package/dist/esm/src/classes/DatabaseStoredValue.d.ts.map +0 -1
  180. package/dist/esm/src/classes/DatabaseStoredValue.js +0 -2
  181. package/dist/esm/src/classes/DatabaseStoredValue.js.map +0 -1
  182. package/dist/esm/src/classes/Factory.d.ts +0 -14
  183. package/dist/esm/src/classes/Factory.d.ts.map +0 -1
  184. package/dist/esm/src/classes/Factory.js +0 -51
  185. package/dist/esm/src/classes/Factory.js.map +0 -1
  186. package/dist/esm/src/classes/ManyToManyRelation.d.ts +0 -79
  187. package/dist/esm/src/classes/ManyToManyRelation.d.ts.map +0 -1
  188. package/dist/esm/src/classes/ManyToManyRelation.js +0 -254
  189. package/dist/esm/src/classes/ManyToManyRelation.js.map +0 -1
  190. package/dist/esm/src/classes/ManyToOneRelation.d.ts +0 -22
  191. package/dist/esm/src/classes/ManyToOneRelation.d.ts.map +0 -1
  192. package/dist/esm/src/classes/ManyToOneRelation.js +0 -47
  193. package/dist/esm/src/classes/ManyToOneRelation.js.map +0 -1
  194. package/dist/esm/src/classes/Migration.d.ts +0 -14
  195. package/dist/esm/src/classes/Migration.d.ts.map +0 -1
  196. package/dist/esm/src/classes/Migration.js +0 -168
  197. package/dist/esm/src/classes/Migration.js.map +0 -1
  198. package/dist/esm/src/classes/Model.d.ts +0 -159
  199. package/dist/esm/src/classes/Model.d.ts.map +0 -1
  200. package/dist/esm/src/classes/Model.js +0 -635
  201. package/dist/esm/src/classes/Model.js.map +0 -1
  202. package/dist/esm/src/classes/OneToManyRelation.d.ts +0 -38
  203. package/dist/esm/src/classes/OneToManyRelation.d.ts.map +0 -1
  204. package/dist/esm/src/classes/OneToManyRelation.js +0 -75
  205. package/dist/esm/src/classes/OneToManyRelation.js.map +0 -1
  206. package/dist/esm/src/classes/data/boys.d.ts +0 -3
  207. package/dist/esm/src/classes/data/boys.d.ts.map +0 -1
  208. package/dist/esm/src/classes/data/boys.js +0 -1003
  209. package/dist/esm/src/classes/data/boys.js.map +0 -1
  210. package/dist/esm/src/classes/data/family-names.d.ts +0 -3
  211. package/dist/esm/src/classes/data/family-names.d.ts.map +0 -1
  212. package/dist/esm/src/classes/data/family-names.js +0 -1003
  213. package/dist/esm/src/classes/data/family-names.js.map +0 -1
  214. package/dist/esm/src/classes/data/girls.d.ts +0 -3
  215. package/dist/esm/src/classes/data/girls.d.ts.map +0 -1
  216. package/dist/esm/src/classes/data/girls.js +0 -1002
  217. package/dist/esm/src/classes/data/girls.js.map +0 -1
  218. package/dist/esm/src/classes/data/streets.d.ts +0 -3
  219. package/dist/esm/src/classes/data/streets.d.ts.map +0 -1
  220. package/dist/esm/src/classes/data/streets.js +0 -294
  221. package/dist/esm/src/classes/data/streets.js.map +0 -1
  222. package/dist/esm/src/decorators/Column.d.ts +0 -18
  223. package/dist/esm/src/decorators/Column.d.ts.map +0 -1
  224. package/dist/esm/src/decorators/Column.js +0 -36
  225. package/dist/esm/src/decorators/Column.js.map +0 -1
  226. package/dist/esm/src/models/Migration.d.ts +0 -11
  227. package/dist/esm/src/models/Migration.d.ts.map +0 -1
  228. package/dist/esm/src/models/Migration.js +0 -48
  229. package/dist/esm/src/models/Migration.js.map +0 -1
  230. package/dist/esm/tsconfig.esm.tsbuildinfo +0 -1
@@ -1,258 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ManyToManyRelation = void 0;
4
- const Database_js_1 = require("./Database.js");
5
- const Model_js_1 = require("./Model.js");
6
- class ManyToManyRelation {
7
- modelA;
8
- modelB;
9
- modelLink;
10
- /**
11
- * E.g. parents
12
- */
13
- modelKey;
14
- /**
15
- * Sort the loading of this relation
16
- */
17
- sortKey;
18
- sortOrder = 'ASC';
19
- /**
20
- * E.g. _models_parents
21
- */
22
- get linkTable() {
23
- if (this.modelLink) {
24
- return this.modelLink.table;
25
- }
26
- return '_' + [this.modelA.table, this.modelB.table].sort().join('_');
27
- }
28
- /**
29
- * e.g. modelsId
30
- */
31
- get linkKeyA() {
32
- return (this.modelA.table
33
- + this.modelA.primary.name.charAt(0).toUpperCase()
34
- + this.modelA.primary.name.substring(1)
35
- + (this.modelA === this.modelB ? 'A' : ''));
36
- }
37
- /**
38
- * e.g. parentsId
39
- */
40
- get linkKeyB() {
41
- return (this.modelB.table
42
- + this.modelB.primary.name.charAt(0).toUpperCase()
43
- + this.modelB.primary.name.substring(1)
44
- + (this.modelA === this.modelB ? 'B' : ''));
45
- }
46
- constructor(modelA, modelB, modelKey, modelLink) {
47
- this.modelA = modelA;
48
- this.modelB = modelB;
49
- this.modelKey = modelKey;
50
- this.modelLink = modelLink;
51
- }
52
- reverse(modelKey) {
53
- return new ManyToManyRelation(this.modelB, this.modelA, modelKey, this.modelLink);
54
- }
55
- setSort(key, order = 'ASC') {
56
- this.sortKey = key;
57
- this.sortOrder = order;
58
- return this;
59
- }
60
- /// Generate a join query
61
- joinQuery(namespaceA, namespaceB) {
62
- const linkNamespace = namespaceA + '_' + namespaceB;
63
- let str = `LEFT JOIN ${this.linkTable} as ${linkNamespace} on ${linkNamespace}.${this.linkKeyA} = ${namespaceA}.${this.modelA.primary.name}\n`;
64
- str += `LEFT JOIN ${this.modelB.table} as ${namespaceB} on ${linkNamespace}.${this.linkKeyB} = ${namespaceB}.${this.modelB.primary.name}`;
65
- return str;
66
- }
67
- orderByQuery(namespaceA, namespaceB) {
68
- if (this.sortKey === undefined) {
69
- return '';
70
- }
71
- const linkNamespace = namespaceA + '_' + namespaceB;
72
- let str = `\nORDER BY ${linkNamespace}.${this.sortKey}`;
73
- if (this.sortOrder === 'DESC') {
74
- str += ' DESC';
75
- }
76
- return str + '\n';
77
- }
78
- /// Load the relation of a model and return the loaded models
79
- async load(modelA, sorted = true, where, whereLink) {
80
- const namespaceB = 'B';
81
- const linkNamespace = 'A_B';
82
- let select = this.modelB.getDefaultSelect(namespaceB);
83
- if (this.modelLink) {
84
- select += ', ' + this.modelLink.getDefaultSelect(linkNamespace);
85
- }
86
- let str = `SELECT ${select} FROM ${this.linkTable} as ${linkNamespace}\n`;
87
- str += `JOIN ${this.modelB.table} as ${namespaceB} on ${linkNamespace}.${this.linkKeyB} = ${namespaceB}.${this.modelB.primary.name}\n`;
88
- str += `WHERE ${linkNamespace}.${this.linkKeyA} = ?`;
89
- const params = [modelA.getPrimaryKey()];
90
- if (where) {
91
- for (const key in where) {
92
- if (Object.hasOwnProperty.call(where, key)) {
93
- str += ` AND ${namespaceB}.\`${key}\` = ?`;
94
- params.push(where[key]);
95
- }
96
- }
97
- }
98
- if (whereLink) {
99
- for (const key in whereLink) {
100
- if (Object.hasOwnProperty.call(whereLink, key)) {
101
- str += ` AND ${linkNamespace}.\`${key}\` = ?`;
102
- params.push(whereLink[key]);
103
- }
104
- }
105
- }
106
- if (sorted) {
107
- str += this.orderByQuery('A', 'B');
108
- }
109
- const [rows] = await Database_js_1.Database.select(str, params);
110
- const modelsB = this.modelB.fromRows(rows, namespaceB);
111
- // Also load link table if possible
112
- if (this.modelLink) {
113
- for (const row of rows) {
114
- const model = this.modelLink.fromRow(row[linkNamespace]);
115
- // Fin modelB
116
- const modelB = modelsB.find(m => m.getPrimaryKey() === row[linkNamespace][this.linkKeyB]);
117
- if (!modelB) {
118
- throw new Error('Unexpected linking');
119
- }
120
- // Save link
121
- modelB._link = model;
122
- }
123
- }
124
- modelA.setManyRelation(this, modelsB);
125
- return modelsB;
126
- }
127
- /// Whether this relation is loaded
128
- isLoaded(model) {
129
- // Also not loaded if null, since it should be an empty array or an array if it is loaded
130
- return Array.isArray(model[this.modelKey]);
131
- }
132
- async setLinkTable(modelA, modelB, linkTableValues) {
133
- const str = `UPDATE ${this.linkTable} SET ? WHERE ${Database_js_1.Database.escapeId(this.linkKeyA)} = ? AND ${Database_js_1.Database.escapeId(this.linkKeyB)} = ?`;
134
- const [result] = await Database_js_1.Database.update(str, [linkTableValues, modelA.getPrimaryKey(), modelB.getPrimaryKey()]);
135
- if (result.changedRows !== 1) {
136
- // Todo: add option to fail silently
137
- throw new Error('Failed to update link table. Check if combination exists');
138
- }
139
- }
140
- async linkIds(modelA, modelsB, linkTableValues) {
141
- if (modelsB.length === 0) {
142
- return 0;
143
- }
144
- // Nested arrays are turned into grouped lists (for bulk inserts), e.g. [['a', 'b'], ['c', 'd']] turns into ('a', 'b'), ('c', 'd')
145
- let result;
146
- if (linkTableValues !== undefined) {
147
- const linkTableKeys = Object.keys(linkTableValues);
148
- for (const property in linkTableValues) {
149
- if (Object.hasOwnProperty.call(linkTableValues, property)) {
150
- if (linkTableValues[property].length !== modelsB.length) {
151
- throw new Error('Amount of link table values for key '
152
- + property
153
- + ' ('
154
- + linkTableValues[property].length
155
- + ') are not equal to amount of models linked ('
156
- + modelsB.length
157
- + ')');
158
- }
159
- }
160
- }
161
- const query = `INSERT INTO ${Database_js_1.Database.escapeId(this.linkTable)} (
162
- ${Database_js_1.Database.escapeId(this.linkKeyA)},
163
- ${Database_js_1.Database.escapeId(this.linkKeyB)},
164
- ${linkTableKeys.map(k => Database_js_1.Database.escapeId(k)).join(', ')}
165
- ) VALUES ?`;
166
- [result] = await Database_js_1.Database.insert(query, [modelsB.map((modelB, i) => [modelA, modelB, ...linkTableKeys.map(k => linkTableValues[k][i])])]);
167
- }
168
- else {
169
- const query = `INSERT INTO ${Database_js_1.Database.escapeId(this.linkTable)} (
170
- ${Database_js_1.Database.escapeId(this.linkKeyA)},
171
- ${Database_js_1.Database.escapeId(this.linkKeyB)}
172
- ) VALUES ?`;
173
- [result] = await Database_js_1.Database.insert(query, [modelsB.map(modelB => [modelA, modelB])]);
174
- }
175
- return result.affectedRows;
176
- }
177
- async link(modelA, modelsB, linkTableValues) {
178
- const modelAId = modelA.getPrimaryKey();
179
- if (!modelAId) {
180
- throw new Error('Cannot link if model is not saved yet');
181
- }
182
- const affectedRows = await this.linkIds(modelAId, modelsB.map((modelB) => {
183
- const id = modelB.getPrimaryKey();
184
- if (!id) {
185
- throw new Error('Cannot link to a model that is not saved yet');
186
- }
187
- return id;
188
- }), linkTableValues);
189
- // If the relation is loaded, also modify the value of the relation
190
- if (this.isLoaded(modelA)) {
191
- if (affectedRows === modelsB.length) {
192
- const arr = modelA[this.modelKey];
193
- arr.push(...modelsB);
194
- }
195
- else {
196
- // This could happen in race conditions and simultanious requests
197
- console.warn('Warning: linking expected to affect ' + modelsB.length + ' rows, but only affected ' + affectedRows + ' rows');
198
- // TODO: Manually correct by doing a query (safest)
199
- throw new Error('Fallback behaviour net yet implemented');
200
- }
201
- }
202
- }
203
- /**
204
- * Delete all the links from modelA for this relation
205
- * @param modelA
206
- */
207
- async clearId(modelA) {
208
- const query = `DELETE FROM ${this.linkTable} WHERE ${this.linkKeyA} = ?`;
209
- // Arrays are turned into list, e.g. ['a', 'b'] turns into 'a', 'b'
210
- const [result] = await Database_js_1.Database.delete(query, [modelA]);
211
- if (result.affectedRows === 0 && Model_js_1.Model.debug) {
212
- console.warn("Cleared many to many relation, but didn't deleted any entries");
213
- }
214
- }
215
- /**
216
- * Delete all the links from modelA for this relation
217
- * @param modelA
218
- */
219
- async clear(modelA) {
220
- await this.clearId(modelA.getPrimaryKey());
221
- modelA.setManyRelation(this, []);
222
- }
223
- /**
224
- * Delete all the links from modelA for this relation
225
- * @param modelA
226
- */
227
- async syncId(modelA, modelsB, linkTableValues) {
228
- // todo: add transaction
229
- await this.clearId(modelA);
230
- await this.linkIds(modelA, modelsB, linkTableValues);
231
- }
232
- async unlinkIds(modelA, ...modelsB) {
233
- const query = `DELETE FROM ${this.linkTable} WHERE ${this.linkKeyA} = ? AND ${this.linkKeyB} IN (?)`;
234
- // Arrays are turned into list, e.g. ['a', 'b'] turns into 'a', 'b'
235
- const [result] = await Database_js_1.Database.delete(query, [modelA, modelsB]);
236
- return result;
237
- }
238
- async unlink(modelA, ...modelsB) {
239
- const result = await this.unlinkIds(modelA.getPrimaryKey(), ...modelsB.map(modelB => modelB.getPrimaryKey()));
240
- if (this.isLoaded(modelA)) {
241
- if (result.affectedRows === modelsB.length) {
242
- const arr = modelA[this.modelKey];
243
- const idMap = modelsB.map(model => model.getPrimaryKey());
244
- modelA.setManyRelation(this, arr.filter((model) => {
245
- return !idMap.includes(model.getPrimaryKey());
246
- }));
247
- }
248
- else {
249
- // This could happen in race conditions and simultanious requests
250
- console.warn('Warning: unlinking expected to affect ' + modelsB.length + ' rows, but only affected ' + result.affectedRows + ' rows');
251
- // TODO: Manually correct by doing a query (safest)
252
- throw new Error('Fallback behaviour net yet implemented');
253
- }
254
- }
255
- }
256
- }
257
- exports.ManyToManyRelation = ManyToManyRelation;
258
- //# sourceMappingURL=ManyToManyRelation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ManyToManyRelation.js","sourceRoot":"","sources":["../../../../src/classes/ManyToManyRelation.ts"],"names":[],"mappings":";;;AAAA,+CAAyC;AACzC,yCAAmC;AAEnC,MAAa,kBAAkB;IAC3B,MAAM,CAA+B;IACrC,MAAM,CAA+B;IACrC,SAAS,CAAkC;IAE3C;;OAEG;IACH,QAAQ,CAAM;IAEd;;OAEG;IACH,OAAO,CAAqB;IAC5B,SAAS,GAAmB,KAAK,CAAC;IAElC;;OAEG;IACH,IAAI,SAAS;QACT,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAChC,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACR,OAAO,CACH,IAAI,CAAC,MAAM,CAAC,KAAK;cACf,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;cAChD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;cACrC,CAAE,IAAI,CAAC,MAAc,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACtD,CAAC;IACN,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACR,OAAO,CACH,IAAI,CAAC,MAAM,CAAC,KAAK;cACf,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;cAChD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;cACrC,CAAE,IAAI,CAAC,MAAc,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACtD,CAAC;IACN,CAAC;IAED,YAAY,MAAmC,EAAE,MAAmC,EAAE,QAAa,EAAE,SAA0C;QAC3I,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,OAAO,CAAyB,QAAc;QAC1C,OAAO,IAAI,kBAAkB,CAAmB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACxG,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,QAAwB,KAAK;QAC9C,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,yBAAyB;IACzB,SAAS,CAAC,UAAkB,EAAE,UAAkB;QAC5C,MAAM,aAAa,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,CAAC;QACpD,IAAI,GAAG,GAAG,aAAa,IAAI,CAAC,SAAS,OAAO,aAAa,OAAO,aAAa,IAAI,IAAI,CAAC,QAAQ,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;QAC/I,GAAG,IAAI,aAAa,IAAI,CAAC,MAAM,CAAC,KAAK,OAAO,UAAU,OAAO,aAAa,IAAI,IAAI,CAAC,QAAQ,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1I,OAAO,GAAG,CAAC;IACf,CAAC;IAED,YAAY,CAAC,UAAkB,EAAE,UAAkB;QAC/C,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;QACd,CAAC;QACD,MAAM,aAAa,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,CAAC;QACpD,IAAI,GAAG,GAAG,cAAc,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACxD,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAC5B,GAAG,IAAI,OAAO,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,IAAI,CAAC,MAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAc,EAAE,SAAkB;QACnE,MAAM,UAAU,GAAG,GAAG,CAAC;QACvB,MAAM,aAAa,GAAG,KAAK,CAAC;QAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEtD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,GAAG,GAAG,UAAU,MAAM,SAAS,IAAI,CAAC,SAAS,OAAO,aAAa,IAAI,CAAC;QAC1E,GAAG,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,OAAO,UAAU,OAAO,aAAa,IAAI,IAAI,CAAC,QAAQ,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;QACvI,GAAG,IAAI,SAAS,aAAa,IAAI,IAAI,CAAC,QAAQ,MAAM,CAAC;QAErD,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACR,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;oBACzC,GAAG,IAAI,QAAQ,UAAU,MAAM,GAAG,QAAQ,CAAC;oBAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAW,CAAC,CAAC;gBACtC,CAAC;YACL,CAAC;QACL,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACZ,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC1B,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC;oBAC7C,GAAG,IAAI,QAAQ,aAAa,MAAM,GAAG,QAAQ,CAAC;oBAC9C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,CAAC,CAAC;gBAC1C,CAAC;YACL,CAAC;QACL,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACT,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,sBAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAA4B,CAAC;QAElF,mCAAmC;QACnC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAS,CAAC;gBAEjE,aAAa;gBACb,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,KAAK,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAE1F,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAC1C,CAAC;gBAED,YAAY;gBACZ,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACzB,CAAC;QACL,CAAC;QAED,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,mCAAmC;IACnC,QAAQ,CAAc,KAAQ;QAC1B,yFAAyF;QACzF,OAAO,KAAK,CAAC,OAAO,CAAE,KAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAS,EAAE,MAAS,EAAE,eAAuC;QAC5E,MAAM,GAAG,GAAG,UAAU,IAAI,CAAC,SAAS,gBAAgB,sBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,sBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEvI,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,sBAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAC/G,IAAI,MAAM,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;YAC3B,oCAAoC;YACpC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAChF,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAuB,EAAE,OAA4B,EAAE,eAA0C;QAC3G,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,CAAC;QACb,CAAC;QACD,kIAAkI;QAClI,IAAI,MAEH,CAAC;QACF,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,aAAa,GAAa,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAE7D,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;gBACrC,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,CAAC;oBACxD,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;wBACtD,MAAM,IAAI,KAAK,CACX,sCAAsC;8BACpC,QAAQ;8BACR,IAAI;8BACJ,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM;8BAChC,8CAA8C;8BAC9C,OAAO,CAAC,MAAM;8BACd,GAAG,CACR,CAAC;oBACN,CAAC;gBACL,CAAC;YACL,CAAC;YAED,MAAM,KAAK,GAAG,eAAe,sBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;sBACpD,sBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;sBAChC,sBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;sBAChC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,sBAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;2BAClD,CAAC;YAChB,CAAC,MAAM,CAAC,GAAG,MAAM,sBAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9I,CAAC;aACI,CAAC;YACF,MAAM,KAAK,GAAG,eAAe,sBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;sBACpD,sBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;sBAChC,sBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;2BAC3B,CAAC;YAChB,CAAC,MAAM,CAAC,GAAG,MAAM,sBAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,MAAM,CAAC,YAAY,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAS,EAAE,OAAY,EAAE,eAA0C;QAC1E,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CACnC,QAAQ,EACR,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACnB,MAAM,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;YAClC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,EACF,eAAe,CAClB,CAAC;QAEF,mEAAmE;QACnE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,IAAI,YAAY,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAS,MAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAChD,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;YACzB,CAAC;iBACI,CAAC;gBACF,iEAAiE;gBAEjE,OAAO,CAAC,IAAI,CAAC,sCAAsC,GAAG,OAAO,CAAC,MAAM,GAAG,2BAA2B,GAAG,YAAY,GAAG,OAAO,CAAC,CAAC;gBAE7H,mDAAmD;gBACnD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,MAAuB;QACjC,MAAM,KAAK,GAAG,eAAe,IAAI,CAAC,SAAS,UAAU,IAAI,CAAC,QAAQ,MAAM,CAAC;QAEzE,mEAAmE;QACnE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,sBAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAExD,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,IAAI,gBAAK,CAAC,KAAK,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAClF,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,MAAS;QACjB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAG,CAAC,CAAC;QAC5C,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,MAAuB,EAAE,OAA4B,EAAE,eAA0C;QAC1G,wBAAwB;QACxB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAuB,EAAE,GAAG,OAA4B;QACpE,MAAM,KAAK,GAAG,eAAe,IAAI,CAAC,SAAS,UAAU,IAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,QAAQ,SAAS,CAAC;QAErG,mEAAmE;QACnE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,sBAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAEjE,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAS,EAAE,GAAG,OAAY;QACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,EAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,EAAG,CAAC,CAAC,CAAC;QAEhH,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,IAAI,MAAM,CAAC,YAAY,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBACzC,MAAM,GAAG,GAAS,MAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC1D,MAAM,CAAC,eAAe,CAClB,IAAI,EACJ,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;oBACjB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;gBAClD,CAAC,CAAC,CACL,CAAC;YACN,CAAC;iBACI,CAAC;gBACF,iEAAiE;gBACjE,OAAO,CAAC,IAAI,CAAC,wCAAwC,GAAG,OAAO,CAAC,MAAM,GAAG,2BAA2B,GAAG,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;gBAEtI,mDAAmD;gBACnD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC;IACL,CAAC;CACJ;AAnTD,gDAmTC"}
@@ -1,22 +0,0 @@
1
- import { Model } from './Model.js';
2
- export declare class ManyToOneRelation<Key extends keyof any, M extends Model> {
3
- model: {
4
- new (): M;
5
- } & typeof Model;
6
- /**
7
- * E.g. addressId
8
- */
9
- foreignKey: string;
10
- /**
11
- * E.g. address
12
- */
13
- modelKey: Key;
14
- constructor(model: {
15
- new (): M;
16
- } & typeof Model, modelKey: Key);
17
- isLoaded(model: Model): boolean;
18
- isSet(model: Model): boolean;
19
- joinQuery(namespaceA: string, namespaceB: string): string;
20
- load<A extends Model>(modelsA: A[]): Promise<(A & Record<Key, M>)[]>;
21
- }
22
- //# sourceMappingURL=ManyToOneRelation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ManyToOneRelation.d.ts","sourceRoot":"","sources":["../../../../src/classes/ManyToOneRelation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,qBAAa,iBAAiB,CAAC,GAAG,SAAS,MAAM,GAAG,EAAE,CAAC,SAAS,KAAK;IACjE,KAAK,EAAE;QAAE,QAAQ,CAAC,CAAA;KAAE,GAAG,OAAO,KAAK,CAAC;IAEpC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAC;gBAEF,KAAK,EAAE;QAAE,QAAQ,CAAC,CAAA;KAAE,GAAG,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG;IAM9D,QAAQ,CAAC,KAAK,EAAE,KAAK;IAKrB,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAK5B,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAKnD,IAAI,CAAC,CAAC,SAAS,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAmB7E"}
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ManyToOneRelation = void 0;
4
- const Database_js_1 = require("./Database.js");
5
- class ManyToOneRelation {
6
- model;
7
- /**
8
- * E.g. addressId
9
- */
10
- foreignKey;
11
- /**
12
- * E.g. address
13
- */
14
- modelKey;
15
- constructor(model, modelKey) {
16
- this.model = model;
17
- this.modelKey = modelKey;
18
- }
19
- /// Whether this relation is loaded
20
- isLoaded(model) {
21
- return model[this.modelKey] !== undefined;
22
- }
23
- /// Whether this relation is set
24
- isSet(model) {
25
- return model[this.modelKey] !== undefined && model[this.modelKey] !== null;
26
- }
27
- /// Generate a join query
28
- joinQuery(namespaceA, namespaceB) {
29
- return `LEFT JOIN ${this.model.table} as ${namespaceB} on ${namespaceB}.${this.model.primary.name} = ${namespaceA}.${this.foreignKey}\n`;
30
- }
31
- /// Load the relation of a list of models
32
- async load(modelsA) {
33
- if (modelsA.length === 0) {
34
- return [];
35
- }
36
- let str = `SELECT ${this.model.getDefaultSelect()} FROM ${this.model.table}\n`;
37
- str += `WHERE ${this.model.primary.name} IN (?)`;
38
- const [rows] = await Database_js_1.Database.select(str, [modelsA.map(m => m[this.foreignKey])]);
39
- const modelsB = this.model.fromRows(rows, this.model.table);
40
- for (const model of modelsA) {
41
- const found = modelsB.find(m => m.getPrimaryKey() === model[this.foreignKey]);
42
- if (!found) {
43
- throw new Error('Could not load many to one relation: no match found when loading');
44
- }
45
- model.setRelation(this, found);
46
- }
47
- return modelsA;
48
- }
49
- }
50
- exports.ManyToOneRelation = ManyToOneRelation;
51
- //# sourceMappingURL=ManyToOneRelation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ManyToOneRelation.js","sourceRoot":"","sources":["../../../../src/classes/ManyToOneRelation.ts"],"names":[],"mappings":";;;AAAA,+CAAyC;AAGzC,MAAa,iBAAiB;IAC1B,KAAK,CAA+B;IAEpC;;OAEG;IACH,UAAU,CAAS;IAEnB;;OAEG;IACH,QAAQ,CAAM;IAEd,YAAY,KAAmC,EAAE,QAAa;QAC1D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,mCAAmC;IACnC,QAAQ,CAAC,KAAY;QACjB,OAAQ,KAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;IACvD,CAAC;IAED,gCAAgC;IAChC,KAAK,CAAC,KAAY;QACd,OAAQ,KAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAK,KAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IACjG,CAAC;IAED,yBAAyB;IACzB,SAAS,CAAC,UAAkB,EAAE,UAAkB;QAC5C,OAAO,aAAa,IAAI,CAAC,KAAK,CAAC,KAAK,OAAO,UAAU,OAAO,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,UAAU,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC;IAC7I,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,IAAI,CAAkB,OAAY;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACd,CAAC;QACD,IAAI,GAAG,GAAG,UAAU,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;QAC/E,GAAG,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;QAEjD,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,sBAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAQ,CAAC;QAEnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC9E,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;YACxF,CAAC;YACD,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,OAAiC,CAAC;IAC7C,CAAC;CACJ;AArDD,8CAqDC"}
@@ -1,14 +0,0 @@
1
- export declare function fileExists(file: string): Promise<boolean>;
2
- type MigrationFunction = () => Promise<void>;
3
- export declare class Migration {
4
- up: MigrationFunction;
5
- down: MigrationFunction | undefined;
6
- constructor(up: MigrationFunction, down?: MigrationFunction);
7
- /***
8
- * Given a folder, loop all the folders in that folder and run the migrations in the 'migrations' folder
9
- */
10
- static runAll(folder: string): Promise<boolean>;
11
- static getMigration(file: string): Promise<Migration | undefined>;
12
- }
13
- export {};
14
- //# sourceMappingURL=Migration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Migration.d.ts","sourceRoot":"","sources":["../../../../src/classes/Migration.ts"],"names":[],"mappings":"AAuBA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ/D;AAaD,KAAK,iBAAiB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAW7C,qBAAa,SAAS;IAClB,EAAE,EAAE,iBAAiB,CAAC;IACtB,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAC;gBAExB,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,iBAAiB;IAK3D;;OAEG;WACU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WA8HxC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CA6B1E"}
@@ -1,206 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.Migration = void 0;
37
- exports.fileExists = fileExists;
38
- const fs_1 = require("fs");
39
- const Migration_js_1 = require("../models/Migration.js");
40
- const Database_js_1 = require("./Database.js");
41
- const simple_logging_1 = require("@simonbackx/simple-logging");
42
- const node_path_1 = require("node:path");
43
- const node_url_1 = require("node:url");
44
- function getDirname() {
45
- // CJS environment
46
- if (typeof __dirname !== 'undefined') {
47
- return __dirname;
48
- }
49
- // ESM environment
50
- // @ts-ignore
51
- if (typeof import.meta !== 'undefined' && import.meta.url) {
52
- // @ts-ignore
53
- return (0, node_path_1.dirname)((0, node_url_1.fileURLToPath)(import.meta.url));
54
- }
55
- throw new Error('Cannot determine __dirname');
56
- }
57
- async function fileExists(file) {
58
- try {
59
- await fs_1.promises.access(file);
60
- return true;
61
- }
62
- catch (e) {
63
- return false;
64
- }
65
- }
66
- async function getProjectRoot() {
67
- let path = getDirname();
68
- for (let index = 0; index < 5; index++) {
69
- if (await fileExists(path + '/migrations')) {
70
- return path;
71
- }
72
- path += '/..';
73
- }
74
- throw new Error('Could not find migrations root');
75
- }
76
- async function directoryExists(filePath) {
77
- try {
78
- return (await fs_1.promises.stat(filePath)).isDirectory();
79
- }
80
- catch (err) {
81
- return false;
82
- }
83
- }
84
- class Migration {
85
- up;
86
- down;
87
- constructor(up, down) {
88
- this.up = up;
89
- this.down = down;
90
- }
91
- /***
92
- * Given a folder, loop all the folders in that folder and run the migrations in the 'migrations' folder
93
- */
94
- static async runAll(folder) {
95
- const dirname = getDirname();
96
- // Get the current working directory by removing shared part of folder and dirname
97
- const shared = dirname.split('/').filter((part, index) => part === folder.split('/')[index]).join('/');
98
- const cwd = folder.replace(shared, '');
99
- simple_logging_1.logger.log(new simple_logging_1.StyledText('[Migration]').addClass('migration', 'prefix').addTag('migration'), ' ', new simple_logging_1.StyledText('Running all... ').addClass('migration', 'runAll'), new simple_logging_1.StyledText(cwd).addClass('migration', 'folder').addStyle('dim'));
100
- process.env.DB_MULTIPLE_STATEMENTS = 'true';
101
- // First check if we have migrations table
102
- const projectRoot = await getProjectRoot();
103
- const setupMigration = await this.getMigration(projectRoot + '/migrations/000000000-setup-migrations.sql');
104
- if (!setupMigration) {
105
- throw new Error('Setup migration missing');
106
- }
107
- await setupMigration.up();
108
- await Migration_js_1.Migration.markAsExecuted('000000000-setup-migrations.sql');
109
- const parts = folder.split('/');
110
- const firstPart = parts.shift();
111
- if (firstPart === undefined) {
112
- throw new Error('Invalid folder path');
113
- }
114
- let folderQueue = [firstPart];
115
- const migrations = [];
116
- for (const part of parts) {
117
- if (part === '*') {
118
- const newQueue = [];
119
- for (folder of folderQueue) {
120
- // Read all directories
121
- const recursiveFolders = (await fs_1.promises.readdir(folder, { withFileTypes: true })).filter(dirent => dirent.isDirectory()).map(dirent => folder + '/' + dirent.name);
122
- newQueue.push(...recursiveFolders);
123
- }
124
- folderQueue = newQueue;
125
- }
126
- else {
127
- folderQueue = folderQueue.map(folder => folder + '/' + part);
128
- }
129
- }
130
- for (const p of folderQueue) {
131
- if (await directoryExists(p)) {
132
- const folderFiles = await fs_1.promises.readdir(p);
133
- for (const file of folderFiles) {
134
- const full = p + '/' + file;
135
- const name = file;
136
- if (!(await Migration_js_1.Migration.isExecuted(name))) {
137
- migrations.push([name, full]);
138
- }
139
- }
140
- }
141
- }
142
- // Make sure we run the migrations in order
143
- migrations.sort((a, b) => {
144
- // It is expected to return a negative value if first argument is less than second argument, zero if they're equal and a positive value otherwise. If omitted, the elements are sorted in ascending, ASCII character order.
145
- if (a < b)
146
- return -1;
147
- if (a > b)
148
- return 1;
149
- return 0;
150
- });
151
- for (const [name, file] of migrations) {
152
- // Check if SQL or TypeScript
153
- const migration = await this.getMigration(file);
154
- if (!migration) {
155
- continue;
156
- }
157
- simple_logging_1.logger.log(new simple_logging_1.StyledText('[Migration]').addClass('migration', 'prefix').addTag('migration'), ' ', new simple_logging_1.StyledText('Running ').addClass('migration', 'start'), new simple_logging_1.StyledText(name).addClass('migration', 'start', 'name'));
158
- try {
159
- await simple_logging_1.logger.setContext({
160
- prefixes: [new simple_logging_1.StyledText('[Migration]').addClass('migration', 'prefix'), ' '],
161
- tags: ['migration'],
162
- }, async () => {
163
- await migration.up();
164
- await Migration_js_1.Migration.markAsExecuted(name);
165
- });
166
- simple_logging_1.logger.log(new simple_logging_1.StyledText('[Migration]').addClass('migration', 'prefix').addTag('migration'), ' ', new simple_logging_1.StyledText('✓').addClass('migration', 'success', 'tag'), ' ', new simple_logging_1.StyledText('Migration ' + name + ' ran successfully').addClass('migration', 'success', 'text'));
167
- }
168
- catch (e) {
169
- // Logger.errorWithContext({textColor: ['dim', 'red'], prefix: ' FAILED ', addSpace: true, prefixColor: ['bgRed']}, "Migration " + name + " failed", e)
170
- simple_logging_1.logger.error(new simple_logging_1.StyledText('[Migration]').addClass('migration', 'prefix').addTag('migration'), ' ', new simple_logging_1.StyledText('✗').addClass('migration', 'failed', 'tag'), ' ', new simple_logging_1.StyledText('Migration ' + name + ' failed').addClass('migration', 'failed', 'text'), ' ', new simple_logging_1.StyledText(e).addClass('migration', 'failed', 'error'));
171
- return false;
172
- }
173
- }
174
- simple_logging_1.logger.log(new simple_logging_1.StyledText('[Migration]').addClass('migration', 'prefix').addTag('migration'), ' ', new simple_logging_1.StyledText('✨').addClass('migration', 'success', 'tag', 'all'), ' ', new simple_logging_1.StyledText('All migrations done').addClass('migration', 'success', 'text', 'all'));
175
- return true;
176
- }
177
- static async getMigration(file) {
178
- let migration;
179
- if (file.endsWith('.sql')) {
180
- if (file.endsWith('.down.sql')) {
181
- // Ignore. This will contain the downgrade implementation.
182
- return;
183
- }
184
- const sqlStatement = await fs_1.promises.readFile(file, { encoding: 'utf-8' });
185
- migration = new Migration(async () => {
186
- await Database_js_1.Database.statement(sqlStatement);
187
- });
188
- }
189
- else {
190
- if (file.includes('.test.')) {
191
- return;
192
- }
193
- if (file.endsWith('.d.ts')) {
194
- return;
195
- }
196
- if (!file.endsWith('.ts') && !file.endsWith('.js')) {
197
- return;
198
- }
199
- const imported = await Promise.resolve(`${file}`).then(s => __importStar(require(s)));
200
- migration = imported.default;
201
- }
202
- return migration;
203
- }
204
- }
205
- exports.Migration = Migration;
206
- //# sourceMappingURL=Migration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Migration.js","sourceRoot":"","sources":["../../../../src/classes/Migration.ts"],"names":[],"mappings":"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"}