@nsmp/js-api
Version:
Types for jsApi
43 lines (33 loc) • 1.49 kB
JavaScript
import {deepMergeJsApi} from '../helpers';
import {getEnvironment} from './proxy/getEnvironment';
import {getExtendedJsApi} from './proxy/getExtendedJsApi';
import {getInitialJsApi} from './proxy/getInitialJsApi';
import {getJsApiContext} from './proxy/getJsApiContext';
import jsApi from './JsApiMock';
let jsApiInstance = null;
const environment = getEnvironment();
export const initializeJsApi = (settings = {getContext: undefined, getExtension: undefined, mock: {}}) => {
if (!jsApiInstance) {
if (process.env.NODE_ENV === 'production') {
if (environment === 'smp4') {
window.parent.injectJsApi(window.parent, window);
}
const context = getJsApiContext(environment, settings.getContext);
const initialJsApi = getInitialJsApi(environment, context);
jsApiInstance = getExtendedJsApi(initialJsApi, environment, context, settings.getExtension);
} else {
// Deep merge нужен для того, чтобы не перезаписывать вложенные методы объекта jsApi.
const jsApiWithExtension = deepMergeJsApi(jsApi, settings?.getExtension?.() || {});
jsApiInstance = deepMergeJsApi(jsApiWithExtension, settings?.mock || {});
}
}
};
export const getJsApi = () => {
if (!jsApiInstance) {
throw new Error('Объект `js api` не проинциализирован. Вызовите функцию `initializeJsApi`');
}
return jsApiInstance;
};
export const removeJsApi = () => {
jsApiInstance = null;
};