import { createPinia } from "pinia"; import { App as VueApp, ComponentPublicInstance, createApp } from "vue"; import App from "./App.vue"; import router from "./router"; import axios from "axios"; import VueAxios from "vue-axios"; import Notifications from "notiwind"; import "./assets/styles/tailwind.css"; import { FontAwesomeIcon } from "./lib/fontawesome"; import Camera from "simple-vue-camera"; import { logger } from "./utils/logger"; // Global Error Handler function setupGlobalErrorHandler(app: VueApp) { logger.log("[App Init] Setting up global error handler"); app.config.errorHandler = ( err: unknown, instance: ComponentPublicInstance | null, info: string, ) => { logger.error("[App Error] Global Error Handler:", { error: err, info, component: instance?.$options.name || "unknown", }); alert( (err instanceof Error ? err.message : "Something bad happened") + " - Try reloading or restarting the app.", ); }; } // Function to initialize the app export function initializeApp() { logger.log("[App Init] Starting app initialization"); logger.log("[App Init] Platform:", process.env.VITE_PLATFORM); const app = createApp(App); logger.log("[App Init] Vue app created"); app.component("FontAwesome", FontAwesomeIcon).component("camera", Camera); logger.log("[App Init] Components registered"); const pinia = createPinia(); app.use(pinia); logger.log("[App Init] Pinia store initialized"); app.use(VueAxios, axios); logger.log("[App Init] Axios initialized"); app.use(router); logger.log("[App Init] Router initialized"); app.use(Notifications); logger.log("[App Init] Notifications initialized"); setupGlobalErrorHandler(app); logger.log("[App Init] App initialization complete"); return app; }