UNPKG

@nsmp/js-api

Version:

Types for jsApi

43 lines (33 loc) 1.49 kB
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; };