@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,171 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import mysql from 'mysql2/promise';
|
|
3
|
-
/// Database is a wrapper arround mysql, because we want to use promises + types
|
|
4
|
-
export class DatabaseInstance {
|
|
5
|
-
pool;
|
|
6
|
-
debug = false;
|
|
7
|
-
constructor(options = {}) {
|
|
8
|
-
this.createPool(options);
|
|
9
|
-
}
|
|
10
|
-
createPool(options = {}) {
|
|
11
|
-
const settings = {
|
|
12
|
-
host: options.host ?? process.env.DB_HOST ?? 'localhost',
|
|
13
|
-
user: options.user ?? process.env.DB_USER ?? 'root',
|
|
14
|
-
password: options.password ?? process.env.DB_PASS ?? 'root',
|
|
15
|
-
port: options.port ? options.port : parseInt(process.env.DB_PORT ?? '3306'),
|
|
16
|
-
database: options.database === undefined ? process.env.DB_DATABASE : options.database,
|
|
17
|
-
connectionLimit: options.connectionLimit ? options.connectionLimit : parseInt(process.env.DB_CONNECTION_LIMIT ?? '10'),
|
|
18
|
-
multipleStatements: options.multipleStatements ?? ((process.env.DB_MULTIPLE_STATEMENTS ?? 'true') === 'true'),
|
|
19
|
-
charset: options.charset ?? process.env.DB_CHARSET ?? 'utf8mb4_0900_ai_ci',
|
|
20
|
-
useSSL: options.useSSL ?? !!process.env.DB_USE_SSL,
|
|
21
|
-
ca: options.ca ?? process.env.DB_CA,
|
|
22
|
-
};
|
|
23
|
-
if (settings.database === undefined) {
|
|
24
|
-
throw new Error('Environment variable DB_DATABASE is missing');
|
|
25
|
-
}
|
|
26
|
-
this.pool = mysql.createPool({
|
|
27
|
-
host: settings.host,
|
|
28
|
-
user: settings.user,
|
|
29
|
-
password: settings.password,
|
|
30
|
-
port: settings.port,
|
|
31
|
-
database: settings.database ?? undefined,
|
|
32
|
-
waitForConnections: true,
|
|
33
|
-
connectionLimit: settings.connectionLimit,
|
|
34
|
-
queueLimit: 0,
|
|
35
|
-
multipleStatements: settings.multipleStatements,
|
|
36
|
-
charset: settings.charset,
|
|
37
|
-
decimalNumbers: true,
|
|
38
|
-
jsonStrings: true,
|
|
39
|
-
ssl: settings.useSSL
|
|
40
|
-
? {
|
|
41
|
-
ca: settings.ca ? fs.readFileSync(settings.ca) : undefined,
|
|
42
|
-
rejectUnauthorized: settings.ca ? true : false,
|
|
43
|
-
}
|
|
44
|
-
: undefined,
|
|
45
|
-
});
|
|
46
|
-
this.debug = options?.debug ?? false;
|
|
47
|
-
if (this.debug) {
|
|
48
|
-
this.pool.on('acquire', function (connection) {
|
|
49
|
-
console.log('Connection %d acquired', connection.threadId);
|
|
50
|
-
});
|
|
51
|
-
this.pool.on('connection', function (connection) {
|
|
52
|
-
console.log('Connection %d created', connection.threadId);
|
|
53
|
-
});
|
|
54
|
-
this.pool.on('enqueue', function () {
|
|
55
|
-
console.log('Waiting for available connection slot');
|
|
56
|
-
});
|
|
57
|
-
this.pool.on('release', function (connection) {
|
|
58
|
-
console.log('Connection %d released', connection.threadId);
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
async reload(options = {}) {
|
|
63
|
-
await this.pool.end();
|
|
64
|
-
this.createPool(options);
|
|
65
|
-
}
|
|
66
|
-
setDebug(enabled = true) {
|
|
67
|
-
this.debug = enabled;
|
|
68
|
-
}
|
|
69
|
-
async getConnection() {
|
|
70
|
-
// Todo: use the settings here to provide a good connection pool
|
|
71
|
-
return await this.pool.getConnection();
|
|
72
|
-
}
|
|
73
|
-
escapeId(value) {
|
|
74
|
-
return this.pool.escapeId(value);
|
|
75
|
-
}
|
|
76
|
-
async end() {
|
|
77
|
-
return await this.pool.end();
|
|
78
|
-
}
|
|
79
|
-
startQuery() {
|
|
80
|
-
return process.hrtime();
|
|
81
|
-
}
|
|
82
|
-
logQuery(q, hrstart) {
|
|
83
|
-
if (this.debug) {
|
|
84
|
-
const hrend = process.hrtime(hrstart);
|
|
85
|
-
console.warn(q.sql.replace(/\n+ +/g, '\n'), 'started at ' + (hrend[0] * 1000 + hrend[1] / 1000000) + 'ms');
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
finishQuery(q, hrstart) {
|
|
89
|
-
if (this.debug) {
|
|
90
|
-
const hrend = process.hrtime(hrstart);
|
|
91
|
-
console.log(q.sql.replace(/\s+/g, ' '), 'in ' + (hrend[0] * 1000 + hrend[1] / 1000000) + 'ms');
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
async select(query, values, options = {}) {
|
|
95
|
-
const connection = options.connection ?? (await this.getConnection());
|
|
96
|
-
try {
|
|
97
|
-
const q = await connection.query({ sql: query, nestTables: options.nestTables ?? true, values: values });
|
|
98
|
-
return [
|
|
99
|
-
q[0],
|
|
100
|
-
q[1],
|
|
101
|
-
];
|
|
102
|
-
}
|
|
103
|
-
finally {
|
|
104
|
-
if (!options.connection) {
|
|
105
|
-
connection.release();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
async insert(query, values, useConnection) {
|
|
110
|
-
const connection = useConnection ?? (await this.getConnection());
|
|
111
|
-
try {
|
|
112
|
-
const q = await connection.query({ sql: query, values: values });
|
|
113
|
-
return [
|
|
114
|
-
q[0],
|
|
115
|
-
q[1],
|
|
116
|
-
];
|
|
117
|
-
}
|
|
118
|
-
finally {
|
|
119
|
-
if (!useConnection) {
|
|
120
|
-
connection.release();
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
async update(query, values, useConnection) {
|
|
125
|
-
const connection = useConnection ?? (await this.getConnection());
|
|
126
|
-
try {
|
|
127
|
-
const q = await connection.query({ sql: query, values: values });
|
|
128
|
-
return [
|
|
129
|
-
q[0],
|
|
130
|
-
q[1],
|
|
131
|
-
];
|
|
132
|
-
}
|
|
133
|
-
finally {
|
|
134
|
-
if (!useConnection) {
|
|
135
|
-
connection.release();
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
async delete(query, values, useConnection) {
|
|
140
|
-
const connection = useConnection ?? (await this.getConnection());
|
|
141
|
-
try {
|
|
142
|
-
const q = await connection.query({ sql: query, values: values });
|
|
143
|
-
return [
|
|
144
|
-
q[0],
|
|
145
|
-
q[1],
|
|
146
|
-
];
|
|
147
|
-
}
|
|
148
|
-
finally {
|
|
149
|
-
if (!useConnection) {
|
|
150
|
-
connection.release();
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
async statement(query, values, useConnection) {
|
|
155
|
-
const connection = useConnection ?? (await this.getConnection());
|
|
156
|
-
try {
|
|
157
|
-
const q = await connection.query({ sql: query, values: values });
|
|
158
|
-
return [
|
|
159
|
-
q[0],
|
|
160
|
-
q[1],
|
|
161
|
-
];
|
|
162
|
-
}
|
|
163
|
-
finally {
|
|
164
|
-
if (!useConnection) {
|
|
165
|
-
connection.release();
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
export const Database = new DatabaseInstance();
|
|
171
|
-
//# sourceMappingURL=Database.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Database.js","sourceRoot":"","sources":["../../../../src/classes/Database.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseStoredValue.d.ts","sourceRoot":"","sources":["../../../../src/classes/DatabaseStoredValue.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseStoredValue.js","sourceRoot":"","sources":["../../../../src/classes/DatabaseStoredValue.ts"],"names":[],"mappings":""}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export declare abstract class Factory<Options, Model> {
|
|
2
|
-
options: Options;
|
|
3
|
-
constructor(options: Options);
|
|
4
|
-
abstract create(): Promise<Model>;
|
|
5
|
-
randomArray(arr: Array<any>): any;
|
|
6
|
-
randomEnum<E extends {
|
|
7
|
-
[key: number]: string | number;
|
|
8
|
-
}>(e: E): E[keyof E];
|
|
9
|
-
randomString(length: number): string;
|
|
10
|
-
randomFirstName(gender: 'Male' | 'Female' | 'Other'): string;
|
|
11
|
-
randomLastName(): string;
|
|
12
|
-
createMultiple(amount?: number): Promise<Model[]>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=Factory.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Factory.d.ts","sourceRoot":"","sources":["../../../../src/classes/Factory.ts"],"names":[],"mappings":"AAIA,8BAAsB,OAAO,CAAC,OAAO,EAAE,KAAK;IACxC,OAAO,EAAE,OAAO,CAAC;gBACL,OAAO,EAAE,OAAO;IAG5B,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC;IAEjC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG;IAKjC,UAAU,CAAC,CAAC,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAI1E,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAUpC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM;IAgB5D,cAAc,IAAI,MAAM;IAIlB,cAAc,CAAC,MAAM,SAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAOtD"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import BoyNames from './data/boys.js';
|
|
2
|
-
import FamilyNames from './data/family-names.js';
|
|
3
|
-
import GirlNames from './data/girls.js';
|
|
4
|
-
export class Factory {
|
|
5
|
-
options;
|
|
6
|
-
constructor(options) {
|
|
7
|
-
this.options = options;
|
|
8
|
-
}
|
|
9
|
-
randomArray(arr) {
|
|
10
|
-
const int = Math.floor(Math.random() * arr.length);
|
|
11
|
-
return arr[int];
|
|
12
|
-
}
|
|
13
|
-
randomEnum(e) {
|
|
14
|
-
return this.randomArray(Object.values(e));
|
|
15
|
-
}
|
|
16
|
-
randomString(length) {
|
|
17
|
-
let result = '';
|
|
18
|
-
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
19
|
-
const charactersLength = characters.length;
|
|
20
|
-
for (let i = 0; i < length; i++) {
|
|
21
|
-
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
22
|
-
}
|
|
23
|
-
return result;
|
|
24
|
-
}
|
|
25
|
-
randomFirstName(gender) {
|
|
26
|
-
let names;
|
|
27
|
-
switch (gender) {
|
|
28
|
-
case 'Male':
|
|
29
|
-
names = BoyNames;
|
|
30
|
-
break;
|
|
31
|
-
case 'Female':
|
|
32
|
-
names = GirlNames;
|
|
33
|
-
break;
|
|
34
|
-
case 'Other':
|
|
35
|
-
names = [...BoyNames, ...GirlNames];
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
return this.randomArray(names);
|
|
39
|
-
}
|
|
40
|
-
randomLastName() {
|
|
41
|
-
return this.randomArray(FamilyNames);
|
|
42
|
-
}
|
|
43
|
-
async createMultiple(amount = 40) {
|
|
44
|
-
const arr = [];
|
|
45
|
-
for (let index = 0; index < amount; index++) {
|
|
46
|
-
arr.push(await this.create());
|
|
47
|
-
}
|
|
48
|
-
return arr;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=Factory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Factory.js","sourceRoot":"","sources":["../../../../src/classes/Factory.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,MAAM,OAAgB,OAAO;IACzB,OAAO,CAAU;IACjB,YAAY,OAAgB;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAGD,WAAW,CAAC,GAAe;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,UAAU,CAA+C,CAAI;QACzD,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY,CAAC,MAAc;QACvB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,gEAAgE,CAAC;QACpF,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,eAAe,CAAC,MAAmC;QAC/C,IAAI,KAAe,CAAC;QACpB,QAAQ,MAAM,EAAE,CAAC;YACb,KAAK,MAAM;gBACP,KAAK,GAAG,QAAQ,CAAC;gBACjB,MAAM;YACV,KAAK,QAAQ;gBACT,KAAK,GAAG,SAAS,CAAC;gBAClB,MAAM;YACV,KAAK,OAAO;gBACR,KAAK,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC;gBACpC,MAAM;QACd,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,cAAc;QACV,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE;QAC5B,MAAM,GAAG,GAAY,EAAE,CAAC;QACxB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;CACJ"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { Model } from './Model.js';
|
|
2
|
-
export declare class ManyToManyRelation<Key extends keyof any, A extends Model, B extends Model, Link extends Model | undefined = undefined> {
|
|
3
|
-
modelA: {
|
|
4
|
-
new (): A;
|
|
5
|
-
} & typeof Model;
|
|
6
|
-
modelB: {
|
|
7
|
-
new (): B;
|
|
8
|
-
} & typeof Model;
|
|
9
|
-
modelLink?: {
|
|
10
|
-
new (): Link;
|
|
11
|
-
} & typeof Model;
|
|
12
|
-
/**
|
|
13
|
-
* E.g. parents
|
|
14
|
-
*/
|
|
15
|
-
modelKey: Key;
|
|
16
|
-
/**
|
|
17
|
-
* Sort the loading of this relation
|
|
18
|
-
*/
|
|
19
|
-
sortKey: string | undefined;
|
|
20
|
-
sortOrder: 'ASC' | 'DESC';
|
|
21
|
-
/**
|
|
22
|
-
* E.g. _models_parents
|
|
23
|
-
*/
|
|
24
|
-
get linkTable(): string;
|
|
25
|
-
/**
|
|
26
|
-
* e.g. modelsId
|
|
27
|
-
*/
|
|
28
|
-
get linkKeyA(): string;
|
|
29
|
-
/**
|
|
30
|
-
* e.g. parentsId
|
|
31
|
-
*/
|
|
32
|
-
get linkKeyB(): string;
|
|
33
|
-
constructor(modelA: {
|
|
34
|
-
new (): A;
|
|
35
|
-
} & typeof Model, modelB: {
|
|
36
|
-
new (): B;
|
|
37
|
-
} & typeof Model, modelKey: Key, modelLink?: {
|
|
38
|
-
new (): Link;
|
|
39
|
-
} & typeof Model);
|
|
40
|
-
reverse<Key2 extends keyof any>(modelKey: Key2): ManyToManyRelation<Key2, B, A, Link>;
|
|
41
|
-
setSort(key: string, order?: 'ASC' | 'DESC'): this;
|
|
42
|
-
joinQuery(namespaceA: string, namespaceB: string): string;
|
|
43
|
-
orderByQuery(namespaceA: string, namespaceB: string): string;
|
|
44
|
-
load(modelA: A, sorted?: boolean, where?: object, whereLink?: object): Promise<(B & {
|
|
45
|
-
_link: Link;
|
|
46
|
-
})[]>;
|
|
47
|
-
isLoaded<T extends A>(model: T): model is T & Record<Key, B[]>;
|
|
48
|
-
setLinkTable(modelA: A, modelB: B, linkTableValues: {
|
|
49
|
-
[key: string]: any;
|
|
50
|
-
}): Promise<void>;
|
|
51
|
-
linkIds(modelA: string | number, modelsB: (string | number)[], linkTableValues?: {
|
|
52
|
-
[key: string]: any[];
|
|
53
|
-
}): Promise<number>;
|
|
54
|
-
link(modelA: A, modelsB: B[], linkTableValues?: {
|
|
55
|
-
[key: string]: any[];
|
|
56
|
-
}): Promise<void>;
|
|
57
|
-
/**
|
|
58
|
-
* Delete all the links from modelA for this relation
|
|
59
|
-
* @param modelA
|
|
60
|
-
*/
|
|
61
|
-
clearId(modelA: string | number): Promise<void>;
|
|
62
|
-
/**
|
|
63
|
-
* Delete all the links from modelA for this relation
|
|
64
|
-
* @param modelA
|
|
65
|
-
*/
|
|
66
|
-
clear(modelA: A): Promise<void>;
|
|
67
|
-
/**
|
|
68
|
-
* Delete all the links from modelA for this relation
|
|
69
|
-
* @param modelA
|
|
70
|
-
*/
|
|
71
|
-
syncId(modelA: string | number, modelsB: (string | number)[], linkTableValues?: {
|
|
72
|
-
[key: string]: any[];
|
|
73
|
-
}): Promise<void>;
|
|
74
|
-
unlinkIds(modelA: string | number, ...modelsB: (string | number)[]): Promise<{
|
|
75
|
-
affectedRows: number;
|
|
76
|
-
}>;
|
|
77
|
-
unlink(modelA: A, ...modelsB: B[]): Promise<void>;
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=ManyToManyRelation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ManyToManyRelation.d.ts","sourceRoot":"","sources":["../../../../src/classes/ManyToManyRelation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,qBAAa,kBAAkB,CAAC,GAAG,SAAS,MAAM,GAAG,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,GAAG,SAAS,GAAG,SAAS;IAC/H,MAAM,EAAE;QAAE,QAAQ,CAAC,CAAA;KAAE,GAAG,OAAO,KAAK,CAAC;IACrC,MAAM,EAAE;QAAE,QAAQ,CAAC,CAAA;KAAE,GAAG,OAAO,KAAK,CAAC;IACrC,SAAS,CAAC,EAAE;QAAE,QAAO,IAAI,CAAA;KAAE,GAAG,OAAO,KAAK,CAAC;IAE3C;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAC;IAEd;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,KAAK,GAAG,MAAM,CAAS;IAElC;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAKtB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAOrB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAOrB;gBAEW,MAAM,EAAE;QAAE,QAAO,CAAC,CAAA;KAAE,GAAG,OAAO,KAAK,EAAE,MAAM,EAAE;QAAE,QAAO,CAAC,CAAA;KAAE,GAAG,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE;QAAE,QAAO,IAAI,CAAA;KAAE,GAAG,OAAO,KAAK;IAO/I,OAAO,CAAC,IAAI,SAAS,MAAM,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;IAIrF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,KAAK,GAAG,MAAc,GAAG,IAAI;IAOzD,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAOzD,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAatD,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,UAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,EAAE,CAAC;IA2D1G,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IAKxD,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAU1E,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA4C3H,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC9F;;;OAGG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD;;;OAGG;IACG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrC;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAStG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAuB1D"}
|
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
import { Database } from './Database.js';
|
|
2
|
-
import { Model } from './Model.js';
|
|
3
|
-
export class ManyToManyRelation {
|
|
4
|
-
modelA;
|
|
5
|
-
modelB;
|
|
6
|
-
modelLink;
|
|
7
|
-
/**
|
|
8
|
-
* E.g. parents
|
|
9
|
-
*/
|
|
10
|
-
modelKey;
|
|
11
|
-
/**
|
|
12
|
-
* Sort the loading of this relation
|
|
13
|
-
*/
|
|
14
|
-
sortKey;
|
|
15
|
-
sortOrder = 'ASC';
|
|
16
|
-
/**
|
|
17
|
-
* E.g. _models_parents
|
|
18
|
-
*/
|
|
19
|
-
get linkTable() {
|
|
20
|
-
if (this.modelLink) {
|
|
21
|
-
return this.modelLink.table;
|
|
22
|
-
}
|
|
23
|
-
return '_' + [this.modelA.table, this.modelB.table].sort().join('_');
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* e.g. modelsId
|
|
27
|
-
*/
|
|
28
|
-
get linkKeyA() {
|
|
29
|
-
return (this.modelA.table
|
|
30
|
-
+ this.modelA.primary.name.charAt(0).toUpperCase()
|
|
31
|
-
+ this.modelA.primary.name.substring(1)
|
|
32
|
-
+ (this.modelA === this.modelB ? 'A' : ''));
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* e.g. parentsId
|
|
36
|
-
*/
|
|
37
|
-
get linkKeyB() {
|
|
38
|
-
return (this.modelB.table
|
|
39
|
-
+ this.modelB.primary.name.charAt(0).toUpperCase()
|
|
40
|
-
+ this.modelB.primary.name.substring(1)
|
|
41
|
-
+ (this.modelA === this.modelB ? 'B' : ''));
|
|
42
|
-
}
|
|
43
|
-
constructor(modelA, modelB, modelKey, modelLink) {
|
|
44
|
-
this.modelA = modelA;
|
|
45
|
-
this.modelB = modelB;
|
|
46
|
-
this.modelKey = modelKey;
|
|
47
|
-
this.modelLink = modelLink;
|
|
48
|
-
}
|
|
49
|
-
reverse(modelKey) {
|
|
50
|
-
return new ManyToManyRelation(this.modelB, this.modelA, modelKey, this.modelLink);
|
|
51
|
-
}
|
|
52
|
-
setSort(key, order = 'ASC') {
|
|
53
|
-
this.sortKey = key;
|
|
54
|
-
this.sortOrder = order;
|
|
55
|
-
return this;
|
|
56
|
-
}
|
|
57
|
-
/// Generate a join query
|
|
58
|
-
joinQuery(namespaceA, namespaceB) {
|
|
59
|
-
const linkNamespace = namespaceA + '_' + namespaceB;
|
|
60
|
-
let str = `LEFT JOIN ${this.linkTable} as ${linkNamespace} on ${linkNamespace}.${this.linkKeyA} = ${namespaceA}.${this.modelA.primary.name}\n`;
|
|
61
|
-
str += `LEFT JOIN ${this.modelB.table} as ${namespaceB} on ${linkNamespace}.${this.linkKeyB} = ${namespaceB}.${this.modelB.primary.name}`;
|
|
62
|
-
return str;
|
|
63
|
-
}
|
|
64
|
-
orderByQuery(namespaceA, namespaceB) {
|
|
65
|
-
if (this.sortKey === undefined) {
|
|
66
|
-
return '';
|
|
67
|
-
}
|
|
68
|
-
const linkNamespace = namespaceA + '_' + namespaceB;
|
|
69
|
-
let str = `\nORDER BY ${linkNamespace}.${this.sortKey}`;
|
|
70
|
-
if (this.sortOrder === 'DESC') {
|
|
71
|
-
str += ' DESC';
|
|
72
|
-
}
|
|
73
|
-
return str + '\n';
|
|
74
|
-
}
|
|
75
|
-
/// Load the relation of a model and return the loaded models
|
|
76
|
-
async load(modelA, sorted = true, where, whereLink) {
|
|
77
|
-
const namespaceB = 'B';
|
|
78
|
-
const linkNamespace = 'A_B';
|
|
79
|
-
let select = this.modelB.getDefaultSelect(namespaceB);
|
|
80
|
-
if (this.modelLink) {
|
|
81
|
-
select += ', ' + this.modelLink.getDefaultSelect(linkNamespace);
|
|
82
|
-
}
|
|
83
|
-
let str = `SELECT ${select} FROM ${this.linkTable} as ${linkNamespace}\n`;
|
|
84
|
-
str += `JOIN ${this.modelB.table} as ${namespaceB} on ${linkNamespace}.${this.linkKeyB} = ${namespaceB}.${this.modelB.primary.name}\n`;
|
|
85
|
-
str += `WHERE ${linkNamespace}.${this.linkKeyA} = ?`;
|
|
86
|
-
const params = [modelA.getPrimaryKey()];
|
|
87
|
-
if (where) {
|
|
88
|
-
for (const key in where) {
|
|
89
|
-
if (Object.hasOwnProperty.call(where, key)) {
|
|
90
|
-
str += ` AND ${namespaceB}.\`${key}\` = ?`;
|
|
91
|
-
params.push(where[key]);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if (whereLink) {
|
|
96
|
-
for (const key in whereLink) {
|
|
97
|
-
if (Object.hasOwnProperty.call(whereLink, key)) {
|
|
98
|
-
str += ` AND ${linkNamespace}.\`${key}\` = ?`;
|
|
99
|
-
params.push(whereLink[key]);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
if (sorted) {
|
|
104
|
-
str += this.orderByQuery('A', 'B');
|
|
105
|
-
}
|
|
106
|
-
const [rows] = await Database.select(str, params);
|
|
107
|
-
const modelsB = this.modelB.fromRows(rows, namespaceB);
|
|
108
|
-
// Also load link table if possible
|
|
109
|
-
if (this.modelLink) {
|
|
110
|
-
for (const row of rows) {
|
|
111
|
-
const model = this.modelLink.fromRow(row[linkNamespace]);
|
|
112
|
-
// Fin modelB
|
|
113
|
-
const modelB = modelsB.find(m => m.getPrimaryKey() === row[linkNamespace][this.linkKeyB]);
|
|
114
|
-
if (!modelB) {
|
|
115
|
-
throw new Error('Unexpected linking');
|
|
116
|
-
}
|
|
117
|
-
// Save link
|
|
118
|
-
modelB._link = model;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
modelA.setManyRelation(this, modelsB);
|
|
122
|
-
return modelsB;
|
|
123
|
-
}
|
|
124
|
-
/// Whether this relation is loaded
|
|
125
|
-
isLoaded(model) {
|
|
126
|
-
// Also not loaded if null, since it should be an empty array or an array if it is loaded
|
|
127
|
-
return Array.isArray(model[this.modelKey]);
|
|
128
|
-
}
|
|
129
|
-
async setLinkTable(modelA, modelB, linkTableValues) {
|
|
130
|
-
const str = `UPDATE ${this.linkTable} SET ? WHERE ${Database.escapeId(this.linkKeyA)} = ? AND ${Database.escapeId(this.linkKeyB)} = ?`;
|
|
131
|
-
const [result] = await Database.update(str, [linkTableValues, modelA.getPrimaryKey(), modelB.getPrimaryKey()]);
|
|
132
|
-
if (result.changedRows !== 1) {
|
|
133
|
-
// Todo: add option to fail silently
|
|
134
|
-
throw new Error('Failed to update link table. Check if combination exists');
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
async linkIds(modelA, modelsB, linkTableValues) {
|
|
138
|
-
if (modelsB.length === 0) {
|
|
139
|
-
return 0;
|
|
140
|
-
}
|
|
141
|
-
// Nested arrays are turned into grouped lists (for bulk inserts), e.g. [['a', 'b'], ['c', 'd']] turns into ('a', 'b'), ('c', 'd')
|
|
142
|
-
let result;
|
|
143
|
-
if (linkTableValues !== undefined) {
|
|
144
|
-
const linkTableKeys = Object.keys(linkTableValues);
|
|
145
|
-
for (const property in linkTableValues) {
|
|
146
|
-
if (Object.hasOwnProperty.call(linkTableValues, property)) {
|
|
147
|
-
if (linkTableValues[property].length !== modelsB.length) {
|
|
148
|
-
throw new Error('Amount of link table values for key '
|
|
149
|
-
+ property
|
|
150
|
-
+ ' ('
|
|
151
|
-
+ linkTableValues[property].length
|
|
152
|
-
+ ') are not equal to amount of models linked ('
|
|
153
|
-
+ modelsB.length
|
|
154
|
-
+ ')');
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
const query = `INSERT INTO ${Database.escapeId(this.linkTable)} (
|
|
159
|
-
${Database.escapeId(this.linkKeyA)},
|
|
160
|
-
${Database.escapeId(this.linkKeyB)},
|
|
161
|
-
${linkTableKeys.map(k => Database.escapeId(k)).join(', ')}
|
|
162
|
-
) VALUES ?`;
|
|
163
|
-
[result] = await Database.insert(query, [modelsB.map((modelB, i) => [modelA, modelB, ...linkTableKeys.map(k => linkTableValues[k][i])])]);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
const query = `INSERT INTO ${Database.escapeId(this.linkTable)} (
|
|
167
|
-
${Database.escapeId(this.linkKeyA)},
|
|
168
|
-
${Database.escapeId(this.linkKeyB)}
|
|
169
|
-
) VALUES ?`;
|
|
170
|
-
[result] = await Database.insert(query, [modelsB.map(modelB => [modelA, modelB])]);
|
|
171
|
-
}
|
|
172
|
-
return result.affectedRows;
|
|
173
|
-
}
|
|
174
|
-
async link(modelA, modelsB, linkTableValues) {
|
|
175
|
-
const modelAId = modelA.getPrimaryKey();
|
|
176
|
-
if (!modelAId) {
|
|
177
|
-
throw new Error('Cannot link if model is not saved yet');
|
|
178
|
-
}
|
|
179
|
-
const affectedRows = await this.linkIds(modelAId, modelsB.map((modelB) => {
|
|
180
|
-
const id = modelB.getPrimaryKey();
|
|
181
|
-
if (!id) {
|
|
182
|
-
throw new Error('Cannot link to a model that is not saved yet');
|
|
183
|
-
}
|
|
184
|
-
return id;
|
|
185
|
-
}), linkTableValues);
|
|
186
|
-
// If the relation is loaded, also modify the value of the relation
|
|
187
|
-
if (this.isLoaded(modelA)) {
|
|
188
|
-
if (affectedRows === modelsB.length) {
|
|
189
|
-
const arr = modelA[this.modelKey];
|
|
190
|
-
arr.push(...modelsB);
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
// This could happen in race conditions and simultanious requests
|
|
194
|
-
console.warn('Warning: linking expected to affect ' + modelsB.length + ' rows, but only affected ' + affectedRows + ' rows');
|
|
195
|
-
// TODO: Manually correct by doing a query (safest)
|
|
196
|
-
throw new Error('Fallback behaviour net yet implemented');
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Delete all the links from modelA for this relation
|
|
202
|
-
* @param modelA
|
|
203
|
-
*/
|
|
204
|
-
async clearId(modelA) {
|
|
205
|
-
const query = `DELETE FROM ${this.linkTable} WHERE ${this.linkKeyA} = ?`;
|
|
206
|
-
// Arrays are turned into list, e.g. ['a', 'b'] turns into 'a', 'b'
|
|
207
|
-
const [result] = await Database.delete(query, [modelA]);
|
|
208
|
-
if (result.affectedRows === 0 && Model.debug) {
|
|
209
|
-
console.warn("Cleared many to many relation, but didn't deleted any entries");
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Delete all the links from modelA for this relation
|
|
214
|
-
* @param modelA
|
|
215
|
-
*/
|
|
216
|
-
async clear(modelA) {
|
|
217
|
-
await this.clearId(modelA.getPrimaryKey());
|
|
218
|
-
modelA.setManyRelation(this, []);
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Delete all the links from modelA for this relation
|
|
222
|
-
* @param modelA
|
|
223
|
-
*/
|
|
224
|
-
async syncId(modelA, modelsB, linkTableValues) {
|
|
225
|
-
// todo: add transaction
|
|
226
|
-
await this.clearId(modelA);
|
|
227
|
-
await this.linkIds(modelA, modelsB, linkTableValues);
|
|
228
|
-
}
|
|
229
|
-
async unlinkIds(modelA, ...modelsB) {
|
|
230
|
-
const query = `DELETE FROM ${this.linkTable} WHERE ${this.linkKeyA} = ? AND ${this.linkKeyB} IN (?)`;
|
|
231
|
-
// Arrays are turned into list, e.g. ['a', 'b'] turns into 'a', 'b'
|
|
232
|
-
const [result] = await Database.delete(query, [modelA, modelsB]);
|
|
233
|
-
return result;
|
|
234
|
-
}
|
|
235
|
-
async unlink(modelA, ...modelsB) {
|
|
236
|
-
const result = await this.unlinkIds(modelA.getPrimaryKey(), ...modelsB.map(modelB => modelB.getPrimaryKey()));
|
|
237
|
-
if (this.isLoaded(modelA)) {
|
|
238
|
-
if (result.affectedRows === modelsB.length) {
|
|
239
|
-
const arr = modelA[this.modelKey];
|
|
240
|
-
const idMap = modelsB.map(model => model.getPrimaryKey());
|
|
241
|
-
modelA.setManyRelation(this, arr.filter((model) => {
|
|
242
|
-
return !idMap.includes(model.getPrimaryKey());
|
|
243
|
-
}));
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
// This could happen in race conditions and simultanious requests
|
|
247
|
-
console.warn('Warning: unlinking expected to affect ' + modelsB.length + ' rows, but only affected ' + result.affectedRows + ' rows');
|
|
248
|
-
// TODO: Manually correct by doing a query (safest)
|
|
249
|
-
throw new Error('Fallback behaviour net yet implemented');
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
//# 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"}
|