feat(n7web): enhance control workflows and status feedback
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
import { cpSync, copyFileSync, existsSync, mkdirSync } from "node:fs";
|
||||
import { dirname, resolve } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
import vue from "@vitejs/plugin-vue";
|
||||
import { defineConfig } from "vite";
|
||||
|
||||
const webRoot = dirname(fileURLToPath(import.meta.url));
|
||||
const outputRoot = resolve(webRoot, "dist");
|
||||
const backendOrigin = "http://127.0.0.1:8000";
|
||||
|
||||
const runtimeDirectories = ["assets", "icons", "vendor"];
|
||||
const runtimeFiles = [
|
||||
"manifest.webmanifest",
|
||||
"service-worker.js",
|
||||
"speech-audio-worklet.js",
|
||||
"login.html",
|
||||
"login.css",
|
||||
"login.js",
|
||||
"hardware-control.html",
|
||||
"hardware-control.css",
|
||||
"hardware-control.js",
|
||||
"network.js",
|
||||
"app.js",
|
||||
"gesture-control.js",
|
||||
"pwa.js",
|
||||
"console-v2.js",
|
||||
"self-extension.js",
|
||||
"speech-input.js",
|
||||
"assistant-chat.js",
|
||||
"energy-monitor.js",
|
||||
"styles.css",
|
||||
"console-v2.css",
|
||||
"self-extension.css",
|
||||
"speech-input.css",
|
||||
"assistant-chat.css",
|
||||
"energy-monitor.css",
|
||||
"ui-consistency.css",
|
||||
"codepen-glass-theme.css",
|
||||
"vue-ui.js"
|
||||
];
|
||||
|
||||
function copyRuntimeAssets() {
|
||||
return {
|
||||
name: "copy-n7-runtime-assets",
|
||||
apply: "build",
|
||||
closeBundle() {
|
||||
for (const directory of runtimeDirectories) {
|
||||
const source = resolve(webRoot, directory);
|
||||
if (existsSync(source)) {
|
||||
cpSync(source, resolve(outputRoot, directory), { recursive: true });
|
||||
}
|
||||
}
|
||||
for (const file of runtimeFiles) {
|
||||
const source = resolve(webRoot, file);
|
||||
if (!existsSync(source)) continue;
|
||||
const target = resolve(outputRoot, file);
|
||||
mkdirSync(dirname(target), { recursive: true });
|
||||
copyFileSync(source, target);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function backendProxy() {
|
||||
return {
|
||||
target: backendOrigin,
|
||||
changeOrigin: true,
|
||||
configure(proxy) {
|
||||
proxy.on("proxyReq", (request) => request.setHeader("origin", backendOrigin));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export default defineConfig({
|
||||
root: webRoot,
|
||||
publicDir: false,
|
||||
plugins: [vue(), copyRuntimeAssets()],
|
||||
server: {
|
||||
strictPort: true,
|
||||
fs: { allow: [webRoot] },
|
||||
proxy: {
|
||||
"/api": backendProxy(),
|
||||
"/artifacts": backendProxy()
|
||||
}
|
||||
},
|
||||
build: {
|
||||
outDir: outputRoot,
|
||||
emptyOutDir: true,
|
||||
assetsDir: "vite-assets",
|
||||
target: "es2022",
|
||||
sourcemap: true
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user