vite-plugin-naria2
Version:
Vite naria2 integration
98 lines (92 loc) • 3.29 kB
JavaScript
;
const path = require('node:path');
const node_fs = require('node:fs');
const vite = require('vite');
const color = require('@breadc/color');
const node = require('@naria2/node');
const ui = require('@naria2/node/ui');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
const path__default = /*#__PURE__*/_interopDefaultCompat(path);
function Naria2(options = {}) {
let root;
const logger = vite.createLogger();
const childProcessRuntime = {
dir: path__default.join(process.cwd(), ".aria2"),
process: void 0,
url: void 0,
secret: void 0
};
return [
{
name: "vite-plugin-naria2:runtime",
apply: "serve",
configResolved(config) {
root = config.root;
},
async configureServer(server) {
server.middlewares.use("/_/open", async (req, res, next) => {
try {
if (await ui.handleWebUIOpenRequest(new URL(req.url), req, res, {
rpc: {
port: childProcessRuntime.process?.getOptions().listenPort ?? 6800,
secret: childProcessRuntime.secret
}
})) {
return;
}
} catch {
}
next();
});
const _printUrls = server.printUrls;
if (!childProcessRuntime.process) {
childProcessRuntime.dir = path__default.join(root, ".aria2");
await node_fs.promises.mkdir(childProcessRuntime.dir, { recursive: true }).catch(() => {
});
const childProcess = await node.createChildProcess({
dir: childProcessRuntime.dir,
...options.childProcess
});
childProcessRuntime.process = childProcess;
childProcessRuntime.url = `ws://127.0.0.1:${childProcess.getOptions().listenPort}/jsonrpc`;
childProcessRuntime.secret = childProcess.getOptions().secret;
}
server.printUrls = () => {
_printUrls();
if (childProcessRuntime.url) {
const colorUrl = (url) => color.cyan(url.replace(/:(\d+)\//, (_, port) => `:${color.bold(port)}/`));
logger.info(
` ${color.green("\u279C")} ${color.bold("Naria2")}: ${colorUrl(childProcessRuntime.url)}
`
);
}
};
},
closeBundle() {
childProcessRuntime.process?.close?.();
childProcessRuntime.url = void 0;
childProcessRuntime.secret = void 0;
}
},
{
name: "vite-plugin-naria2:build",
resolveId(id) {
if (id === "~naria2/jsonrpc") {
return "\0" + id;
}
},
load(id) {
if (id === "\0~naria2/jsonrpc") {
const socketCode = childProcessRuntime.url ? `new WebSocket(${JSON.stringify(childProcessRuntime.url)})` : "undefined";
const clientCode = `socket ? await createClient(socket, { ${childProcessRuntime.secret ? "secret: " + JSON.stringify(childProcessRuntime.secret) : ""} }) : undefined`;
return [
`import { createClient } from 'naria2';`,
`export const socket = ${socketCode};`,
`export const client = ${clientCode};`
].join("\n");
}
}
}
];
}
module.exports = Naria2;