diff --git a/packages/api/src/shell/deployDb.js b/packages/api/src/shell/deployDb.js index 47f73f779..5702eaa39 100644 --- a/packages/api/src/shell/deployDb.js +++ b/packages/api/src/shell/deployDb.js @@ -4,6 +4,7 @@ const { ScriptDrivedDeployer } = require('dbgate-datalib'); const connectUtility = require('../utility/connectUtility'); const requireEngineDriver = require('../utility/requireEngineDriver'); const loadModelFolder = require('../utility/loadModelFolder'); +const crypto = require('crypto'); async function deployDb({ connection, @@ -24,7 +25,8 @@ async function deployDb({ const scriptDeployer = new ScriptDrivedDeployer( dbhan, driver, - loadedDbModel ?? (await loadModelFolder(modelFolder)) + Array.isArray(loadedDbModel) ? loadedDbModel : modelFolder ? await loadModelFolder(modelFolder) : [], + crypto ); await scriptDeployer.runPre(); diff --git a/packages/datalib/src/ScriptDrivedDeployer.ts b/packages/datalib/src/ScriptDrivedDeployer.ts index 3e4a160cc..8bc6820bd 100644 --- a/packages/datalib/src/ScriptDrivedDeployer.ts +++ b/packages/datalib/src/ScriptDrivedDeployer.ts @@ -1,6 +1,5 @@ import { DatabaseModelFile, extractErrorLogData, getLogger, runCommandOnDriver, runQueryOnDriver } from 'dbgate-tools'; import { EngineDriver } from 'dbgate-types'; -import crypto from 'crypto'; import _sortBy from 'lodash/sortBy'; const logger = getLogger('ScriptDrivedDeployer'); @@ -24,7 +23,7 @@ export class ScriptDrivedDeployer { journalItems: DeployScriptJournalItem[] = []; - constructor(public dbhan: any, public driver: EngineDriver, public files: DatabaseModelFile[]) { + constructor(public dbhan: any, public driver: EngineDriver, public files: DatabaseModelFile[], public crypto: any) { this.predeploy = files.filter(x => x.name.endsWith('.predeploy.sql')); this.uninstall = files.filter(x => x.name.endsWith('.uninstall.sql')); this.install = files.filter(x => x.name.endsWith('.install.sql')); @@ -145,7 +144,7 @@ export class ScriptDrivedDeployer { } async runFile(file: DatabaseModelFile, category: string) { - const hash = crypto.createHash('md5').update(file.text.trim()).digest('hex'); + const hash = this.crypto.createHash('md5').update(file.text.trim()).digest('hex'); const journalItem = this.journalItems.find(x => x.name == file.name); const isEqual = journalItem && journalItem.script_hash == hash; @@ -166,7 +165,7 @@ export class ScriptDrivedDeployer { await this.runFileCore( uninstallFile, 'uninstall', - crypto.createHash('md5').update(uninstallFile.text.trim()).digest('hex') + this.crypto.createHash('md5').update(uninstallFile.text.trim()).digest('hex') ); } await this.runFileCore(file, category, hash); diff --git a/packages/tools/src/stringTools.ts b/packages/tools/src/stringTools.ts index bb7d7aa3e..6509cd8bd 100644 --- a/packages/tools/src/stringTools.ts +++ b/packages/tools/src/stringTools.ts @@ -312,6 +312,14 @@ export function safeJsonParse(json, defaultValue?, logError = false) { } } +export function safeCompileRegExp(regex: string, flags: string) { + try { + return new RegExp(regex, flags); + } catch (err) { + return null; + } +} + export function shouldOpenMultilineDialog(value) { if (_isString(value)) { if (value.includes('\n')) {