@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.
- 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 +123 -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 +123 -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 +16 -13
- 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,47 +0,0 @@
|
|
|
1
|
-
import { Database } from './Database.js';
|
|
2
|
-
export class ManyToOneRelation {
|
|
3
|
-
model;
|
|
4
|
-
/**
|
|
5
|
-
* E.g. addressId
|
|
6
|
-
*/
|
|
7
|
-
foreignKey;
|
|
8
|
-
/**
|
|
9
|
-
* E.g. address
|
|
10
|
-
*/
|
|
11
|
-
modelKey;
|
|
12
|
-
constructor(model, modelKey) {
|
|
13
|
-
this.model = model;
|
|
14
|
-
this.modelKey = modelKey;
|
|
15
|
-
}
|
|
16
|
-
/// Whether this relation is loaded
|
|
17
|
-
isLoaded(model) {
|
|
18
|
-
return model[this.modelKey] !== undefined;
|
|
19
|
-
}
|
|
20
|
-
/// Whether this relation is set
|
|
21
|
-
isSet(model) {
|
|
22
|
-
return model[this.modelKey] !== undefined && model[this.modelKey] !== null;
|
|
23
|
-
}
|
|
24
|
-
/// Generate a join query
|
|
25
|
-
joinQuery(namespaceA, namespaceB) {
|
|
26
|
-
return `LEFT JOIN ${this.model.table} as ${namespaceB} on ${namespaceB}.${this.model.primary.name} = ${namespaceA}.${this.foreignKey}\n`;
|
|
27
|
-
}
|
|
28
|
-
/// Load the relation of a list of models
|
|
29
|
-
async load(modelsA) {
|
|
30
|
-
if (modelsA.length === 0) {
|
|
31
|
-
return [];
|
|
32
|
-
}
|
|
33
|
-
let str = `SELECT ${this.model.getDefaultSelect()} FROM ${this.model.table}\n`;
|
|
34
|
-
str += `WHERE ${this.model.primary.name} IN (?)`;
|
|
35
|
-
const [rows] = await Database.select(str, [modelsA.map(m => m[this.foreignKey])]);
|
|
36
|
-
const modelsB = this.model.fromRows(rows, this.model.table);
|
|
37
|
-
for (const model of modelsA) {
|
|
38
|
-
const found = modelsB.find(m => m.getPrimaryKey() === model[this.foreignKey]);
|
|
39
|
-
if (!found) {
|
|
40
|
-
throw new Error('Could not load many to one relation: no match found when loading');
|
|
41
|
-
}
|
|
42
|
-
model.setRelation(this, found);
|
|
43
|
-
}
|
|
44
|
-
return modelsA;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=ManyToOneRelation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ManyToOneRelation.js","sourceRoot":"","sources":["../../../../src/classes/ManyToOneRelation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,OAAO,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,QAAQ,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"}
|
|
@@ -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,168 +0,0 @@
|
|
|
1
|
-
import { promises as fs } from 'fs';
|
|
2
|
-
import { Migration as MigrationModel } from '../models/Migration.js';
|
|
3
|
-
import { Database } from './Database.js';
|
|
4
|
-
import { logger, StyledText } from '@simonbackx/simple-logging';
|
|
5
|
-
import { dirname } from 'node:path';
|
|
6
|
-
import { fileURLToPath } from 'node:url';
|
|
7
|
-
function getDirname() {
|
|
8
|
-
// CJS environment
|
|
9
|
-
if (typeof __dirname !== 'undefined') {
|
|
10
|
-
return __dirname;
|
|
11
|
-
}
|
|
12
|
-
// ESM environment
|
|
13
|
-
// @ts-ignore
|
|
14
|
-
if (typeof import.meta !== 'undefined' && import.meta.url) {
|
|
15
|
-
// @ts-ignore
|
|
16
|
-
return dirname(fileURLToPath(import.meta.url));
|
|
17
|
-
}
|
|
18
|
-
throw new Error('Cannot determine __dirname');
|
|
19
|
-
}
|
|
20
|
-
export async function fileExists(file) {
|
|
21
|
-
try {
|
|
22
|
-
await fs.access(file);
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
catch (e) {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
async function getProjectRoot() {
|
|
30
|
-
let path = getDirname();
|
|
31
|
-
for (let index = 0; index < 5; index++) {
|
|
32
|
-
if (await fileExists(path + '/migrations')) {
|
|
33
|
-
return path;
|
|
34
|
-
}
|
|
35
|
-
path += '/..';
|
|
36
|
-
}
|
|
37
|
-
throw new Error('Could not find migrations root');
|
|
38
|
-
}
|
|
39
|
-
async function directoryExists(filePath) {
|
|
40
|
-
try {
|
|
41
|
-
return (await fs.stat(filePath)).isDirectory();
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
export class Migration {
|
|
48
|
-
up;
|
|
49
|
-
down;
|
|
50
|
-
constructor(up, down) {
|
|
51
|
-
this.up = up;
|
|
52
|
-
this.down = down;
|
|
53
|
-
}
|
|
54
|
-
/***
|
|
55
|
-
* Given a folder, loop all the folders in that folder and run the migrations in the 'migrations' folder
|
|
56
|
-
*/
|
|
57
|
-
static async runAll(folder) {
|
|
58
|
-
const dirname = getDirname();
|
|
59
|
-
// Get the current working directory by removing shared part of folder and dirname
|
|
60
|
-
const shared = dirname.split('/').filter((part, index) => part === folder.split('/')[index]).join('/');
|
|
61
|
-
const cwd = folder.replace(shared, '');
|
|
62
|
-
logger.log(new StyledText('[Migration]').addClass('migration', 'prefix').addTag('migration'), ' ', new StyledText('Running all... ').addClass('migration', 'runAll'), new StyledText(cwd).addClass('migration', 'folder').addStyle('dim'));
|
|
63
|
-
process.env.DB_MULTIPLE_STATEMENTS = 'true';
|
|
64
|
-
// First check if we have migrations table
|
|
65
|
-
const projectRoot = await getProjectRoot();
|
|
66
|
-
const setupMigration = await this.getMigration(projectRoot + '/migrations/000000000-setup-migrations.sql');
|
|
67
|
-
if (!setupMigration) {
|
|
68
|
-
throw new Error('Setup migration missing');
|
|
69
|
-
}
|
|
70
|
-
await setupMigration.up();
|
|
71
|
-
await MigrationModel.markAsExecuted('000000000-setup-migrations.sql');
|
|
72
|
-
const parts = folder.split('/');
|
|
73
|
-
const firstPart = parts.shift();
|
|
74
|
-
if (firstPart === undefined) {
|
|
75
|
-
throw new Error('Invalid folder path');
|
|
76
|
-
}
|
|
77
|
-
let folderQueue = [firstPart];
|
|
78
|
-
const migrations = [];
|
|
79
|
-
for (const part of parts) {
|
|
80
|
-
if (part === '*') {
|
|
81
|
-
const newQueue = [];
|
|
82
|
-
for (folder of folderQueue) {
|
|
83
|
-
// Read all directories
|
|
84
|
-
const recursiveFolders = (await fs.readdir(folder, { withFileTypes: true })).filter(dirent => dirent.isDirectory()).map(dirent => folder + '/' + dirent.name);
|
|
85
|
-
newQueue.push(...recursiveFolders);
|
|
86
|
-
}
|
|
87
|
-
folderQueue = newQueue;
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
folderQueue = folderQueue.map(folder => folder + '/' + part);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
for (const p of folderQueue) {
|
|
94
|
-
if (await directoryExists(p)) {
|
|
95
|
-
const folderFiles = await fs.readdir(p);
|
|
96
|
-
for (const file of folderFiles) {
|
|
97
|
-
const full = p + '/' + file;
|
|
98
|
-
const name = file;
|
|
99
|
-
if (!(await MigrationModel.isExecuted(name))) {
|
|
100
|
-
migrations.push([name, full]);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// Make sure we run the migrations in order
|
|
106
|
-
migrations.sort((a, b) => {
|
|
107
|
-
// 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.
|
|
108
|
-
if (a < b)
|
|
109
|
-
return -1;
|
|
110
|
-
if (a > b)
|
|
111
|
-
return 1;
|
|
112
|
-
return 0;
|
|
113
|
-
});
|
|
114
|
-
for (const [name, file] of migrations) {
|
|
115
|
-
// Check if SQL or TypeScript
|
|
116
|
-
const migration = await this.getMigration(file);
|
|
117
|
-
if (!migration) {
|
|
118
|
-
continue;
|
|
119
|
-
}
|
|
120
|
-
logger.log(new StyledText('[Migration]').addClass('migration', 'prefix').addTag('migration'), ' ', new StyledText('Running ').addClass('migration', 'start'), new StyledText(name).addClass('migration', 'start', 'name'));
|
|
121
|
-
try {
|
|
122
|
-
await logger.setContext({
|
|
123
|
-
prefixes: [new StyledText('[Migration]').addClass('migration', 'prefix'), ' '],
|
|
124
|
-
tags: ['migration'],
|
|
125
|
-
}, async () => {
|
|
126
|
-
await migration.up();
|
|
127
|
-
await MigrationModel.markAsExecuted(name);
|
|
128
|
-
});
|
|
129
|
-
logger.log(new StyledText('[Migration]').addClass('migration', 'prefix').addTag('migration'), ' ', new StyledText('✓').addClass('migration', 'success', 'tag'), ' ', new StyledText('Migration ' + name + ' ran successfully').addClass('migration', 'success', 'text'));
|
|
130
|
-
}
|
|
131
|
-
catch (e) {
|
|
132
|
-
// Logger.errorWithContext({textColor: ['dim', 'red'], prefix: ' FAILED ', addSpace: true, prefixColor: ['bgRed']}, "Migration " + name + " failed", e)
|
|
133
|
-
logger.error(new StyledText('[Migration]').addClass('migration', 'prefix').addTag('migration'), ' ', new StyledText('✗').addClass('migration', 'failed', 'tag'), ' ', new StyledText('Migration ' + name + ' failed').addClass('migration', 'failed', 'text'), ' ', new StyledText(e).addClass('migration', 'failed', 'error'));
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
logger.log(new StyledText('[Migration]').addClass('migration', 'prefix').addTag('migration'), ' ', new StyledText('✨').addClass('migration', 'success', 'tag', 'all'), ' ', new StyledText('All migrations done').addClass('migration', 'success', 'text', 'all'));
|
|
138
|
-
return true;
|
|
139
|
-
}
|
|
140
|
-
static async getMigration(file) {
|
|
141
|
-
let migration;
|
|
142
|
-
if (file.endsWith('.sql')) {
|
|
143
|
-
if (file.endsWith('.down.sql')) {
|
|
144
|
-
// Ignore. This will contain the downgrade implementation.
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
const sqlStatement = await fs.readFile(file, { encoding: 'utf-8' });
|
|
148
|
-
migration = new Migration(async () => {
|
|
149
|
-
await Database.statement(sqlStatement);
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
if (file.includes('.test.')) {
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
if (file.endsWith('.d.ts')) {
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
if (!file.endsWith('.ts') && !file.endsWith('.js')) {
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
const imported = await import(file);
|
|
163
|
-
migration = imported.default;
|
|
164
|
-
}
|
|
165
|
-
return migration;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
//# 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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"}
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { Column } from './Column.js';
|
|
2
|
-
import { type DatabaseStoredValue } from './DatabaseStoredValue.js';
|
|
3
|
-
import { type ManyToManyRelation } from './ManyToManyRelation.js';
|
|
4
|
-
import { type ManyToOneRelation } from './ManyToOneRelation.js';
|
|
5
|
-
import { type OneToManyRelation } from './OneToManyRelation.js';
|
|
6
|
-
type SQLWhere = {
|
|
7
|
-
sign: string;
|
|
8
|
-
value: string | Date | number | null | (string | null)[] | (number | null)[];
|
|
9
|
-
mode?: string;
|
|
10
|
-
};
|
|
11
|
-
type SQLWhereQuery = {
|
|
12
|
-
[key: string]: string | Date | number | null | SQLWhere | SQLWhere[];
|
|
13
|
-
};
|
|
14
|
-
type Listener<Value> = (value: Value) => Promise<void> | void;
|
|
15
|
-
/**
|
|
16
|
-
* Controls the fetching and decrypting of members
|
|
17
|
-
*/
|
|
18
|
-
export declare class ModelEventBus<Value> {
|
|
19
|
-
protected listeners: Map<any, {
|
|
20
|
-
listener: Listener<Value>;
|
|
21
|
-
}[]>;
|
|
22
|
-
addListener(owner: any, listener: Listener<Value>): void;
|
|
23
|
-
removeListener(owner: any): void;
|
|
24
|
-
sendEvent(value: Value): Promise<void[]>;
|
|
25
|
-
}
|
|
26
|
-
export type ModelEventType = 'created' | 'updated' | 'deleted';
|
|
27
|
-
export type ModelEvent<M extends Model = Model> = {
|
|
28
|
-
type: 'created';
|
|
29
|
-
model: M;
|
|
30
|
-
} | {
|
|
31
|
-
type: 'updated';
|
|
32
|
-
model: M;
|
|
33
|
-
changedFields: Record<string, DatabaseStoredValue>;
|
|
34
|
-
originalFields: Record<string, DatabaseStoredValue>;
|
|
35
|
-
/**
|
|
36
|
-
* Use this method to compare changes
|
|
37
|
-
*/
|
|
38
|
-
getOldModel(): M;
|
|
39
|
-
} | {
|
|
40
|
-
type: 'deleted';
|
|
41
|
-
model: M;
|
|
42
|
-
};
|
|
43
|
-
export declare class Model {
|
|
44
|
-
static primary: Column;
|
|
45
|
-
static modelEventBus: ModelEventBus<ModelEvent<Model>>;
|
|
46
|
-
/**
|
|
47
|
-
* Properties that are stored in the table (including foreign keys, but without mapped relations!)
|
|
48
|
-
*/
|
|
49
|
-
static columns: Map<string, Column>;
|
|
50
|
-
static debug: boolean;
|
|
51
|
-
static showWarnings: boolean;
|
|
52
|
-
static table: string;
|
|
53
|
-
static relations: ManyToOneRelation<string, Model>[];
|
|
54
|
-
existsInDatabase: boolean;
|
|
55
|
-
savedProperties: Map<string, DatabaseStoredValue | {
|
|
56
|
-
to: () => DatabaseStoredValue;
|
|
57
|
-
from: () => unknown;
|
|
58
|
-
}>;
|
|
59
|
-
/**
|
|
60
|
-
* Sometimes we have skipUpdate properties that still should get saved on specific occasions.
|
|
61
|
-
* E.g. update updatedAt field manually if is the only changed field.
|
|
62
|
-
*/
|
|
63
|
-
forceSaveProperties: Set<string>;
|
|
64
|
-
constructor();
|
|
65
|
-
/**
|
|
66
|
-
* Delete the value of a key from memory
|
|
67
|
-
*/
|
|
68
|
-
eraseProperty(key: string): void;
|
|
69
|
-
/**
|
|
70
|
-
* Make sure this key will get saved on the next save, even when it is not changed or when it is skipUpdate
|
|
71
|
-
*/
|
|
72
|
-
forceSaveProperty(key: string): void;
|
|
73
|
-
/**
|
|
74
|
-
* Mark all properties as changed, so they will get updated on the next save
|
|
75
|
-
*/
|
|
76
|
-
markAllChanged(): void;
|
|
77
|
-
/**
|
|
78
|
-
* Returns the default select to select the needed properties of this table
|
|
79
|
-
* @param namespace: optional namespace of this select
|
|
80
|
-
*/
|
|
81
|
-
static getDefaultSelect(namespace?: string): string;
|
|
82
|
-
static selectColumnsWithout(namespace?: string, ...exclude: string[]): string;
|
|
83
|
-
/**
|
|
84
|
-
* Set a relation to undefined, marking it as not loaded (so it won't get saved in the next save)
|
|
85
|
-
* @param relation
|
|
86
|
-
*/
|
|
87
|
-
unloadRelation<Key extends keyof any, Value extends Model>(this: this & Record<Key, Value>, relation: ManyToOneRelation<Key, any>): this & Record<Key, undefined>;
|
|
88
|
-
/**
|
|
89
|
-
* Set a relation to null, deleting it on the next save (unless unloadRelation is called)
|
|
90
|
-
* @param relation
|
|
91
|
-
*/
|
|
92
|
-
unsetRelation<Key extends keyof any, Value extends Model>(this: this & Record<Key, Value>, relation: ManyToOneRelation<Key, any>): this & Record<Key, null>;
|
|
93
|
-
setOptionalRelation<Key extends keyof any, Value extends Model>(relation: ManyToOneRelation<Key, Value>, value: Value | null): this & Record<Key, Value | null>;
|
|
94
|
-
setRelation<Key extends keyof any, Value extends Model, V extends Value>(relation: ManyToOneRelation<Key, Value>, value: V): this & Record<Key, V>;
|
|
95
|
-
/**
|
|
96
|
-
* Set a many relation. Note that this doesn't save the relation! You'll need to use the methods of the relation instead
|
|
97
|
-
*/
|
|
98
|
-
setManyRelation<Key extends keyof any, Value extends Model>(relation: ManyToManyRelation<Key, any, Value, any> | OneToManyRelation<Key, any, Value>, value: Value[]): this & Record<Key, Value[]>;
|
|
99
|
-
/**
|
|
100
|
-
* Set a many relation. Note that this doesn't save the relation! You'll need to use the methods of the relation instead
|
|
101
|
-
*/
|
|
102
|
-
getManyRelation<Key extends keyof any, Value extends Model>(relation: ManyToManyRelation<Key, any, Value, any> | OneToManyRelation<Key, any, Value>): Value[] | null;
|
|
103
|
-
/**
|
|
104
|
-
* Load the returned properties from a DB response row into the model
|
|
105
|
-
* If the row's primary key is null, undefined is returned
|
|
106
|
-
*/
|
|
107
|
-
static fromRow<T extends typeof Model>(this: T, row: Record<string, DatabaseStoredValue>): InstanceType<T> | undefined;
|
|
108
|
-
static fromRows<T extends typeof Model>(this: T, rows: Record<string, Record<string, DatabaseStoredValue>>[], namespace: string): InstanceType<T>[];
|
|
109
|
-
markSaved(fields?: Record<string, DatabaseStoredValue>, options?: {
|
|
110
|
-
fromMySQL?: boolean;
|
|
111
|
-
}): void;
|
|
112
|
-
copyFrom<T extends Model>(this: T, from: T): void;
|
|
113
|
-
get static(): typeof Model;
|
|
114
|
-
getPrimaryKey(): number | string | null;
|
|
115
|
-
/**
|
|
116
|
-
* Get a model by its primary key
|
|
117
|
-
* @param id primary key
|
|
118
|
-
*/
|
|
119
|
-
static getByID<T extends typeof Model>(this: T, id: number | string): Promise<InstanceType<T> | undefined>;
|
|
120
|
-
/**
|
|
121
|
-
* Get multiple models by their ID
|
|
122
|
-
* @param ids primary key of the models you want to fetch
|
|
123
|
-
*/
|
|
124
|
-
static getByIDs<T extends typeof Model>(this: T, ...ids: (number | string)[]): Promise<InstanceType<T>[]>;
|
|
125
|
-
static buildWhereOperator(key: string, value: SQLWhere): [string, any[]];
|
|
126
|
-
static buildWhereQuery(where: SQLWhereQuery): [string, any[]];
|
|
127
|
-
/**
|
|
128
|
-
* @deprecated Use the new SQL package instead
|
|
129
|
-
* Get multiple models by a simple where
|
|
130
|
-
*/
|
|
131
|
-
static where<T extends typeof Model>(this: T, where: SQLWhereQuery, extra?: {
|
|
132
|
-
limit?: number;
|
|
133
|
-
sort?: (string | {
|
|
134
|
-
column: string | SQLWhereQuery;
|
|
135
|
-
direction?: 'ASC' | 'DESC';
|
|
136
|
-
})[];
|
|
137
|
-
select?: string;
|
|
138
|
-
}): Promise<InstanceType<T>[]>;
|
|
139
|
-
/**
|
|
140
|
-
* Get multiple models by a simple where
|
|
141
|
-
*/
|
|
142
|
-
static all<T extends typeof Model>(this: T, limit?: number): Promise<InstanceType<T>[]>;
|
|
143
|
-
/**
|
|
144
|
-
* Return an object of all the properties that are changed and their database representation
|
|
145
|
-
*/
|
|
146
|
-
getChangedDatabaseProperties(): {
|
|
147
|
-
fields: Record<string, DatabaseStoredValue>;
|
|
148
|
-
skipUpdate: number;
|
|
149
|
-
};
|
|
150
|
-
beforeSave(): void;
|
|
151
|
-
/**
|
|
152
|
-
* Return original value from the database or undefined if not known
|
|
153
|
-
*/
|
|
154
|
-
getOriginalValue(key: string): unknown | undefined;
|
|
155
|
-
save(): Promise<boolean>;
|
|
156
|
-
delete(): Promise<void>;
|
|
157
|
-
}
|
|
158
|
-
export {};
|
|
159
|
-
//# sourceMappingURL=Model.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../../../src/classes/Model.ts"],"names":[],"mappings":"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"}
|