mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-25 02:41:07 +01:00
NodeJS Plugin Runtime (#53)
This commit is contained in:
23
scripts/copy-plugins.cjs
Normal file
23
scripts/copy-plugins.cjs
Normal file
@@ -0,0 +1,23 @@
|
||||
const {readdirSync, cpSync} = require("node:fs");
|
||||
const {execSync} = require("node:child_process");
|
||||
const path = require("node:path");
|
||||
console.log('-----> Starting copy plugins script');
|
||||
const PLUGINS_DIR = process.env.YAAK_PLUGINS_DIR;
|
||||
if (!PLUGINS_DIR) {
|
||||
console.log("YAAK_PLUGINS_DIR is not set");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log('Building plugin repository at', PLUGINS_DIR);
|
||||
execSync('npm ci');
|
||||
execSync('npm run build');
|
||||
|
||||
const pluginsRoot = path.join(PLUGINS_DIR, 'plugins');
|
||||
for (const name of readdirSync(pluginsRoot)) {
|
||||
const dir = path.join(pluginsRoot, name);
|
||||
if (name.startsWith('.')) continue;
|
||||
const destDir = path.join(__dirname, '../../src-tauri/vendored/plugins/', name);
|
||||
console.log(`Copying ${name} to ${destDir}`);
|
||||
cpSync(path.join(dir, 'package.json'), path.join(destDir, 'package.json'));
|
||||
cpSync(path.join(dir, 'build/index.js'), path.join(destDir, 'build/index.js'));
|
||||
}
|
||||
62
scripts/download-protoc.cjs
Normal file
62
scripts/download-protoc.cjs
Normal file
@@ -0,0 +1,62 @@
|
||||
const decompress = require('decompress');
|
||||
const Downloader = require("nodejs-file-downloader");
|
||||
const path = require("node:path");
|
||||
const fs = require("node:fs");
|
||||
const os = require("node:os");
|
||||
const rimraf = require('rimraf');
|
||||
|
||||
// `${process.platform}_${process.arch}`
|
||||
const MAC_ARM = 'darwin_arm64';
|
||||
const MAC_X64 = 'darwin_x64';
|
||||
const LNX_X64 = 'linux_x64';
|
||||
const WIN_X64 = 'win32_x64';
|
||||
|
||||
const URL_MAP = {
|
||||
[MAC_ARM]: 'https://github.com/protocolbuffers/protobuf/releases/download/v27.2/protoc-27.2-osx-aarch_64.zip',
|
||||
[MAC_X64]: 'https://github.com/protocolbuffers/protobuf/releases/download/v27.2/protoc-27.2-osx-x86_64.zip',
|
||||
[LNX_X64]: 'https://github.com/protocolbuffers/protobuf/releases/download/v27.2/protoc-27.2-linux-x86_64.zip',
|
||||
[WIN_X64]: 'https://github.com/protocolbuffers/protobuf/releases/download/v27.2/protoc-27.2-win64.zip',
|
||||
};
|
||||
|
||||
const DST_BIN_MAP = {
|
||||
[MAC_ARM]: 'protoc-aarch64-apple-darwin',
|
||||
[MAC_X64]: 'protoc-x86_64-apple-darwin',
|
||||
[LNX_X64]: 'protoc-x86_64-unknown-linux-gnu',
|
||||
[WIN_X64]: 'protoc-x86_64-pc-windows-msvc.exe',
|
||||
};
|
||||
|
||||
const SRC_BIN_MAP = {
|
||||
[MAC_ARM]: 'protoc',
|
||||
[MAC_X64]: 'protoc',
|
||||
[LNX_X64]: 'protoc',
|
||||
[WIN_X64]: 'protoc.exe',
|
||||
};
|
||||
|
||||
(async function () {
|
||||
const key = `${process.platform}_${process.arch}`;
|
||||
const url = URL_MAP[key];
|
||||
const tmpDir = path.join(os.tmpdir(), `${Math.random()}`);
|
||||
const dstDir = path.join(__dirname, `..`, 'src-tauri', 'vendored', 'protoc');
|
||||
rimraf.sync(dstDir);
|
||||
|
||||
// Download GitHub release artifact
|
||||
const {filePath} = await new Downloader({url, directory: tmpDir,}).download();
|
||||
|
||||
// Decompress to the same directory
|
||||
await decompress(filePath, tmpDir, {});
|
||||
|
||||
// Remove the original archive
|
||||
fs.unlinkSync(filePath);
|
||||
|
||||
// Copy binary
|
||||
const binSrc = path.join(tmpDir, 'bin', SRC_BIN_MAP[key]);
|
||||
const binDst = path.join(dstDir, DST_BIN_MAP[key]);
|
||||
fs.cpSync(binSrc, binDst);
|
||||
|
||||
// Copy other files
|
||||
const includeSrc = path.join(tmpDir, 'include');
|
||||
const includeDst = path.join(dstDir, 'include');
|
||||
fs.cpSync(includeSrc, includeDst, {recursive: true});
|
||||
|
||||
console.log("Downloaded protoc to", dstDir);
|
||||
})().catch(err => console.log('Script failed:', err));
|
||||
Reference in New Issue
Block a user