UNPKG

mustard-app

Version:

个人前端微应用建设中。。。

81 lines (71 loc) 2.01 kB
import { IApp, MustardName } from '../typings'; type TMustardAppInfos = typeof window['mustardAppInfos']; export const mustardAppInfos:TMustardAppInfos = window.mustardAppInfos = window?.mustardAppInfos ?? { currentReadDocMAppName: '', // 子应用临时标识 appInstanceMap: new Map<MustardName, IApp>(), // 当前子应用的实例 getAppProxyWindow (appName: MustardName) { // eslint-disable-next-line no-use-before-define const app = getAppFromInstance(appName); if(app) { return app.sandbox.proxyWindow; } return null; } }; /** * 获取所以实例app.name * @returns IApp[] */ export function getAllApp () { return Array.from(mustardAppInfos.appInstanceMap.keys()); } /** * 实例写入缓存 * @param name 子应用标识 * @param app 实例 * @returns */ export function addInstance (name:MustardName, app: IApp) { return mustardAppInfos.appInstanceMap.set(name, app); } /** * 删除实例 * @param name 子应用标识 */ export function removeInstance (name:MustardName) { mustardAppInfos.appInstanceMap.delete(name); } /** * 获取实例 * @param name 子应用标识 * @returns IApp */ export function getAppFromInstance (name:MustardName) { return mustardAppInfos.appInstanceMap.get(name); } /** * 子应用是否存在 * @param name 子应用标识 * @returns */ export function appIsExist (name:MustardName) { return mustardAppInfos.appInstanceMap.has(name); } /** * 设置子应用标识 * 用于后续同步步骤的消费 * e.g document.querySelector * @param appName */ export function setReadDocumentName (appName:MustardName) { return mustardAppInfos.currentReadDocMAppName = appName; } /** * 消费标识 * @returns */ export function consumption () { const name = mustardAppInfos.currentReadDocMAppName; mustardAppInfos.currentReadDocMAppName = ''; return name; }