UNPKG

@sdc-monitor/demo

Version:

<div align="center"> <a href="#" target="_blank"> <img src="https://i.loli.net/2021/07/28/EvPwd4NjVH3tBfO.jpg" alt="mito-logo" height="90"> </a> <p>A Lightweight SDK For Monitor Web</p>

75 lines (65 loc) 2.31 kB
import { EventTypes } from '@sdc-monitor/shared' import { Logger } from './logger' import { DeviceInfo } from '@sdc-monitor/types' import { variableTypeDetection } from './is' /** *MITO的全局变量 * * @export * @interface MitoSupport */ export interface MitoSupport { logger: Logger replaceFlag: { [key in EventTypes]?: boolean } record?: any[] deviceInfo?: DeviceInfo } interface MITOGlobal { console?: Console __MITO__?: MitoSupport } export const isNodeEnv = variableTypeDetection.isProcess(typeof process !== 'undefined' ? process : 0) export const isWxMiniEnv = variableTypeDetection.isObject(typeof wx !== 'undefined' ? wx : 0) && variableTypeDetection.isFunction(typeof App !== 'undefined' ? App : 0) export const isBrowserEnv = variableTypeDetection.isWindow(typeof window !== 'undefined' ? window : 0) /** * 获取全局变量 * * ../returns Global scope object */ export function getGlobal<T>() { if (isBrowserEnv) return window as unknown as MITOGlobal & T if (isWxMiniEnv) return wx as unknown as MITOGlobal & T // it's true when run e2e if (isNodeEnv) return process as unknown as MITOGlobal & T } // whether it is right use & const _global = getGlobal<Window & WechatMiniprogram.Wx>() const _support = getGlobalMitoSupport() /** * 获取全局变量__MITO__的引用地址 * * @return {*} {MitoSupport} */ function getGlobalMitoSupport(): MitoSupport { _global.__MITO__ = _global.__MITO__ || ({} as MitoSupport) return _global.__MITO__ } export { _global, _support } // _support.replaceFlag = _support.replaceFlag || {} // const replaceFlag = _support.replaceFlag // export function setFlag(replaceType: EventTypes, isSet: boolean): void { // if (replaceFlag[replaceType]) return // replaceFlag[replaceType] = isSet // } // export function getFlag(replaceType: EventTypes): boolean { // return replaceFlag[replaceType] ? true : false // } export function supportsHistory(): boolean { // borrowed from: https://github.com/angular/angular.js/pull/13945/files const chrome = (_global as any).chrome const isChromePackagedApp = chrome && chrome.app && chrome.app.runtime const hasHistoryApi = 'history' in _global && !!_global.history.pushState && !!_global.history.replaceState return !isChromePackagedApp && hasHistoryApi }