diff --git a/adjustPackageJson.js b/adjustPackageJson.js index 7f064f7d6..d8c4ade3f 100644 --- a/adjustPackageJson.js +++ b/adjustPackageJson.js @@ -1,5 +1,6 @@ const fs = require('fs'); const path = require('path'); +const volatilePackages = require('./common/volatilePackages'); function adjustFile(file) { const json = JSON.parse(fs.readFileSync(file, { encoding: 'utf-8' })); @@ -11,6 +12,10 @@ function adjustFile(file) { ); for (const depkey of ['dependencies', 'optionalDependencies']) { for (const dependency of Object.keys(pluginJson[depkey] || {})) { + if (!volatilePackages.includes(dependency)) { + // add only voletile packages + continue; + } if (!json[depkey]) { json[depkey] = {}; } @@ -34,3 +39,5 @@ function adjustFile(file) { adjustFile('packages/api/package.json'); adjustFile('app/package.json'); + +fs.writeFileSync('common/useBundleExternals.js', "module.exports = 'true';", 'utf-8'); diff --git a/app/src/nativeModulesContent.js b/app/src/nativeModulesContent.js new file mode 100644 index 000000000..0a61bed90 --- /dev/null +++ b/app/src/nativeModulesContent.js @@ -0,0 +1,9 @@ + +// this file is generated automatically by script fillNativeModules.js, do not edit it manually +const content = {}; + +content['better-sqlite3'] = () => require('better-sqlite3'); +content['oracledb'] = () => require('oracledb'); + + +module.exports = content; diff --git a/common/buildPluginExternals.js b/common/buildPluginExternals.js new file mode 100644 index 000000000..353b92f15 --- /dev/null +++ b/common/buildPluginExternals.js @@ -0,0 +1,19 @@ +const useBundleExternals = require('./useBundleExternals'); +const getBundleExternals = require('./getBundleExternals'); + +function buildExternalsFromDependencies(packageJson) { + if (useBundleExternals == 'true') { + return getBundleExternals(); + } + const { dependencies, optionalDependencies } = packageJson; + const externals = {}; + for (let dep in dependencies || {}) { + externals[dep] = `commonjs ${dep}`; + } + for (let dep in optionalDependencies || {}) { + externals[dep] = `commonjs ${dep}`; + } + return externals; +} + +module.exports = buildExternalsFromDependencies; diff --git a/common/getBundleExternals.js b/common/getBundleExternals.js new file mode 100644 index 000000000..fe67a2d30 --- /dev/null +++ b/common/getBundleExternals.js @@ -0,0 +1,10 @@ +const volatilePackages = require('./volatilePackages'); + +function getBundleExternals() { + return volatilePackages.reduce((acc, item) => { + acc[item] = `commonjs ${item}`; + return acc; + }, {}); +} + +module.exports = getBundleExternals; diff --git a/common/useBundleExternals.js b/common/useBundleExternals.js new file mode 100644 index 000000000..65ad2bfc3 --- /dev/null +++ b/common/useBundleExternals.js @@ -0,0 +1 @@ +module.exports = 'false'; \ No newline at end of file diff --git a/common/volatilePackages.js b/common/volatilePackages.js new file mode 100644 index 000000000..936c0be50 --- /dev/null +++ b/common/volatilePackages.js @@ -0,0 +1,25 @@ +// these packages will be never bundled with webpack + +const volatilePackages = [ + '@clickhouse/client', + 'bson', // this package is already bundled and is used in mongodb + 'mongodb', + 'mongodb-client-encryption', + 'tedious', + 'msnodesqlv8', + 'mysql2', + 'oracledb', + 'pg-copy-streams', + 'pg', + 'ioredis', + 'node-redis-dump2', + 'better-sqlite3', + '@azure/cosmos', + '@aws-sdk/rds-signer', + 'activedirectory2', + 'axios', + 'bufferutil', + 'ssh2', +]; + +module.exports = volatilePackages; diff --git "a/packages/api/c:\\test\\upg\\upgrade.zip" "b/packages/api/c:\\test\\upg\\upgrade.zip" new file mode 100644 index 000000000..d61c2e249 Binary files /dev/null and "b/packages/api/c:\\test\\upg\\upgrade.zip" differ diff --git "a/packages/api/c:\\test\\upg\\upgrade.zip.version" "b/packages/api/c:\\test\\upg\\upgrade.zip.version" new file mode 100644 index 000000000..29fe95d7a --- /dev/null +++ "b/packages/api/c:\\test\\upg\\upgrade.zip.version" @@ -0,0 +1 @@ +5.5.6 \ No newline at end of file diff --git a/packages/api/package.json b/packages/api/package.json index 4b296d293..e68ae2485 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -16,6 +16,9 @@ "export", "dbgate" ], + "files": [ + "src" + ], "dependencies": { "@aws-sdk/rds-signer": "^3.665.0", "activedirectory2": "^2.1.0", diff --git a/packages/api/src/nativeModulesContent.js b/packages/api/src/nativeModulesContent.js new file mode 100644 index 000000000..0a61bed90 --- /dev/null +++ b/packages/api/src/nativeModulesContent.js @@ -0,0 +1,9 @@ + +// this file is generated automatically by script fillNativeModules.js, do not edit it manually +const content = {}; + +content['better-sqlite3'] = () => require('better-sqlite3'); +content['oracledb'] = () => require('oracledb'); + + +module.exports = content; diff --git a/packages/api/webpack.config.js b/packages/api/webpack.config.js index 4f80022cb..cd8c01a6d 100644 --- a/packages/api/webpack.config.js +++ b/packages/api/webpack.config.js @@ -1,5 +1,8 @@ var webpack = require('webpack'); var path = require('path'); +var getBundleExternals = require('../../common/getBundleExternals'); + +var externals = getBundleExternals(); var config = { context: __dirname + '/src', @@ -29,27 +32,28 @@ var config = { }, ], }, - plugins: [ - new webpack.IgnorePlugin({ - checkResource(resource) { - const lazyImports = ['uws']; - if (!lazyImports.includes(resource)) { - return false; - } - try { - require.resolve(resource); - } catch (err) { - return true; - } - return false; - }, - }), - ], - externals: { - 'better-sqlite3': 'commonjs better-sqlite3', - 'oracledb': 'commonjs oracledb', - 'msnodesqlv8': 'commonjs msnodesqlv8', - }, + // plugins: [ + // new webpack.IgnorePlugin({ + // checkResource(resource) { + // const lazyImports = ['uws']; + // if (!lazyImports.includes(resource)) { + // return false; + // } + // try { + // require.resolve(resource); + // } catch (err) { + // return true; + // } + // return false; + // }, + // }), + // ], + // externals: { + // 'better-sqlite3': 'commonjs better-sqlite3', + // 'oracledb': 'commonjs oracledb', + // 'msnodesqlv8': 'commonjs msnodesqlv8', + // }, + externals, }; module.exports = config; diff --git a/plugins/dbgate-plugin-clickhouse/webpack-backend.config.js b/plugins/dbgate-plugin-clickhouse/webpack-backend.config.js index 7c6239e49..20c953370 100644 --- a/plugins/dbgate-plugin-clickhouse/webpack-backend.config.js +++ b/plugins/dbgate-plugin-clickhouse/webpack-backend.config.js @@ -1,6 +1,10 @@ var webpack = require('webpack'); var path = require('path'); +const packageJson = require('./package.json'); +const buildPluginExternals = require('../../common/buildPluginExternals'); +const externals = buildPluginExternals(packageJson); + var config = { context: __dirname + '/src/backend', @@ -19,12 +23,7 @@ var config = { // minimize: false, // }, - externals: { - '@clickhouse/client': 'commonjs @clickhouse/client', - 'json-stable-stringify': 'commonjs json-stable-stringify', - 'dbgate-tools': 'commonjs dbgate-tools', - lodash: 'commonjs lodash', - }, + externals, }; module.exports = config; diff --git a/plugins/dbgate-plugin-csv/webpack-backend.config.js b/plugins/dbgate-plugin-csv/webpack-backend.config.js index 0aec009ad..20c953370 100644 --- a/plugins/dbgate-plugin-csv/webpack-backend.config.js +++ b/plugins/dbgate-plugin-csv/webpack-backend.config.js @@ -1,6 +1,10 @@ var webpack = require('webpack'); var path = require('path'); +const packageJson = require('./package.json'); +const buildPluginExternals = require('../../common/buildPluginExternals'); +const externals = buildPluginExternals(packageJson); + var config = { context: __dirname + '/src/backend', @@ -19,11 +23,7 @@ var config = { // minimize: false, // }, - externals: { - csv: 'commonjs csv', - 'line-reader': 'commonjs line-reader', - lodash: 'commonjs lodash', - }, + externals, }; module.exports = config; diff --git a/plugins/dbgate-plugin-excel/webpack-backend.config.js b/plugins/dbgate-plugin-excel/webpack-backend.config.js index f736b4224..20c953370 100644 --- a/plugins/dbgate-plugin-excel/webpack-backend.config.js +++ b/plugins/dbgate-plugin-excel/webpack-backend.config.js @@ -1,6 +1,10 @@ var webpack = require('webpack'); var path = require('path'); +const packageJson = require('./package.json'); +const buildPluginExternals = require('../../common/buildPluginExternals'); +const externals = buildPluginExternals(packageJson); + var config = { context: __dirname + '/src/backend', @@ -19,10 +23,7 @@ var config = { // minimize: false, // }, - externals: { - xlsx: 'commonjs xlsx', - lodash: 'commonjs lodash', - }, + externals, }; module.exports = config; diff --git a/plugins/dbgate-plugin-mongo/webpack-backend.config.js b/plugins/dbgate-plugin-mongo/webpack-backend.config.js index c6cfde2f4..20c953370 100644 --- a/plugins/dbgate-plugin-mongo/webpack-backend.config.js +++ b/plugins/dbgate-plugin-mongo/webpack-backend.config.js @@ -1,6 +1,10 @@ var webpack = require('webpack'); var path = require('path'); +const packageJson = require('./package.json'); +const buildPluginExternals = require('../../common/buildPluginExternals'); +const externals = buildPluginExternals(packageJson); + var config = { context: __dirname + '/src/backend', @@ -19,15 +23,7 @@ var config = { // minimize: false, // }, - externals: { - 'dbgate-tools': 'commonjs dbgate-tools', - 'dbgate-query-splitter': 'commonjs dbgate-query-splitter', - lodash: 'commonjs lodash', - mongodb: 'commonjs mongodb', - 'mongodb-client-encryption': 'commonjs mongodb-client-encryption', - bson: 'commonjs bson', - 'is-promise': 'commonjs is-promise', - }, + externals, }; module.exports = config; diff --git a/plugins/dbgate-plugin-mssql/webpack-backend.config.js b/plugins/dbgate-plugin-mssql/webpack-backend.config.js index cb2b45aa6..dcd7d5c42 100644 --- a/plugins/dbgate-plugin-mssql/webpack-backend.config.js +++ b/plugins/dbgate-plugin-mssql/webpack-backend.config.js @@ -1,6 +1,10 @@ var webpack = require('webpack'); var path = require('path'); +const packageJson = require('./package.json'); +const buildPluginExternals = require('../../common/buildPluginExternals'); +const externals = buildPluginExternals(packageJson); + var config = { context: __dirname + '/src/backend', @@ -18,14 +22,7 @@ var config = { // minimize: false, // }, - externals: { - msnodesqlv8: 'commonjs msnodesqlv8', - 'async-lock': 'commonjs async-lock', - 'dbgate-query-splitter': 'commonjs dbgate-query-splitter', - 'dbgate-tools': 'commonjs dbgate-tools', - lodash: 'commonjs lodash', - tedious: 'commonjs tedious', - }, + externals, }; module.exports = config; diff --git a/plugins/dbgate-plugin-mysql/webpack-backend.config.js b/plugins/dbgate-plugin-mysql/webpack-backend.config.js index 21556f075..aacedca43 100644 --- a/plugins/dbgate-plugin-mysql/webpack-backend.config.js +++ b/plugins/dbgate-plugin-mysql/webpack-backend.config.js @@ -1,6 +1,10 @@ var webpack = require('webpack'); var path = require('path'); +const packageJson = require('./package.json'); +const buildPluginExternals = require('../../common/buildPluginExternals'); +const externals = buildPluginExternals(packageJson); + var config = { context: __dirname + '/src/backend', @@ -14,13 +18,7 @@ var config = { libraryTarget: 'commonjs2', }, - externals: { - 'dbgate-tools': 'commonjs dbgate-tools', - 'dbgate-query-splitter': 'commonjs dbgate-query-splitter', - 'antares-mysql-dumper': 'commonjs antares-mysql-dumper', - lodash: 'commonjs lodash', - mysql2: 'commonjs mysql2', - }, + externals, // uncomment for disable minimalization // optimization: { diff --git a/plugins/dbgate-plugin-oracle/webpack-backend.config.js b/plugins/dbgate-plugin-oracle/webpack-backend.config.js index b93eb6f46..61f838c18 100644 --- a/plugins/dbgate-plugin-oracle/webpack-backend.config.js +++ b/plugins/dbgate-plugin-oracle/webpack-backend.config.js @@ -1,6 +1,10 @@ var webpack = require('webpack'); var path = require('path'); +const packageJson = require('./package.json'); +const buildPluginExternals = require('../../common/buildPluginExternals'); +const externals = buildPluginExternals(packageJson); + var config = { context: __dirname + '/src/backend', @@ -36,12 +40,7 @@ var config = { }), ], - externals: { - 'dbgate-tools': 'commonjs dbgate-tools', - 'dbgate-query-splitter': 'commonjs dbgate-query-splitter', - lodash: 'commonjs lodash', - oracledb: 'commonjs oracledb', - }, + externals, }; module.exports = config; diff --git a/plugins/dbgate-plugin-postgres/webpack-backend.config.js b/plugins/dbgate-plugin-postgres/webpack-backend.config.js index 015fda186..06d31f8c4 100644 --- a/plugins/dbgate-plugin-postgres/webpack-backend.config.js +++ b/plugins/dbgate-plugin-postgres/webpack-backend.config.js @@ -1,6 +1,10 @@ var webpack = require('webpack'); var path = require('path'); +const packageJson = require('./package.json'); +const buildPluginExternals = require('../../common/buildPluginExternals'); +const externals = buildPluginExternals(packageJson); + var config = { context: __dirname + '/src/backend', @@ -36,13 +40,7 @@ var config = { }), ], - externals: { - 'dbgate-tools': 'commonjs dbgate-tools', - 'dbgate-query-splitter': 'commonjs dbgate-query-splitter', - lodash: 'commonjs lodash', - pg: 'commonjs pg', - 'pg-copy-streams': 'commonjs pg-copy-streams', - } + externals, }; module.exports = config; diff --git a/plugins/dbgate-plugin-redis/webpack-backend.config.js b/plugins/dbgate-plugin-redis/webpack-backend.config.js index 325d4ff74..ebecca263 100644 --- a/plugins/dbgate-plugin-redis/webpack-backend.config.js +++ b/plugins/dbgate-plugin-redis/webpack-backend.config.js @@ -1,6 +1,10 @@ var webpack = require('webpack'); var path = require('path'); +const packageJson = require('./package.json'); +const buildPluginExternals = require('../../common/buildPluginExternals'); +const externals = buildPluginExternals(packageJson); + var config = { context: __dirname + '/src/backend', @@ -18,14 +22,7 @@ var config = { // optimization: { // minimize: false, // }, - externals: { - 'dbgate-tools': 'commmonjs dbgate-tools', - 'dbgate-query-splitter': 'commmonjs dbgate-query-splitter', - lodash: 'commmonjs lodash', - async: 'commmonjs async', - ioredis: 'commmonjs ioredis', - 'node-redis-dump2': 'commmonjs node-redis-dump2', - }, + externals, }; module.exports = config; diff --git a/plugins/dbgate-plugin-sqlite/webpack-backend.config.js b/plugins/dbgate-plugin-sqlite/webpack-backend.config.js index 7e76c3c96..ebecca263 100644 --- a/plugins/dbgate-plugin-sqlite/webpack-backend.config.js +++ b/plugins/dbgate-plugin-sqlite/webpack-backend.config.js @@ -1,6 +1,10 @@ var webpack = require('webpack'); var path = require('path'); +const packageJson = require('./package.json'); +const buildPluginExternals = require('../../common/buildPluginExternals'); +const externals = buildPluginExternals(packageJson); + var config = { context: __dirname + '/src/backend', @@ -18,12 +22,7 @@ var config = { // optimization: { // minimize: false, // }, - externals: { - 'dbgate-tools': 'commonjs dbgate-tools', - 'dbgate-query-splitter': 'commonjs dbgate-query-splitter', - 'better-sqlite3': 'commonjs better-sqlite3', - lodash: 'commonjs lodash', - }, + externals, }; module.exports = config; diff --git a/plugins/dbgate-plugin-xml/webpack-backend.config.js b/plugins/dbgate-plugin-xml/webpack-backend.config.js index c5be54c72..ebecca263 100644 --- a/plugins/dbgate-plugin-xml/webpack-backend.config.js +++ b/plugins/dbgate-plugin-xml/webpack-backend.config.js @@ -1,6 +1,10 @@ var webpack = require('webpack'); var path = require('path'); +const packageJson = require('./package.json'); +const buildPluginExternals = require('../../common/buildPluginExternals'); +const externals = buildPluginExternals(packageJson); + var config = { context: __dirname + '/src/backend', @@ -18,9 +22,7 @@ var config = { // optimization: { // minimize: false, // }, - externals: { - 'node-xml-stream-parser': 'commonjs node-xml-stream-parser', - }, + externals, }; module.exports = config;