mustard-app
Version:
个人前端微应用建设中。。。
81 lines (71 loc) • 2.01 kB
text/typescript
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;
}