From bcf0bfd5ef34ca8a7591309cbabb846ae3719d86 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 19 May 2021 20:18:19 +0200 Subject: [PATCH 01/17] fix loading message --- packages/web/src/App.svelte | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte index 21dbbec7f..afc7df61d 100644 --- a/packages/web/src/App.svelte +++ b/packages/web/src/App.svelte @@ -51,7 +51,12 @@ {:else} - + {/if} {:else} From 00a169725ebba6d0d8a89be35a62643da791f9f2 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 19 May 2021 20:18:33 +0200 Subject: [PATCH 02/17] lodash optimalization --- packages/tools/src/DatabaseAnalyser.ts | 8 ++++---- packages/tools/src/SqlGenerator.ts | 13 +++++++------ packages/tools/src/settingsExtractors.ts | 7 ++++--- packages/tools/src/structureTools.ts | 4 ++-- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/packages/tools/src/DatabaseAnalyser.ts b/packages/tools/src/DatabaseAnalyser.ts index d99c31984..8891777a5 100644 --- a/packages/tools/src/DatabaseAnalyser.ts +++ b/packages/tools/src/DatabaseAnalyser.ts @@ -2,7 +2,7 @@ import { DatabaseInfo, DatabaseModification, EngineDriver } from 'dbgate-types'; import _sortBy from 'lodash/sortBy'; import _groupBy from 'lodash/groupBy'; import _pick from 'lodash/pick'; -import _ from 'lodash'; +import _compact from 'lodash/compact'; const fp_pick = arg => array => _pick(array, arg); export class DatabaseAnalyser { @@ -134,7 +134,7 @@ export class DatabaseAnalyser { return this.structure[objectTypeField] .filter(x => !items.find(y => x.objectId == y.objectId)) .map(x => ({ - oldName: _.pick(x, ['schemaName', 'pureName']), + oldName: _pick(x, ['schemaName', 'pureName']), objectId: x.objectId, action: 'remove', objectTypeField, @@ -175,7 +175,7 @@ export class DatabaseAnalyser { const action = obj ? { newName: { schemaName, pureName }, - oldName: _.pick(obj, ['schemaName', 'pureName']), + oldName: _pick(obj, ['schemaName', 'pureName']), action: 'change', objectTypeField: field, objectId, @@ -189,7 +189,7 @@ export class DatabaseAnalyser { res.push(action); } - return [..._.compact(res), ...this.getDeletedObjects(snapshot)]; + return [..._compact(res), ...this.getDeletedObjects(snapshot)]; } } diff --git a/packages/tools/src/SqlGenerator.ts b/packages/tools/src/SqlGenerator.ts index 7f25c6be0..9d7ecfe1c 100644 --- a/packages/tools/src/SqlGenerator.ts +++ b/packages/tools/src/SqlGenerator.ts @@ -7,7 +7,8 @@ import { TriggerInfo, ViewInfo, } from 'dbgate-types'; -import _ from 'lodash'; +import _flatten from 'lodash/flatten'; +import _uniqBy from 'lodash/uniqBy' import { SqlDumper } from './SqlDumper'; import { extendDatabaseInfo } from './structureTools'; @@ -122,9 +123,9 @@ export class SqlGenerator { createForeignKeys() { const fks = []; - if (this.options.createForeignKeys) fks.push(..._.flatten(this.tables.map(x => x.foreignKeys || []))); - if (this.options.createReferences) fks.push(..._.flatten(this.tables.map(x => x.dependencies || []))); - for (const fk of _.uniqBy(fks, 'constraintName')) { + if (this.options.createForeignKeys) fks.push(..._flatten(this.tables.map(x => x.foreignKeys || []))); + if (this.options.createReferences) fks.push(..._flatten(this.tables.map(x => x.dependencies || []))); + for (const fk of _uniqBy(fks, 'constraintName')) { this.dmp.createForeignKey(fk); if (this.checkDumper()) return; } @@ -152,7 +153,7 @@ export class SqlGenerator { } } if (this.options.createIndexes) { - for (const index of _.flatten(this.tables.map(x => x.indexes || []))) { + for (const index of _flatten(this.tables.map(x => x.indexes || []))) { this.dmp.createIndex(index); } } @@ -204,7 +205,7 @@ export class SqlGenerator { dropTables() { if (this.options.dropReferences) { - for (const fk of _.flatten(this.tables.map(x => x.dependencies || []))) { + for (const fk of _flatten(this.tables.map(x => x.dependencies || []))) { this.dmp.dropForeignKey(fk); } } diff --git a/packages/tools/src/settingsExtractors.ts b/packages/tools/src/settingsExtractors.ts index 843a4442b..a5a9c0dfb 100644 --- a/packages/tools/src/settingsExtractors.ts +++ b/packages/tools/src/settingsExtractors.ts @@ -1,11 +1,12 @@ -import _ from 'lodash'; +import _isNaN from 'lodash/isNaN'; +import _isNumber from 'lodash/isNumber'; export function extractIntSettingsValue(settings, name, defaultValue, min = null, max = null) { const parsed = parseInt(settings[name]); - if (_.isNaN(parsed)) { + if (_isNaN(parsed)) { return defaultValue; } - if (_.isNumber(parsed)) { + if (_isNumber(parsed)) { if (min != null && parsed < min) return min; if (max != null && parsed > max) return max; return parsed; diff --git a/packages/tools/src/structureTools.ts b/packages/tools/src/structureTools.ts index 38d1c45ea..6897090b9 100644 --- a/packages/tools/src/structureTools.ts +++ b/packages/tools/src/structureTools.ts @@ -1,8 +1,8 @@ import { DatabaseInfo } from 'dbgate-types'; -import _ from 'lodash'; +import _flatten from 'lodash/flatten'; export function addTableDependencies(db: DatabaseInfo): DatabaseInfo { - const allForeignKeys = _.flatten(db.tables.map(x => x.foreignKeys || [])); + const allForeignKeys = _flatten(db.tables.map(x => x.foreignKeys || [])); return { ...db, tables: db.tables.map(table => ({ From 62c529cf50f8dd28a058c1812f8c424b52156ba1 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 19 May 2021 20:27:32 +0200 Subject: [PATCH 03/17] v4.2.1-beta.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bd40048d4..935a6a148 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "4.2.1-beta.1", + "version": "4.2.1-beta.2", "name": "dbgate-all", "workspaces": [ "packages/*", From 395b0a91b08eeb9fc574e97541ee1d815cc395a5 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 19 May 2021 21:57:28 +0200 Subject: [PATCH 04/17] changedlog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 094c306fa..6107d7aeb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # ChangeLog +### 4.2.1 +- FIXED: Fixed+optimalized app startup (esp. on Windows) + ### 4.2.0 - ADDED: Support of SQLite database - ADDED: Support of Amazon Redshift database From 42e573a3ae43e3567ed7bf4db24db16442739c4f Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 19 May 2021 21:57:40 +0200 Subject: [PATCH 05/17] v4.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 935a6a148..c53d8a4e4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "4.2.1-beta.2", + "version": "4.2.1", "name": "dbgate-all", "workspaces": [ "packages/*", From 0200c7c78be1efb5a2bee38ec2a93df6be4abbba Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 20 May 2021 07:42:25 +0200 Subject: [PATCH 06/17] further optimalization of frontend plugins --- .../src/frontend/Dumper.js | 5 ++--- .../src/frontend/driver.js | 2 +- .../src/frontend/MsSqlDumper.js | 19 ++++++++++++------- .../src/frontend/driver.js | 2 +- .../src/frontend/Dumper.js | 2 +- .../src/frontend/drivers.js | 2 +- .../src/frontend/Dumper.js | 2 +- .../src/frontend/drivers.js | 2 +- .../src/frontend/Dumper.js | 5 ++--- .../src/frontend/driver.js | 2 +- 10 files changed, 23 insertions(+), 20 deletions(-) diff --git a/plugins/dbgate-plugin-mongo/src/frontend/Dumper.js b/plugins/dbgate-plugin-mongo/src/frontend/Dumper.js index afcc64731..0df29d932 100644 --- a/plugins/dbgate-plugin-mongo/src/frontend/Dumper.js +++ b/plugins/dbgate-plugin-mongo/src/frontend/Dumper.js @@ -1,6 +1,5 @@ -const { SqlDumper } = require('dbgate-tools'); +const SqlDumper = require('dbgate-tools/lib/SqlDumper'); -class Dumper extends SqlDumper { -} +class Dumper extends SqlDumper {} module.exports = Dumper; diff --git a/plugins/dbgate-plugin-mongo/src/frontend/driver.js b/plugins/dbgate-plugin-mongo/src/frontend/driver.js index aa905f1c6..ef9583536 100644 --- a/plugins/dbgate-plugin-mongo/src/frontend/driver.js +++ b/plugins/dbgate-plugin-mongo/src/frontend/driver.js @@ -1,4 +1,4 @@ -const { driverBase } = require('dbgate-tools'); +const driverBase = require('dbgate-tools/lib/driverBase'); const Dumper = require('./Dumper'); const mongoIdRegex = /^[0-9a-f]{24}$/; diff --git a/plugins/dbgate-plugin-mssql/src/frontend/MsSqlDumper.js b/plugins/dbgate-plugin-mssql/src/frontend/MsSqlDumper.js index 8b6459b82..b61fa5694 100644 --- a/plugins/dbgate-plugin-mssql/src/frontend/MsSqlDumper.js +++ b/plugins/dbgate-plugin-mssql/src/frontend/MsSqlDumper.js @@ -1,4 +1,4 @@ -const { SqlDumper } = require('dbgate-tools'); +const SqlDumper = require('dbgate-tools/lib/SqlDumper'); class MsSqlDumper extends SqlDumper { autoIncrement() { @@ -67,12 +67,12 @@ class MsSqlDumper extends SqlDumper { dropDefault(col) { if (col.defaultConstraint) { - this.putCmd("^alter ^table %f ^drop ^constraint %i", col, col.defaultConstraint); + this.putCmd('^alter ^table %f ^drop ^constraint %i', col, col.defaultConstraint); } } guessDefaultName(col) { - return col.defaultConstraint || `DF${col.schemaName || 'dbo'}_${col.pureName}_col.columnName` + return col.defaultConstraint || `DF${col.schemaName || 'dbo'}_${col.pureName}_col.columnName`; } createDefault(col) { @@ -80,7 +80,7 @@ class MsSqlDumper extends SqlDumper { const defsql = col.defaultValue; if (!defsql) { const defname = this.guessDefaultName(col); - this.putCmd("^alter ^table %f ^add ^constraint %i ^default %s for %i", col, defname, defsql, col.columnName); + this.putCmd('^alter ^table %f ^add ^constraint %i ^default %s for %i', col, defname, defsql, col.columnName); } } @@ -89,8 +89,14 @@ class MsSqlDumper extends SqlDumper { } renameConstraint(cnt, newname) { - if (cnt.constraintType == 'index') this.putCmd("^execute sp_rename '%f.%i', '%s', 'INDEX'", cnt, cnt.constraintName, newname); - else this.putCmd("^execute sp_rename '%f', '%s', 'OBJECT'", { schemaName: cnt.schemaName, pureName: cnt.constraintName }, newname); + if (cnt.constraintType == 'index') + this.putCmd("^execute sp_rename '%f.%i', '%s', 'INDEX'", cnt, cnt.constraintName, newname); + else + this.putCmd( + "^execute sp_rename '%f', '%s', 'OBJECT'", + { schemaName: cnt.schemaName, pureName: cnt.constraintName }, + newname + ); } } @@ -109,5 +115,4 @@ MsSqlDumper.prototype.changeTriggerSchema = MsSqlDumper.prototype.changeObjectSc MsSqlDumper.prototype.renameTable = MsSqlDumper.prototype.renameObject; MsSqlDumper.prototype.changeTableSchema = MsSqlDumper.prototype.changeObjectSchema; - module.exports = MsSqlDumper; diff --git a/plugins/dbgate-plugin-mssql/src/frontend/driver.js b/plugins/dbgate-plugin-mssql/src/frontend/driver.js index 19ecd6fd9..247704f3d 100644 --- a/plugins/dbgate-plugin-mssql/src/frontend/driver.js +++ b/plugins/dbgate-plugin-mssql/src/frontend/driver.js @@ -1,4 +1,4 @@ -const { driverBase } = require('dbgate-tools'); +const driverBase = require('dbgate-tools/lib/driverBase'); const MsSqlDumper = require('./MsSqlDumper'); /** @type {import('dbgate-types').SqlDialect} */ diff --git a/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js b/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js index 993cf8249..91813fa7f 100644 --- a/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js +++ b/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js @@ -1,4 +1,4 @@ -const { SqlDumper } = require('dbgate-tools'); +const SqlDumper = require('dbgate-tools/lib/SqlDumper'); class Dumper extends SqlDumper { /** @param type {import('dbgate-types').TransformType} */ diff --git a/plugins/dbgate-plugin-mysql/src/frontend/drivers.js b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js index 4aa2df0e6..9c4d5b539 100644 --- a/plugins/dbgate-plugin-mysql/src/frontend/drivers.js +++ b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js @@ -1,4 +1,4 @@ -const { driverBase } = require('dbgate-tools'); +const driverBase = require('dbgate-tools/lib/driverBase'); const Dumper = require('./Dumper'); /** @type {import('dbgate-types').SqlDialect} */ diff --git a/plugins/dbgate-plugin-postgres/src/frontend/Dumper.js b/plugins/dbgate-plugin-postgres/src/frontend/Dumper.js index fb86e4c42..0205cd825 100644 --- a/plugins/dbgate-plugin-postgres/src/frontend/Dumper.js +++ b/plugins/dbgate-plugin-postgres/src/frontend/Dumper.js @@ -1,4 +1,4 @@ -const { SqlDumper } = require('dbgate-tools'); +const SqlDumper = require('dbgate-tools/lib/SqlDumper'); class Dumper extends SqlDumper { /** @param type {import('dbgate-types').TransformType} */ diff --git a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js index 4924333ae..22c7c836e 100644 --- a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js +++ b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js @@ -1,4 +1,4 @@ -const { driverBase } = require('dbgate-tools'); +const driverBase = require('dbgate-tools/lib/driverBase'); const Dumper = require('./Dumper'); /** @type {import('dbgate-types').SqlDialect} */ diff --git a/plugins/dbgate-plugin-sqlite/src/frontend/Dumper.js b/plugins/dbgate-plugin-sqlite/src/frontend/Dumper.js index afcc64731..0df29d932 100644 --- a/plugins/dbgate-plugin-sqlite/src/frontend/Dumper.js +++ b/plugins/dbgate-plugin-sqlite/src/frontend/Dumper.js @@ -1,6 +1,5 @@ -const { SqlDumper } = require('dbgate-tools'); +const SqlDumper = require('dbgate-tools/lib/SqlDumper'); -class Dumper extends SqlDumper { -} +class Dumper extends SqlDumper {} module.exports = Dumper; diff --git a/plugins/dbgate-plugin-sqlite/src/frontend/driver.js b/plugins/dbgate-plugin-sqlite/src/frontend/driver.js index 1d614be4e..1bd0d31ef 100644 --- a/plugins/dbgate-plugin-sqlite/src/frontend/driver.js +++ b/plugins/dbgate-plugin-sqlite/src/frontend/driver.js @@ -1,4 +1,4 @@ -const { driverBase } = require('dbgate-tools'); +const driverBase = require('dbgate-tools/lib/driverBase'); const Dumper = require('./Dumper'); function getDatabaseFileLabel(databaseFile) { From e43fa96e349f9d91e7f464b0d8c8dfeaa4fb913f Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 20 May 2021 08:55:50 +0200 Subject: [PATCH 07/17] one more optimalization of plugin size & load time --- packages/api/src/index.js | 3 +++ .../web/src/plugins/PluginsProvider.svelte | 3 +++ .../webpack-frontend.config.js | 6 +++++ .../webpack-frontend.config.js | 6 +++++ .../src/frontend/Dumper.js | 2 +- .../src/frontend/driver.js | 2 +- .../webpack-frontend.config.js | 6 +++++ .../src/frontend/MsSqlDumper.js | 2 +- .../src/frontend/driver.js | 2 +- .../webpack-frontend.config.js | 6 +++++ .../src/frontend/Dumper.js | 2 +- .../src/frontend/drivers.js | 2 +- .../webpack-frontend.config.js | 6 +++++ .../src/frontend/Dumper.js | 2 +- .../src/frontend/drivers.js | 2 +- .../webpack-frontend.config.js | 22 ++++++++++++------- .../src/frontend/Dumper.js | 2 +- .../src/frontend/driver.js | 2 +- .../webpack-frontend.config.js | 22 ++++++++++++------- 19 files changed, 74 insertions(+), 26 deletions(-) diff --git a/packages/api/src/index.js b/packages/api/src/index.js index 87e072da4..9da36f975 100644 --- a/packages/api/src/index.js +++ b/packages/api/src/index.js @@ -1,5 +1,8 @@ const shell = require('./shell'); const processArgs = require('./utility/processArgs'); +const dbgateTools = require('dbgate-tools'); + +global['DBGATE_TOOLS'] = dbgateTools; if (processArgs.startProcess) { const proc = require('./proc'); diff --git a/packages/web/src/plugins/PluginsProvider.svelte b/packages/web/src/plugins/PluginsProvider.svelte index e8b12e1c4..a6ebe00a1 100644 --- a/packages/web/src/plugins/PluginsProvider.svelte +++ b/packages/web/src/plugins/PluginsProvider.svelte @@ -4,6 +4,8 @@ }; async function loadPlugins(pluginsDict, installedPlugins) { + window['DBGATE_TOOLS'] = dbgateTools; + const newPlugins = {}; for (const installed of installedPlugins || []) { if (!_.keys(pluginsDict).includes(installed.name)) { @@ -63,6 +65,7 @@ import { useInstalledPlugins } from '../utility/metadataLoaders'; import { buildFileFormats } from './fileformats'; import { buildThemes } from './themes'; + import dbgateTools from 'dbgate-tools'; let pluginsDict = {}; const installedPlugins = useInstalledPlugins(); diff --git a/plugins/dbgate-plugin-csv/webpack-frontend.config.js b/plugins/dbgate-plugin-csv/webpack-frontend.config.js index db07de291..e3e28d003 100644 --- a/plugins/dbgate-plugin-csv/webpack-frontend.config.js +++ b/plugins/dbgate-plugin-csv/webpack-frontend.config.js @@ -15,6 +15,12 @@ var config = { library: 'plugin', }, + plugins: [ + new webpack.DefinePlugin({ + 'global.DBGATE_TOOLS': 'window.DBGATE_TOOLS', + }), + ], + // uncomment for disable minimalization // optimization: { // minimize: false, diff --git a/plugins/dbgate-plugin-excel/webpack-frontend.config.js b/plugins/dbgate-plugin-excel/webpack-frontend.config.js index db07de291..e3e28d003 100644 --- a/plugins/dbgate-plugin-excel/webpack-frontend.config.js +++ b/plugins/dbgate-plugin-excel/webpack-frontend.config.js @@ -15,6 +15,12 @@ var config = { library: 'plugin', }, + plugins: [ + new webpack.DefinePlugin({ + 'global.DBGATE_TOOLS': 'window.DBGATE_TOOLS', + }), + ], + // uncomment for disable minimalization // optimization: { // minimize: false, diff --git a/plugins/dbgate-plugin-mongo/src/frontend/Dumper.js b/plugins/dbgate-plugin-mongo/src/frontend/Dumper.js index 0df29d932..4a4059590 100644 --- a/plugins/dbgate-plugin-mongo/src/frontend/Dumper.js +++ b/plugins/dbgate-plugin-mongo/src/frontend/Dumper.js @@ -1,4 +1,4 @@ -const SqlDumper = require('dbgate-tools/lib/SqlDumper'); +const { SqlDumper } = global.DBGATE_TOOLS; class Dumper extends SqlDumper {} diff --git a/plugins/dbgate-plugin-mongo/src/frontend/driver.js b/plugins/dbgate-plugin-mongo/src/frontend/driver.js index ef9583536..83ca98006 100644 --- a/plugins/dbgate-plugin-mongo/src/frontend/driver.js +++ b/plugins/dbgate-plugin-mongo/src/frontend/driver.js @@ -1,4 +1,4 @@ -const driverBase = require('dbgate-tools/lib/driverBase'); +const { driverBase } = global.DBGATE_TOOLS; const Dumper = require('./Dumper'); const mongoIdRegex = /^[0-9a-f]{24}$/; diff --git a/plugins/dbgate-plugin-mongo/webpack-frontend.config.js b/plugins/dbgate-plugin-mongo/webpack-frontend.config.js index db07de291..e3e28d003 100644 --- a/plugins/dbgate-plugin-mongo/webpack-frontend.config.js +++ b/plugins/dbgate-plugin-mongo/webpack-frontend.config.js @@ -15,6 +15,12 @@ var config = { library: 'plugin', }, + plugins: [ + new webpack.DefinePlugin({ + 'global.DBGATE_TOOLS': 'window.DBGATE_TOOLS', + }), + ], + // uncomment for disable minimalization // optimization: { // minimize: false, diff --git a/plugins/dbgate-plugin-mssql/src/frontend/MsSqlDumper.js b/plugins/dbgate-plugin-mssql/src/frontend/MsSqlDumper.js index b61fa5694..428e0d6b0 100644 --- a/plugins/dbgate-plugin-mssql/src/frontend/MsSqlDumper.js +++ b/plugins/dbgate-plugin-mssql/src/frontend/MsSqlDumper.js @@ -1,4 +1,4 @@ -const SqlDumper = require('dbgate-tools/lib/SqlDumper'); +const { SqlDumper } = global.DBGATE_TOOLS; class MsSqlDumper extends SqlDumper { autoIncrement() { diff --git a/plugins/dbgate-plugin-mssql/src/frontend/driver.js b/plugins/dbgate-plugin-mssql/src/frontend/driver.js index 247704f3d..1b8a04156 100644 --- a/plugins/dbgate-plugin-mssql/src/frontend/driver.js +++ b/plugins/dbgate-plugin-mssql/src/frontend/driver.js @@ -1,4 +1,4 @@ -const driverBase = require('dbgate-tools/lib/driverBase'); +const { driverBase } = global.DBGATE_TOOLS; const MsSqlDumper = require('./MsSqlDumper'); /** @type {import('dbgate-types').SqlDialect} */ diff --git a/plugins/dbgate-plugin-mssql/webpack-frontend.config.js b/plugins/dbgate-plugin-mssql/webpack-frontend.config.js index 2703ab7e6..8d3b733f9 100644 --- a/plugins/dbgate-plugin-mssql/webpack-frontend.config.js +++ b/plugins/dbgate-plugin-mssql/webpack-frontend.config.js @@ -15,6 +15,12 @@ var config = { library: 'plugin', }, + plugins: [ + new webpack.DefinePlugin({ + 'global.DBGATE_TOOLS': 'window.DBGATE_TOOLS', + }), + ], + // optimization: { // minimize: false, // }, diff --git a/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js b/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js index 91813fa7f..65e21801d 100644 --- a/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js +++ b/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js @@ -1,4 +1,4 @@ -const SqlDumper = require('dbgate-tools/lib/SqlDumper'); +const { SqlDumper } = global.DBGATE_TOOLS; class Dumper extends SqlDumper { /** @param type {import('dbgate-types').TransformType} */ diff --git a/plugins/dbgate-plugin-mysql/src/frontend/drivers.js b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js index 9c4d5b539..78448d206 100644 --- a/plugins/dbgate-plugin-mysql/src/frontend/drivers.js +++ b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js @@ -1,4 +1,4 @@ -const driverBase = require('dbgate-tools/lib/driverBase'); +const { driverBase } = global.DBGATE_TOOLS; const Dumper = require('./Dumper'); /** @type {import('dbgate-types').SqlDialect} */ diff --git a/plugins/dbgate-plugin-mysql/webpack-frontend.config.js b/plugins/dbgate-plugin-mysql/webpack-frontend.config.js index db07de291..e3e28d003 100644 --- a/plugins/dbgate-plugin-mysql/webpack-frontend.config.js +++ b/plugins/dbgate-plugin-mysql/webpack-frontend.config.js @@ -15,6 +15,12 @@ var config = { library: 'plugin', }, + plugins: [ + new webpack.DefinePlugin({ + 'global.DBGATE_TOOLS': 'window.DBGATE_TOOLS', + }), + ], + // uncomment for disable minimalization // optimization: { // minimize: false, diff --git a/plugins/dbgate-plugin-postgres/src/frontend/Dumper.js b/plugins/dbgate-plugin-postgres/src/frontend/Dumper.js index 0205cd825..36182f71f 100644 --- a/plugins/dbgate-plugin-postgres/src/frontend/Dumper.js +++ b/plugins/dbgate-plugin-postgres/src/frontend/Dumper.js @@ -1,4 +1,4 @@ -const SqlDumper = require('dbgate-tools/lib/SqlDumper'); +const { SqlDumper } = global.DBGATE_TOOLS; class Dumper extends SqlDumper { /** @param type {import('dbgate-types').TransformType} */ diff --git a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js index 22c7c836e..23e3befa1 100644 --- a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js +++ b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js @@ -1,4 +1,4 @@ -const driverBase = require('dbgate-tools/lib/driverBase'); +const { driverBase } = global.DBGATE_TOOLS; const Dumper = require('./Dumper'); /** @type {import('dbgate-types').SqlDialect} */ diff --git a/plugins/dbgate-plugin-postgres/webpack-frontend.config.js b/plugins/dbgate-plugin-postgres/webpack-frontend.config.js index db07de291..e1c978dd5 100644 --- a/plugins/dbgate-plugin-postgres/webpack-frontend.config.js +++ b/plugins/dbgate-plugin-postgres/webpack-frontend.config.js @@ -1,20 +1,26 @@ -var webpack = require("webpack"); -var path = require("path"); +var webpack = require('webpack'); +var path = require('path'); var config = { - context: __dirname + "/src/frontend", + context: __dirname + '/src/frontend', entry: { - app: "./index.js", + app: './index.js', }, - target: "web", + target: 'web', output: { - path: path.resolve(__dirname, "dist"), - filename: "frontend.js", - libraryTarget: "var", + path: path.resolve(__dirname, 'dist'), + filename: 'frontend.js', + libraryTarget: 'var', library: 'plugin', }, + plugins: [ + new webpack.DefinePlugin({ + 'global.DBGATE_TOOLS': 'window.DBGATE_TOOLS', + }), + ], + // uncomment for disable minimalization // optimization: { // minimize: false, diff --git a/plugins/dbgate-plugin-sqlite/src/frontend/Dumper.js b/plugins/dbgate-plugin-sqlite/src/frontend/Dumper.js index 0df29d932..4a4059590 100644 --- a/plugins/dbgate-plugin-sqlite/src/frontend/Dumper.js +++ b/plugins/dbgate-plugin-sqlite/src/frontend/Dumper.js @@ -1,4 +1,4 @@ -const SqlDumper = require('dbgate-tools/lib/SqlDumper'); +const { SqlDumper } = global.DBGATE_TOOLS; class Dumper extends SqlDumper {} diff --git a/plugins/dbgate-plugin-sqlite/src/frontend/driver.js b/plugins/dbgate-plugin-sqlite/src/frontend/driver.js index 1bd0d31ef..98b0520b4 100644 --- a/plugins/dbgate-plugin-sqlite/src/frontend/driver.js +++ b/plugins/dbgate-plugin-sqlite/src/frontend/driver.js @@ -1,4 +1,4 @@ -const driverBase = require('dbgate-tools/lib/driverBase'); +const { driverBase } = global.DBGATE_TOOLS; const Dumper = require('./Dumper'); function getDatabaseFileLabel(databaseFile) { diff --git a/plugins/dbgate-plugin-sqlite/webpack-frontend.config.js b/plugins/dbgate-plugin-sqlite/webpack-frontend.config.js index db07de291..e1c978dd5 100644 --- a/plugins/dbgate-plugin-sqlite/webpack-frontend.config.js +++ b/plugins/dbgate-plugin-sqlite/webpack-frontend.config.js @@ -1,20 +1,26 @@ -var webpack = require("webpack"); -var path = require("path"); +var webpack = require('webpack'); +var path = require('path'); var config = { - context: __dirname + "/src/frontend", + context: __dirname + '/src/frontend', entry: { - app: "./index.js", + app: './index.js', }, - target: "web", + target: 'web', output: { - path: path.resolve(__dirname, "dist"), - filename: "frontend.js", - libraryTarget: "var", + path: path.resolve(__dirname, 'dist'), + filename: 'frontend.js', + libraryTarget: 'var', library: 'plugin', }, + plugins: [ + new webpack.DefinePlugin({ + 'global.DBGATE_TOOLS': 'window.DBGATE_TOOLS', + }), + ], + // uncomment for disable minimalization // optimization: { // minimize: false, From 25881e80dba679c64e8a558c9e0b23a7c10a71e8 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 20 May 2021 08:56:17 +0200 Subject: [PATCH 08/17] v4.2.2-beta.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c53d8a4e4..608cbb4e8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "4.2.1", + "version": "4.2.2-beta.1", "name": "dbgate-all", "workspaces": [ "packages/*", From b5fe8508b15b96e0686d547b9071601f66e6d928 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 20 May 2021 10:22:08 +0200 Subject: [PATCH 09/17] [ackaged plugins for electron optimalization --- .github/workflows/build-app-beta.yaml | 3 ++ .github/workflows/build-app.yaml | 3 ++ .gitignore | 1 + fillPackagedPlugins.js | 23 +++++++++++++ package.json | 4 ++- packages/api/src/controllers/plugins.js | 44 +++++++++++++++++-------- resetPackagedPlugins.js | 3 ++ 7 files changed, 67 insertions(+), 14 deletions(-) create mode 100644 fillPackagedPlugins.js create mode 100644 resetPackagedPlugins.js diff --git a/.github/workflows/build-app-beta.yaml b/.github/workflows/build-app-beta.yaml index 7f33bd52e..33feb1c8f 100644 --- a/.github/workflows/build-app-beta.yaml +++ b/.github/workflows/build-app-beta.yaml @@ -35,6 +35,9 @@ jobs: - name: fillNativeModulesElectron run: | yarn fillNativeModulesElectron + - name: fillPackagedPlugins + run: | + yarn fillPackagedPlugins - name: Install Snapcraft if: matrix.os == 'ubuntu-18.04' uses: samuelmeuli/action-snapcraft@v1 diff --git a/.github/workflows/build-app.yaml b/.github/workflows/build-app.yaml index 5af9d11b1..86368c37d 100644 --- a/.github/workflows/build-app.yaml +++ b/.github/workflows/build-app.yaml @@ -39,6 +39,9 @@ jobs: - name: fillNativeModulesElectron run: | yarn fillNativeModulesElectron + - name: fillPackagedPlugins + run: | + yarn fillPackagedPlugins - name: Install Snapcraft if: matrix.os == 'ubuntu-18.04' uses: samuelmeuli/action-snapcraft@v1 diff --git a/.gitignore b/.gitignore index 718d20748..686ceb6c6 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,5 @@ yarn-debug.log* yarn-error.log* app/src/nativeModulesContent.js packages/api/src/nativeModulesContent.js +packages/api/src/packagedPluginsContent.js .VSCodeCounter \ No newline at end of file diff --git a/fillPackagedPlugins.js b/fillPackagedPlugins.js new file mode 100644 index 000000000..43ccd79ae --- /dev/null +++ b/fillPackagedPlugins.js @@ -0,0 +1,23 @@ +const fs = require('fs'); +const path = require('path'); + +function load() { + const plugins = {}; + + for (const packageName of fs.readdirSync('plugins')) { + if (!packageName.startsWith('dbgate-plugin-')) continue; + const dir = path.join('plugins', packageName); + const frontend = fs.readFileSync(path.join(dir, 'dist', 'frontend.js'), 'utf-8'); + const readme = fs.readFileSync(path.join(dir, 'README.md'), 'utf-8'); + const manifest = JSON.parse(fs.readFileSync(path.join(dir, 'package.json'), 'utf-8')); + plugins[packageName] = { + manifest, + frontend, + readme, + }; + } + + return plugins; +} + +fs.writeFileSync('packages/api/src/packagedPluginsContent.js', `module.exports = () => (${JSON.stringify(load())});`); diff --git a/package.json b/package.json index 608cbb4e8..dd82107da 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,8 @@ "generatePadFile": "node generatePadFile", "fillNativeModules": "node fillNativeModules", "fillNativeModulesElectron": "node fillNativeModules --electron", + "fillPackagedPlugins": "node fillPackagedPlugins", + "resetPackagedPlugins": "node resetPackagedPlugins", "prettier": "prettier --write packages/api/src && prettier --write packages/datalib/src && prettier --write packages/filterparser/src && prettier --write packages/sqltree/src && prettier --write packages/tools/src && prettier --write packages/types && prettier --write packages/web/src && prettier --write app/src", "copy:docker:build": "copyfiles packages/api/dist/* docker -f && copyfiles packages/web/public/* docker -u 2 && copyfiles \"packages/web/public/**/*\" docker -u 2 && copyfiles \"plugins/dist/**/*\" docker/plugins -u 2", "prepare:docker": "yarn plugins:copydist && yarn build:web:docker && yarn build:api && yarn copy:docker:build", @@ -40,7 +42,7 @@ "ts:api": "yarn workspace dbgate-api ts", "ts:web": "yarn workspace dbgate-web ts", "ts": "yarn ts:api && yarn ts:web", - "postinstall": "yarn build:lib && patch-package && yarn fillNativeModules && yarn build:plugins:frontend" + "postinstall": "yarn resetPackagedPlugins && yarn build:lib && patch-package && yarn fillNativeModules && yarn build:plugins:frontend" }, "dependencies": { "concurrently": "^5.1.0", diff --git a/packages/api/src/controllers/plugins.js b/packages/api/src/controllers/plugins.js index 6800ba791..c45545285 100644 --- a/packages/api/src/controllers/plugins.js +++ b/packages/api/src/controllers/plugins.js @@ -9,10 +9,17 @@ const requirePlugin = require('../shell/requirePlugin'); const downloadPackage = require('../utility/downloadPackage'); const hasPermission = require('../utility/hasPermission'); const _ = require('lodash'); +const packagedPluginsContent = require('../packagedPluginsContent'); module.exports = { script_meta: 'get', async script({ packageName }) { + const packagedContent = packagedPluginsContent(); + + if (packagedContent && packagedContent[packageName]) { + return packagedContent[packageName].frontend; + } + const file1 = path.join(packagedPluginsDir(), packageName, 'dist', 'frontend.js'); const file2 = path.join(pluginsdir(), packageName, 'dist', 'frontend.js'); // @ts-ignore @@ -58,26 +65,37 @@ module.exports = { installed_meta: 'get', async installed() { - const files1 = await fs.readdir(packagedPluginsDir()); + const packagedContent = packagedPluginsContent(); + + const files1 = packagedContent ? _.keys(packagedContent) : await fs.readdir(packagedPluginsDir()); const files2 = await fs.readdir(pluginsdir()); const res = []; for (const packageName of _.union(files1, files2)) { if (!/^dbgate-plugin-.*$/.test(packageName)) continue; try { - const isPackaged = files1.includes(packageName); - const manifest = await fs - .readFile(path.join(isPackaged ? packagedPluginsDir() : pluginsdir(), packageName, 'package.json'), { - encoding: 'utf-8', - }) - .then(x => JSON.parse(x)); - const readmeFile = path.join(isPackaged ? packagedPluginsDir() : pluginsdir(), packageName, 'README.md'); - // @ts-ignore - if (await fs.exists(readmeFile)) { - manifest.readme = await fs.readFile(readmeFile, { encoding: 'utf-8' }); + if (packagedContent && packagedContent[packageName]) { + const manifest = { + ...packagedContent[packageName].manifest, + }; + manifest.isPackaged = true; + manifest.readme = packagedContent[packageName].readme; + res.push(manifest); + } else { + const isPackaged = files1.includes(packageName); + const manifest = await fs + .readFile(path.join(isPackaged ? packagedPluginsDir() : pluginsdir(), packageName, 'package.json'), { + encoding: 'utf-8', + }) + .then(x => JSON.parse(x)); + const readmeFile = path.join(isPackaged ? packagedPluginsDir() : pluginsdir(), packageName, 'README.md'); + // @ts-ignore + if (await fs.exists(readmeFile)) { + manifest.readme = await fs.readFile(readmeFile, { encoding: 'utf-8' }); + } + manifest.isPackaged = isPackaged; + res.push(manifest); } - manifest.isPackaged = isPackaged; - res.push(manifest); } catch (err) { console.log(`Skipped plugin ${packageName}, error:`, err.message); } diff --git a/resetPackagedPlugins.js b/resetPackagedPlugins.js new file mode 100644 index 000000000..f140b1a14 --- /dev/null +++ b/resetPackagedPlugins.js @@ -0,0 +1,3 @@ +const fs = require('fs'); + +fs.writeFileSync('packages/api/src/packagedPluginsContent.js', `module.exports = () => null;`); From 11fd2d1d8a153b6f4d4fd79934107ea0a17bf810 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 20 May 2021 10:23:12 +0200 Subject: [PATCH 10/17] description --- app/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/package.json b/app/package.json index b327f56b4..24f72c60b 100644 --- a/app/package.json +++ b/app/package.json @@ -39,7 +39,7 @@ "icon": "icon.png", "artifactName": "dbgate-linux-${version}.${ext}", "category": "Development", - "synopsis": "Database administration tool for MS SQL, MySQL and PostgreSQL", + "synopsis": "Database manager for SQL Server, MySQL, PostgreSQL, MongoDB and SQLite", "publish": [ "github" ] From 29a77cc0539b8f97f4424c9f53a2f1f9dbcec022 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 20 May 2021 10:30:35 +0200 Subject: [PATCH 11/17] zero loading info --- packages/web/public/index.html | 16 ++++++++++++++++ packages/web/src/App.svelte | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/packages/web/public/index.html b/packages/web/public/index.html index 55ed2489f..1a4b3dfc2 100644 --- a/packages/web/public/index.html +++ b/packages/web/public/index.html @@ -21,9 +21,25 @@ + + +
+ Loading DbGate App ... +
\ No newline at end of file diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte index afc7df61d..5b5442323 100644 --- a/packages/web/src/App.svelte +++ b/packages/web/src/App.svelte @@ -33,6 +33,11 @@ onMount(loadApi); + onMount(() => { + const removed = document.getElementById('starting_dbgate_zero'); + if (removed) removed.remove(); + }); + $: { if (loadedApi && $loadingPluginStore?.loaded) { setAppLoaded(); From d453e52ff369ae3d2df6f67a116484508ebad69d Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 20 May 2021 10:30:58 +0200 Subject: [PATCH 12/17] v4.2.2-beta.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dd82107da..344116af8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "4.2.2-beta.1", + "version": "4.2.2-beta.2", "name": "dbgate-all", "workspaces": [ "packages/*", From 19d135e435c0e2be5b002f7a59233a55abb00033 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 20 May 2021 10:47:04 +0200 Subject: [PATCH 13/17] sqlite plugin package.json --- plugins/dbgate-plugin-sqlite/package.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/dbgate-plugin-sqlite/package.json b/plugins/dbgate-plugin-sqlite/package.json index 97379471d..276498334 100644 --- a/plugins/dbgate-plugin-sqlite/package.json +++ b/plugins/dbgate-plugin-sqlite/package.json @@ -2,6 +2,13 @@ "name": "dbgate-plugin-sqlite", "main": "dist/backend.js", "version": "1.0.0", + "homepage": "https://dbgate.org", + "description": "SQLite connect plugin for DbGate", + "repository": { + "type": "git", + "url": "https://github.com/dbgate/dbgate" + }, + "author": "Jan Prochazka", "license": "MIT", "keywords": [ "dbgate", @@ -9,7 +16,8 @@ "sqlite" ], "files": [ - "dist" + "dist", + "icon.svg" ], "scripts": { "build:frontend": "webpack --config webpack-frontend.config", From 7dd9e9a9b1c651a342f9ae1ac5fdc8d829b36b93 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 20 May 2021 10:48:02 +0200 Subject: [PATCH 14/17] v4.2.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 344116af8..6e4cf1ea4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "4.2.2-beta.2", + "version": "4.2.2", "name": "dbgate-all", "workspaces": [ "packages/*", From 09498f2ac3d4e990a504a5cba36f3809c207091b Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 20 May 2021 10:59:06 +0200 Subject: [PATCH 15/17] fix --- CHANGELOG.md | 3 +++ setCurrentVersion.js | 1 + 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6107d7aeb..ffb14e6c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # ChangeLog +### 4.2.2 +- CHANGED: Further startup optimalization (approx. 2 times quicker start of electron app) + ### 4.2.1 - FIXED: Fixed+optimalized app startup (esp. on Windows) diff --git a/setCurrentVersion.js b/setCurrentVersion.js index b92057691..a774f4898 100644 --- a/setCurrentVersion.js +++ b/setCurrentVersion.js @@ -46,3 +46,4 @@ changePackageFile('plugins/dbgate-plugin-mssql', json.version); changePackageFile('plugins/dbgate-plugin-mysql', json.version); changePackageFile('plugins/dbgate-plugin-mongo', json.version); changePackageFile('plugins/dbgate-plugin-postgres', json.version); +changePackageFile('plugins/dbgate-plugin-sqlite', json.version); From 688086e00f3adcc8e658f50a64af048f3eb692fd Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 20 May 2021 10:59:51 +0200 Subject: [PATCH 16/17] fix --- plugins/dbgate-plugin-sqlite/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/dbgate-plugin-sqlite/package.json b/plugins/dbgate-plugin-sqlite/package.json index 276498334..0d09dcf96 100644 --- a/plugins/dbgate-plugin-sqlite/package.json +++ b/plugins/dbgate-plugin-sqlite/package.json @@ -1,7 +1,7 @@ { "name": "dbgate-plugin-sqlite", "main": "dist/backend.js", - "version": "1.0.0", + "version": "4.1.1", "homepage": "https://dbgate.org", "description": "SQLite connect plugin for DbGate", "repository": { From cc6bcfb4b379f1299b3eb13bc2920022955febca Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 20 May 2021 14:11:33 +0200 Subject: [PATCH 17/17] funding.yaml --- .github/FUNDING.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..c4e3047e4 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: dbgate +open_collective: dbgate