@holo-js/db-mysql 0.1.6 → 0.1.8
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/index.d.ts +1 -0
- package/dist/index.mjs +60 -0
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ declare class MySQLAdapter implements DriverAdapter {
|
|
|
44
44
|
rollbackToSavepoint(name: string): Promise<void>;
|
|
45
45
|
releaseSavepoint(name: string): Promise<void>;
|
|
46
46
|
private getQueryable;
|
|
47
|
+
private ensureDatabaseExists;
|
|
47
48
|
private leaseTransactionClient;
|
|
48
49
|
private requireTransactionClient;
|
|
49
50
|
private releaseTransactionClient;
|
package/dist/index.mjs
CHANGED
|
@@ -6,6 +6,41 @@ var TransactionError = class extends Error {
|
|
|
6
6
|
function toMutableBindings(bindings = []) {
|
|
7
7
|
return [...bindings];
|
|
8
8
|
}
|
|
9
|
+
function quoteDatabaseIdentifier(database) {
|
|
10
|
+
return `\`${database.replaceAll("`", "``")}\``;
|
|
11
|
+
}
|
|
12
|
+
function stripDatabaseFromUri(uri) {
|
|
13
|
+
const parsed = new URL(uri);
|
|
14
|
+
const database = parsed.pathname.replace(/^\/+/, "");
|
|
15
|
+
parsed.pathname = "";
|
|
16
|
+
return {
|
|
17
|
+
database: database ? decodeURIComponent(database) : void 0,
|
|
18
|
+
uri: parsed.toString()
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function resolveBootstrapTarget(config) {
|
|
22
|
+
if (typeof config.database === "string" && config.database.trim().length > 0) {
|
|
23
|
+
const { database, ...bootstrapConfig } = config;
|
|
24
|
+
return {
|
|
25
|
+
database,
|
|
26
|
+
config: bootstrapConfig
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (typeof config.uri === "string" && config.uri.trim().length > 0) {
|
|
30
|
+
const stripped = stripDatabaseFromUri(config.uri);
|
|
31
|
+
if (!stripped.database) {
|
|
32
|
+
return void 0;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
database: stripped.database,
|
|
36
|
+
config: {
|
|
37
|
+
...config,
|
|
38
|
+
uri: stripped.uri
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return void 0;
|
|
43
|
+
}
|
|
9
44
|
function wrapMySQLClient(client) {
|
|
10
45
|
const rawClient = client;
|
|
11
46
|
return {
|
|
@@ -49,6 +84,7 @@ var MySQLAdapter = class {
|
|
|
49
84
|
return;
|
|
50
85
|
}
|
|
51
86
|
if (this.createPoolInstance) {
|
|
87
|
+
await this.ensureDatabaseExists();
|
|
52
88
|
this.pool = this.createPoolInstance(this.config);
|
|
53
89
|
}
|
|
54
90
|
this.connected = true;
|
|
@@ -161,6 +197,30 @@ var MySQLAdapter = class {
|
|
|
161
197
|
}
|
|
162
198
|
return this.pool;
|
|
163
199
|
}
|
|
200
|
+
async ensureDatabaseExists() {
|
|
201
|
+
if (!this.createPoolInstance) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
const target = resolveBootstrapTarget(this.config);
|
|
205
|
+
if (!target) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const bootstrapPool = this.createPoolInstance(target.config);
|
|
209
|
+
try {
|
|
210
|
+
const [existing] = await bootstrapPool.query(
|
|
211
|
+
"SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ?",
|
|
212
|
+
[target.database]
|
|
213
|
+
);
|
|
214
|
+
if (Array.isArray(existing) && existing.length === 0) {
|
|
215
|
+
await bootstrapPool.query(`CREATE DATABASE ${quoteDatabaseIdentifier(target.database)}`, []);
|
|
216
|
+
}
|
|
217
|
+
} catch (error) {
|
|
218
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
219
|
+
throw new Error(`Unable to ensure MySQL database "${target.database}" exists: ${message}`, { cause: error });
|
|
220
|
+
} finally {
|
|
221
|
+
await bootstrapPool.end();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
164
224
|
async leaseTransactionClient() {
|
|
165
225
|
const scoped = this.transactionScope.getStore();
|
|
166
226
|
if (scoped) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@holo-js/db-mysql",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "Holo-JS Framework - MySQL database adapter",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,13 +24,13 @@
|
|
|
24
24
|
"test:integration": "HOLO_MYSQL_INTEGRATION=1 vitest --run tests/mysql.test.ts"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
|
-
"@holo-js/db": "^0.1.
|
|
27
|
+
"@holo-js/db": "^0.1.8"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"mysql2": "^3.17.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@holo-js/db": "^0.1.
|
|
33
|
+
"@holo-js/db": "^0.1.8",
|
|
34
34
|
"tsup": "^8.3.5",
|
|
35
35
|
"typescript": "^5.7.2",
|
|
36
36
|
"vitest": "^4.1.5"
|