mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 00:56:02 +00:00
[ackaged plugins for electron optimalization
This commit is contained in:
3
.github/workflows/build-app-beta.yaml
vendored
3
.github/workflows/build-app-beta.yaml
vendored
@@ -35,6 +35,9 @@ jobs:
|
|||||||
- name: fillNativeModulesElectron
|
- name: fillNativeModulesElectron
|
||||||
run: |
|
run: |
|
||||||
yarn fillNativeModulesElectron
|
yarn fillNativeModulesElectron
|
||||||
|
- name: fillPackagedPlugins
|
||||||
|
run: |
|
||||||
|
yarn fillPackagedPlugins
|
||||||
- name: Install Snapcraft
|
- name: Install Snapcraft
|
||||||
if: matrix.os == 'ubuntu-18.04'
|
if: matrix.os == 'ubuntu-18.04'
|
||||||
uses: samuelmeuli/action-snapcraft@v1
|
uses: samuelmeuli/action-snapcraft@v1
|
||||||
|
|||||||
3
.github/workflows/build-app.yaml
vendored
3
.github/workflows/build-app.yaml
vendored
@@ -39,6 +39,9 @@ jobs:
|
|||||||
- name: fillNativeModulesElectron
|
- name: fillNativeModulesElectron
|
||||||
run: |
|
run: |
|
||||||
yarn fillNativeModulesElectron
|
yarn fillNativeModulesElectron
|
||||||
|
- name: fillPackagedPlugins
|
||||||
|
run: |
|
||||||
|
yarn fillPackagedPlugins
|
||||||
- name: Install Snapcraft
|
- name: Install Snapcraft
|
||||||
if: matrix.os == 'ubuntu-18.04'
|
if: matrix.os == 'ubuntu-18.04'
|
||||||
uses: samuelmeuli/action-snapcraft@v1
|
uses: samuelmeuli/action-snapcraft@v1
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -30,4 +30,5 @@ yarn-debug.log*
|
|||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
app/src/nativeModulesContent.js
|
app/src/nativeModulesContent.js
|
||||||
packages/api/src/nativeModulesContent.js
|
packages/api/src/nativeModulesContent.js
|
||||||
|
packages/api/src/packagedPluginsContent.js
|
||||||
.VSCodeCounter
|
.VSCodeCounter
|
||||||
23
fillPackagedPlugins.js
Normal file
23
fillPackagedPlugins.js
Normal file
@@ -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())});`);
|
||||||
@@ -32,6 +32,8 @@
|
|||||||
"generatePadFile": "node generatePadFile",
|
"generatePadFile": "node generatePadFile",
|
||||||
"fillNativeModules": "node fillNativeModules",
|
"fillNativeModules": "node fillNativeModules",
|
||||||
"fillNativeModulesElectron": "node fillNativeModules --electron",
|
"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",
|
"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",
|
"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",
|
"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:api": "yarn workspace dbgate-api ts",
|
||||||
"ts:web": "yarn workspace dbgate-web ts",
|
"ts:web": "yarn workspace dbgate-web ts",
|
||||||
"ts": "yarn ts:api && yarn ts:web",
|
"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": {
|
"dependencies": {
|
||||||
"concurrently": "^5.1.0",
|
"concurrently": "^5.1.0",
|
||||||
|
|||||||
@@ -9,10 +9,17 @@ const requirePlugin = require('../shell/requirePlugin');
|
|||||||
const downloadPackage = require('../utility/downloadPackage');
|
const downloadPackage = require('../utility/downloadPackage');
|
||||||
const hasPermission = require('../utility/hasPermission');
|
const hasPermission = require('../utility/hasPermission');
|
||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
|
const packagedPluginsContent = require('../packagedPluginsContent');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
script_meta: 'get',
|
script_meta: 'get',
|
||||||
async script({ packageName }) {
|
async script({ packageName }) {
|
||||||
|
const packagedContent = packagedPluginsContent();
|
||||||
|
|
||||||
|
if (packagedContent && packagedContent[packageName]) {
|
||||||
|
return packagedContent[packageName].frontend;
|
||||||
|
}
|
||||||
|
|
||||||
const file1 = path.join(packagedPluginsDir(), packageName, 'dist', 'frontend.js');
|
const file1 = path.join(packagedPluginsDir(), packageName, 'dist', 'frontend.js');
|
||||||
const file2 = path.join(pluginsdir(), packageName, 'dist', 'frontend.js');
|
const file2 = path.join(pluginsdir(), packageName, 'dist', 'frontend.js');
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
@@ -58,26 +65,37 @@ module.exports = {
|
|||||||
|
|
||||||
installed_meta: 'get',
|
installed_meta: 'get',
|
||||||
async installed() {
|
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 files2 = await fs.readdir(pluginsdir());
|
||||||
|
|
||||||
const res = [];
|
const res = [];
|
||||||
for (const packageName of _.union(files1, files2)) {
|
for (const packageName of _.union(files1, files2)) {
|
||||||
if (!/^dbgate-plugin-.*$/.test(packageName)) continue;
|
if (!/^dbgate-plugin-.*$/.test(packageName)) continue;
|
||||||
try {
|
try {
|
||||||
const isPackaged = files1.includes(packageName);
|
if (packagedContent && packagedContent[packageName]) {
|
||||||
const manifest = await fs
|
const manifest = {
|
||||||
.readFile(path.join(isPackaged ? packagedPluginsDir() : pluginsdir(), packageName, 'package.json'), {
|
...packagedContent[packageName].manifest,
|
||||||
encoding: 'utf-8',
|
};
|
||||||
})
|
manifest.isPackaged = true;
|
||||||
.then(x => JSON.parse(x));
|
manifest.readme = packagedContent[packageName].readme;
|
||||||
const readmeFile = path.join(isPackaged ? packagedPluginsDir() : pluginsdir(), packageName, 'README.md');
|
res.push(manifest);
|
||||||
// @ts-ignore
|
} else {
|
||||||
if (await fs.exists(readmeFile)) {
|
const isPackaged = files1.includes(packageName);
|
||||||
manifest.readme = await fs.readFile(readmeFile, { encoding: 'utf-8' });
|
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) {
|
} catch (err) {
|
||||||
console.log(`Skipped plugin ${packageName}, error:`, err.message);
|
console.log(`Skipped plugin ${packageName}, error:`, err.message);
|
||||||
}
|
}
|
||||||
|
|||||||
3
resetPackagedPlugins.js
Normal file
3
resetPackagedPlugins.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
|
||||||
|
fs.writeFileSync('packages/api/src/packagedPluginsContent.js', `module.exports = () => null;`);
|
||||||
Reference in New Issue
Block a user