UNPKG

vite-plugin-naria2

Version:
98 lines (92 loc) 3.29 kB
'use strict'; 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;