import path from "path"; import appRootPath from "app-root-path"; import typescript from "rollup-plugin-typescript2"; import alias from "@rollup/plugin-alias"; import commonjs from "@rollup/plugin-commonjs"; import json from "@rollup/plugin-json"; import replace from "@rollup/plugin-replace"; import chalk from "chalk"; import { spawn, exec } from "child_process"; const isProduction = process.env.NODE_ENV === "production"; const devPlugins = !isProduction ? [pakeCliDevPlugin()] : []; export default { input: isProduction ? "bin/cli.ts" : "bin/dev.ts", output: { file: isProduction ? "dist/cli.js" : "dist/dev.js", format: "es", sourcemap: !isProduction, }, watch: { include: "bin/**", exclude: "node_modules/**", }, plugins: [ json(), typescript({ tsconfig: "tsconfig.json", clean: true, // Clear cache }), commonjs(), replace({ "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV), preventAssignment: true, }), alias({ entries: [{ find: "@", replacement: path.join(appRootPath.path, "bin") }], }), ...devPlugins, ], }; function pakeCliDevPlugin() { let devChildProcess; let cliChildProcess; let devHasStarted = false; return { name: "pake-cli-dev-plugin", buildEnd() { const command = "node"; const cliCmdArgs = ["./dist/dev.js"]; cliChildProcess = spawn(command, cliCmdArgs, { detached: true }); cliChildProcess.stdout.on("data", (data) => { console.log(chalk.green(data.toString())); }); cliChildProcess.stderr.on("data", (data) => { console.error(chalk.yellow(data.toString())); }); cliChildProcess.on("close", async (code) => { console.log(chalk.yellow(`cli running end with code: ${code}`)); if (devHasStarted) return; devHasStarted = true; devChildProcess = await exec( "npm run tauri dev -- --config ./src-tauri/.pake/tauri.conf.json --features cli-build", ); devChildProcess.stdout.on("data", (data) => { console.log(chalk.green(data.toString())); }); devChildProcess.stderr.on("data", (data) => { console.error(chalk.yellow(data.toString())); }); devChildProcess.on("close", (code) => { console.log(chalk.yellow(`dev running end: ${code}`)); process.exit(code); }); }); }, }; }