61 lines
1.7 KiB
JavaScript
61 lines
1.7 KiB
JavaScript
import { createApp } from 'vue';
|
|
import 'bootstrap/dist/js/bootstrap';
|
|
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
|
|
import { useMainStore } from '@/store';
|
|
import baseMixin from '@/mixins/base-mixin';
|
|
import { createPinia } from 'pinia';
|
|
import { vMaska } from 'maska';
|
|
import LoadScript from 'vue-plugin-load-script';
|
|
|
|
import analyticsMixin from '@/mixins/analytics-mixin';
|
|
import experimentMixin from '@/mixins/experiment-mixin';
|
|
import defineGlobalRules from '@/helpers/global-rule-definer';
|
|
import router from './router';
|
|
import App from './App.vue';
|
|
|
|
import Logger from "@/helpers/logger";
|
|
// Instantiate global logging object
|
|
global.$logger = new Logger();
|
|
|
|
// Vue App Setup
|
|
const vueApp = createApp(App);
|
|
|
|
vueApp.config.compilerOptions.isCustomElement = (tag) =>
|
|
(tag === 'siteSubHeader'
|
|
|| tag === 'ServicePackages'
|
|
|| tag === 'servicePackageQuestion');
|
|
|
|
// Pinia
|
|
const pinia = createPinia();
|
|
vueApp.use(pinia);
|
|
pinia.use(piniaPluginPersistedstate);
|
|
useMainStore().populateInitialState();
|
|
|
|
// Additional Vue items to setup
|
|
vueApp.use(router);
|
|
vueApp.use(LoadScript);
|
|
|
|
vueApp.directive('maska', vMaska);
|
|
vueApp.mixin(baseMixin);
|
|
vueApp.mixin(analyticsMixin);
|
|
vueApp.mixin(experimentMixin);
|
|
|
|
function getPageName(vm) {
|
|
return vm.$root.getPageNameByQueryString();
|
|
}
|
|
// Vue Error Handling
|
|
vueApp.config.errorHandler = (err, vm, info) => {
|
|
const pageName= getPageName(vm);
|
|
global.$logger.logError(
|
|
`Page Name - ${pageName} - ${info}: ${err.message}\n${err.stack}`
|
|
);
|
|
};
|
|
|
|
// Vue Router Error Handling
|
|
router.onError((err) => {
|
|
global.$logger.logError(err.message, err.cause);
|
|
});
|
|
vueApp.mount('#app');
|
|
|
|
// define global rules
|
|
defineGlobalRules();
|