[ackaged plugins for electron optimalization

This commit is contained in:
Jan Prochazka
2021-05-20 10:22:08 +02:00
parent 25881e80db
commit b5fe8508b1
7 changed files with 67 additions and 14 deletions

View File

@@ -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

View File

@@ -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
View File

@@ -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
View 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())});`);

View File

@@ -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",

View File

@@ -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
View File

@@ -0,0 +1,3 @@
const fs = require('fs');
fs.writeFileSync('packages/api/src/packagedPluginsContent.js', `module.exports = () => null;`);