Explorar el Código

chore(core): Switch to mysql2 client library (#3821)

David Höck hace 3 meses
padre
commit
3f514511d3

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 338 - 291
package-lock.json


+ 1 - 1
packages/core/e2e/custom-fields.e2e-spec.ts

@@ -1165,7 +1165,7 @@ describe('Custom fields', () => {
                 switch (customConfig.dbConnectionOptions.type) {
                     case 'mariadb':
                     case 'mysql':
-                        duplicateKeyErrMessage = "ER_DUP_ENTRY: Duplicate entry 'foo' for key";
+                        duplicateKeyErrMessage = "Duplicate entry 'foo' for key";
                         break;
                     case 'postgres':
                         duplicateKeyErrMessage = 'duplicate key value violates unique constraint';

+ 1 - 1
packages/core/package.json

@@ -99,7 +99,7 @@
         "chokidar": "^3.6.0",
         "fs-extra": "^11.2.0",
         "glob": "^10.3.10",
-        "mysql": "^2.18.1",
+        "mysql2": "^3.15.0",
         "pg": "^8.13.1",
         "rimraf": "^5.0.5",
         "sql.js": "1.13.0",

+ 2 - 2
packages/create/src/helpers.ts

@@ -239,7 +239,7 @@ function dbDriverPackage(dbType: DbType): string {
     switch (dbType) {
         case 'mysql':
         case 'mariadb':
-            return 'mysql';
+            return 'mysql2';
         case 'postgres':
             return 'pg';
         case 'sqlite':
@@ -267,7 +267,7 @@ export function checkDbConnection(options: any, root: string): Promise<true> {
 }
 
 async function checkMysqlDbExists(options: any, root: string): Promise<true> {
-    const mysql = await import(path.join(root, 'node_modules/mysql'));
+    const mysql = await import(path.join(root, 'node_modules/mysql2/promise'));
     const connectionOptions = {
         host: options.host,
         user: options.username,

+ 1 - 1
packages/dev-server/load-testing/init-load-test.ts

@@ -111,7 +111,7 @@ async function isDatabasePopulated(databaseName: string): Promise<boolean> {
             throw e;
         }
     } else {
-        const mysql = require('mysql');
+        const mysql = require('mysql2/promise');
 
         const mysqlConnectionOptions = getMysqlConnectionOptions(databaseName);
         const connection = mysql.createConnection({

+ 1 - 1
packages/testing/package.json

@@ -52,7 +52,7 @@
         "@types/node-fetch": "^2.6.4",
         "@types/pg": "^8.11.2",
         "@vendure/core": "3.4.2",
-        "mysql": "^2.18.1",
+        "mysql2": "^3.15.0",
         "pg": "^8.11.3",
         "rimraf": "^5.0.5",
         "typescript": "5.8.2"

+ 6 - 13
packages/testing/src/initializers/mysql-initializer.ts

@@ -1,12 +1,10 @@
 import path from 'path';
-import { DataSourceOptions } from 'typeorm';
 import { MysqlConnectionOptions } from 'typeorm/driver/mysql/MysqlConnectionOptions';
-import { promisify } from 'util';
 
 import { TestDbInitializer } from './test-db-initializer';
 
 export class MysqlInitializer implements TestDbInitializer<MysqlConnectionOptions> {
-    private conn: import('mysql').Connection;
+    private conn: import('mysql2/promise').Connection;
 
     async init(
         testFileName: string,
@@ -16,9 +14,8 @@ export class MysqlInitializer implements TestDbInitializer<MysqlConnectionOption
         this.conn = await this.getMysqlConnection(connectionOptions);
         (connectionOptions as any).database = dbName;
         (connectionOptions as any).synchronize = true;
-        const query = promisify(this.conn.query).bind(this.conn);
-        await query(`DROP DATABASE IF EXISTS ${dbName}`);
-        await query(`CREATE DATABASE IF NOT EXISTS ${dbName}`);
+        await this.conn.query(`DROP DATABASE IF EXISTS ${dbName}`);
+        await this.conn.query(`CREATE DATABASE IF NOT EXISTS ${dbName}`);
         return connectionOptions;
     }
 
@@ -27,23 +24,19 @@ export class MysqlInitializer implements TestDbInitializer<MysqlConnectionOption
     }
 
     async destroy() {
-        // eslint-disable-next-line @typescript-eslint/unbound-method
-        await promisify(this.conn.end).bind(this.conn)();
+        await this.conn.end();
     }
 
     private async getMysqlConnection(
         connectionOptions: MysqlConnectionOptions,
-    ): Promise<import('mysql').Connection> {
-        const { createConnection } = await import('mysql');
+    ): Promise<import('mysql2/promise').Connection> {
+        const { createConnection } = await import('mysql2/promise');
         const conn = createConnection({
             host: connectionOptions.host,
             port: connectionOptions.port,
             user: connectionOptions.username,
             password: connectionOptions.password,
         });
-        // eslint-disable-next-line @typescript-eslint/unbound-method
-        const connect = promisify(conn.connect).bind(conn);
-        await connect();
         return conn;
     }
 

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio