UNPKG

buntralino-cli

Version:

Buntralino unites Bun and Neutralino.js to make a simpler, lighter alternative to Electron and NW.js. Use Neutralino.js API at client and send harder tasks to Bun while keeping your development process easy.

64 lines (59 loc) 2.01 kB
import { defineConfig, PluginOption } from 'vite' import fs from 'node:fs'; import path from 'node:path'; const bunIndex = './src/bun/index.ts'; const neuConfig = JSON.parse(fs.readFileSync('neutralino.config.json', 'utf8')); const neuResourcesRoot = '.' + neuConfig.cli.resourcesPath; let launchedBuntralino = false; /** Vite plugin to run buntralino and build it when needed */ const buntralino = (): PluginOption => [{ name: 'vite-plugin-buntralino:copy-icon', enforce: 'post', async buildStart() { // Copy the app icon when developing an app await fs.promises.mkdir('./app', { recursive: true }) await fs.promises.copyFile('public/icon.png', path.join(neuResourcesRoot + '/icon.png')); } }, { name: 'vite-plugin-buntralino:serve', apply: 'serve', enforce: 'post', async configureServer(server) { // Start Buntralino with the Vite server and use it server.httpServer?.once('listening', async () => { if (launchedBuntralino) { return; } const address = server.httpServer?.address(); if (!address || typeof address === 'string') { throw new Error('Failed to get server address'); } const protocol = server.config.server.https ? 'https' : 'http', host = '127.0.0.1', port = address.port; (await Bun.$`buntralino run ${bunIndex} -- --vitehost=${protocol}://${host}:${port}`); launchedBuntralino = true; }); } }, { name: 'vite-plugin-buntralino:build', apply: 'build', enforce: 'post', async closeBundle() { // Build Buntralino after Vite builds await Bun.$`buntralino build ${bunIndex}`; }, }]; // https://vite.dev/config/ export default defineConfig({ plugins: [buntralino()], server: { host: '127.0.0.1', open: false }, build: { outDir: neuResourcesRoot } })