import 'ant-design-vue/dist/reset.css';
|
import './styles.css';
|
|
import Antd from 'ant-design-vue';
|
import { createPinia } from 'pinia';
|
import { createApp } from 'vue';
|
|
import App from './App.vue';
|
import { createOnlyOfficeBridge } from './onlyoffice/bridge';
|
import type { AscGlobal } from './onlyoffice/types';
|
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
}
|
|
function isPendingSdkMethod(value: unknown): value is undefined | ((...args: never[]) => unknown) {
|
return value === undefined || typeof value === 'function';
|
}
|
|
function isAscBootstrapGlobal(value: unknown): value is AscGlobal {
|
if (!isRecord(value) || !isRecord(value.plugin) || !isRecord(value.scope)) return false;
|
|
const plugin = value.plugin;
|
const methods = [plugin.callCommand, plugin.executeMethod, plugin.executeCommand, plugin.onThemeChangedBase];
|
const methodsReady = methods.every((method) => typeof method === 'function');
|
const validBootstrap = typeof plugin.attachEvent === 'function' && methods.every(isPendingSdkMethod);
|
return methodsReady || validBootstrap;
|
}
|
|
const bridge = isAscBootstrapGlobal(window.Asc) ? createOnlyOfficeBridge(window.Asc) : null;
|
|
createApp(App).use(createPinia()).use(Antd).provide('onlyOfficeBridge', bridge).mount('#app');
|