@simonbackx/simple-database 1.36.0 → 1.36.4
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.
- package/dist/_virtual/_@oxc-project_runtime@0.115.0/helpers/decorate.cjs +9 -0
- package/dist/_virtual/_@oxc-project_runtime@0.115.0/helpers/decorate.mjs +9 -0
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/index.cjs +22 -0
- package/dist/index.d.cts +10 -0
- package/dist/index.d.mts +10 -0
- package/dist/index.mjs +10 -0
- package/dist/src/classes/Column.cjs +134 -0
- package/dist/src/classes/Column.d.cts +34 -0
- package/dist/src/classes/Column.d.cts.map +1 -0
- package/dist/src/classes/Column.d.mts +34 -0
- package/dist/src/classes/Column.d.mts.map +1 -0
- package/dist/src/classes/Column.mjs +135 -0
- package/dist/src/classes/Column.mjs.map +1 -0
- package/dist/src/classes/ColumnType.d.cts +5 -0
- package/dist/src/classes/ColumnType.d.cts.map +1 -0
- package/dist/src/classes/ColumnType.d.mts +5 -0
- package/dist/src/classes/ColumnType.d.mts.map +1 -0
- package/dist/src/classes/Database.cjs +157 -0
- package/dist/src/classes/Database.d.cts +59 -0
- package/dist/src/classes/Database.d.cts.map +1 -0
- package/dist/src/classes/Database.d.mts +59 -0
- package/dist/src/classes/Database.d.mts.map +1 -0
- package/dist/src/classes/Database.mjs +155 -0
- package/dist/src/classes/Database.mjs.map +1 -0
- package/dist/src/classes/DatabaseStoredValue.d.cts +5 -0
- package/dist/src/classes/DatabaseStoredValue.d.cts.map +1 -0
- package/dist/src/classes/DatabaseStoredValue.d.mts +5 -0
- package/dist/src/classes/DatabaseStoredValue.d.mts.map +1 -0
- package/dist/src/classes/Factory.cjs +48 -0
- package/dist/src/classes/Factory.d.cts +17 -0
- package/dist/src/classes/Factory.d.cts.map +1 -0
- package/dist/src/classes/Factory.d.mts +17 -0
- package/dist/src/classes/Factory.d.mts.map +1 -0
- package/dist/src/classes/Factory.mjs +50 -0
- package/dist/src/classes/Factory.mjs.map +1 -0
- package/dist/src/classes/ManyToManyRelation.cjs +193 -0
- package/dist/src/classes/ManyToManyRelation.d.cts +83 -0
- package/dist/src/classes/ManyToManyRelation.d.cts.map +1 -0
- package/dist/src/classes/ManyToManyRelation.d.mts +83 -0
- package/dist/src/classes/ManyToManyRelation.d.mts.map +1 -0
- package/dist/src/classes/ManyToManyRelation.mjs +195 -0
- package/dist/src/classes/ManyToManyRelation.mjs.map +1 -0
- package/dist/src/classes/ManyToOneRelation.cjs +41 -0
- package/dist/src/classes/ManyToOneRelation.d.cts +26 -0
- package/dist/src/classes/ManyToOneRelation.d.cts.map +1 -0
- package/dist/src/classes/ManyToOneRelation.d.mts +26 -0
- package/dist/src/classes/ManyToOneRelation.d.mts.map +1 -0
- package/dist/src/classes/ManyToOneRelation.mjs +43 -0
- package/dist/src/classes/ManyToOneRelation.mjs.map +1 -0
- package/dist/src/classes/Migration.cjs +116 -0
- package/dist/src/classes/Migration.d.cts +16 -0
- package/dist/src/classes/Migration.d.cts.map +1 -0
- package/dist/src/classes/Migration.d.mts +16 -0
- package/dist/src/classes/Migration.d.mts.map +1 -0
- package/dist/src/classes/Migration.mjs +116 -0
- package/dist/src/classes/Migration.mjs.map +1 -0
- package/dist/src/classes/Model.cjs +459 -0
- package/dist/src/classes/Model.d.cts +162 -0
- package/dist/src/classes/Model.d.cts.map +1 -0
- package/dist/src/classes/Model.d.mts +162 -0
- package/dist/src/classes/Model.d.mts.map +1 -0
- package/dist/src/classes/Model.mjs +460 -0
- package/dist/src/classes/Model.mjs.map +1 -0
- package/dist/src/classes/OneToManyRelation.cjs +66 -0
- package/dist/src/classes/OneToManyRelation.d.cts +42 -0
- package/dist/src/classes/OneToManyRelation.d.cts.map +1 -0
- package/dist/src/classes/OneToManyRelation.d.mts +42 -0
- package/dist/src/classes/OneToManyRelation.d.mts.map +1 -0
- package/dist/src/classes/OneToManyRelation.mjs +68 -0
- package/dist/src/classes/OneToManyRelation.mjs.map +1 -0
- package/dist/src/classes/data/boys.cjs +1005 -0
- package/dist/src/classes/data/boys.mjs +1007 -0
- package/dist/src/classes/data/boys.mjs.map +1 -0
- package/dist/src/classes/data/family-names.cjs +1005 -0
- package/dist/src/classes/data/family-names.mjs +1007 -0
- package/dist/src/classes/data/family-names.mjs.map +1 -0
- package/dist/src/classes/data/girls.cjs +1004 -0
- package/dist/src/classes/data/girls.mjs +1006 -0
- package/dist/src/classes/data/girls.mjs.map +1 -0
- package/dist/src/decorators/Column.cjs +26 -0
- package/dist/src/decorators/Column.d.cts +22 -0
- package/dist/src/decorators/Column.d.cts.map +1 -0
- package/dist/src/decorators/Column.d.mts +22 -0
- package/dist/src/decorators/Column.d.mts.map +1 -0
- package/dist/src/decorators/Column.mjs +28 -0
- package/dist/src/decorators/Column.mjs.map +1 -0
- package/dist/src/models/Migration.cjs +37 -0
- package/dist/src/models/Migration.mjs +39 -0
- package/dist/src/models/Migration.mjs.map +1 -0
- package/package.json +27 -14
- package/dist/cjs/index.d.ts +0 -10
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js +0 -13
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/package.json +0 -1
- package/dist/cjs/src/classes/Column.d.ts +0 -30
- package/dist/cjs/src/classes/Column.d.ts.map +0 -1
- package/dist/cjs/src/classes/Column.js +0 -183
- package/dist/cjs/src/classes/Column.js.map +0 -1
- package/dist/cjs/src/classes/ColumnType.d.ts +0 -2
- package/dist/cjs/src/classes/ColumnType.d.ts.map +0 -1
- package/dist/cjs/src/classes/ColumnType.js +0 -3
- package/dist/cjs/src/classes/ColumnType.js.map +0 -1
- package/dist/cjs/src/classes/Database.d.ts +0 -59
- package/dist/cjs/src/classes/Database.d.ts.map +0 -1
- package/dist/cjs/src/classes/Database.js +0 -176
- package/dist/cjs/src/classes/Database.js.map +0 -1
- package/dist/cjs/src/classes/DatabaseStoredValue.d.ts +0 -2
- package/dist/cjs/src/classes/DatabaseStoredValue.d.ts.map +0 -1
- package/dist/cjs/src/classes/DatabaseStoredValue.js +0 -3
- package/dist/cjs/src/classes/DatabaseStoredValue.js.map +0 -1
- package/dist/cjs/src/classes/Factory.d.ts +0 -14
- package/dist/cjs/src/classes/Factory.d.ts.map +0 -1
- package/dist/cjs/src/classes/Factory.js +0 -56
- package/dist/cjs/src/classes/Factory.js.map +0 -1
- package/dist/cjs/src/classes/ManyToManyRelation.d.ts +0 -79
- package/dist/cjs/src/classes/ManyToManyRelation.d.ts.map +0 -1
- package/dist/cjs/src/classes/ManyToManyRelation.js +0 -258
- package/dist/cjs/src/classes/ManyToManyRelation.js.map +0 -1
- package/dist/cjs/src/classes/ManyToOneRelation.d.ts +0 -22
- package/dist/cjs/src/classes/ManyToOneRelation.d.ts.map +0 -1
- package/dist/cjs/src/classes/ManyToOneRelation.js +0 -51
- package/dist/cjs/src/classes/ManyToOneRelation.js.map +0 -1
- package/dist/cjs/src/classes/Migration.d.ts +0 -14
- package/dist/cjs/src/classes/Migration.d.ts.map +0 -1
- package/dist/cjs/src/classes/Migration.js +0 -206
- package/dist/cjs/src/classes/Migration.js.map +0 -1
- package/dist/cjs/src/classes/Model.d.ts +0 -159
- package/dist/cjs/src/classes/Model.d.ts.map +0 -1
- package/dist/cjs/src/classes/Model.js +0 -640
- package/dist/cjs/src/classes/Model.js.map +0 -1
- package/dist/cjs/src/classes/OneToManyRelation.d.ts +0 -38
- package/dist/cjs/src/classes/OneToManyRelation.d.ts.map +0 -1
- package/dist/cjs/src/classes/OneToManyRelation.js +0 -79
- package/dist/cjs/src/classes/OneToManyRelation.js.map +0 -1
- package/dist/cjs/src/classes/data/boys.d.ts +0 -3
- package/dist/cjs/src/classes/data/boys.d.ts.map +0 -1
- package/dist/cjs/src/classes/data/boys.js +0 -1005
- package/dist/cjs/src/classes/data/boys.js.map +0 -1
- package/dist/cjs/src/classes/data/family-names.d.ts +0 -3
- package/dist/cjs/src/classes/data/family-names.d.ts.map +0 -1
- package/dist/cjs/src/classes/data/family-names.js +0 -1005
- package/dist/cjs/src/classes/data/family-names.js.map +0 -1
- package/dist/cjs/src/classes/data/girls.d.ts +0 -3
- package/dist/cjs/src/classes/data/girls.d.ts.map +0 -1
- package/dist/cjs/src/classes/data/girls.js +0 -1004
- package/dist/cjs/src/classes/data/girls.js.map +0 -1
- package/dist/cjs/src/classes/data/streets.d.ts +0 -3
- package/dist/cjs/src/classes/data/streets.d.ts.map +0 -1
- package/dist/cjs/src/classes/data/streets.js +0 -296
- package/dist/cjs/src/classes/data/streets.js.map +0 -1
- package/dist/cjs/src/decorators/Column.d.ts +0 -18
- package/dist/cjs/src/decorators/Column.d.ts.map +0 -1
- package/dist/cjs/src/decorators/Column.js +0 -39
- package/dist/cjs/src/decorators/Column.js.map +0 -1
- package/dist/cjs/src/models/Migration.d.ts +0 -11
- package/dist/cjs/src/models/Migration.d.ts.map +0 -1
- package/dist/cjs/src/models/Migration.js +0 -52
- package/dist/cjs/src/models/Migration.js.map +0 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +0 -1
- package/dist/esm/index.d.ts +0 -10
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/index.js +0 -10
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/src/classes/Column.d.ts +0 -30
- package/dist/esm/src/classes/Column.d.ts.map +0 -1
- package/dist/esm/src/classes/Column.js +0 -179
- package/dist/esm/src/classes/Column.js.map +0 -1
- package/dist/esm/src/classes/ColumnType.d.ts +0 -2
- package/dist/esm/src/classes/ColumnType.d.ts.map +0 -1
- package/dist/esm/src/classes/ColumnType.js +0 -2
- package/dist/esm/src/classes/ColumnType.js.map +0 -1
- package/dist/esm/src/classes/Database.d.ts +0 -59
- package/dist/esm/src/classes/Database.d.ts.map +0 -1
- package/dist/esm/src/classes/Database.js +0 -171
- package/dist/esm/src/classes/Database.js.map +0 -1
- package/dist/esm/src/classes/DatabaseStoredValue.d.ts +0 -2
- package/dist/esm/src/classes/DatabaseStoredValue.d.ts.map +0 -1
- package/dist/esm/src/classes/DatabaseStoredValue.js +0 -2
- package/dist/esm/src/classes/DatabaseStoredValue.js.map +0 -1
- package/dist/esm/src/classes/Factory.d.ts +0 -14
- package/dist/esm/src/classes/Factory.d.ts.map +0 -1
- package/dist/esm/src/classes/Factory.js +0 -51
- package/dist/esm/src/classes/Factory.js.map +0 -1
- package/dist/esm/src/classes/ManyToManyRelation.d.ts +0 -79
- package/dist/esm/src/classes/ManyToManyRelation.d.ts.map +0 -1
- package/dist/esm/src/classes/ManyToManyRelation.js +0 -254
- package/dist/esm/src/classes/ManyToManyRelation.js.map +0 -1
- package/dist/esm/src/classes/ManyToOneRelation.d.ts +0 -22
- package/dist/esm/src/classes/ManyToOneRelation.d.ts.map +0 -1
- package/dist/esm/src/classes/ManyToOneRelation.js +0 -47
- package/dist/esm/src/classes/ManyToOneRelation.js.map +0 -1
- package/dist/esm/src/classes/Migration.d.ts +0 -14
- package/dist/esm/src/classes/Migration.d.ts.map +0 -1
- package/dist/esm/src/classes/Migration.js +0 -168
- package/dist/esm/src/classes/Migration.js.map +0 -1
- package/dist/esm/src/classes/Model.d.ts +0 -159
- package/dist/esm/src/classes/Model.d.ts.map +0 -1
- package/dist/esm/src/classes/Model.js +0 -635
- package/dist/esm/src/classes/Model.js.map +0 -1
- package/dist/esm/src/classes/OneToManyRelation.d.ts +0 -38
- package/dist/esm/src/classes/OneToManyRelation.d.ts.map +0 -1
- package/dist/esm/src/classes/OneToManyRelation.js +0 -75
- package/dist/esm/src/classes/OneToManyRelation.js.map +0 -1
- package/dist/esm/src/classes/data/boys.d.ts +0 -3
- package/dist/esm/src/classes/data/boys.d.ts.map +0 -1
- package/dist/esm/src/classes/data/boys.js +0 -1003
- package/dist/esm/src/classes/data/boys.js.map +0 -1
- package/dist/esm/src/classes/data/family-names.d.ts +0 -3
- package/dist/esm/src/classes/data/family-names.d.ts.map +0 -1
- package/dist/esm/src/classes/data/family-names.js +0 -1003
- package/dist/esm/src/classes/data/family-names.js.map +0 -1
- package/dist/esm/src/classes/data/girls.d.ts +0 -3
- package/dist/esm/src/classes/data/girls.d.ts.map +0 -1
- package/dist/esm/src/classes/data/girls.js +0 -1002
- package/dist/esm/src/classes/data/girls.js.map +0 -1
- package/dist/esm/src/classes/data/streets.d.ts +0 -3
- package/dist/esm/src/classes/data/streets.d.ts.map +0 -1
- package/dist/esm/src/classes/data/streets.js +0 -294
- package/dist/esm/src/classes/data/streets.js.map +0 -1
- package/dist/esm/src/decorators/Column.d.ts +0 -18
- package/dist/esm/src/decorators/Column.d.ts.map +0 -1
- package/dist/esm/src/decorators/Column.js +0 -36
- package/dist/esm/src/decorators/Column.js.map +0 -1
- package/dist/esm/src/models/Migration.d.ts +0 -11
- package/dist/esm/src/models/Migration.d.ts.map +0 -1
- package/dist/esm/src/models/Migration.js +0 -48
- package/dist/esm/src/models/Migration.js.map +0 -1
- 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":"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"}
|
|
@@ -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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"}
|