@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,635 +0,0 @@
1
- import { Database } from './Database.js';
2
- /**
3
- * Controls the fetching and decrypting of members
4
- */
5
- export class ModelEventBus {
6
- listeners = new Map();
7
- addListener(owner, listener) {
8
- const existing = this.listeners.get(owner);
9
- if (existing) {
10
- existing.push({ listener });
11
- }
12
- else {
13
- this.listeners.set(owner, [{ listener }]);
14
- }
15
- }
16
- removeListener(owner) {
17
- this.listeners.delete(owner);
18
- }
19
- async sendEvent(value) {
20
- const values = [];
21
- for (const owner of this.listeners.values()) {
22
- for (const listener of owner) {
23
- const v = listener.listener(value);
24
- if (v) {
25
- values.push(v);
26
- }
27
- }
28
- }
29
- return await Promise.all(values);
30
- }
31
- }
32
- export class Model /* static implements RowInitiable<Model> */ {
33
- static primary;
34
- static modelEventBus = new ModelEventBus();
35
- /**
36
- * Properties that are stored in the table (including foreign keys, but without mapped relations!)
37
- */
38
- static columns;
39
- static debug = false;
40
- static showWarnings = false;
41
- static table; // override this!
42
- static relations;
43
- existsInDatabase = false;
44
- savedProperties = new Map();
45
- /**
46
- * Sometimes we have skipUpdate properties that still should get saved on specific occasions.
47
- * E.g. update updatedAt field manually if is the only changed field.
48
- */
49
- forceSaveProperties = new Set();
50
- constructor() {
51
- // Read values
52
- if (!this.static.relations) {
53
- this.static.relations = [];
54
- }
55
- if (!this.static.columns) {
56
- this.static.columns = new Map();
57
- }
58
- }
59
- /**
60
- * Delete the value of a key from memory
61
- */
62
- eraseProperty(key) {
63
- const column = this.static.columns.get(key);
64
- if (!column) {
65
- throw new Error('Unknown property ' + key);
66
- }
67
- delete this[key];
68
- this.savedProperties.delete(key);
69
- }
70
- /**
71
- * Make sure this key will get saved on the next save, even when it is not changed or when it is skipUpdate
72
- */
73
- forceSaveProperty(key) {
74
- this.forceSaveProperties.add(key);
75
- }
76
- /**
77
- * Mark all properties as changed, so they will get updated on the next save
78
- */
79
- markAllChanged() {
80
- this.savedProperties.clear();
81
- }
82
- /**
83
- * Returns the default select to select the needed properties of this table
84
- * @param namespace: optional namespace of this select
85
- */
86
- static getDefaultSelect(namespace = this.table) {
87
- return '`' + namespace + '`.*';
88
- }
89
- static selectColumnsWithout(namespace = this.table, ...exclude) {
90
- const properties = Array.from(this.columns.keys()).flatMap(name => (exclude.includes(name) ? [] : [name]));
91
- if (properties.length === 0) {
92
- // todo: check what to do in this case.
93
- throw new Error('Not implemented yet');
94
- }
95
- return '`' + namespace + '`.`' + properties.join('`, `' + namespace + '`.`') + '`';
96
- }
97
- /**
98
- * Set a relation to undefined, marking it as not loaded (so it won't get saved in the next save)
99
- * @param relation
100
- */
101
- unloadRelation(relation) {
102
- // Todo: check if relation is nullable?
103
- const t = this;
104
- delete t[relation.modelKey];
105
- return t;
106
- }
107
- /**
108
- * Set a relation to null, deleting it on the next save (unless unloadRelation is called)
109
- * @param relation
110
- */
111
- unsetRelation(relation) {
112
- // Todo: check if relation is nullable?
113
- return this.setOptionalRelation(relation, null);
114
- }
115
- setOptionalRelation(relation, value) {
116
- // Todo: check if relation is nullable?
117
- if (value !== null && !value.existsInDatabase) {
118
- throw new Error('You cannot set a relation to a model that are not yet saved in the database.');
119
- }
120
- const t = this;
121
- t[relation.modelKey] = value;
122
- t[relation.foreignKey] = value ? value.getPrimaryKey() : null;
123
- return t;
124
- }
125
- setRelation(relation, value) {
126
- if (!value.existsInDatabase) {
127
- throw new Error('You cannot set a relation to a model that are not yet saved in the database.');
128
- }
129
- const t = this;
130
- t[relation.modelKey] = value;
131
- t[relation.foreignKey] = value.getPrimaryKey();
132
- return t;
133
- }
134
- /**
135
- * Set a many relation. Note that this doesn't save the relation! You'll need to use the methods of the relation instead
136
- */
137
- setManyRelation(relation, value) {
138
- value.forEach((v) => {
139
- if (!v.existsInDatabase) {
140
- throw new Error('You cannot set a relation to models that are not yet saved in the database.');
141
- }
142
- });
143
- const t = this;
144
- t[relation.modelKey] = value;
145
- return t;
146
- }
147
- /**
148
- * Set a many relation. Note that this doesn't save the relation! You'll need to use the methods of the relation instead
149
- */
150
- getManyRelation(relation) {
151
- const t = this;
152
- return t[relation.modelKey] ?? null;
153
- }
154
- /**
155
- * Load the returned properties from a DB response row into the model
156
- * If the row's primary key is null, undefined is returned
157
- */
158
- static fromRow(row) {
159
- if (row === undefined || (this.primary && (row[this.primary.name] === null || row[this.primary.name] === undefined))) {
160
- return undefined;
161
- }
162
- const model = new this();
163
- for (const column of this.columns.values()) {
164
- if (row[column.name] !== undefined) {
165
- const value = column.from(row[column.name]);
166
- model[column.name] = value;
167
- }
168
- else {
169
- // Override default value to prevent any saving!
170
- model[column.name] = undefined;
171
- }
172
- }
173
- model.markSaved(row, { fromMySQL: true }); // note: we don't pass row because that value is unreliable for json values (mysql performs sorting and other opertions on keys)
174
- return model;
175
- }
176
- static fromRows(rows, namespace) {
177
- return rows.flatMap((row) => {
178
- const model = this.fromRow(row[namespace]);
179
- if (model) {
180
- return [model];
181
- }
182
- return [];
183
- });
184
- }
185
- markSaved(fields, options) {
186
- this.existsInDatabase = true;
187
- this.forceSaveProperties.clear();
188
- for (const column of this.static.columns.values()) {
189
- if ((fields ? fields[column.name] : this[column.name]) !== undefined) {
190
- // If undefined: do not update, since we didn't save the value
191
- this.savedProperties.set(column.name, fields
192
- ? (column.type === 'json' && options?.fromMySQL
193
- ? {
194
- // We can never use the original value we received from MySQL because the ordering of keys is different in MySQL.
195
- // We use this object to avoid doing expensive CPU operations if we don't need to check if a value has changed
196
- // so we only evaluate this once we actually try to save a model to the database
197
- to() {
198
- if (this._to) {
199
- return this._to;
200
- }
201
- const value = this._from ?? column.from(fields[column.name]);
202
- this._from = value;
203
- const found = column.to(value);
204
- // Store permanently
205
- this._to = found;
206
- return found;
207
- },
208
- from() {
209
- if (this._from) {
210
- return this._from;
211
- }
212
- const from = column.from(fields[column.name]);
213
- this._from = from;
214
- return from;
215
- },
216
- }
217
- : fields[column.name])
218
- : column.to(this[column.name]));
219
- }
220
- }
221
- /// Save relation foreign keys (so we can check if the id has changed)
222
- for (const relation of this.static.relations) {
223
- if (relation.isLoaded(this)) {
224
- if (relation.isSet(this)) {
225
- const model = this[relation.modelKey];
226
- this[relation.foreignKey] = model.getPrimaryKey();
227
- }
228
- else {
229
- this[relation.foreignKey] = null;
230
- }
231
- }
232
- }
233
- }
234
- copyFrom(from) {
235
- for (const column of this.static.columns.values()) {
236
- this[column.name] = from[column.name];
237
- }
238
- // Unload all relations
239
- for (const relation of this.static.relations) {
240
- if (relation.isLoaded(this)) {
241
- this[relation.modelKey] = undefined;
242
- }
243
- }
244
- this.savedProperties = from.savedProperties;
245
- this.forceSaveProperties = from.forceSaveProperties;
246
- this.existsInDatabase = from.existsInDatabase;
247
- }
248
- get static() {
249
- return this.constructor;
250
- }
251
- getPrimaryKey() {
252
- return this[this.static.primary.name];
253
- }
254
- /**
255
- * Get a model by its primary key
256
- * @param id primary key
257
- */
258
- static async getByID(id) {
259
- const [rows] = await Database.select(`SELECT ${this.getDefaultSelect()} FROM \`${this.table}\` WHERE \`${this.primary.name}\` = ? LIMIT 1`, [id]);
260
- if (rows.length === 0) {
261
- return undefined;
262
- }
263
- // Read member + address from first row
264
- const row = rows[0][this.table];
265
- return this.fromRow(row);
266
- }
267
- /**
268
- * Get multiple models by their ID
269
- * @param ids primary key of the models you want to fetch
270
- */
271
- static async getByIDs(...ids) {
272
- if (ids.length === 0) {
273
- return [];
274
- }
275
- const [rows] = await Database.select(`SELECT ${this.getDefaultSelect()} FROM \`${this.table}\` WHERE \`${this.primary.name}\` IN (?) LIMIT ?`, [
276
- ids,
277
- ids.length,
278
- ]);
279
- // Read member + address from first row
280
- return this.fromRows(rows, this.table);
281
- }
282
- static buildWhereOperator(key, value) {
283
- let whereQuery;
284
- const params = [];
285
- switch (value.sign) {
286
- case 'MATCH': {
287
- let suffix = '';
288
- if (value.mode) {
289
- switch (value.mode) {
290
- case 'BOOLEAN':
291
- suffix = ' IN BOOLEAN MODE';
292
- break;
293
- default:
294
- throw new Error('Unknown match mode ' + value.mode);
295
- }
296
- }
297
- whereQuery = (`MATCH(\`${this.table}\`.\`${key}\`) AGAINST(?${suffix})`);
298
- params.push(value.value);
299
- break;
300
- }
301
- case 'LIKE':
302
- whereQuery = (`\`${this.table}\`.\`${key}\` LIKE ?`);
303
- params.push(value.value);
304
- break;
305
- case '!=':
306
- if (value.value === null) {
307
- whereQuery = (`\`${this.table}\`.\`${key}\` IS NOT NULL`);
308
- }
309
- else {
310
- whereQuery = (`\`${this.table}\`.\`${key}\` != ?`);
311
- params.push(value.value);
312
- }
313
- break;
314
- case '<':
315
- whereQuery = (`\`${this.table}\`.\`${key}\` < ?`);
316
- params.push(value.value);
317
- break;
318
- case '>':
319
- whereQuery = (`\`${this.table}\`.\`${key}\` > ?`);
320
- params.push(value.value);
321
- break;
322
- case '<=':
323
- whereQuery = (`\`${this.table}\`.\`${key}\` <= ?`);
324
- params.push(value.value);
325
- break;
326
- case '>=':
327
- whereQuery = (`\`${this.table}\`.\`${key}\` >= ?`);
328
- params.push(value.value);
329
- break;
330
- case '=':
331
- if (value.value === null) {
332
- whereQuery = (`\`${this.table}\`.\`${key}\` IS NULL`);
333
- }
334
- else {
335
- whereQuery = (`\`${this.table}\`.\`${key}\` = ?`);
336
- params.push(value.value);
337
- }
338
- break;
339
- case 'IN':
340
- if (!Array.isArray(value.value)) {
341
- throw new Error('Expected an array for IN where query');
342
- }
343
- if (value.value.includes(null)) {
344
- const filtered = value.value.filter(v => v !== null);
345
- if (filtered.length === 0) {
346
- whereQuery = (`\`${this.table}\`.\`${key}\` IS NULL`);
347
- }
348
- else if (filtered.length === 1) {
349
- // Special query
350
- whereQuery = (`(\`${this.table}\`.\`${key}\` = ? OR \`${this.table}\`.\`${key}\` IS NULL)`);
351
- params.push(filtered[0]);
352
- }
353
- else {
354
- // Special query
355
- whereQuery = (`(\`${this.table}\`.\`${key}\` IN (?) OR \`${this.table}\`.\`${key}\` IS NULL)`);
356
- params.push(filtered);
357
- }
358
- }
359
- else {
360
- whereQuery = (`\`${this.table}\`.\`${key}\` IN (?)`);
361
- params.push(value.value);
362
- }
363
- break;
364
- default:
365
- throw new Error('Sign not supported.');
366
- }
367
- return [whereQuery, params];
368
- }
369
- static buildWhereQuery(where) {
370
- const whereQuery = [];
371
- const params = [];
372
- for (const key in where) {
373
- if (Object.hasOwnProperty.call(where, key)) {
374
- const value = where[key];
375
- if (Array.isArray(value)) {
376
- for (const v of value) {
377
- const [w, p] = this.buildWhereOperator(key, v);
378
- whereQuery.push(w);
379
- params.push(...p);
380
- }
381
- }
382
- else if (typeof value === 'object' && value !== null && !(value instanceof Date)) {
383
- const [w, p] = this.buildWhereOperator(key, value);
384
- whereQuery.push(w);
385
- params.push(...p);
386
- }
387
- else {
388
- if (value === null) {
389
- whereQuery.push(`\`${this.table}\`.\`${key}\` IS NULL`);
390
- }
391
- else {
392
- whereQuery.push(`\`${this.table}\`.\`${key}\` = ?`);
393
- params.push(value);
394
- }
395
- }
396
- }
397
- }
398
- return [whereQuery.join(' AND '), params];
399
- }
400
- /**
401
- * @deprecated Use the new SQL package instead
402
- * Get multiple models by a simple where
403
- */
404
- static async where(where, extra) {
405
- const params = [];
406
- let query = `SELECT ${extra?.select ?? this.getDefaultSelect()} FROM \`${this.table}\``;
407
- if (Object.keys(where).length !== 0) {
408
- const [whereQuery, p] = this.buildWhereQuery(where);
409
- query += `WHERE ` + whereQuery;
410
- params.push(...p);
411
- }
412
- if (extra && extra.sort !== undefined) {
413
- const sortQuery = [];
414
- for (const item of extra.sort) {
415
- if (typeof item === 'string') {
416
- sortQuery.push(Database.escapeId(item) + ' ASC');
417
- }
418
- else if (typeof item.column === 'string') {
419
- sortQuery.push(Database.escapeId(item.column) + ' ' + (item.direction ?? 'ASC'));
420
- }
421
- else {
422
- // Repeat use of a where query in the sorting (needed when fulltext searching and need to sort on the score, because limit won't work without this for an unknown reason)
423
- const [w, p] = this.buildWhereQuery(item.column);
424
- sortQuery.push('(' + w + ') ' + (item.direction ?? 'ASC'));
425
- params.push(...p);
426
- }
427
- }
428
- query += ` ORDER BY ` + sortQuery.join(', ');
429
- }
430
- if (extra && extra.limit !== undefined) {
431
- query += ` LIMIT ?`;
432
- params.push(extra.limit);
433
- }
434
- const [rows] = await Database.select(query, params);
435
- return this.fromRows(rows, this.table);
436
- }
437
- /**
438
- * Get multiple models by a simple where
439
- */
440
- static async all(limit) {
441
- const params = [];
442
- let query = `SELECT ${this.getDefaultSelect()} FROM \`${this.table}\``;
443
- if (limit) {
444
- query += ` LIMIT ?`;
445
- params.push(limit);
446
- }
447
- const [rows] = await Database.select(query, params);
448
- return this.fromRows(rows, this.table);
449
- }
450
- /**
451
- * Return an object of all the properties that are changed and their database representation
452
- */
453
- getChangedDatabaseProperties() {
454
- const set = {};
455
- let skipUpdate = 0;
456
- for (const column of this.static.columns.values()) {
457
- if (column.primary && column.type === 'integer' && this.static.primary.name === 'id') {
458
- // Auto increment: not allowed to set
459
- continue;
460
- }
461
- if (!this.existsInDatabase && this[column.name] === undefined) {
462
- // In the future we might make some columns optional because they have a default value in the database.
463
- // But that could cause inconsitent state, so it would be better to generate default values in code.
464
- throw new Error('Tried to create model ' + this.constructor.name + ' with undefined property ' + column.name);
465
- }
466
- if (this[column.name] !== undefined) {
467
- const forceSave = this.forceSaveProperties.has(column.name);
468
- const oldSavedValue = forceSave ? undefined : this.savedProperties.get(column.name);
469
- const saveValue = forceSave ? null : column.to(this[column.name]); // .to is expensive, so avoid calling it when not needed
470
- if (forceSave || oldSavedValue === undefined || column.isChanged(typeof oldSavedValue === 'object' && oldSavedValue !== null && 'to' in oldSavedValue ? oldSavedValue.to() : oldSavedValue, saveValue)) {
471
- set[column.name] = forceSave ? column.to(this[column.name]) : saveValue;
472
- if (column.skipUpdate && !forceSave) {
473
- skipUpdate++;
474
- }
475
- }
476
- }
477
- }
478
- return { fields: set, skipUpdate };
479
- }
480
- beforeSave() {
481
- for (const column of this.static.columns.values()) {
482
- // Run beforeSave
483
- if (column.beforeSave) {
484
- this[column.name] = column.beforeSave.call(this, this[column.name]);
485
- }
486
- }
487
- }
488
- /**
489
- * Return original value from the database or undefined if not known
490
- */
491
- getOriginalValue(key) {
492
- const column = this.static.columns.get(key);
493
- if (!column) {
494
- throw new Error('Unknown property ' + key);
495
- }
496
- const c = this.savedProperties.get(key);
497
- if (c === undefined) {
498
- return undefined;
499
- }
500
- if (typeof c === 'object' && c !== null && 'from' in c) {
501
- return c.from();
502
- }
503
- return column.from(c);
504
- }
505
- async save() {
506
- if (!this.static.table) {
507
- throw new Error('Table name not set');
508
- }
509
- if (!this.static.primary) {
510
- throw new Error('Primary key not set for model ' + this.constructor.name + ' ' + this.static);
511
- }
512
- // Check if relation models were modified
513
- for (const relation of this.static.relations) {
514
- // If a relation is loaded, we can check if it changed the value of the foreign key
515
- if (relation.isLoaded(this)) {
516
- // The foreign key is modified (set, changed or cleared)
517
- if (relation.isSet(this)) {
518
- const model = this[relation.modelKey];
519
- if (!model.existsInDatabase) {
520
- throw new Error('You cannot set a relation that is not yet saved in the database.');
521
- }
522
- if (this[relation.foreignKey] !== model.getPrimaryKey()) {
523
- // Should always match because setRelation will make it match on setting it.
524
- throw new Error('You cannot modify the value of a foreign key when the relation is loaded. Unload the relation first or modify the relation with setRelation');
525
- }
526
- }
527
- else {
528
- if (this[relation.foreignKey] !== null) {
529
- // Should always match because setRelation will make it match on setting it.
530
- throw new Error('You cannot set a foreign key when the relation is loaded. Unload the relation first or modify the relation with setRelation');
531
- }
532
- }
533
- }
534
- }
535
- const id = this.getPrimaryKey();
536
- if (!id) {
537
- if (this.existsInDatabase) {
538
- throw new Error('Model ' + this.constructor.name + " was loaded from the Database, but didn't select the ID. Saving not possible.");
539
- }
540
- }
541
- else {
542
- if (!this.existsInDatabase && this.static.primary.type === 'integer' && this.static.primary.name === 'id') {
543
- throw new Error(`PrimaryKey was set programmatically without fetching the model ${this.constructor.name} from the database. This is not allowed for integer primary keys.`);
544
- }
545
- }
546
- this.beforeSave();
547
- const { fields, skipUpdate } = this.getChangedDatabaseProperties();
548
- if (Object.keys(fields).length === 0) {
549
- if (Model.showWarnings)
550
- console.warn('Tried to update model without any properties modified');
551
- return false;
552
- }
553
- if (this.existsInDatabase && skipUpdate === Object.keys(fields).length) {
554
- if (Model.showWarnings)
555
- console.warn('Tried to update model without any properties modified');
556
- return false;
557
- }
558
- if (Model.debug)
559
- console.log('Saving ' + this.constructor.name + ' to...', fields);
560
- // todo: save here
561
- if (!this.existsInDatabase) {
562
- if (Model.debug)
563
- console.log(`Creating new ${this.constructor.name}`);
564
- const [result] = await Database.insert('INSERT INTO `' + this.static.table + '` SET ?', [fields]);
565
- if (this.static.primary.type === 'integer' && this.static.primary.name === 'id') {
566
- // Auto increment value
567
- this[this.static.primary.name] = result.insertId;
568
- fields[this.static.primary.name] = result.insertId; // Also mark saved
569
- if (Model.debug)
570
- console.log(`New id = ${this[this.static.primary.name]}`);
571
- }
572
- }
573
- else {
574
- if (Model.debug)
575
- console.log(`Updating ${this.constructor.name} where ${this.static.primary.name} = ${id}`);
576
- const [result] = await Database.update('UPDATE `' + this.static.table + '` SET ? WHERE `' + this.static.primary.name + '` = ?', [fields, id]);
577
- if (result.changedRows !== 1 && Model.showWarnings) {
578
- console.warn(`Updated ${this.constructor.name}, but it didn't change a row. Check if ID exists.`);
579
- }
580
- }
581
- // Emit event
582
- if (this.existsInDatabase) {
583
- // Keep reference to old properties before marking saved
584
- const originalProperties = Object.fromEntries(Array.from(this.savedProperties.entries()).map(([key, value]) => {
585
- if (typeof value === 'object' && value !== null && 'to' in value) {
586
- return [key, value.to()];
587
- }
588
- return [key, value];
589
- }));
590
- // Mark saved before sending the event
591
- this.markSaved(fields);
592
- await this.static.modelEventBus.sendEvent({
593
- type: 'updated',
594
- model: this,
595
- changedFields: fields,
596
- originalFields: originalProperties,
597
- getOldModel: () => {
598
- // Build a new model as if it was loaded from the database using the same original properties
599
- const v = this.static.fromRow(originalProperties);
600
- if (v === undefined) {
601
- throw new Error('Failed to create old model: primary key might be missing');
602
- }
603
- return v;
604
- },
605
- });
606
- }
607
- else {
608
- this.markSaved(fields);
609
- await this.static.modelEventBus.sendEvent({ type: 'created', model: this });
610
- }
611
- return true;
612
- }
613
- async delete() {
614
- const id = this.getPrimaryKey();
615
- if (!id && this.existsInDatabase) {
616
- throw new Error('Model ' + this.constructor.name + " was loaded from the Database, but didn't select the ID. Deleting not possible.");
617
- }
618
- if (!id || !this.existsInDatabase) {
619
- throw new Error('Model ' + this.constructor.name + " can't be deleted if it doesn't exist in the database already");
620
- }
621
- if (Model.debug)
622
- console.log(`Deleting ${this.constructor.name} where ${this.static.primary.name} = ${id}`);
623
- const [result] = await Database.delete('DELETE FROM `' + this.static.table + '` WHERE `' + this.static.primary.name + '` = ?', [id]);
624
- if (result.affectedRows !== 1 && Model.showWarnings) {
625
- console.warn(`Deleted ${this.constructor.name}, but it didn't change a row. Check if ID exists.`);
626
- }
627
- this.existsInDatabase = false;
628
- if (this.static.primary.type === 'integer' && this.static.primary.name === 'id') {
629
- this.eraseProperty(this.static.primary.name);
630
- }
631
- this.savedProperties.clear();
632
- await this.static.modelEventBus.sendEvent({ type: 'deleted', model: this });
633
- }
634
- }
635
- //# sourceMappingURL=Model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../../src/classes/Model.ts"],"names":[],"mappings":"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"}