@blueking/bk-weweb 0.0.34 → 0.0.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -828,7 +828,7 @@ var Style = class {
828
828
  rawDocument?.head?.append(fontStyle);
829
829
  }
830
830
  }
831
- styleElement.textContent = cssText.replace(/^\:root$/gm, ":host");
831
+ styleElement.textContent = cssText.replace(/(:?:root|html)/gm, ":host");
832
832
  }
833
833
  this.scoped = true;
834
834
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context/cache.ts","../src/typings/source.ts","../src/typings/model.ts","../src/typings/sandbox.ts","../src/utils/common.ts","../src/context/document.ts","../src/context/event.ts","../src/context/function.ts","../src/context/window.ts","../src/context/sandbox.ts","../src/utils/custom.ts","../src/utils/element.ts","../src/utils/fetch.ts","../src/entry/style.ts","../src/mode/instance.ts","../src/entry/script.ts","../src/mode/app.ts","../src/utils/load-source.ts","../src/entry/entry.ts","../src/cache/app-cache.ts","../src/base-app/element.ts","../src/base-app/collect-source.ts","../src/context/element.ts","../src/lifecircle/before-load.ts","../src/lifecircle/activated.ts","../src/lifecircle/deactivated.ts","../src/lifecircle/load.ts","../src/lifecircle/unmount.ts","../src/component/web-compnent.ts","../src/lifecircle/mount.ts","../src/lifecircle/unload.ts","../src/preload/preload.ts","../src/index.ts"],"sourcesContent":["/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport type { BaseModel } from '../typings';\n// 当前正在运行的app\nlet currentRunningApp: BaseModel | null = null;\nexport function getCurrentRunningApp() {\n return currentRunningApp;\n}\nexport function setCurrentRunningApp(appInstance: BaseModel | null) {\n currentRunningApp = appInstance;\n}\nexport const SCOPED_CSS_STYLE_ID = 'SCOPED_CSS_STYLE_ID';\nexport const windowNativeFuncMap = new Map<PropertyKey, true>();\nconst globalContextCode = `const { ${[\n 'Array',\n 'ArrayBuffer',\n 'Boolean',\n 'constructor',\n 'DataView',\n 'Date',\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n 'Error',\n 'escape',\n 'eval',\n 'EvalError',\n 'Float32Array',\n 'Float64Array',\n 'Function',\n 'hasOwnProperty',\n 'Infinity',\n 'Int16Array',\n 'Int32Array',\n 'Int8Array',\n 'isFinite',\n 'isNaN',\n 'isPrototypeOf',\n 'JSON',\n 'Map',\n 'Math',\n 'NaN',\n 'Number',\n 'Object',\n 'parseFloat',\n 'parseInt',\n 'Promise',\n 'propertyIsEnumerable',\n 'Proxy',\n 'RangeError',\n 'ReferenceError',\n 'Reflect',\n 'RegExp',\n 'Set',\n 'String',\n 'Symbol',\n 'SyntaxError',\n 'toLocaleString',\n 'toString',\n 'TypeError',\n 'Uint16Array',\n 'Uint32Array',\n 'Uint8Array',\n 'Uint8ClampedArray',\n 'undefined',\n 'unescape',\n 'URIError',\n 'valueOf',\n 'WeakMap',\n 'WeakSet',\n].join(',')} }= this;`;\nexport const getGlobalContextCode = () => {\n return globalContextCode;\n};\n/**\n * 收集原生window方法\n */\nconst collectNativeWindowFunc = () => {\n const keyList = Object.getOwnPropertyNames(window);\n for (const key of keyList) {\n if (\n !windowNativeFuncMap.has(key) &&\n key.match(/^[A-Z]/) &&\n typeof window[key] === 'function' &&\n (window[key] as any).toString().includes('[native code]')\n ) {\n windowNativeFuncMap.set(key, true);\n }\n }\n};\ncollectNativeWindowFunc();\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n/**\n * 接口定义:样式选项\n */\nexport interface IStyleOption {\n code: string; // 样式代码\n fromHtml: boolean; // 是否来自 HTML\n initial?: boolean; // 是否初始样式\n prefetch?: boolean; // 是否预取样式\n preload?: boolean; // 是否预加载样式\n url?: string; // 样式文件的 URL\n}\n\nexport interface IScriptOption {\n async: boolean; // 是否为异步脚本\n code: string; // 脚本代码\n defer: boolean; // 是否为延迟脚本\n fromHtml: boolean; // 是否从 HTML 中提取\n initial?: boolean; // 是否为初始脚本\n isModule: boolean; // 是否为模块类型脚本\n url?: string; // 脚本的 URL 地址\n}\n\nexport const CSS_ATTRIBUTE_KEY = 'id';\n\nexport enum CssRuleEnum {\n MEDIA_RULE = 4,\n STYLE_RULE = 1,\n SUPPORTS_RULE = 12,\n}\ntype ValueOf<T> = T[keyof T];\nexport type DocumentEventListener = (this: Document, ev: ValueOf<DocumentEventMap>) => any;\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport type { AppState } from '../common';\nimport { WewebCustomAttrs } from '../component/web-compnent';\nimport type SandBox from '../context/sandbox';\nimport type { EntrySource } from '../entry/entry';\nimport type { fetchSource } from '../utils/fetch';\nimport type { SourceType } from '../utils/load-source';\n\nexport interface IComponentProps {\n // 传递给子应用的数据 默认保存\n [WewebCustomAttrs.data]?: string;\n // entry mode js | config | html 默认 html\n [WewebCustomAttrs.mode]?: WewebMode;\n // 是否共享主应用路由\n [WewebCustomAttrs.scopeLocation]?: boolean;\n // 是否使用shadowDom\n [WewebCustomAttrs.setShodowDom]?: boolean;\n // 是否在dom上显示源码 默认不显示 内存执行\n [WewebCustomAttrs.showSourceCode]?: boolean;\n // url 必选\n [WewebCustomAttrs.url]: string;\n}\n\n// 基础属性接口\nexport interface IBaseModelProps {\n // entry mode js | config | html 默认 html\n [WewebCustomAttrs.mode]?: WewebMode;\n // url 必选\n [WewebCustomAttrs.url]: string;\n id?: null | string;\n // 是否是预加载\n isPreLoad?: boolean;\n}\n\n// app模式属性配置\nexport interface IAppModleProps extends IBaseModelProps {\n // 传递给子应用的数据 默认保存\n [WewebCustomAttrs.data]?: Record<string, unknown>;\n // 是否缓存dom\n [WewebCustomAttrs.keepAlive]?: boolean;\n // 是否启用样式隔离 默认隔离\n [WewebCustomAttrs.scopeCss]?: boolean;\n // 是否使用沙盒隔离 默认隔离\n [WewebCustomAttrs.scopeJs]?: boolean;\n // 是否共享主应用路由\n [WewebCustomAttrs.scopeLocation]?: boolean;\n // 是否使用shadowDom\n [WewebCustomAttrs.setShodowDom]?: boolean;\n // 是否在dom上显示源码 默认不显示 内存执行\n [WewebCustomAttrs.showSourceCode]?: boolean;\n container?: HTMLElement | ShadowRoot | null;\n // 初始化source 如 ['http://www.hostname.com/a.js', 'http://www.hostname.com/b.css']\n initSource?: SourceType;\n}\n\nexport interface IJsModelProps extends IBaseModelProps {\n // 传递给实例render方法的数据\n [WewebCustomAttrs.data]?: Record<string, unknown>;\n // 是否在dom上显示源码 默认显示\n [WewebCustomAttrs.showSourceCode]?: boolean;\n // 容器\n container?: HTMLElement | ShadowRoot | null;\n // 初始化source 如 ['http://www.hostname.com/a.js', 'http://www.hostname.com/b.css']\n initSource?: SourceType;\n // 是否缓存dom\n keepAlive?: boolean;\n // 是否启用样式隔离 默认隔离\n scopeCss?: boolean;\n // 是否使用沙盒隔离 默认不隔离\n scopeJs?: boolean;\n}\n\nexport interface BaseModel {\n activated<T>(container: HTMLElement | ShadowRoot, callback?: (instance: BaseModel, exportInstance?: T) => void): void;\n container?: HTMLElement | ShadowRoot;\n deactivated(): void;\n get appCacheKey(): string;\n get status(): AppState;\n // eslint-disable-next-line perfectionist/sort-interfaces\n initSource?: SourceType;\n isModuleApp?: boolean;\n // 初始化source 如 ['http://www.hostname.com/a.js', 'http://www.hostname.com/b.css']\n isPreLoad: boolean;\n keepAlive?: boolean;\n mount<T>(container?: HTMLElement | ShadowRoot, callback?: (instance: BaseModel, exportInstance?: T) => void): void;\n name: string;\n onError(): void;\n onMount(): void;\n registerRunningApp(): void;\n sandBox?: SandBox;\n // 是否启用样式隔离 默认隔离\n scopeCss?: boolean;\n scopeJs: boolean;\n set status(v: AppState);\n showSourceCode?: boolean;\n source?: EntrySource;\n start(): Promise<void>;\n unmount(needDestroy?: boolean): void;\n url: string;\n fetchSource?: typeof fetchSource;\n}\n\nexport enum WewebMode {\n APP = 'app',\n CONFIG = 'config',\n INSTANCE = 'js',\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/**\n * Interface for injecting window attributes.\n */\nexport interface IInjectWindowAttrs {\n __BK_WEWEB_APP_KEY__: string; // The app key for the BK WEWEB platform.\n __BK_WEWEB_DATA__: Record<string, unknown>; // Additional data for BK WEWEB.\n __POWERED_BY_BK_WEWEB__: boolean; // Indicates if the page is powered by BK WEWEB.\n rawDocument: Document; // The original document object.\n rawWindow: Window; // The original window object.\n}\n\nexport const WINDOW_WHITE_LIST: PropertyKey[] = [\n 'System', // SystemJS\n '__cjsWrapper', // SystemJS CommonJS wrapper\n process.env.NODE_ENV !== 'production' ? '__REACT_DEVTOOLS_GLOBAL_HOOK__' : '',\n];\n// 一定需要在子应用自身上下文获取的属性名\nexport const BK_WEWEB_INJECT_KEY_LIST: PropertyKey[] = [\n '__POWERED_BY_BK_WEWEB__',\n '__BK_WEWEB_APP_KEY__',\n '__BK_WEWEB_DATA__',\n];\nexport const WINDOW_ALIAS_LIST: PropertyKey[] = ['window', 'self', 'globalThis'];\n// 设置了scopedLocation 后需要监听属性名\nexport const BK_WEWEB_LOCATION_KEY_LIST: PropertyKey[] = ['location', 'history'];\nconst COMMON_MICRO_APP_WINDOE_KEY_MAP: Record<PropertyKey, true> = {\n __bk_pop_manager: true,\n __bk_zIndex_manager: true,\n i18n: true,\n};\nexport const DEV_MICRO_APP_WINDOE_KEY_MAP: Record<PropertyKey, true> =\n process.env.NODE_ENV !== 'production'\n ? {\n __DEV__: true,\n __VUE_DEVTOOLS_GLOBAL_HOOK__: true,\n __VUE_DEVTOOLS_HOOK_REPLAY__: true,\n __VUE_DEVTOOLS_PLUGINS__: true,\n __VUE_I18N_FULL_INSTALL__: true,\n __VUE_I18N_LEGACY_API__: true,\n __VUE_OPTIONS_API__: true,\n '__core-js_shared__': true,\n webpackChunkapm: true,\n webpackChunkpc: true,\n webpackChunktrace: true,\n webpackJsonp: true,\n ...COMMON_MICRO_APP_WINDOE_KEY_MAP,\n }\n : COMMON_MICRO_APP_WINDOE_KEY_MAP;\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n/**\n * 使用 nextTask 函数将回调函数添加到下一个任务队列中执行。\n * @param cb 回调函数\n * @returns Promise 对象,用于异步处理回调函数\n */\nexport const nextTask: (cb: () => void) => any = cb => Promise.resolve().then(cb);\n\n/**\n * 使用 nextTick 函数将回调函数添加到全局任务队列中执行。\n * 如果已经有任务在等待执行,则不会重复添加任务。\n * @param cb 回调函数\n */\nlet globalTaskPending = false;\nexport function nextTick(cb: () => void): void {\n if (!globalTaskPending) {\n globalTaskPending = true;\n nextTask(() => {\n cb();\n globalTaskPending = false;\n });\n }\n}\n\n/**\n * 给 URL 添加协议头\n * @param url 要添加协议头的 URL\n * @returns 添加了协议头后的 URL\n */\nexport function addUrlProtocol(url: string): string {\n if (url.startsWith('//')) return `${location.protocol}${url}`;\n if (!url.startsWith('http')) return `${location.protocol}//${url}`;\n return url;\n}\n\n/**\n *\n * @param path 路径\n * @param baseURI 基础路径\n * @returns\n */\nexport function fillUpPath(path: string, baseURI: string): string {\n if (!path || /^((((ht|f)tps?)|file):)?\\/\\//.test(path) || /^(data|blob):/.test(path)) return path;\n const { origin, pathname } = new URL(addUrlProtocol(baseURI));\n return new URL(path, `${origin}${pathname}`.replace(/\\.(\\w+)$/, '/')).toString();\n}\n\n/**\n * 生成随机url\n */\nexport function randomUrl(): string {\n return `inline-${random(16)}`;\n}\n\n/**\n * requestIdleCallback polyfill\n */\nexport const requestIdleCallback =\n window.requestIdleCallback ||\n ((cb: CallableFunction) => {\n const start = Date.now();\n return setTimeout(() => {\n cb({\n didTimeout: false,\n timeRemaining() {\n return Math.max(0, 50 - (Date.now() - start));\n },\n });\n }, 1);\n });\n\n/**\n * cancelIdleCallback polyfill\n */\nexport const cancelIdleCallback =\n window.cancelIdleCallback ||\n ((id: number) => {\n clearTimeout(id);\n });\n\n/**\n *\n * @param n 生成字符串的长度\n * @param str 生成字符串的范围\n * @returns string\n */\nexport const random = (n: number, str = 'abcdefghijklmnopqrstuvwxyz0123456789') => {\n // 生成n位长度的字符串\n let result = '';\n for (let i = 0; i < n; i++) {\n result += str[Number.parseInt((Math.random() * str.length).toString(), 10)];\n }\n return result;\n};\n\n/**\n *\n * @param url string\n * @returns boolean\n * @description 判断是否是jsonp请求\n */\nexport const isJsonpUrl = (url: null | string) => {\n if (!url) return false;\n if (url.match(/\\.js$/)) return false;\n const { pathname } = new URL(addUrlProtocol(url));\n return !pathname.match(/\\.js$/);\n};\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport type { BaseModel } from '../typings/model';\nconst SPECIAL_ELEMENT_TAG = ['body', 'html', 'head'];\n/**\n * 创建代理的document\n * @param rawDocument 原始document\n * @param app 应用实例\n * @returns 代理的document\n */\nexport const createProxyDocument = (rawDocument: Document, app: BaseModel) => {\n const fakeDocument = {};\n function shadowRootInsertAdjacentHTML(where: InsertPosition, domString: string) {\n const temporaryContainer = document.createElement('div');\n temporaryContainer.innerHTML = domString;\n const elements = Array.from(temporaryContainer.childNodes);\n const shadow = app.container! as ShadowRoot;\n switch (where) {\n case 'beforebegin':\n elements.forEach(el => shadow.host.parentNode?.insertBefore(el, shadow.host));\n break;\n case 'afterbegin':\n elements.reverse().forEach(el => shadow.insertBefore(el, shadow.firstChild));\n break;\n case 'beforeend':\n elements.forEach(el => shadow.appendChild(el));\n break;\n case 'afterend':\n elements.forEach(el => shadow.host.parentNode?.insertBefore(el, shadow.host.nextSibling));\n break;\n }\n }\n const proxyBody = new Proxy(\n {},\n {\n get(_, key) {\n // ShadowRoot 处理逻辑简化\n if (app.container instanceof ShadowRoot) {\n if (key === 'insertAdjacentHTML') {\n // shadowRoot 中没有 insertAdjacentHTML\n return shadowRootInsertAdjacentHTML.bind(app.container);\n }\n const value = app.container[key];\n if (typeof value === 'function') {\n return value.bind(app.container);\n }\n if (value !== undefined) {\n return value;\n }\n }\n // 直接返回 rawDocument.body 的属性或绑定函数\n const value = Reflect.get(rawDocument.body, key);\n return typeof value === 'function' ? value.bind(rawDocument.body) : value;\n },\n set(_, key, value) {\n // ShadowRoot 处理逻辑简化\n if (app.container instanceof ShadowRoot) {\n app.container[key] = value;\n return true;\n }\n // 直接设置 rawDocument.body 的属性\n Reflect.set(rawDocument.body, key, value);\n return true;\n },\n },\n );\n /**\n * @param tagName 标签名\n * @param options 选项\n * @returns\n */\n function createElement<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n options?: ElementCreationOptions | undefined,\n ) {\n const element = rawDocument.createElement(tagName, options);\n // img.src = 'xxx' iframe.src = 'xxx' 均不能在setAttributes上监听 但是这里所有的src都是 全地址 无法判断是否需要添加子应用域名\n // if (tagName.toLocaleLowerCase() === 'img') {\n // const observer = new MutationObserver((list, observer) => {\n // observer.disconnect();\n // const url = new URL((element as HTMLImageElement).src)\n // (element as HTMLImageElement).src = `${}`\n // });\n // observer.observe(element, { attributeFilter: ['src'], subtree: false, childList: false });\n // }\n element.__BK_WEWEB_APP_KEY__ = app.appCacheKey;\n return element;\n }\n /**\n * 查询选择器的新方法\n * @param selectors 选择器字符串\n * @returns 匹配的元素或 null\n */\n function querySelectorNew(this: Document, selectors: string) {\n if (selectors === proxyBody) {\n return app.container instanceof ShadowRoot ? app.container : rawDocument.body;\n }\n // 如果选择器是特殊元素标签\n if (SPECIAL_ELEMENT_TAG.includes(selectors)) {\n // 如果当前应用程序容器是 ShadowRoot 类型\n if (app?.container instanceof ShadowRoot) {\n return app?.container;\n }\n // 否则调用原始的 querySelector 方法\n return rawDocument.querySelector.call(this, selectors);\n }\n // 返回当前应用程序容器中匹配选择器的元素,如果没有匹配的元素则返回 null\n try {\n return app?.container?.querySelector(selectors) ?? null;\n } catch {\n return null;\n }\n }\n /**\n * 重写了 Document 类的 querySelectorAll 方法\n * @param selectors - 要查询的选择器\n * @returns 匹配到的元素列表或空数组\n */\n function querySelectorAllNew(selectors: string) {\n // 如果选择器是特殊元素标签,则返回容器元素或调用原生 querySelector 方法\n if (SPECIAL_ELEMENT_TAG.includes(selectors)) {\n if (app?.container instanceof ShadowRoot) {\n return app?.container;\n }\n return rawDocument.querySelector(selectors);\n }\n // 返回运行中应用程序的容器元素中匹配到的元素列表或空数组\n return app?.container?.querySelectorAll(selectors) ?? [];\n }\n function getElementByIdNew(key: string) {\n return querySelectorNew.call(rawDocument, `#${key}`);\n }\n function getElementsByClassName(key: string) {\n return querySelectorAllNew(`.${key}`);\n }\n function getElementsByTagName<K extends keyof HTMLElementTagNameMap>(key: K) {\n if (SPECIAL_ELEMENT_TAG.includes(key) || (!app?.showSourceCode && key.toLocaleLowerCase() === 'script')) {\n return rawDocument.getElementsByTagName(key);\n }\n return querySelectorAllNew(key);\n }\n function getElementsByNameNew(key: string) {\n return querySelectorAllNew(`[name=${key}]`);\n }\n return new Proxy(fakeDocument, {\n get(_, key: string | symbol) {\n if (key === 'createElement') {\n return createElement.bind(rawDocument);\n }\n if (key === 'querySelector') {\n return querySelectorNew.bind(rawDocument);\n }\n if (key === 'querySelectorAll') {\n return querySelectorAllNew.bind(rawDocument);\n }\n if (key === 'getElementById') {\n return getElementByIdNew.bind(rawDocument);\n }\n if (key === 'getElementsByClassName') {\n return getElementsByClassName.bind(rawDocument);\n }\n if (key === 'getElementsByTagName') {\n return getElementsByTagName.bind(rawDocument);\n }\n if (key === 'getElementsByName') {\n return getElementsByNameNew.bind(rawDocument);\n }\n if (key === 'body') {\n return proxyBody;\n }\n const result = Reflect.get(rawDocument, key);\n if (typeof result === 'function') {\n return result.bind(rawDocument);\n }\n return result;\n },\n });\n};\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getCurrentRunningApp } from './cache';\n\nimport type { DocumentEventListener } from '../typings';\n// rewrite document and body event listener\nexport function rewriteDocumentAndBodyEvent(): { resetDocumentAndBodyEvent: () => void } {\n const { addEventListener, removeEventListener } = window.document;\n const { addEventListener: bodyAddEventListener, removeEventListener: bodyRemoveEventListener } = window.document.body;\n const documentListenerMap = new Map<keyof DocumentEventMap, DocumentEventListener[]>();\n document.addEventListener = function <K extends keyof DocumentEventMap>(\n type: K,\n listener: DocumentEventListener,\n options?: AddEventListenerOptions | boolean | undefined,\n ): void {\n const app = getCurrentRunningApp();\n if (app?.keepAlive) {\n const listeners = documentListenerMap.get(type) || [];\n documentListenerMap.set(type, [...listeners, listener]);\n }\n addEventListener.call(app?.container instanceof ShadowRoot ? app.container : this, type, listener, options);\n };\n document.body.addEventListener = document.addEventListener;\n\n document.removeEventListener = function <K extends keyof DocumentEventMap>(\n type: K,\n listener: DocumentEventListener,\n options?: AddEventListenerOptions | boolean,\n ): void {\n const app = getCurrentRunningApp();\n if (app?.keepAlive) {\n const listeners = documentListenerMap.get(type) || [];\n if (listeners.length && listeners.some(l => l === listener)) {\n listeners.splice(listeners.indexOf(listener), 1);\n }\n }\n removeEventListener.call(app?.container instanceof ShadowRoot ? app.container : this, type, listener, options);\n };\n document.body.removeEventListener = document.removeEventListener;\n\n function resetDocumentAndBodyEvent(): void {\n const app = getCurrentRunningApp();\n if (app?.keepAlive && documentListenerMap.values()) {\n Array.from(documentListenerMap.entries()).forEach(([type, listeners]) => {\n listeners?.forEach(listener => {\n document.removeEventListener.call(document, type, listener);\n });\n });\n }\n document.addEventListener = addEventListener;\n document.body.addEventListener = bodyAddEventListener;\n document.removeEventListener = removeEventListener;\n document.body.removeEventListener = bodyRemoveEventListener;\n documentListenerMap.clear();\n }\n return {\n resetDocumentAndBodyEvent,\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// 正则表达式,用于匹配类定义\nconst CLASS_REGEX = /^class\\b/;\n\n// 正则表达式,用于匹配以大写字母开头的函数定义\nconst COMMON_CONTRUCT_FU_REGEX = /^function\\b\\s[A-Z].*/;\n\n// WeakMap 对象,用于缓存构造函数是否可实例化的结果\nconst ConstructFunCacheMap = new WeakMap<FunctionConstructor | any, boolean>();\n\n/**\n * 判断一个函数是否可实例化\n * @param fn - 要判断的函数\n * @returns 可实例化返回 true,否则返回 false\n */\nexport function isConstructFun(fn: () => FunctionConstructor | any) {\n // 如果函数的原型的构造函数等于函数本身,并且原型对象上有超过一个属性,则认为是可实例化的\n if (fn.prototype?.constructor === fn && Object.getOwnPropertyNames(fn.prototype).length > 1) {\n return true;\n }\n\n // 如果在缓存中已经存在该函数的判断结果,则直接返回\n if (ConstructFunCacheMap.has(fn)) {\n return ConstructFunCacheMap.get(fn);\n }\n\n // 使用正则表达式测试函数的字符串表示,判断是否可实例化\n const constructable = COMMON_CONTRUCT_FU_REGEX.test(fn.toString()) || CLASS_REGEX.test(fn.toString());\n\n // 将判断结果保存到缓存中\n ConstructFunCacheMap.set(fn, constructable);\n\n return constructable;\n}\n\n// 创建一个弱映射,用于存储函数和其绑定版本之间的关系\nconst functionBoundedValueMap = new WeakMap<CallableFunction, CallableFunction>();\n\n// 导出默认函数,用于将给定的值绑定到原始窗口对象\nexport default function bindFunctionToRawWindow(rawWindow: Window, value: any): unknown {\n // 如果值已经存在于映射中,直接返回与该值相关联的绑定版本\n if (functionBoundedValueMap.has(value)) {\n return functionBoundedValueMap.get(value);\n }\n // 如果值是一个函数且不是构造函数\n if (typeof value === 'function' && !isConstructFun(value)) {\n // 创建一个绑定到原始窗口对象的函数\n const boundValue = Function.prototype.bind.call(value, rawWindow);\n // 将原始函数的属性复制到绑定版本上\n for (const key in value) {\n boundValue[key] = value[key];\n }\n // 如果原始函数拥有原型并且绑定版本没有原型\n if (value.hasOwnProperty('prototype') && !boundValue.hasOwnProperty('prototype')) {\n // 将原始函数的原型属性设置到绑定版本上\n Object.defineProperty(boundValue, 'prototype', { enumerable: false, value: value.prototype, writable: true });\n }\n // 如果原始函数拥有 toString 方法\n if (typeof value.toString === 'function') {\n // 检查原始函数是否拥有 toString 属性,且绑定版本没有该属性\n const valueHasInstanceToString = value.hasOwnProperty('toString') && !boundValue.hasOwnProperty('toString');\n // 检查绑定版本的 toString 是否与 Function.prototype.toString 相同\n const boundValueHasPrototypeToString = boundValue.toString === Function.prototype.toString;\n\n // 如果原始函数的 toString 属性需要继承\n if (valueHasInstanceToString || boundValueHasPrototypeToString) {\n // 获取原始 toString 属性的描述符\n const originToStringDescriptor = Object.getOwnPropertyDescriptor(\n valueHasInstanceToString ? value : Function.prototype,\n 'toString',\n );\n\n // 将绑定版本的 toString 属性设置为与原始函数相同的方法\n Object.defineProperty(boundValue, 'toString', {\n ...originToStringDescriptor,\n ...(originToStringDescriptor?.get ? null : { value: () => value.toString() }),\n });\n }\n }\n // 将原始函数和绑定版本存储到映射中\n functionBoundedValueMap.set(value, boundValue);\n // 返回绑定版本\n return boundValue;\n }\n // 如果不是函数或是构造函数,则直接返回原始值\n return value;\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport type { DocumentEventListener } from '../typings';\n// rewrite window funtion like settimeout setinterval ...\nexport function rewriteWindowFunction(fakeWindow: Window & any): Record<string, CallableFunction> {\n const windowEventLisenerMap = new Map<string, DocumentEventListener[]>();\n const intervalTimerList: ReturnType<typeof setInterval>[] = [];\n const rawWindow = window;\n const { addEventListener, clearInterval, removeEventListener, setInterval } = window;\n\n fakeWindow.addEventListener = (\n type: string,\n listener: DocumentEventListener,\n options?: AddEventListenerOptions | boolean,\n ): void => {\n windowEventLisenerMap.set(type, [...(windowEventLisenerMap.get(type) || []), listener]);\n addEventListener.call(rawWindow, type, listener, options);\n };\n fakeWindow.removeEventListener = (\n type: string,\n listener: DocumentEventListener,\n options?: AddEventListenerOptions | boolean,\n ): void => {\n const listenerList = windowEventLisenerMap.get(type);\n if (listenerList?.length) {\n const index = listenerList.indexOf(listener);\n index > -1 && listenerList.splice(index, 1);\n }\n removeEventListener.call(rawWindow, type, listener, options);\n };\n fakeWindow.setInterval = (\n handler: TimerHandler | string,\n timeout?: number | undefined,\n ...args: any[]\n ): ReturnType<typeof setInterval> => {\n const timer = setInterval.call(rawWindow, handler as any, timeout, ...(args as []));\n intervalTimerList.push(timer);\n return timer;\n };\n fakeWindow.clearInterval = (timer: ReturnType<typeof setInterval>) => {\n const index = intervalTimerList.indexOf(timer);\n index > -1 && intervalTimerList.splice(index, 1);\n clearInterval.call(rawWindow, timer as any);\n };\n // reset all event listener & interval & timeout when unmount app\n function resetWindowFunction() {\n // clear window events listener\n if (windowEventLisenerMap.size) {\n windowEventLisenerMap.forEach((listenerList, type) => {\n listenerList.forEach(listener => removeEventListener.call(rawWindow, type, listener));\n });\n windowEventLisenerMap.clear();\n }\n // clear settimeout timers\n if (intervalTimerList.length) {\n intervalTimerList.forEach(timer => {\n clearInterval.call(rawWindow, timer);\n });\n }\n }\n return {\n resetWindowFunction,\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/member-ordering */\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { MicroAppModel } from '../mode/app';\nimport {\n BK_WEWEB_INJECT_KEY_LIST,\n BK_WEWEB_LOCATION_KEY_LIST,\n type BaseModel,\n DEV_MICRO_APP_WINDOE_KEY_MAP,\n type IInjectWindowAttrs,\n WINDOW_ALIAS_LIST,\n WINDOW_WHITE_LIST,\n} from '../typings';\nimport { random } from '../utils/common';\nimport { windowNativeFuncMap } from './cache';\nimport { createProxyDocument } from './document';\nimport { rewriteDocumentAndBodyEvent } from './event';\nimport bindFunctionToRawWindow from './function';\nimport { rewriteWindowFunction } from './window';\nexport default class SandBox {\n private active = false;\n private inRawWindowKeySet = new Set<PropertyKey>();\n private resetDocumentAndBodyEvent?: CallableFunction;\n private resetWindowFunction: CallableFunction;\n private sameRawWindowKeySet = new Set<PropertyKey>();\n\n public fakeWindow: Window & IInjectWindowAttrs;\n public proxyDocument: any;\n public proxyWindow: WindowProxy & IInjectWindowAttrs;\n public rawDocument: Record<string, any>;\n public rawWindow: Window;\n public windowSymbolKey: keyof Window;\n constructor(public app: BaseModel) {\n const windowDescriptorSet = new Set<PropertyKey>();\n const rawWindow = window;\n this.rawWindow = rawWindow;\n this.rawDocument = createProxyDocument(document, app);\n const fakeWindow = Object.create({});\n fakeWindow.__BK_WEWEB_APP_KEY__ = app.appCacheKey;\n fakeWindow.__POWERED_BY_BK_WEWEB__ = true;\n fakeWindow.rawDocument = document;\n fakeWindow.rawWindow = rawWindow;\n fakeWindow.__proto__ = Window;\n this.fakeWindow = fakeWindow as Window & IInjectWindowAttrs;\n\n const { resetWindowFunction } = rewriteWindowFunction(this.fakeWindow);\n this.resetWindowFunction = resetWindowFunction;\n this.windowSymbolKey = `__${(app.name || app.appCacheKey).replace(/(-|,|:|~|'|\")/gim, '_')}_${random(\n 10,\n )}__` as keyof Window;\n this.proxyWindow = new Proxy(this.fakeWindow, {\n // Object.defineProperty(window, key, Descriptor)\n defineProperty: (target: Window, key: PropertyKey, value: PropertyDescriptor): boolean => {\n if (windowDescriptorSet.has(key)) {\n return Reflect.defineProperty(rawWindow, key, value);\n }\n return Reflect.defineProperty(target, key, value);\n },\n deleteProperty: (target: Window, key: PropertyKey): boolean => {\n if (Object.hasOwn(target, key)) {\n this.sameRawWindowKeySet.has(key) && this.sameRawWindowKeySet.delete(key);\n this.inRawWindowKeySet.has(key) && Reflect.deleteProperty(rawWindow, key);\n return Reflect.deleteProperty(target, key);\n }\n return true;\n },\n get: (target: Window, key: string | symbol): unknown => {\n if (key === Symbol.unscopables || windowNativeFuncMap.has(key)) return rawWindow[key as any];\n if (DEV_MICRO_APP_WINDOE_KEY_MAP[key]) return this.fakeWindow[key as any];\n if (WINDOW_ALIAS_LIST.includes(key as string)) return this.proxyWindow;\n if (key === 'document') {\n app.registerRunningApp();\n return this.rawDocument;\n }\n if (key === 'eval') {\n app.registerRunningApp();\n // biome-ignore lint/security/noGlobalEval: <explanation>\n return eval;\n }\n if (\n BK_WEWEB_LOCATION_KEY_LIST.includes(key) &&\n this.app instanceof MicroAppModel &&\n this.app.iframe &&\n this.app.scopeLocation\n ) {\n return this.app.iframe.contentWindow?.[key];\n }\n if (key === 'hasOwnProperty')\n return (key: PropertyKey) => Object.hasOwn(this.fakeWindow, key) || Object.hasOwn(rawWindow, key);\n if (key === 'top' || key === 'parent') {\n if (rawWindow === rawWindow.parent) {\n return this.proxyWindow;\n }\n return Reflect.get(rawWindow, key); // iframe\n }\n if (key === 'getComputedStyle') {\n return (element: Element, pseudoElt?: null | string) => {\n if (element instanceof Element) {\n return rawWindow.getComputedStyle(element, pseudoElt);\n }\n return rawWindow.getComputedStyle(document.body, pseudoElt);\n };\n }\n if (Reflect.has(target, key) || BK_WEWEB_INJECT_KEY_LIST.includes(key)) return Reflect.get(target, key);\n const rawValue = Reflect.get(rawWindow, key);\n return bindFunctionToRawWindow(rawWindow, rawValue);\n },\n getOwnPropertyDescriptor: (target: any, key: PropertyKey): PropertyDescriptor | undefined => {\n if (Object.hasOwn(target, key)) {\n return Object.getOwnPropertyDescriptor(target, key);\n }\n if (Object.hasOwn(rawWindow, key)) {\n windowDescriptorSet.add(key);\n const descriptor = Object.getOwnPropertyDescriptor(rawWindow, key);\n if (descriptor && !descriptor.configurable) {\n descriptor.configurable = true;\n }\n return descriptor;\n }\n return undefined;\n },\n has: (target: Window & any, key: PropertyKey): boolean =>\n windowNativeFuncMap.has(key) || key in target || key in rawWindow,\n // Object.getOwnPropertyNames(window)\n ownKeys: (target: Window & any): Array<string | symbol> =>\n Array.from(new Set(Reflect.ownKeys(rawWindow).concat(Reflect.ownKeys(target)))),\n set: (target: any, key: PropertyKey, value: unknown): boolean => {\n if (this.active) {\n // 设置了scope location,需要同步到iframe\n if (\n BK_WEWEB_LOCATION_KEY_LIST.includes(key) &&\n this.app instanceof MicroAppModel &&\n this.app.iframe &&\n this.app.scopeLocation\n ) {\n return Reflect.set(this.app.iframe.contentWindow!, key, value);\n }\n // 共享主应用 location\n if (key === 'location') {\n Reflect.set(rawWindow, key, value);\n } else if (\n !Object.hasOwn(target, key) &&\n Object.hasOwn(rawWindow, key) &&\n !BK_WEWEB_INJECT_KEY_LIST.includes(key)\n ) {\n const descriptor = Object.getOwnPropertyDescriptor(rawWindow, key);\n const { configurable, enumerable, writable } = descriptor!;\n if (writable) {\n Object.defineProperty(target, key, {\n configurable,\n enumerable,\n value,\n writable,\n });\n this.sameRawWindowKeySet.add(key);\n }\n } else {\n Reflect.set(target, key, value);\n this.sameRawWindowKeySet.add(key);\n }\n if (\n WINDOW_WHITE_LIST.includes(key) &&\n !Reflect.has(rawWindow, key) &&\n !BK_WEWEB_INJECT_KEY_LIST.includes(key)\n ) {\n Reflect.set(rawWindow, key, value);\n this.inRawWindowKeySet.add(key);\n }\n }\n return true;\n },\n });\n // if (app.showSourceCode) {\n // }\n rawWindow[this.windowSymbolKey as any] = this.proxyWindow;\n }\n /**\n *\n * @param data data for sandbox\n * @description active hook for sandbox\n */\n activated(data?: Record<string, unknown>): void {\n if (!this.active) {\n this.active = true;\n this.rawDocument = createProxyDocument(document, this.app);\n this.fakeWindow.__BK_WEWEB_DATA__ = data ?? {};\n const { resetDocumentAndBodyEvent } = rewriteDocumentAndBodyEvent();\n this.resetDocumentAndBodyEvent = resetDocumentAndBodyEvent;\n }\n }\n /**\n *\n * @description decativated hook for sandbox\n */\n deactivated(): void {\n if (!this.active) return;\n this.active = false;\n this.resetWindowFunction();\n for (const key of this.inRawWindowKeySet) {\n Reflect.deleteProperty(window, key);\n }\n this.inRawWindowKeySet.clear();\n this.resetDocumentAndBodyEvent?.();\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nconst ELEMENT_TARGET_NAME = ['currentTarget', 'srcElement', 'target'];\n/**\n *\n * @param event\n * @param element\n * @returns {Event} event\n * @description 为事件对象添加 element 属性\n */\nexport function defineEventSourceElement(element: HTMLLinkElement | HTMLScriptElement, eventName = 'custom'): Event {\n return Object.defineProperties(\n new CustomEvent(eventName),\n ELEMENT_TARGET_NAME.reduce<Record<PropertyKey, any>>((props, name) => {\n props[name] = {\n get() {\n return element;\n },\n };\n return props;\n }, {}),\n );\n}\n/**\n *\n * @param element HTMLLinkElement | HTMLScriptElement\n * @description 触发 link 或者 script 的 onload 事件\n */\nexport function dispatchLinkOrScriptLoad(element: HTMLLinkElement | HTMLScriptElement): void {\n const event = defineEventSourceElement(element, 'load');\n if (typeof element.onload === 'function') {\n element.onload!(event);\n return;\n }\n element.dispatchEvent(event);\n}\n/**\n *\n * @param element HTMLLinkElement | HTMLScriptElement\n * @description 触发 link 或者 script 的 onerror 事件\n */\nexport function dispatchLinkOrScriptError(element: HTMLLinkElement | HTMLScriptElement): void {\n const event = defineEventSourceElement(element, 'error');\n if (typeof element.onerror === 'function') {\n element.onerror!(event);\n return;\n }\n element.dispatchEvent(event);\n}\n","/* eslint-disable @typescript-eslint/ban-types */\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { Script } from '../entry/script';\nimport { Style } from '../entry/style';\nimport { isJsonpUrl, randomUrl } from './common';\nimport { dispatchLinkOrScriptLoad } from './custom';\n\nimport type { BaseModel } from '../typings';\n\nconst { appendChild: bodyAppendChild } = HTMLBodyElement.prototype;\nexport function resetNewElement(parent: Node, child: Node, app: BaseModel): Node {\n if (child instanceof HTMLStyleElement) {\n if (child.hasAttribute('exclude')) {\n return document.createComment('【bk-weweb】style with exclude attribute is ignored');\n }\n if (child.textContent) {\n // 父级应用样式已生效情况下 即可忽略子应用对应样式 web component的隔离下优化不生效\n if (!(app.container instanceof ShadowRoot) && appCache.getBaseAppStyle(child.textContent)) {\n return document.createComment('【bk-weweb】style is effective in base app');\n }\n }\n // else {\n // const observer = new MutationObserver(() => {\n // if (child.textContent) {\n // observer.disconnect();\n // if (!(app.container instanceof ShadowRoot)\n // && appCache.getBaseAppStyle(child.textContent)) {\n // debugger;\n // console.info('--------------');\n // child.sheet!.disabled = true;\n // child.setAttribute('aaaaaaaaaaaa', '------');\n // parent.removeChild(child);\n // }\n // }\n // });\n // observer.observe(child, { attributeFilter: ['src'], childList: true, subtree: false });\n // }\n if (!child.hasAttribute('ignore')) {\n const styleInstance = new Style({\n code: child.textContent || '',\n fromHtml: false,\n url: '',\n });\n app.source?.setStyle(randomUrl(), styleInstance);\n styleInstance.scopedStyleCSS(app, child);\n }\n return child;\n }\n if (child instanceof HTMLLinkElement) {\n const result = app.source?.collectLink(child, parent, true);\n if (!result) return child;\n if (result.style) {\n result.style.scopedLinkCSS(app, child);\n }\n if (result.replace !== child) {\n return result.replace;\n }\n return child;\n }\n if (child instanceof HTMLScriptElement) {\n const replaceInfo = app.source!.collectScript(child, parent, true);\n if (!replaceInfo) {\n return child;\n }\n if (replaceInfo.script) {\n replaceInfo.script.executeCode(app);\n }\n if (replaceInfo.replace !== child) {\n return replaceInfo.replace;\n }\n if (app.scopeJs && !child.getAttribute('src') && !child.textContent) {\n const observer = new MutationObserver(() => {\n if (child.getAttribute('src')) {\n observer.disconnect();\n const scriptInfo = app.source!.collectScript(child, parent, true);\n if (scriptInfo?.replace) {\n bodyAppendChild.call(app.container, scriptInfo.replace);\n }\n // 处理异步jsonp\n if (isJsonpUrl(child.getAttribute('src'))) {\n app.container?.append(child);\n return;\n }\n if (scriptInfo?.script) {\n scriptInfo.script.executeCode(app);\n }\n child.remove();\n } else if (child.textContent) {\n observer.disconnect();\n const scriptInstance = new Script({\n async: false,\n code: child.textContent,\n defer: child.type === 'module',\n fromHtml: false,\n isModule: child.type === 'module',\n });\n app.source!.scripts.set(randomUrl(), scriptInstance);\n try {\n scriptInstance.executeCode(app);\n } catch (e) {\n console.error(e);\n } finally {\n !scriptInstance.isModule && dispatchLinkOrScriptLoad(child);\n child.remove();\n }\n }\n });\n observer.observe(child, { attributeFilter: ['src'], childList: true, subtree: false });\n return document.createComment('【bk-weweb】dynamic script or module');\n }\n return child;\n }\n return child;\n}\nexport function isSpecialElement(node: Node) {\n return node instanceof HTMLScriptElement || node instanceof HTMLStyleElement || node instanceof HTMLLinkElement;\n}\n// biome-ignore lint/complexity/noBannedTypes: <explanation>\nexport function elementAppendHandler(parent: Node, newChild: Node, rawMethod: Function) {\n if (newChild.__BK_WEWEB_APP_KEY__) {\n const app = appCache.getApp(newChild.__BK_WEWEB_APP_KEY__);\n if (app?.container) {\n const targetChild = resetNewElement(parent, newChild, app);\n const needKeepAlive = isSpecialElement(newChild) && !!app.keepAlive && !(app.container instanceof ShadowRoot);\n const container = needKeepAlive ? document.head : app?.container;\n setMarkElement(targetChild as Element, app, needKeepAlive);\n return rawMethod.call(container, targetChild);\n }\n }\n return rawMethod.call(parent, newChild);\n}\n// biome-ignore lint/complexity/noBannedTypes: <explanation>\nexport function elementInsertHandler(parent: Node, newChild: Node, passiveChild: Node | null, rawMethod: Function) {\n if (newChild.__BK_WEWEB_APP_KEY__) {\n const app = appCache.getApp(newChild.__BK_WEWEB_APP_KEY__!);\n if (app?.container) {\n const needKeepAlive = isSpecialElement(newChild) && app.keepAlive && !(app.container instanceof ShadowRoot);\n const container = needKeepAlive ? document.head : app?.container;\n const targetChild = resetNewElement(parent, newChild, app);\n if (needKeepAlive) {\n setMarkElement(targetChild as Element, app, needKeepAlive);\n }\n if (passiveChild && !container.contains(passiveChild)) {\n return bodyAppendChild.call(container, targetChild);\n }\n return rawMethod.call(container, targetChild, passiveChild);\n }\n }\n return rawMethod.call(parent, newChild, passiveChild);\n}\n\nexport function setMarkElement<T extends Element>(element: T, app?: BaseModel, keepAlive?: boolean): T {\n if (keepAlive && app) {\n element.__KEEP_ALIVE__ = app.appCacheKey;\n element.setAttribute('data-from', app.name);\n element.setAttribute('data-keep-alive', 'true');\n }\n element.setAttribute?.('powered-by', 'bk-weweb');\n return element;\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport weWeb from '..';\n\nimport type { BaseModel } from '../typings';\n\nexport function fetchSource(url: string, options = {}, app?: BaseModel): Promise<string> {\n if (typeof app?.fetchSource === 'function') {\n return app.fetchSource(url, options).catch(() => '');\n }\n if (weWeb.fetchSource) {\n return weWeb.fetchSource(url, options);\n }\n return window.fetch(url, options).then(res => res.text());\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { appCache } from '../cache/app-cache';\n// import { disabledStyleDom } from '../context/cache';\nimport { type BaseModel, CssRuleEnum, type IStyleOption } from '../typings';\nimport { setMarkElement } from '../utils';\nimport { addUrlProtocol, fillUpPath } from '../utils/common';\nimport { dispatchLinkOrScriptError, dispatchLinkOrScriptLoad } from '../utils/custom';\nimport { fetchSource } from '../utils/fetch';\n\nexport class Style {\n code = '';\n fromHtml: boolean;\n initial: boolean;\n prefetch = false;\n preload = false;\n scoped: boolean;\n scopedCode = '';\n url: string | undefined;\n constructor({ code, fromHtml, initial, prefetch, preload, url }: IStyleOption) {\n this.scoped = false;\n this.code = code;\n this.prefetch = prefetch ?? false;\n this.preload = preload ?? false;\n this.url = url;\n this.fromHtml = fromHtml;\n this.initial = initial ?? false;\n }\n /**\n * @param styleElement 样式node\n * @param app 应用实例\n */\n commonScoped(styleElement: HTMLStyleElement, app: BaseModel) {\n if (app.scopeCss && !(app.container instanceof ShadowRoot)) {\n const cssStyleSheet = new CSSStyleSheet({ disabled: true });\n cssStyleSheet.replaceSync(styleElement.textContent || this.code);\n const rules: CSSRule[] = Array.from(cssStyleSheet?.cssRules ?? []);\n const cssPrefix = `#${app.name}`;\n const scopedCss = this.scopeRule(rules, cssPrefix);\n const cssText = this.resetUrlHost(scopedCss, app.url, this.url);\n styleElement.textContent = cssText;\n this.scopedCode = cssText;\n } else {\n const cssText = this.resetUrlHost(styleElement.textContent || this.code || '', app.url, this.url);\n // fix https://bugs.chromium.org/p/chromium/issues/detail?id=336876\n if (cssText && app.container instanceof ShadowRoot) {\n let fontContent = '';\n for (const fontFace of cssText.match(/@font-face\\s*\\{[^}]+\\}/g) || []) {\n fontContent += `${fontFace}\\n`;\n }\n const rawDocument = app.sandBox?.rawDocument;\n if (rawDocument && fontContent) {\n const fontStyle = rawDocument.createElement('style');\n fontStyle.setAttribute('type', 'text/css');\n fontStyle.setAttribute('powered-by', 'bk-weweb');\n fontStyle.textContent = fontContent;\n rawDocument?.head?.append(fontStyle);\n }\n }\n styleElement.textContent = cssText.replace(/^\\:root$/gm, ':host');\n }\n this.scoped = true;\n }\n createStyleElement() {\n const styleElement = document.createElement('style');\n if (styleElement.__BK_WEWEB_APP_KEY__) {\n styleElement.__BK_WEWEB_APP_KEY__ = undefined;\n }\n return styleElement;\n }\n /**\n * @param app 应用实例\n * @returns 返回执行后的style标签\n */\n async executeCode(app: BaseModel): Promise<HTMLStyleElement> {\n app.registerRunningApp();\n let styleElement = this.createStyleElement();\n styleElement.setAttribute('type', 'text/css');\n styleElement.textContent = this.code!;\n try {\n if (!this.code) await this.getCode(app);\n styleElement = this.scopedStyleCSS(app, styleElement);\n this.scoped = true;\n } catch (e) {\n console.error('scoped style error', e);\n }\n return styleElement;\n }\n async getCode(app?: BaseModel): Promise<string> {\n if (this.code.length || !this.url) {\n return this.code;\n }\n let code = '';\n if (app?.source?.styles?.has(this.url)) {\n code = app.source.styles.get(this.url)?.code || '';\n }\n if (!code && appCache.getCacheStyle(this.url)) {\n const style = appCache.getCacheStyle(this.url);\n code = style?.code || '';\n }\n if (!code) {\n code = await fetchSource(this.url, {}, app).catch(() => '');\n }\n this.code = code;\n return code;\n }\n // 主应用已生效的样式 不再应用在子应用\n linkedBaseStyle(styleElement: HTMLStyleElement, app: BaseModel) {\n if (\n !(app.container instanceof ShadowRoot) &&\n styleElement.textContent &&\n appCache.getBaseAppStyle(styleElement.textContent)\n ) {\n styleElement.textContent = '';\n styleElement.innerHTML = '';\n styleElement.setAttribute('linked-from-base', 'true');\n return true;\n }\n return false;\n }\n resetPackRule(rule: CSSMediaRule | CSSSupportsRule, prefix: string, packName: string): string {\n const result = this.scopeRule(Array.from(rule.cssRules), prefix);\n return `@${packName} ${rule.conditionText} {${result}}`;\n }\n resetUrlHost(cssText: string, uri: string, linkPath?: string) {\n let baseURI = uri;\n return cssText.replace(/url\\([\"']?([^)\"']+)[\"']?\\)/gm, (text, $1) => {\n if (/^(data|blob):/.test($1) || /^(https?:)?\\/\\//.test($1)) {\n return text;\n }\n if (/^((\\.\\.?\\/)|[^/])/.test($1) && linkPath) {\n const pathArr = linkPath.split('/');\n pathArr.pop();\n baseURI = addUrlProtocol(`${pathArr.join('/')}/`);\n }\n return `url(\"${fillUpPath($1, baseURI)}\")`;\n });\n }\n scopeRule(rules: CSSRule[], cssPrefix: string): string {\n let result = '';\n for (const rule of rules) {\n switch (rule.type) {\n case CssRuleEnum.STYLE_RULE:\n result += this.scopeStyleRule(rule as CSSStyleRule, cssPrefix);\n break;\n case CssRuleEnum.MEDIA_RULE:\n result += this.resetPackRule(rule as CSSMediaRule, cssPrefix, 'media');\n break;\n case CssRuleEnum.SUPPORTS_RULE:\n result += this.resetPackRule(rule as CSSSupportsRule, cssPrefix, 'supports');\n break;\n default:\n result += rule.cssText;\n break;\n }\n }\n return result.replace(/^\\s+/, '');\n }\n scopeStyleRule(rule: CSSStyleRule, prefix: string): string {\n const { cssText, selectorText } = rule;\n if (/^((html[\\s>~,]+body)|(html|body|:root))$/.test(selectorText)) {\n return cssText.replace(/^((html[\\s>~,]+body)|(html|body|:root))/, prefix);\n }\n if (selectorText === '*') {\n return cssText.replace('*', `${prefix} *`);\n }\n\n const builtInRootSelectorRE = /(^|\\s+)((html[\\s>~]+body)|(html|body|:root))(?=[\\s>~]+|$)/;\n\n return cssText.replace(/^[\\s\\S]+{/, selectors =>\n selectors.replace(/(^|,)([^,]+)/g, (all, $1, $2) => {\n if (builtInRootSelectorRE.test($2)) {\n return all.replace(builtInRootSelectorRE, prefix);\n }\n return `${$1} ${prefix} ${$2.replace(/^\\s*/, '')}`;\n }),\n );\n }\n scopedLinkCSS(app: BaseModel, linkElement: HTMLLinkElement): HTMLStyleElement {\n const styleElement = this.createStyleElement();\n styleElement.setAttribute('type', 'text/css');\n const needKeepAlive = !!app.keepAlive && !(app.container instanceof ShadowRoot);\n setMarkElement(styleElement, app, needKeepAlive);\n const container = needKeepAlive ? document.head : app.container;\n try {\n if (this.code) {\n this.commonScoped(styleElement, app);\n container?.prepend(styleElement);\n linkElement && dispatchLinkOrScriptLoad(linkElement);\n } else if (linkElement.getAttribute('href')) {\n this.url = fillUpPath(linkElement.getAttribute('href')!, app.url);\n this.getCode(app).then(() => {\n this.scopedStyleCSS(app, styleElement);\n linkElement.remove();\n container?.prepend(styleElement);\n linkElement && dispatchLinkOrScriptLoad(linkElement);\n this.scoped = true;\n });\n } else {\n const observer = new MutationObserver(() => {\n if (!linkElement.href) return;\n observer.disconnect();\n this.url = fillUpPath(linkElement.getAttribute('href')!, app.url);\n this.getCode(app).then(() => {\n this.scopedStyleCSS(app, styleElement);\n linkElement.remove();\n container?.prepend(styleElement);\n linkElement && dispatchLinkOrScriptLoad(linkElement);\n this.scoped = true;\n });\n });\n observer.observe(linkElement, { attributeFilter: ['href'], childList: false, subtree: false });\n }\n } catch {\n linkElement && dispatchLinkOrScriptError(linkElement);\n }\n return styleElement;\n }\n scopedStyleCSS(app: BaseModel, styleElement: HTMLStyleElement): HTMLStyleElement {\n const needKeepAlive = !!app.keepAlive && !(app.container instanceof ShadowRoot);\n setMarkElement(styleElement, app, needKeepAlive);\n if (this.code || styleElement.textContent) {\n if (styleElement.textContent) {\n styleElement.textContent = '';\n styleElement.innerHTML = '';\n }\n if (this.linkedBaseStyle(styleElement, app)) return styleElement;\n this.commonScoped(styleElement, app);\n } else {\n const observer = new MutationObserver(() => {\n if (!(styleElement.textContent || styleElement.sheet?.cssRules?.length)) return;\n observer.disconnect();\n if (!this.linkedBaseStyle(styleElement, app)) {\n this.commonScoped(styleElement, app);\n }\n });\n observer.observe(styleElement, { attributes: false, characterData: true, childList: true, subtree: true });\n }\n this.url && styleElement.setAttribute('origin-src', this.url);\n return styleElement;\n }\n}\n\nexport async function executeAppStyles(app: BaseModel, container?: Element | ShadowRoot) {\n const styleList: Style[] = Array.from(app.source!.styles.values());\n const promiseList: Promise<HTMLStyleElement>[] = [];\n for (const style of styleList) {\n promiseList.push(style.executeCode(app));\n }\n await Promise.all(promiseList).then((styleElementList: HTMLStyleElement[]) => {\n const parentElement = container || app.container;\n if (app.keepAlive && !(parentElement instanceof ShadowRoot)) {\n document.head.append(...styleElementList);\n } else {\n parentElement?.append(...styleElementList);\n }\n });\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { setCurrentRunningApp } from '../context/cache';\nimport SandBox from '../context/sandbox';\nimport { EntrySource } from '../entry/entry';\nimport { execAppScripts } from '../entry/script';\nimport { executeAppStyles } from '../entry/style';\nimport { type BaseModel, CSS_ATTRIBUTE_KEY, type IJsModelProps } from '../typings';\nimport { random } from '../utils/common';\n\nimport type { fetchSource } from '../utils/fetch';\nimport type { SourceType } from '../utils/load-source';\n// bk-kweweb 微模块模式\nexport class MicroInstanceModel implements BaseModel {\n private state: AppState = AppState.UNSET; // 当前实例状态\n appCacheKey: string; // 缓存key\n container?: HTMLElement | ShadowRoot; // 容器\n data: Record<string, unknown>; // 数据\n initSource: SourceType; // 初始资源\n isPreLoad = false; // 是否预加载\n keepAlive: boolean; // 是否缓存\n name: string; // 名称\n sandBox?: SandBox; // 沙箱\n scopeCss = true; // 是否隔离样式\n scopeJs = false; // 是否隔离js\n showSourceCode = true; // 是否显示源码\n source?: EntrySource; // 入口资源\n url: string; // url\n fetchSource?: typeof fetchSource;\n constructor(props: IJsModelProps & { fetchSource?: typeof fetchSource }) {\n this.name = props.id !== props.url ? props.id! : random(5);\n this.appCacheKey = props.id || this.name;\n this.url = props.url;\n this.container = props.container ?? undefined;\n this.scopeJs = props.scopeJs ?? true;\n this.showSourceCode = props.showSourceCode ?? true;\n this.scopeCss = props.scopeCss ?? true;\n this.keepAlive = props.keepAlive ?? false;\n this.data = props.data ?? {};\n this.initSource = props.initSource ?? [];\n // 是否启用沙盒\n if (this.scopeJs) {\n this.sandBox = new SandBox(this);\n }\n this.fetchSource = props.fetchSource;\n }\n activated<T>(\n container: HTMLElement | ShadowRoot,\n callback?: (instance: BaseModel, exportInstance?: T) => void,\n ): void {\n this.isPreLoad = false;\n this.state = AppState.ACTIVATED;\n if (this.container && container) {\n if (container instanceof Element) container?.setAttribute(CSS_ATTRIBUTE_KEY, this.name);\n const fragment = document.createDocumentFragment();\n for (const node of Array.from(this.container.childNodes)) {\n fragment.appendChild(node);\n }\n container.appendChild(fragment);\n this.container = container;\n this.sandBox?.activated();\n const scriptInfo = this.source?.getScript(this.url);\n callback?.(this, scriptInfo?.exportInstance);\n }\n }\n deactivated(): void {\n this.state = AppState.DEACTIVATED;\n this.sandBox?.deactivated();\n }\n mount<T>(\n container?: HTMLElement | ShadowRoot,\n callback?: (instance: MicroInstanceModel, exportInstance: T) => void,\n ): void {\n this.isPreLoad = false;\n this.container = container ?? this.container!;\n this.state = AppState.MOUNTING;\n if (this.container instanceof HTMLElement) {\n this.container?.setAttribute(CSS_ATTRIBUTE_KEY, this.name);\n }\n this.container.innerHTML = '';\n const instanceWrap = document.createElement('div');\n const wrapId = `${this.name}-wrapper`;\n instanceWrap.setAttribute('id', wrapId);\n if (this.source?.styles.size) {\n executeAppStyles(this, this.container);\n }\n this.container.appendChild(instanceWrap);\n this.sandBox?.activated();\n execAppScripts(this).finally(() => {\n this.state = AppState.MOUNTED;\n const scriptInfo = this.source?.getScript(this.url);\n if (typeof scriptInfo?.exportInstance?.render === 'function') {\n scriptInfo.exportInstance.render(instanceWrap, this.data);\n }\n callback?.(this, scriptInfo?.exportInstance);\n });\n }\n onError(): void {\n this.state = AppState.ERROR;\n }\n onMount(): void {\n if (this.isPreLoad) return;\n this.state = AppState.LOADED;\n this.mount();\n }\n registerRunningApp() {\n setCurrentRunningApp(this);\n Promise.resolve().then(() => setCurrentRunningApp(null));\n }\n async start(): Promise<void> {\n if (!this.source || [AppState.ERROR, AppState.UNSET].includes(this.status)) {\n this.source = new EntrySource(this.url);\n await this.source.importEntry(this);\n }\n }\n unmount(needDestroy?: boolean): void {\n this.state = AppState.UNMOUNT;\n this.sandBox?.deactivated();\n needDestroy && appCache.deleteApp(this.url);\n this.container!.innerHTML = '';\n this.container = undefined;\n }\n set status(v: AppState) {\n this.state = v;\n }\n get status(): AppState {\n return this.state;\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { appCache } from '../cache/app-cache';\nimport { getGlobalContextCode } from '../context/cache';\nimport { MicroAppModel } from '../mode/app';\nimport { MicroInstanceModel } from '../mode/instance';\nimport { setMarkElement } from '../utils';\nimport { fetchSource } from '../utils/fetch';\n\nimport type { BaseModel, IScriptOption } from '../typings';\n\nlet firstGlobalProp: string | undefined;\nlet secondGlobalProp: string | undefined;\nlet lastGlobalProp: string | undefined;\n\n// Script脚本实例\nexport class Script {\n async = false;\n code = '';\n defer = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n exportInstance?: any;\n fromHtml: boolean;\n initial: boolean;\n isModule = false;\n scoped: boolean;\n url: string | undefined;\n\n constructor({ async, code, defer, fromHtml, initial, isModule, url }: IScriptOption) {\n this.code = code;\n this.async = async;\n this.defer = defer;\n this.isModule = isModule;\n this.url = url;\n this.scoped = false;\n this.fromHtml = fromHtml ?? false;\n this.initial = initial ?? false;\n }\n /**\n * @param app 应用\n * @param needReplaceScriptElement 是否需要替换script标签\n * @returns 返回执行后的script标签或注释\n */\n async executeCode(\n app: BaseModel,\n needReplaceScriptElement = false,\n ): Promise<Comment | HTMLScriptElement | undefined> {\n try {\n if (!this.code) await this.getCode(app);\n if (app instanceof MicroInstanceModel) {\n const globalWindow = app.scopeJs ? app.sandBox?.proxyWindow || window : window;\n noteGlobalProps(globalWindow);\n }\n let scopedCode = this.code;\n scopedCode = this.transformCode(app);\n if (app.showSourceCode || this.isModule) {\n const scriptElement = document.createElement('script');\n if (scriptElement.__BK_WEWEB_APP_KEY__) {\n scriptElement.__BK_WEWEB_APP_KEY__ = undefined;\n }\n app.registerRunningApp();\n this.executeSourceScript(scriptElement, scopedCode);\n if (needReplaceScriptElement) return scriptElement;\n const needKeepAlive = !!app.keepAlive && !(app.container instanceof ShadowRoot);\n const container = needKeepAlive ? document.head : app.container;\n setMarkElement(scriptElement, app, needKeepAlive);\n container!.appendChild(scriptElement);\n } else {\n this.executeMemoryScript(app, scopedCode);\n if (needReplaceScriptElement) return document.createComment('【bk-weweb】dynamic script');\n }\n if (app instanceof MicroInstanceModel) {\n const globalWindow = app.scopeJs ? app.sandBox?.proxyWindow || window : window;\n const exportProp = getGlobalProp(globalWindow);\n if (exportProp) {\n this.exportInstance = globalWindow[exportProp];\n // window 下需清除全局副作用\n if (!app.scopeJs) {\n delete globalWindow[exportProp];\n }\n }\n }\n } catch (e) {\n console.error('execute script code error', e);\n }\n return;\n }\n // 内存脚本执行\n executeMemoryScript(app: BaseModel, scopedCode: string) {\n try {\n const isScopedLocation = app instanceof MicroAppModel && app.scopeLocation;\n app.registerRunningApp();\n\n new Function('window', 'location', 'history', scopedCode)(\n app.sandBox!.proxyWindow,\n isScopedLocation ? app.iframe!.contentWindow!.location : window.location,\n isScopedLocation ? app.iframe!.contentWindow!.history : window.history,\n );\n } catch (e) {\n console.error(e);\n }\n }\n // 脚本标签执行\n executeSourceScript(scriptElement: HTMLScriptElement, scopedCode: string): void {\n if (this.isModule) {\n scriptElement.src = `${this.url}?key=${Date.now()}`;\n // if (this.url?.match(/\\.ts$/)) {\n // // scriptElement.src = this.url + '?key=' + Date.now()!;\n // } else {\n // // const blob = new Blob([this.code], { type: 'text/javascript' });\n // // scriptElement.src = URL.createObjectURL(blob);\n // }\n scriptElement.setAttribute('type', 'module');\n } else {\n scriptElement.textContent = scopedCode;\n }\n this.url && scriptElement.setAttribute('origin-src', this.url);\n }\n // 获取脚本内容\n async getCode(app?: BaseModel): Promise<string> {\n if (this.code.length || !this.url) {\n return this.code;\n }\n let code = '';\n if (app?.source?.getScript(this.url)) {\n code = app.source.getScript(this.url)?.code || '';\n }\n if (!code && appCache.getCacheScript(this.url)) {\n code = appCache.getCacheScript(this.url)?.code || '';\n }\n if (!code) {\n code = await fetchSource(this.url, {}, app).catch(e => {\n console.error(`fetch script ${this.url} error`, e);\n return '';\n });\n }\n code = code.replace(/^\"use\\sstrict\";$/gim, '');\n this.code = code;\n return code;\n }\n setCode(code: string) {\n this.code = code;\n }\n // 转换脚本内容\n transformCode(app: BaseModel): string {\n // const sourceMapUrl = this.url ? `//# sourceURL=${this.url}\\n` : '';\n const sourceMapUrl = '';\n if (app.sandBox) {\n if (this.isModule) {\n return ` with(window.${app.sandBox.windowSymbolKey}){\n ;${this.code}\\n\n ${sourceMapUrl}\n }`;\n }\n if (app.showSourceCode) {\n return `;(function(window, self, globalThis){\n with(window){\n ${getGlobalContextCode()}\\n\n ${this.code}\\n\n ${sourceMapUrl}\n }\n }).call(window.${app.sandBox.windowSymbolKey},\n window.${app.sandBox.windowSymbolKey}, window.${app.sandBox.windowSymbolKey}, window.${app.sandBox.windowSymbolKey});`;\n }\n return `\n with(window) {\n try {\n ${getGlobalContextCode()}\\n\n ${this.code}\\n\n ${sourceMapUrl}\n }\n catch(e) {\n console.error(e)\n }\n }\n `;\n }\n return this.code;\n }\n}\n// 全局属性是否跳过标记\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function shouldSkipProperty(global: Window, p: any) {\n return (\n // biome-ignore lint/suspicious/noPrototypeBuiltins: <explanation>\n !global.hasOwnProperty(p) ||\n (!Number.isNaN(p) && p < global.length) ||\n (typeof navigator !== 'undefined' &&\n navigator.userAgent.indexOf('Trident') !== -1 &&\n global[p] &&\n typeof window !== 'undefined' &&\n global[p].parent === window)\n );\n}\n// 获取instance js source code 执行后 绑定的export 实例\nexport function getGlobalProp(global: Window, useFirstGlobalProp?: boolean) {\n let cnt = 0;\n let foundLastProp: boolean | undefined;\n let result: string | undefined;\n for (const p in global) {\n // do not check frames cause it could be removed during import\n if (shouldSkipProperty(global, p)) continue;\n if ((cnt === 0 && p !== firstGlobalProp) || (cnt === 1 && p !== secondGlobalProp)) return p;\n if (foundLastProp) {\n lastGlobalProp = p;\n result = (useFirstGlobalProp && result) || p;\n } else {\n foundLastProp = p === lastGlobalProp;\n }\n cnt += 1;\n }\n return result;\n}\n// 标记全局属性\nexport function noteGlobalProps(global: Window) {\n secondGlobalProp = undefined;\n firstGlobalProp = secondGlobalProp;\n for (const p in global) {\n if (shouldSkipProperty(global, p)) continue;\n if (!firstGlobalProp) firstGlobalProp = p;\n else if (!secondGlobalProp) secondGlobalProp = p;\n lastGlobalProp = p;\n }\n return lastGlobalProp;\n}\n// app初始化dom 脚本执行\nexport async function execAppScripts(app: BaseModel) {\n // const appInitialScriptList = Array.from(app.source!.scripts.values()).filter(script => script.initial);\n // // 初始化脚本最先执行\n // if (appInitialScriptList.length) {\n // await Promise.all(appInitialScriptList.map(script => script.executeCode(app)));\n // }\n const appScriptList = Array.from(app.source!.scripts.values()).filter(script => script.fromHtml || script.initial);\n const commonList = appScriptList.filter(script => (!script.async && !script.defer) || script.isModule);\n // 保证同步脚本 和 module类型 最先执行\n await Promise.all(commonList.map(script => script.getCode(app)));\n await Promise.all(commonList.map(script => script.executeCode(app)));\n\n // 最后执行 defer 和 async 脚本\n const deferScriptList: Promise<Comment | HTMLScriptElement | undefined>[] = [];\n const asyncScriptList: Promise<Comment | HTMLScriptElement | undefined>[] = [];\n // async defer 脚本执行\n for (const script of appScriptList) {\n if (script.defer || script.async) {\n if (!script.code && script.defer) {\n deferScriptList.push(script.executeCode(app));\n } else asyncScriptList.push(script.executeCode(app));\n }\n }\n await Promise.all([...asyncScriptList, ...deferScriptList]).catch(e => {\n console.error(e);\n });\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { setCurrentRunningApp } from '../context/cache';\nimport SandBox from '../context/sandbox';\nimport { EntrySource } from '../entry/entry';\nimport { execAppScripts } from '../entry/script';\nimport { type BaseModel, CSS_ATTRIBUTE_KEY, type IAppModleProps, WewebMode } from '../typings';\nimport { addUrlProtocol, random } from '../utils/common';\n\nimport type { SourceType } from '../utils/load-source';\n\nconst BLANK_ORIGN = 'about:blank';\n// bk-weweb 微应用模式\nexport class MicroAppModel implements BaseModel {\n private state: AppState = AppState.UNSET; // 状态\n container?: HTMLElement | ShadowRoot; // 容器\n public data: Record<string, unknown>; // 数据\n iframe: HTMLIFrameElement | null = null; // scoped iframe\n initSource: SourceType; // 初始资源\n isModuleApp = false; // 是否预加载\n public isPreLoad = false; // 是否缓存\n keepAlive: boolean;\n mode: WewebMode = WewebMode.APP; // 名称\n name: string; // 沙箱\n sandBox?: SandBox; // 是否隔离样式\n scopeCss: boolean; // 是否隔离js\n scopeJs: boolean; // 是否隔离location\n scopeLocation: boolean; // 是否显示源码\n showSourceCode: boolean; // 入口资源\n source?: EntrySource; // url\n url: string; // 是否是esm应用\n constructor(props: IAppModleProps) {\n this.name = props.id !== props.url ? props.id! : random(5);\n this.mode = props.mode ?? WewebMode.APP;\n this.container = props.container ?? undefined;\n this.showSourceCode = props.showSourceCode ?? false;\n this.url = props.url;\n this.data = props.data || {};\n this.scopeJs = props.scopeJs ?? true;\n this.scopeCss = props.scopeCss ?? true;\n this.scopeLocation = props.scopeLocation ?? false;\n this.isPreLoad = props.isPreLoad ?? false;\n this.keepAlive = props.keepAlive ?? false;\n this.initSource = props.initSource ?? [];\n if (this.scopeJs) {\n this.sandBox = new SandBox(this);\n }\n if (this.container instanceof HTMLElement) {\n this.container.setAttribute(CSS_ATTRIBUTE_KEY, this.name);\n }\n }\n // 激活\n activated(container: HTMLElement | ShadowRoot, callback?: (app: BaseModel) => void) {\n this.isPreLoad = false;\n this.state = AppState.ACTIVATED;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const app = this;\n if (container && this.container) {\n if (container instanceof Element) container!.setAttribute(CSS_ATTRIBUTE_KEY, this.name);\n const fragment = document.createDocumentFragment();\n const list = Array.from(this.container.childNodes);\n for (const node of list) {\n node.__BK_WEWEB_APP_KEY__ = this.appCacheKey;\n Object.defineProperties(node, {\n ownerDocument: {\n get() {\n return app.sandBox?.rawDocument;\n },\n },\n });\n fragment.appendChild(node);\n }\n container.innerHTML = '';\n container.appendChild(fragment);\n this.container = container;\n this.initShadowRootContainer();\n this.sandBox?.activated(this.data);\n callback?.(this);\n }\n }\n // 创建隔离iframe\n createIframe(): Promise<HTMLIFrameElement> {\n return new Promise(resolve => {\n const iframe = document.createElement('iframe');\n const url = new URL(addUrlProtocol(this.url));\n const isChrome = navigator.userAgent.indexOf('Chrome') > -1;\n iframe.setAttribute(\n 'src',\n `${isChrome ? BLANK_ORIGN : location.origin}${url.pathname || '/'}${url.search}${url.hash}`,\n );\n iframe.style.cssText = 'display: none;';\n document.body.appendChild(iframe);\n if (isChrome) {\n setTimeout(() => resolve(iframe), 0);\n } else {\n // 其他浏览器在about:blank下会出现同源检测安全错误 换另一种方式来做location保持\n const interval = setInterval(() => {\n if (iframe.contentWindow && iframe.contentWindow.location.href !== BLANK_ORIGN) {\n iframe.contentWindow!.stop();\n iframe.contentDocument!.body.parentElement!.innerHTML = '<head></head><body></body>';\n clearInterval(interval);\n resolve(iframe);\n }\n }, 0);\n }\n });\n }\n deactivated() {\n this.state = AppState.DEACTIVATED;\n this.sandBox?.deactivated();\n }\n initShadowRootContainer() {\n if (this.container instanceof ShadowRoot) {\n // inject echarts in shadowRoot\n Object.defineProperties(this.container, {\n getBoundingClientRect: {\n get() {\n return this.host.getBoundingClientRect;\n },\n },\n });\n }\n }\n mount(container?: HTMLElement | ShadowRoot, callback?: (app: BaseModel) => void): void {\n this.isPreLoad = false;\n this.container = container ?? this.container!;\n this.initShadowRootContainer();\n this.state = AppState.MOUNTING;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const app = this;\n if (this.container) {\n if (this.container instanceof Element) this.container!.setAttribute(CSS_ATTRIBUTE_KEY, this.name);\n const clonedNode = this.source!.html!.cloneNode(true);\n const fragment = document.createDocumentFragment();\n for (const node of Array.from(clonedNode.childNodes)) {\n node.__BK_WEWEB_APP_KEY__ = this.appCacheKey;\n Object.defineProperties(node, {\n ownerDocument: {\n get() {\n return app.sandBox?.rawDocument;\n },\n },\n });\n fragment.appendChild(node);\n }\n this.container.innerHTML = '';\n this.container.appendChild(fragment);\n this.sandBox?.activated(this.data);\n execAppScripts(this).finally(() => {\n this.state = AppState.MOUNTED;\n callback?.(this);\n });\n }\n }\n onError(): void {\n this.state = AppState.ERROR;\n }\n onMount(): void {\n if (this.isPreLoad) return;\n this.state = AppState.LOADED;\n this.mount();\n }\n registerRunningApp() {\n setCurrentRunningApp(this);\n Promise.resolve().then(() => setCurrentRunningApp(null));\n }\n async start() {\n if (!this.source || [AppState.ERROR, AppState.UNSET].includes(this.status)) {\n this.state = AppState.LOADING;\n if (this.scopeLocation || this.isModuleApp) {\n const iframe = await this.createIframe();\n this.iframe = iframe;\n }\n this.source = new EntrySource(this.url);\n await this.source.importEntry(this);\n }\n }\n unmount(needDestroy = false): void {\n this.state = AppState.UNMOUNT;\n this.sandBox?.deactivated();\n needDestroy && appCache.deleteApp(this.url);\n this.container!.innerHTML = '';\n this.container = undefined;\n }\n get appCacheKey(): string {\n return this.url;\n }\n public get status() {\n return this.state;\n }\n public set status(v: AppState) {\n this.state = v;\n }\n}\nexport const createApp = (props: IAppModleProps) => {\n appCache.deleteApp(props.url);\n const instance = new MicroAppModel(props);\n appCache.setApp(instance);\n};\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { Script } from '../entry/script';\nimport { Style } from '../entry/style';\n\nexport type SourceFuncType = () => Promise<string[]>;\n\nexport type SourceType = SourceFuncType | string[];\n\n// 收集和辩证资源\nexport async function collectSource(soruceList: SourceType) {\n let source: string[] = [];\n if (typeof soruceList === 'function') {\n source = await soruceList();\n } else {\n source = soruceList || [];\n }\n if (!source.length) return {};\n const collectScript: Map<string, Script> = new Map();\n const collectStyle: Map<string, Style> = new Map();\n source.forEach(str => {\n try {\n const url = new URL(str);\n if (url.pathname.match(/\\.js$/)) {\n const script = appCache.getCacheScript(str);\n collectScript.set(\n str,\n new Script({\n async: false,\n code: script?.code || '',\n defer: false,\n fromHtml: false,\n initial: true,\n isModule: false,\n url: str,\n }),\n );\n } else if (url.pathname.match(/\\.css$/)) {\n const style = appCache.getCacheStyle(str);\n collectStyle.set(\n str,\n new Style({\n code: style?.code || '',\n fromHtml: true,\n initial: true,\n prefetch: false,\n preload: false,\n url: str,\n }),\n );\n }\n } catch {\n console.error(`【bk-weweb】: ${str} is invalid URL`);\n }\n });\n return {\n collectScript,\n collectStyle,\n };\n}\n// 加载全局静态资源\nexport async function loadGlobalSource(soruceList: SourceType) {\n const { collectScript, collectStyle } = await collectSource(soruceList);\n const promiseList: Promise<string>[] = [];\n collectScript &&\n Array.from(collectScript.entries()).forEach(item => {\n promiseList.push(item[1].getCode());\n appCache.setBaseAppScript(...item);\n });\n collectStyle &&\n Array.from(collectStyle.entries()).forEach(item => {\n promiseList.push(item[1].getCode());\n appCache.setBaseAppStyle(...item);\n });\n await Promise.all(promiseList).catch(e => {\n throw e;\n });\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { MicroAppModel } from '../mode/app';\nimport { MicroInstanceModel } from '../mode/instance';\nimport { addUrlProtocol, fillUpPath, isJsonpUrl, randomUrl } from '../utils/common';\nimport { fetchSource } from '../utils/fetch';\nimport { collectSource } from '../utils/load-source';\nimport { Script } from './script';\nimport { Style, executeAppStyles } from './style';\n\nimport type { BaseModel, IScriptOption } from '../typings';\n\nconst SCRIPT_TYPE_NAMES = [\n 'text/javascript',\n 'text/ecmascript',\n 'application/javascript',\n 'application/ecmascript',\n 'module',\n];\nexport class EntrySource {\n html: HTMLElement | null = null;\n rawHtml?: string;\n scripts: Map<string, Script>;\n styles: Map<string, Style>;\n constructor(public url: string) {\n this.scripts = new Map();\n this.styles = new Map();\n }\n collectLink(\n link: HTMLLinkElement,\n parent: Node,\n needReplaceELement = false,\n ): { replace: Comment | Element; style?: Style } {\n if (link.hasAttribute('exclude')) {\n return { replace: document.createComment('【bk-weweb】style with exclude attribute is ignored') };\n }\n if (link.hasAttribute('ignore')) {\n return { replace: link };\n }\n const rel = link.getAttribute('rel');\n let href = link.getAttribute('href');\n let replaceElement: Comment;\n if (rel === 'stylesheet' && href) {\n href = fillUpPath(href, this.url);\n replaceElement = document.createComment(`【bk-weweb】style with href=${href}`);\n let styleInstance = this.getStyle(href);\n if (!styleInstance) {\n styleInstance = new Style({\n code: '',\n fromHtml: !needReplaceELement,\n prefetch: !!link.getAttribute('prefetch'),\n preload: !!link.getAttribute('preload'),\n url: href,\n });\n this.styles.set(href, styleInstance);\n }\n !needReplaceELement && parent.replaceChild(replaceElement, link);\n return { replace: replaceElement, style: styleInstance };\n }\n if (rel && ['apple-touch-icon', 'icon', 'prefetch', 'preload', 'prerender'].includes(rel)) {\n // preload prefetch icon ....\n replaceElement = document.createComment(`【bk-weweb】style with rel=${rel}${href ? ` & href=${href}` : ''}`);\n !needReplaceELement && parent.removeChild(link);\n return { replace: replaceElement };\n }\n if (href) {\n // dns-prefetch preconnect modulepreload search ....\n link.setAttribute('href', fillUpPath(href, this.url));\n }\n return { replace: link };\n }\n collectScript(\n script: HTMLScriptElement,\n parent: Node,\n needReplaceELement = false,\n ): { replace: Comment | Element; script?: Script } | undefined {\n if (\n script.hasAttribute('ignore') ||\n (script.type !== 'module' && isJsonpUrl(script.getAttribute('src'))) ||\n (script.hasAttribute('type') && !SCRIPT_TYPE_NAMES.includes(script.type))\n ) {\n return;\n }\n let replaceElement: Comment | null = null;\n if (script.hasAttribute('exclude')) {\n replaceElement = document.createComment('【bk-weweb】script element with exclude attribute is removed');\n !needReplaceELement && parent.replaceChild(replaceElement!, script);\n return { replace: replaceElement! };\n }\n let src: null | string = script.getAttribute('src');\n if (src) {\n src = fillUpPath(src, this.url);\n let scriptInstance = this.getScript(src);\n if (!scriptInstance) {\n scriptInstance = new Script({\n async: script.hasAttribute('async'),\n code: '',\n defer: script.defer || script.type === 'module',\n fromHtml: !needReplaceELement,\n isModule: script.type === 'module',\n url: src,\n });\n this.scripts.set(src, scriptInstance);\n }\n replaceElement = document.createComment(`【bk-weweb】script with src='${src}'`);\n !needReplaceELement && parent.replaceChild(replaceElement, script);\n return { replace: replaceElement, script: scriptInstance };\n }\n if (script.textContent) {\n const nonceStr: string = randomUrl();\n const scriptInstance = new Script({\n async: false,\n // code: script.textContent.replace(/var\\s+(\\w+)=/gm, `window.$1 = `),\n code: script.textContent,\n defer: script.type === 'module',\n fromHtml: !needReplaceELement,\n initial: false,\n isModule: script.type === 'module',\n url: nonceStr!,\n });\n this.scripts.set(nonceStr, scriptInstance);\n replaceElement = document.createComment('【bk-weweb】script with text content');\n !needReplaceELement && parent.replaceChild(replaceElement, script);\n return {\n replace: replaceElement,\n script: scriptInstance,\n };\n }\n return { replace: script };\n }\n collectScriptAndStyle(parent: HTMLElement): void {\n const links = Array.from(parent.querySelectorAll('link'));\n for (const link of links || []) {\n this.collectLink(link, link.parentElement!);\n }\n const styles = Array.from(parent.querySelectorAll('style'));\n for (const style of styles || []) {\n if (!style.hasAttribute('exclude') && !style.hasAttribute('ignore')) {\n this.styles.set(\n randomUrl(),\n new Style({\n code: style.textContent || '',\n fromHtml: true,\n url: '',\n }),\n );\n style.remove();\n }\n }\n const scripts = Array.from(parent.querySelectorAll('script'));\n for (const script of scripts) {\n this.collectScript(script, script.parentElement!);\n }\n const metas = Array.from(parent.querySelectorAll('meta'));\n for (const meta of metas) {\n meta.parentElement!.removeChild(meta);\n }\n const imgs = Array.from(parent.querySelectorAll('img'));\n for (const img of imgs) {\n if (img.hasAttribute('src')) {\n img.setAttribute('src', fillUpPath(img.getAttribute('src')!, this.url));\n }\n }\n // const children = Array.from(parent.children);\n // children?.forEach(dom => {\n // if (dom instanceof HTMLLinkElement) {\n // this.collectLink(dom, parent);\n // } else if (dom instanceof HTMLStyleElement) {\n // if (!dom.hasAttribute('exclude') && !dom.hasAttribute('ignore')) {\n // this.styles.set(\n // randomUrl(),\n // new Style({\n // code: dom.textContent || '',\n // fromHtml: true,\n // url: '',\n // }),\n // );\n // dom.remove();\n // }\n // } else if (dom instanceof HTMLScriptElement) {\n // this.collectScript(dom, parent);\n // } else if (dom instanceof HTMLMetaElement || dom instanceof HTMLTitleElement) {\n // parent.removeChild(dom);\n // } else if (dom instanceof HTMLImageElement && dom.hasAttribute('src')) {\n // dom.setAttribute('src', fillUpPath(dom.getAttribute('src')!, this.url));\n // }\n // });\n // children.length &&\n // children.forEach(child => {\n // this.collectScriptAndStyle(child as HTMLElement, app);\n // });\n }\n getScript(url: string) {\n return this.scripts.get(url);\n }\n getStyle(urlOrCode: string) {\n return this.styles.get(urlOrCode) || Array.from(this.styles.values()).find(style => style.code === urlOrCode);\n }\n async importEntry(app: BaseModel): Promise<void> {\n if (app.initSource?.length) {\n // 初始化配置的公共source资源\n const { collectScript, collectStyle } = await collectSource(app.initSource);\n if (collectScript) {\n this.scripts = collectScript;\n }\n if (collectStyle) {\n this.styles = collectStyle;\n }\n }\n if (app instanceof MicroAppModel) await this.importHtmlEntry(app);\n else if (app instanceof MicroInstanceModel) await this.importInstanceEntry(app);\n }\n async importHtmlEntry(app: MicroAppModel): Promise<void> {\n let htmlStr = appCache.getCacheHtml(this.url);\n if (!htmlStr) {\n htmlStr = await fetchSource(addUrlProtocol(this.url), { cache: 'no-cache' }, app);\n if (!htmlStr) {\n console.error('load app entry error, place check');\n return Promise.reject();\n }\n }\n this.rawHtml = htmlStr;\n const wrapElement = document.createElement('div');\n if (wrapElement.__BK_WEWEB_APP_KEY__) {\n wrapElement.__BK_WEWEB_APP_KEY__ = undefined;\n }\n wrapElement.innerHTML = htmlStr.replace(/<\\/?head>/gim, '').replace(/<\\/?body>/i, '');\n this.collectScriptAndStyle(wrapElement);\n await executeAppStyles(app, wrapElement);\n this.html = wrapElement;\n }\n async importInstanceEntry(app: BaseModel): Promise<void> {\n let jsStr = appCache.getCacheScript(this.url)?.code;\n if (!jsStr) {\n jsStr = await fetchSource(this.url, { cache: 'no-cache' }, app);\n }\n if (!jsStr) {\n console.error('load app entry error, place check');\n return Promise.reject();\n }\n this.scripts.set(\n this.url,\n new Script({\n async: false,\n code: jsStr,\n defer: false,\n fromHtml: true,\n isModule: !!this.url.match(/\\.ts$/),\n url: this.url,\n }),\n );\n }\n setScript(url: string, script: IScriptOption | Script) {\n this.scripts.set(url, script instanceof Script ? script : new Script(script));\n }\n setStyle(url: string, style: Style) {\n this.styles.set(url, style);\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { AppState } from '../common';\nimport { EntrySource } from '../entry/entry';\n\nimport type { Script } from '../entry/script';\nimport type { Style } from '../entry/style';\nimport type { BaseModel } from '../typings';\n// 所有应用缓存\nexport class AppCache {\n // todo 主应用共享资源包\n private baseSource: EntrySource;\n private cache: Map<string, BaseModel>;\n constructor() {\n this.cache = new Map();\n this.baseSource = new EntrySource(location.href);\n }\n // 删除缓存\n deleteApp(url: string) {\n this.cache.delete(url);\n }\n // 获取缓存app\n getApp(name?: null | string): BaseModel | undefined {\n if (!name) return undefined;\n const app = this.cache.get(name);\n if (app) return app;\n return Array.from(this.cache.values()).find((item: BaseModel) => item.name === name);\n }\n // 获取缓存app\n getBaseAppStyle(urlOrCode: string) {\n return this.baseSource.getStyle(urlOrCode);\n }\n getCacheHtml(url: string): string {\n const list = Array.from(this.cache.values());\n const app = list.find(item => item.url === url);\n if (app) return app.source?.rawHtml || '';\n return '';\n }\n getCacheScript(url: string): Script | undefined {\n let script: Script | undefined = this.baseSource.getScript(url);\n if (script) return;\n const list = Array.from(this.cache.values());\n list.some(app => {\n script = app.source?.getScript(url);\n return !!script;\n });\n return script;\n }\n getCacheStyle(url: string): Style | undefined {\n let style: Style | undefined = this.baseSource.getStyle(url);\n if (style) return;\n const list = Array.from(this.cache.values());\n list.some(app => {\n style = app.source?.getStyle(url);\n return !!style;\n });\n return style;\n }\n setApp(app: BaseModel) {\n this.cache.set(app.appCacheKey, app);\n }\n setBaseAppScript(url: string, script: Script) {\n this.baseSource.setScript(url, script);\n }\n setBaseAppStyle(url: string, style: Style) {\n this.baseSource.setStyle(url, style);\n }\n get hasActiveApp() {\n return Array.from(this.cache.values()).some((app: BaseModel) => app.status !== AppState.UNMOUNT);\n }\n}\nconst appCache = new AppCache();\n// 注册全局获取缓存app 或者 instance\nwindow.__getAppOrInstance__ = (id?: string) => {\n if (!id) return appCache;\n return appCache.getApp(id);\n};\nexport { appCache };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { Script } from '../entry/script';\nimport { Style } from '../entry/style';\nimport { setMarkElement } from '../utils';\nimport { fillUpPath } from '../utils/common';\nimport { dispatchLinkOrScriptError, dispatchLinkOrScriptLoad } from '../utils/custom';\nimport { fetchSource } from '../utils/fetch';\n/**\n * @param url 资源地址\n * @param style 样式实例\n * @param originLink 原始link标签\n * @returns 返回替换的style标签\n */\nfunction getStyleSource(url: string, style: Style, originLink: HTMLLinkElement): HTMLStyleElement {\n const replaceStyle = document.createElement('style');\n setMarkElement(replaceStyle);\n fetchSource(url)\n .then((data: string) => {\n style.code = data;\n appCache.setBaseAppStyle(url, style);\n replaceStyle.textContent = data;\n dispatchLinkOrScriptLoad(originLink);\n })\n .catch(err => {\n console.error(err);\n dispatchLinkOrScriptError(originLink);\n });\n return replaceStyle;\n}\n/**\n * @param url 资源地址\n * @param script 脚本实例\n * @param originScript 原始script标签\n * @returns 返回替换的script标签\n */\nfunction getScriptSource(url: string, script: Script, originScript: HTMLScriptElement): Comment | HTMLScriptElement {\n const replaceScript: HTMLScriptElement = document.createElement('script');\n setMarkElement(replaceScript);\n fetchSource(url)\n .then((code: string) => {\n script.setCode(code);\n try {\n replaceScript.textContent = code;\n if (!url.startsWith('inline-')) {\n originScript.setAttribute('origin-src', url);\n }\n } catch (e) {\n console.error(e, url);\n }\n dispatchLinkOrScriptLoad(originScript);\n })\n .catch(err => {\n console.error(err);\n dispatchLinkOrScriptError(originScript);\n });\n return replaceScript;\n}\n/**\n * @param child link或者script标签\n * @returns 返回替换的link或者script标签\n */\nfunction createNewNode(child: Node): Node {\n if (child instanceof HTMLLinkElement) {\n const rel = child.getAttribute('rel');\n let href = child.getAttribute('href');\n if (rel === 'stylesheet' && href) {\n href = fillUpPath(href, location.origin);\n const replaceStyle = document.createElement('style');\n const styleInstance = new Style({\n code: '',\n fromHtml: false,\n url: href,\n });\n getStyleSource(href, styleInstance, child);\n return replaceStyle;\n }\n }\n if (child instanceof HTMLScriptElement) {\n let src = child.getAttribute('src');\n if (src && child.type !== 'module') {\n src = fillUpPath(src, location.origin);\n const script = new Script({\n async: child.hasAttribute('async'),\n code: '',\n defer: child.defer || child.type === 'module',\n fromHtml: false,\n isModule: false,\n });\n appCache.setBaseAppScript(src, script);\n const replaceElement = getScriptSource(src, script, child);\n return replaceElement || child;\n }\n }\n return child;\n}\n/**\n * @param node 节点\n * @returns 返回是否是link或者script标签\n */\nfunction isLinkOrScript(node: Node) {\n return node instanceof HTMLLinkElement || node instanceof HTMLScriptElement;\n}\n/**\n * @param parent 父节点\n * @param newChild 新节点\n * @param passiveChild 被动节点\n * @param rawMethod 原始方法\n * @returns 返回原始方法的执行结果\n */\nexport function baseElementInertHandle(\n parent: Node,\n newChild: Node,\n passiveChild: Node | null,\n rawMethod: (...args: any[]) => any,\n) {\n if (isLinkOrScript(newChild)) {\n const targetChild = createNewNode(newChild);\n return rawMethod.call(parent, targetChild, passiveChild);\n }\n return rawMethod.call(parent, newChild, passiveChild);\n}\n/**\n * @param parent 父节点\n * @param newChild 新节点\n * @param rawMethod 原始方法\n * @returns 返回原始方法的执行结果\n */\n\nexport function baseElementAppendHandle(parent: Node, newChild: Node, rawMethod: (...args: any[]) => any) {\n if (isLinkOrScript(newChild)) {\n const targetChild = createNewNode(newChild);\n return rawMethod.call(parent, targetChild);\n }\n return rawMethod.call(parent, newChild);\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { Style } from '../entry/style';\nimport { randomUrl } from '../utils/common';\nimport { baseElementAppendHandle, baseElementInertHandle } from './element';\n/**\n * 收集主应用的资源\n */\nexport function collectBaseSource() {\n const rawBodyAppendChild = HTMLBodyElement.prototype.appendChild;\n const rawHeadAppendChild = HTMLHeadElement.prototype.appendChild;\n const rawHeadInsertBefore = HTMLHeadElement.prototype.appendChild;\n HTMLBodyElement.prototype.appendChild = function <T extends Node>(newChild: T): T {\n return baseElementAppendHandle(this, newChild, rawBodyAppendChild);\n };\n HTMLHeadElement.prototype.appendChild = function <T extends Node>(newChild: T): T {\n return baseElementAppendHandle(this, newChild, rawHeadAppendChild);\n };\n HTMLHeadElement.prototype.insertBefore = function <T extends Node>(newChild: T, refChild: Node | null): T {\n return baseElementInertHandle(this, newChild, refChild, rawHeadInsertBefore);\n };\n window.addEventListener('load', () => {\n const nodeList = document.head.querySelectorAll('style');\n for (const node of Array.from(nodeList)) {\n node.textContent &&\n appCache.setBaseAppStyle(\n randomUrl(),\n new Style({\n code: node.textContent,\n fromHtml: false,\n url: '',\n }),\n );\n }\n });\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { fillUpPath } from '../utils/common';\nimport { elementInsertHandler, elementAppendHandler, isSpecialElement } from '../utils/element';\nimport { setCurrentRunningApp } from './cache';\n\nconst { setAttribute } = Element.prototype;\n\nconst {\n append,\n appendChild: bodyAppendChild,\n insertBefore: bodyInsertBefore,\n removeChild: bodyRemoveChild,\n} = HTMLBodyElement.prototype;\nconst {\n appendChild: headAppendChild,\n insertBefore: headInsertBefore,\n removeChild: headRemoveChild,\n} = HTMLHeadElement.prototype;\nconst rawHead = document.head;\nlet hasRewrite = false;\nexport function rewriteBodyAndHeaderMethods(): void {\n if (hasRewrite) return;\n hasRewrite = true;\n Element.prototype.setAttribute = function (key: string, value: string): void {\n const tagName = this.tagName.toLocaleUpperCase();\n if (\n ((['src', 'srcset'].includes(key) && ['IMG', 'SCRIPT'].includes(tagName)) ||\n (key === 'href' && ['LINK'].includes(tagName))) &&\n this.__BK_WEWEB_APP_KEY__ &&\n appCache.getApp(this.__BK_WEWEB_APP_KEY__ || '')\n ) {\n setAttribute.call(this, key, fillUpPath(value, appCache.getApp(this.__BK_WEWEB_APP_KEY__!)!.url));\n } else {\n setAttribute.call(this, key, value);\n }\n };\n HTMLBodyElement.prototype.appendChild = function appendChildNew<T extends Node>(newChild: T): T {\n if (newChild.__KEEP_ALIVE__ && isSpecialElement(newChild)) return (headAppendChild as any).call(rawHead, newChild);\n return elementAppendHandler(this, newChild, bodyAppendChild);\n };\n HTMLBodyElement.prototype.append = function <T extends Node>(...nodes: T[]): void {\n // biome-ignore lint/complexity/noForEach: <explanation>\n nodes.forEach(node => {\n // keepalive link script style set in head\n if (node.__KEEP_ALIVE__ && isSpecialElement(node)) {\n return (headAppendChild as any).call(rawHead, node);\n }\n elementAppendHandler(this, node as Node, bodyAppendChild);\n });\n };\n HTMLHeadElement.prototype.appendChild = HTMLBodyElement.prototype.appendChild;\n\n HTMLHeadElement.prototype.insertBefore = function <T extends Node>(newChild: T, refChild: Node | null): T {\n return elementInsertHandler(this, newChild, refChild, headInsertBefore);\n };\n HTMLBodyElement.prototype.insertBefore = function <T extends Node>(newChild: T, refChild: Node | null): T {\n return elementInsertHandler(this, newChild, refChild, headInsertBefore);\n };\n HTMLBodyElement.prototype.removeChild = function removeChildNew<T extends Node>(oldChild: T): T {\n const app = appCache.getApp(oldChild.__BK_WEWEB_APP_KEY__!);\n if (app?.container?.contains(oldChild)) {\n const node = bodyRemoveChild.call(app.container, oldChild) as T;\n return node;\n }\n if (this.contains(oldChild)) {\n return bodyRemoveChild.call(this, oldChild) as T;\n }\n return oldChild;\n };\n HTMLHeadElement.prototype.removeChild = HTMLBodyElement.prototype.removeChild;\n}\n\nexport function resetBodyAndHeaderMethods(): void {\n setCurrentRunningApp(null);\n Element.prototype.setAttribute = setAttribute;\n HTMLBodyElement.prototype.appendChild = bodyAppendChild;\n HTMLBodyElement.prototype.append = append;\n HTMLBodyElement.prototype.removeChild = bodyRemoveChild;\n HTMLBodyElement.prototype.insertBefore = bodyInsertBefore;\n HTMLHeadElement.prototype.appendChild = headAppendChild;\n HTMLHeadElement.prototype.insertBefore = headInsertBefore;\n HTMLHeadElement.prototype.removeChild = headRemoveChild;\n hasRewrite = false;\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { rewriteBodyAndHeaderMethods } from '../context/element';\n// before load\nexport function beforeLoad() {\n rewriteBodyAndHeaderMethods();\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { nextTask } from '../utils/common';\nimport { beforeLoad } from './before-load';\n\nimport type { BaseModel } from '../typings';\n// 激活应用\nexport function activated<T>(\n appKey: string,\n container: HTMLElement | ShadowRoot,\n callback?: <M extends BaseModel>(instance: M, exportInstance?: T) => void,\n) {\n const app = appCache.getApp(appKey);\n if (app?.status === AppState.DEACTIVATED && app.keepAlive) {\n nextTask(() => {\n beforeLoad();\n app.activated(container, callback);\n });\n } else {\n app &&\n nextTask(() => {\n beforeLoad();\n app.mount(container, callback);\n });\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { resetBodyAndHeaderMethods } from '../context/element';\n// deactivated\nexport function deactivated(appKey: string) {\n const app = appCache.getApp(appKey);\n if (app && [AppState.ACTIVATED, AppState.MOUNTED].includes(app.status)) {\n app.keepAlive ? app.deactivated() : app.unmount();\n }\n if (!appCache.hasActiveApp) {\n resetBodyAndHeaderMethods();\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { MicroAppModel } from '../mode/app';\nimport { MicroInstanceModel } from '../mode/instance';\nimport { type BaseModel, type IAppModleProps, type IBaseModelProps, type IJsModelProps, WewebMode } from '../typings';\nimport { beforeLoad } from './before-load';\n\nexport async function load(props: IBaseModelProps): Promise<BaseModel> {\n beforeLoad();\n if (props.mode === WewebMode.INSTANCE) return await loadInstance(props);\n return await loadApp(props);\n}\n// 加载app\nexport async function loadApp(props: IAppModleProps): Promise<MicroAppModel> {\n beforeLoad();\n let instance = appCache.getApp(props.id);\n if (!instance) {\n instance = new MicroAppModel(props);\n appCache.setApp(instance);\n }\n await instance.start();\n return instance as MicroAppModel;\n}\n// 加载instance\nexport function loadInstance(props: IJsModelProps): Promise<MicroInstanceModel> {\n beforeLoad();\n return new Promise(resolve => {\n let instance = appCache.getApp(props.id);\n if (!instance) {\n instance = new MicroInstanceModel(props);\n appCache.setApp(instance);\n instance.start().then(() => resolve(instance as MicroInstanceModel));\n } else if ([AppState.MOUNTING, AppState.UNSET].includes(instance.status)) {\n const timer = setInterval(() => {\n if ([AppState.ERROR, AppState.MOUNTED].includes(instance!.status)) {\n resolve(instance as MicroInstanceModel);\n clearInterval(timer);\n }\n }, 300);\n } else {\n resolve(instance as MicroInstanceModel);\n }\n });\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { resetBodyAndHeaderMethods } from '../context/element';\n// unmount\nexport function unmount(appKey: string) {\n const app = appCache.getApp(appKey);\n if (app && app.status !== AppState.UNMOUNT) {\n app.unmount();\n }\n if (!appCache.hasActiveApp) {\n resetBodyAndHeaderMethods();\n }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\n\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { activated } from '../lifecircle/activated';\nimport { deactivated } from '../lifecircle/deactivated';\nimport { load } from '../lifecircle/load';\nimport { unmount } from '../lifecircle/unmount';\nimport { type IAppModleProps, type IJsModelProps, WewebMode } from '../typings';\n// bk-weweb支持的属性配置\nexport enum WewebCustomAttrs {\n data = 'data', // 传递给子应用的数据\n id = 'id', // 应用id\n keepAlive = 'keepAlive', // 是否缓存\n mode = 'mode', // 模式\n scopeCss = 'scopeCss', // 是否开启css隔离\n scopeJs = 'scopeJs', // 是否开启js隔离\n scopeLocation = 'scopeLocation', // 是否开启location隔离\n setShodowDom = 'setShodowDom', // 是否开启shadowDom\n showSourceCode = 'showSourceCode', // 是否显示源码\n url = 'url',\n}\nexport default class BkWewebElement extends HTMLElement {\n private appUrl = '';\n private connected = false;\n static get observedAttributes(): string[] {\n return [WewebCustomAttrs.url];\n }\n private getBooleanAttr(name: string): boolean | undefined {\n return this.hasAttribute(name) || this.hasAttribute(name.replace(/([A-Z])/g, '-$1').toLocaleLowerCase())\n ? this.getAttribute(name) !== 'false'\n : undefined;\n }\n private async handleAttributeChanged(): Promise<void> {\n if (!this.appKey) return;\n if (this.getBooleanAttr(WewebCustomAttrs.setShodowDom)) {\n this.attachShadow({ mode: 'open' });\n }\n const app = appCache.getApp(this.appKey);\n if (app && app.url === this.appUrl && (app.isPreLoad || app.status === AppState.UNMOUNT)) {\n activated(this.appKey, this.shadowRoot ?? this);\n return;\n }\n await load(this.appProps);\n }\n attributeChangedCallback(attr: WewebCustomAttrs, _oldVal: string, newVal: string): void {\n if (attr !== WewebCustomAttrs.url || this[attr] === newVal || !this.connected) return;\n this.appUrl = newVal;\n const cacheApp = appCache.getApp(this.appKey!);\n (this.connected || cacheApp) && this.handleAttributeChanged();\n }\n async connectedCallback(): Promise<void> {\n if (this.getBooleanAttr(WewebCustomAttrs.setShodowDom) && !this.shadowRoot) {\n this.attachShadow({ delegatesFocus: false, mode: 'open' });\n }\n await load(this.appProps);\n activated(this.appKey!, this.shadowRoot ?? this);\n this.connected = true;\n }\n disconnectedCallback(): void {\n this.connected = false;\n if (this.appProps.keepAlive) {\n deactivated(this.appKey!);\n } else unmount(this.appKey!);\n }\n get appData(): Record<string, unknown> {\n if (this.hasAttribute(WewebCustomAttrs.data)) {\n try {\n return JSON.parse(this.getAttribute(WewebCustomAttrs.data)!);\n } catch {}\n }\n return {};\n }\n // 考虑到js模式下 需要js bundle的复用性 需用户设置id属性 如果单实例下则可以不用配置\n get appKey(): null | string {\n return this.getAttribute(WewebCustomAttrs.id) || this.getAttribute(WewebCustomAttrs.url);\n }\n get appProps(): IAppModleProps | IJsModelProps {\n if (this.getAttribute('mode') === WewebMode.INSTANCE) {\n return {\n container: this.shadowRoot ?? this,\n data: this.appData,\n id: this.appKey!,\n keepAlive: this.getBooleanAttr(WewebCustomAttrs.keepAlive),\n mode: WewebMode.INSTANCE,\n scopeCss: this.getBooleanAttr(WewebCustomAttrs.scopeCss) && !this.getBooleanAttr(WewebCustomAttrs.setShodowDom),\n scopeJs: this.getBooleanAttr(WewebCustomAttrs.scopeJs),\n showSourceCode: this.getBooleanAttr(WewebCustomAttrs.showSourceCode),\n url: this.getAttribute(WewebCustomAttrs.url)!,\n };\n }\n return {\n container: this.shadowRoot ?? this,\n data: this.appData,\n id: this.appKey!,\n keepAlive: this.getBooleanAttr(WewebCustomAttrs.keepAlive),\n mode: WewebMode.APP,\n scopeCss: !this.getBooleanAttr(WewebCustomAttrs.setShodowDom),\n scopeJs: !this.getBooleanAttr(WewebCustomAttrs.scopeJs),\n scopeLocation: this.getBooleanAttr(WewebCustomAttrs.scopeLocation),\n showSourceCode: this.getBooleanAttr(WewebCustomAttrs.showSourceCode),\n url: this.getAttribute(WewebCustomAttrs.url)!,\n };\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { nextTask } from '../utils/common';\nimport { beforeLoad } from './before-load';\n\nimport type { BaseModel } from '../typings';\n// mount\nexport function mount<T>(\n appKey: string,\n container?: HTMLElement | ShadowRoot,\n callback?: <M extends BaseModel>(instance: M, exportInstance?: T) => void,\n) {\n const app = appCache.getApp(appKey);\n app &&\n nextTask(() => {\n beforeLoad();\n app.mount(container, callback);\n });\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\n// unload\nexport function unload(url: string) {\n appCache.deleteApp(url);\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n/* eslint-disable @typescript-eslint/no-misused-promises */\nimport { loadApp, loadInstance } from '../lifecircle/load';\nimport { requestIdleCallback } from '../utils/common';\nimport { type SourceType, loadGlobalSource } from '../utils/load-source';\n\nimport type { IAppModleProps, IJsModelProps } from '../typings';\n\n/**\n * @param options 加载模块的参数\n * @description 预加载实例\n */\nexport function preLoadInstance(options: IJsModelProps) {\n requestIdleCallback(() =>\n loadInstance({\n ...options,\n isPreLoad: true,\n }),\n );\n}\n\n/**\n * @param options 加载应用的参数\n * @description 预加载应用\n */\nexport function preLoadApp(options: IAppModleProps) {\n requestIdleCallback(() =>\n loadApp({\n ...options,\n isPreLoad: true,\n }),\n );\n}\n\n/**\n * @param sourceList 要预加载的资源列表\n * @description 预加载资源\n */\nexport function preLoadSource(sourceList: SourceType) {\n requestIdleCallback(() => {\n loadGlobalSource(sourceList);\n });\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { collectBaseSource } from './base-app/collect-source';\nimport BkWewebElement from './component/web-compnent';\nimport './context/cache';\n\nimport type { FetchSourceType, IStartOption } from './typings';\nexport * from './lifecircle/activated';\nexport * from './lifecircle/deactivated';\nexport * from './lifecircle/load';\nexport * from './lifecircle/mount';\nexport * from './lifecircle/unload';\nexport * from './lifecircle/unmount';\nexport * from './preload/preload';\nexport { WewebMode } from './typings';\nconst CUSTOM_ELEMENT_TAG = 'bk-weweb';\nexport class WeWeb {\n fetchSource?: FetchSourceType;\n webcomponentTag = CUSTOM_ELEMENT_TAG;\n constructor() {\n if (!window.customElements.get(CUSTOM_ELEMENT_TAG)) {\n window.customElements.define(CUSTOM_ELEMENT_TAG, BkWewebElement);\n }\n }\n // 设置自定义dom标签名\n setWebComponentTag() {\n if (!window.customElements.get(this.webcomponentTag)) {\n window.customElements.define(this.webcomponentTag, BkWewebElement);\n }\n }\n // todo set some global start props\n start(option?: IStartOption) {\n // 是否收集主应用资源\n if (option?.collectBaseSource) {\n collectBaseSource();\n }\n if (typeof option?.fetchSource === 'function') {\n this.fetchSource = option.fetchSource;\n }\n this.webcomponentTag = option?.webcomponentTag || CUSTOM_ELEMENT_TAG;\n this.setWebComponentTag();\n }\n}\nconst weWeb = new WeWeb();\nexport default weWeb;\n"],"mappings":"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","names":["WewebMode","value","clearInterval","setInterval","key","bodyAppendChild"]}
1
+ {"version":3,"sources":["../src/context/cache.ts","../src/typings/source.ts","../src/typings/model.ts","../src/typings/sandbox.ts","../src/utils/common.ts","../src/context/document.ts","../src/context/event.ts","../src/context/function.ts","../src/context/window.ts","../src/context/sandbox.ts","../src/utils/custom.ts","../src/utils/element.ts","../src/utils/fetch.ts","../src/entry/style.ts","../src/mode/instance.ts","../src/entry/script.ts","../src/mode/app.ts","../src/utils/load-source.ts","../src/entry/entry.ts","../src/cache/app-cache.ts","../src/base-app/element.ts","../src/base-app/collect-source.ts","../src/context/element.ts","../src/lifecircle/before-load.ts","../src/lifecircle/activated.ts","../src/lifecircle/deactivated.ts","../src/lifecircle/load.ts","../src/lifecircle/unmount.ts","../src/component/web-compnent.ts","../src/lifecircle/mount.ts","../src/lifecircle/unload.ts","../src/preload/preload.ts","../src/index.ts"],"sourcesContent":["/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport type { BaseModel } from '../typings';\n// 当前正在运行的app\nlet currentRunningApp: BaseModel | null = null;\nexport function getCurrentRunningApp() {\n return currentRunningApp;\n}\nexport function setCurrentRunningApp(appInstance: BaseModel | null) {\n currentRunningApp = appInstance;\n}\nexport const SCOPED_CSS_STYLE_ID = 'SCOPED_CSS_STYLE_ID';\nexport const windowNativeFuncMap = new Map<PropertyKey, true>();\nconst globalContextCode = `const { ${[\n 'Array',\n 'ArrayBuffer',\n 'Boolean',\n 'constructor',\n 'DataView',\n 'Date',\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n 'Error',\n 'escape',\n 'eval',\n 'EvalError',\n 'Float32Array',\n 'Float64Array',\n 'Function',\n 'hasOwnProperty',\n 'Infinity',\n 'Int16Array',\n 'Int32Array',\n 'Int8Array',\n 'isFinite',\n 'isNaN',\n 'isPrototypeOf',\n 'JSON',\n 'Map',\n 'Math',\n 'NaN',\n 'Number',\n 'Object',\n 'parseFloat',\n 'parseInt',\n 'Promise',\n 'propertyIsEnumerable',\n 'Proxy',\n 'RangeError',\n 'ReferenceError',\n 'Reflect',\n 'RegExp',\n 'Set',\n 'String',\n 'Symbol',\n 'SyntaxError',\n 'toLocaleString',\n 'toString',\n 'TypeError',\n 'Uint16Array',\n 'Uint32Array',\n 'Uint8Array',\n 'Uint8ClampedArray',\n 'undefined',\n 'unescape',\n 'URIError',\n 'valueOf',\n 'WeakMap',\n 'WeakSet',\n].join(',')} }= this;`;\nexport const getGlobalContextCode = () => {\n return globalContextCode;\n};\n/**\n * 收集原生window方法\n */\nconst collectNativeWindowFunc = () => {\n const keyList = Object.getOwnPropertyNames(window);\n for (const key of keyList) {\n if (\n !windowNativeFuncMap.has(key) &&\n key.match(/^[A-Z]/) &&\n typeof window[key] === 'function' &&\n (window[key] as any).toString().includes('[native code]')\n ) {\n windowNativeFuncMap.set(key, true);\n }\n }\n};\ncollectNativeWindowFunc();\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n/**\n * 接口定义:样式选项\n */\nexport interface IStyleOption {\n code: string; // 样式代码\n fromHtml: boolean; // 是否来自 HTML\n initial?: boolean; // 是否初始样式\n prefetch?: boolean; // 是否预取样式\n preload?: boolean; // 是否预加载样式\n url?: string; // 样式文件的 URL\n}\n\nexport interface IScriptOption {\n async: boolean; // 是否为异步脚本\n code: string; // 脚本代码\n defer: boolean; // 是否为延迟脚本\n fromHtml: boolean; // 是否从 HTML 中提取\n initial?: boolean; // 是否为初始脚本\n isModule: boolean; // 是否为模块类型脚本\n url?: string; // 脚本的 URL 地址\n}\n\nexport const CSS_ATTRIBUTE_KEY = 'id';\n\nexport enum CssRuleEnum {\n MEDIA_RULE = 4,\n STYLE_RULE = 1,\n SUPPORTS_RULE = 12,\n}\ntype ValueOf<T> = T[keyof T];\nexport type DocumentEventListener = (this: Document, ev: ValueOf<DocumentEventMap>) => any;\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport type { AppState } from '../common';\nimport { WewebCustomAttrs } from '../component/web-compnent';\nimport type SandBox from '../context/sandbox';\nimport type { EntrySource } from '../entry/entry';\nimport type { fetchSource } from '../utils/fetch';\nimport type { SourceType } from '../utils/load-source';\n\nexport interface IComponentProps {\n // 传递给子应用的数据 默认保存\n [WewebCustomAttrs.data]?: string;\n // entry mode js | config | html 默认 html\n [WewebCustomAttrs.mode]?: WewebMode;\n // 是否共享主应用路由\n [WewebCustomAttrs.scopeLocation]?: boolean;\n // 是否使用shadowDom\n [WewebCustomAttrs.setShodowDom]?: boolean;\n // 是否在dom上显示源码 默认不显示 内存执行\n [WewebCustomAttrs.showSourceCode]?: boolean;\n // url 必选\n [WewebCustomAttrs.url]: string;\n}\n\n// 基础属性接口\nexport interface IBaseModelProps {\n // entry mode js | config | html 默认 html\n [WewebCustomAttrs.mode]?: WewebMode;\n // url 必选\n [WewebCustomAttrs.url]: string;\n id?: null | string;\n // 是否是预加载\n isPreLoad?: boolean;\n}\n\n// app模式属性配置\nexport interface IAppModleProps extends IBaseModelProps {\n // 传递给子应用的数据 默认保存\n [WewebCustomAttrs.data]?: Record<string, unknown>;\n // 是否缓存dom\n [WewebCustomAttrs.keepAlive]?: boolean;\n // 是否启用样式隔离 默认隔离\n [WewebCustomAttrs.scopeCss]?: boolean;\n // 是否使用沙盒隔离 默认隔离\n [WewebCustomAttrs.scopeJs]?: boolean;\n // 是否共享主应用路由\n [WewebCustomAttrs.scopeLocation]?: boolean;\n // 是否使用shadowDom\n [WewebCustomAttrs.setShodowDom]?: boolean;\n // 是否在dom上显示源码 默认不显示 内存执行\n [WewebCustomAttrs.showSourceCode]?: boolean;\n container?: HTMLElement | ShadowRoot | null;\n // 初始化source 如 ['http://www.hostname.com/a.js', 'http://www.hostname.com/b.css']\n initSource?: SourceType;\n}\n\nexport interface IJsModelProps extends IBaseModelProps {\n // 传递给实例render方法的数据\n [WewebCustomAttrs.data]?: Record<string, unknown>;\n // 是否在dom上显示源码 默认显示\n [WewebCustomAttrs.showSourceCode]?: boolean;\n // 容器\n container?: HTMLElement | ShadowRoot | null;\n // 初始化source 如 ['http://www.hostname.com/a.js', 'http://www.hostname.com/b.css']\n initSource?: SourceType;\n // 是否缓存dom\n keepAlive?: boolean;\n // 是否启用样式隔离 默认隔离\n scopeCss?: boolean;\n // 是否使用沙盒隔离 默认不隔离\n scopeJs?: boolean;\n}\n\nexport interface BaseModel {\n activated<T>(container: HTMLElement | ShadowRoot, callback?: (instance: BaseModel, exportInstance?: T) => void): void;\n container?: HTMLElement | ShadowRoot;\n deactivated(): void;\n get appCacheKey(): string;\n get status(): AppState;\n // eslint-disable-next-line perfectionist/sort-interfaces\n initSource?: SourceType;\n isModuleApp?: boolean;\n // 初始化source 如 ['http://www.hostname.com/a.js', 'http://www.hostname.com/b.css']\n isPreLoad: boolean;\n keepAlive?: boolean;\n mount<T>(container?: HTMLElement | ShadowRoot, callback?: (instance: BaseModel, exportInstance?: T) => void): void;\n name: string;\n onError(): void;\n onMount(): void;\n registerRunningApp(): void;\n sandBox?: SandBox;\n // 是否启用样式隔离 默认隔离\n scopeCss?: boolean;\n scopeJs: boolean;\n set status(v: AppState);\n showSourceCode?: boolean;\n source?: EntrySource;\n start(): Promise<void>;\n unmount(needDestroy?: boolean): void;\n url: string;\n fetchSource?: typeof fetchSource;\n}\n\nexport enum WewebMode {\n APP = 'app',\n CONFIG = 'config',\n INSTANCE = 'js',\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/**\n * Interface for injecting window attributes.\n */\nexport interface IInjectWindowAttrs {\n __BK_WEWEB_APP_KEY__: string; // The app key for the BK WEWEB platform.\n __BK_WEWEB_DATA__: Record<string, unknown>; // Additional data for BK WEWEB.\n __POWERED_BY_BK_WEWEB__: boolean; // Indicates if the page is powered by BK WEWEB.\n rawDocument: Document; // The original document object.\n rawWindow: Window; // The original window object.\n}\n\nexport const WINDOW_WHITE_LIST: PropertyKey[] = [\n 'System', // SystemJS\n '__cjsWrapper', // SystemJS CommonJS wrapper\n process.env.NODE_ENV !== 'production' ? '__REACT_DEVTOOLS_GLOBAL_HOOK__' : '',\n];\n// 一定需要在子应用自身上下文获取的属性名\nexport const BK_WEWEB_INJECT_KEY_LIST: PropertyKey[] = [\n '__POWERED_BY_BK_WEWEB__',\n '__BK_WEWEB_APP_KEY__',\n '__BK_WEWEB_DATA__',\n];\nexport const WINDOW_ALIAS_LIST: PropertyKey[] = ['window', 'self', 'globalThis'];\n// 设置了scopedLocation 后需要监听属性名\nexport const BK_WEWEB_LOCATION_KEY_LIST: PropertyKey[] = ['location', 'history'];\nconst COMMON_MICRO_APP_WINDOE_KEY_MAP: Record<PropertyKey, true> = {\n __bk_pop_manager: true,\n __bk_zIndex_manager: true,\n i18n: true,\n};\nexport const DEV_MICRO_APP_WINDOE_KEY_MAP: Record<PropertyKey, true> =\n process.env.NODE_ENV !== 'production'\n ? {\n __DEV__: true,\n __VUE_DEVTOOLS_GLOBAL_HOOK__: true,\n __VUE_DEVTOOLS_HOOK_REPLAY__: true,\n __VUE_DEVTOOLS_PLUGINS__: true,\n __VUE_I18N_FULL_INSTALL__: true,\n __VUE_I18N_LEGACY_API__: true,\n __VUE_OPTIONS_API__: true,\n '__core-js_shared__': true,\n webpackChunkapm: true,\n webpackChunkpc: true,\n webpackChunktrace: true,\n webpackJsonp: true,\n ...COMMON_MICRO_APP_WINDOE_KEY_MAP,\n }\n : COMMON_MICRO_APP_WINDOE_KEY_MAP;\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n/**\n * 使用 nextTask 函数将回调函数添加到下一个任务队列中执行。\n * @param cb 回调函数\n * @returns Promise 对象,用于异步处理回调函数\n */\nexport const nextTask: (cb: () => void) => any = cb => Promise.resolve().then(cb);\n\n/**\n * 使用 nextTick 函数将回调函数添加到全局任务队列中执行。\n * 如果已经有任务在等待执行,则不会重复添加任务。\n * @param cb 回调函数\n */\nlet globalTaskPending = false;\nexport function nextTick(cb: () => void): void {\n if (!globalTaskPending) {\n globalTaskPending = true;\n nextTask(() => {\n cb();\n globalTaskPending = false;\n });\n }\n}\n\n/**\n * 给 URL 添加协议头\n * @param url 要添加协议头的 URL\n * @returns 添加了协议头后的 URL\n */\nexport function addUrlProtocol(url: string): string {\n if (url.startsWith('//')) return `${location.protocol}${url}`;\n if (!url.startsWith('http')) return `${location.protocol}//${url}`;\n return url;\n}\n\n/**\n *\n * @param path 路径\n * @param baseURI 基础路径\n * @returns\n */\nexport function fillUpPath(path: string, baseURI: string): string {\n if (!path || /^((((ht|f)tps?)|file):)?\\/\\//.test(path) || /^(data|blob):/.test(path)) return path;\n const { origin, pathname } = new URL(addUrlProtocol(baseURI));\n return new URL(path, `${origin}${pathname}`.replace(/\\.(\\w+)$/, '/')).toString();\n}\n\n/**\n * 生成随机url\n */\nexport function randomUrl(): string {\n return `inline-${random(16)}`;\n}\n\n/**\n * requestIdleCallback polyfill\n */\nexport const requestIdleCallback =\n window.requestIdleCallback ||\n ((cb: CallableFunction) => {\n const start = Date.now();\n return setTimeout(() => {\n cb({\n didTimeout: false,\n timeRemaining() {\n return Math.max(0, 50 - (Date.now() - start));\n },\n });\n }, 1);\n });\n\n/**\n * cancelIdleCallback polyfill\n */\nexport const cancelIdleCallback =\n window.cancelIdleCallback ||\n ((id: number) => {\n clearTimeout(id);\n });\n\n/**\n *\n * @param n 生成字符串的长度\n * @param str 生成字符串的范围\n * @returns string\n */\nexport const random = (n: number, str = 'abcdefghijklmnopqrstuvwxyz0123456789') => {\n // 生成n位长度的字符串\n let result = '';\n for (let i = 0; i < n; i++) {\n result += str[Number.parseInt((Math.random() * str.length).toString(), 10)];\n }\n return result;\n};\n\n/**\n *\n * @param url string\n * @returns boolean\n * @description 判断是否是jsonp请求\n */\nexport const isJsonpUrl = (url: null | string) => {\n if (!url) return false;\n if (url.match(/\\.js$/)) return false;\n const { pathname } = new URL(addUrlProtocol(url));\n return !pathname.match(/\\.js$/);\n};\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport type { BaseModel } from '../typings/model';\nconst SPECIAL_ELEMENT_TAG = ['body', 'html', 'head'];\n/**\n * 创建代理的document\n * @param rawDocument 原始document\n * @param app 应用实例\n * @returns 代理的document\n */\nexport const createProxyDocument = (rawDocument: Document, app: BaseModel) => {\n const fakeDocument = {};\n function shadowRootInsertAdjacentHTML(where: InsertPosition, domString: string) {\n const temporaryContainer = document.createElement('div');\n temporaryContainer.innerHTML = domString;\n const elements = Array.from(temporaryContainer.childNodes);\n const shadow = app.container! as ShadowRoot;\n switch (where) {\n case 'beforebegin':\n elements.forEach(el => shadow.host.parentNode?.insertBefore(el, shadow.host));\n break;\n case 'afterbegin':\n elements.reverse().forEach(el => shadow.insertBefore(el, shadow.firstChild));\n break;\n case 'beforeend':\n elements.forEach(el => shadow.appendChild(el));\n break;\n case 'afterend':\n elements.forEach(el => shadow.host.parentNode?.insertBefore(el, shadow.host.nextSibling));\n break;\n }\n }\n const proxyBody = new Proxy(\n {},\n {\n get(_, key) {\n // ShadowRoot 处理逻辑简化\n if (app.container instanceof ShadowRoot) {\n if (key === 'insertAdjacentHTML') {\n // shadowRoot 中没有 insertAdjacentHTML\n return shadowRootInsertAdjacentHTML.bind(app.container);\n }\n const value = app.container[key];\n if (typeof value === 'function') {\n return value.bind(app.container);\n }\n if (value !== undefined) {\n return value;\n }\n }\n // 直接返回 rawDocument.body 的属性或绑定函数\n const value = Reflect.get(rawDocument.body, key);\n return typeof value === 'function' ? value.bind(rawDocument.body) : value;\n },\n set(_, key, value) {\n // ShadowRoot 处理逻辑简化\n if (app.container instanceof ShadowRoot) {\n app.container[key] = value;\n return true;\n }\n // 直接设置 rawDocument.body 的属性\n Reflect.set(rawDocument.body, key, value);\n return true;\n },\n },\n );\n /**\n * @param tagName 标签名\n * @param options 选项\n * @returns\n */\n function createElement<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n options?: ElementCreationOptions | undefined,\n ) {\n const element = rawDocument.createElement(tagName, options);\n // img.src = 'xxx' iframe.src = 'xxx' 均不能在setAttributes上监听 但是这里所有的src都是 全地址 无法判断是否需要添加子应用域名\n // if (tagName.toLocaleLowerCase() === 'img') {\n // const observer = new MutationObserver((list, observer) => {\n // observer.disconnect();\n // const url = new URL((element as HTMLImageElement).src)\n // (element as HTMLImageElement).src = `${}`\n // });\n // observer.observe(element, { attributeFilter: ['src'], subtree: false, childList: false });\n // }\n element.__BK_WEWEB_APP_KEY__ = app.appCacheKey;\n return element;\n }\n /**\n * 查询选择器的新方法\n * @param selectors 选择器字符串\n * @returns 匹配的元素或 null\n */\n function querySelectorNew(this: Document, selectors: string) {\n if (selectors === proxyBody) {\n return app.container instanceof ShadowRoot ? app.container : rawDocument.body;\n }\n // 如果选择器是特殊元素标签\n if (SPECIAL_ELEMENT_TAG.includes(selectors)) {\n // 如果当前应用程序容器是 ShadowRoot 类型\n if (app?.container instanceof ShadowRoot) {\n return app?.container;\n }\n // 否则调用原始的 querySelector 方法\n return rawDocument.querySelector.call(this, selectors);\n }\n // 返回当前应用程序容器中匹配选择器的元素,如果没有匹配的元素则返回 null\n try {\n return app?.container?.querySelector(selectors) ?? null;\n } catch {\n return null;\n }\n }\n /**\n * 重写了 Document 类的 querySelectorAll 方法\n * @param selectors - 要查询的选择器\n * @returns 匹配到的元素列表或空数组\n */\n function querySelectorAllNew(selectors: string) {\n // 如果选择器是特殊元素标签,则返回容器元素或调用原生 querySelector 方法\n if (SPECIAL_ELEMENT_TAG.includes(selectors)) {\n if (app?.container instanceof ShadowRoot) {\n return app?.container;\n }\n return rawDocument.querySelector(selectors);\n }\n // 返回运行中应用程序的容器元素中匹配到的元素列表或空数组\n return app?.container?.querySelectorAll(selectors) ?? [];\n }\n function getElementByIdNew(key: string) {\n return querySelectorNew.call(rawDocument, `#${key}`);\n }\n function getElementsByClassName(key: string) {\n return querySelectorAllNew(`.${key}`);\n }\n function getElementsByTagName<K extends keyof HTMLElementTagNameMap>(key: K) {\n if (SPECIAL_ELEMENT_TAG.includes(key) || (!app?.showSourceCode && key.toLocaleLowerCase() === 'script')) {\n return rawDocument.getElementsByTagName(key);\n }\n return querySelectorAllNew(key);\n }\n function getElementsByNameNew(key: string) {\n return querySelectorAllNew(`[name=${key}]`);\n }\n return new Proxy(fakeDocument, {\n get(_, key: string | symbol) {\n if (key === 'createElement') {\n return createElement.bind(rawDocument);\n }\n if (key === 'querySelector') {\n return querySelectorNew.bind(rawDocument);\n }\n if (key === 'querySelectorAll') {\n return querySelectorAllNew.bind(rawDocument);\n }\n if (key === 'getElementById') {\n return getElementByIdNew.bind(rawDocument);\n }\n if (key === 'getElementsByClassName') {\n return getElementsByClassName.bind(rawDocument);\n }\n if (key === 'getElementsByTagName') {\n return getElementsByTagName.bind(rawDocument);\n }\n if (key === 'getElementsByName') {\n return getElementsByNameNew.bind(rawDocument);\n }\n if (key === 'body') {\n return proxyBody;\n }\n const result = Reflect.get(rawDocument, key);\n if (typeof result === 'function') {\n return result.bind(rawDocument);\n }\n return result;\n },\n });\n};\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getCurrentRunningApp } from './cache';\n\nimport type { DocumentEventListener } from '../typings';\n// rewrite document and body event listener\nexport function rewriteDocumentAndBodyEvent(): { resetDocumentAndBodyEvent: () => void } {\n const { addEventListener, removeEventListener } = window.document;\n const { addEventListener: bodyAddEventListener, removeEventListener: bodyRemoveEventListener } = window.document.body;\n const documentListenerMap = new Map<keyof DocumentEventMap, DocumentEventListener[]>();\n document.addEventListener = function <K extends keyof DocumentEventMap>(\n type: K,\n listener: DocumentEventListener,\n options?: AddEventListenerOptions | boolean | undefined,\n ): void {\n const app = getCurrentRunningApp();\n if (app?.keepAlive) {\n const listeners = documentListenerMap.get(type) || [];\n documentListenerMap.set(type, [...listeners, listener]);\n }\n addEventListener.call(app?.container instanceof ShadowRoot ? app.container : this, type, listener, options);\n };\n document.body.addEventListener = document.addEventListener;\n\n document.removeEventListener = function <K extends keyof DocumentEventMap>(\n type: K,\n listener: DocumentEventListener,\n options?: AddEventListenerOptions | boolean,\n ): void {\n const app = getCurrentRunningApp();\n if (app?.keepAlive) {\n const listeners = documentListenerMap.get(type) || [];\n if (listeners.length && listeners.some(l => l === listener)) {\n listeners.splice(listeners.indexOf(listener), 1);\n }\n }\n removeEventListener.call(app?.container instanceof ShadowRoot ? app.container : this, type, listener, options);\n };\n document.body.removeEventListener = document.removeEventListener;\n\n function resetDocumentAndBodyEvent(): void {\n const app = getCurrentRunningApp();\n if (app?.keepAlive && documentListenerMap.values()) {\n Array.from(documentListenerMap.entries()).forEach(([type, listeners]) => {\n listeners?.forEach(listener => {\n document.removeEventListener.call(document, type, listener);\n });\n });\n }\n document.addEventListener = addEventListener;\n document.body.addEventListener = bodyAddEventListener;\n document.removeEventListener = removeEventListener;\n document.body.removeEventListener = bodyRemoveEventListener;\n documentListenerMap.clear();\n }\n return {\n resetDocumentAndBodyEvent,\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// 正则表达式,用于匹配类定义\nconst CLASS_REGEX = /^class\\b/;\n\n// 正则表达式,用于匹配以大写字母开头的函数定义\nconst COMMON_CONTRUCT_FU_REGEX = /^function\\b\\s[A-Z].*/;\n\n// WeakMap 对象,用于缓存构造函数是否可实例化的结果\nconst ConstructFunCacheMap = new WeakMap<FunctionConstructor | any, boolean>();\n\n/**\n * 判断一个函数是否可实例化\n * @param fn - 要判断的函数\n * @returns 可实例化返回 true,否则返回 false\n */\nexport function isConstructFun(fn: () => FunctionConstructor | any) {\n // 如果函数的原型的构造函数等于函数本身,并且原型对象上有超过一个属性,则认为是可实例化的\n if (fn.prototype?.constructor === fn && Object.getOwnPropertyNames(fn.prototype).length > 1) {\n return true;\n }\n\n // 如果在缓存中已经存在该函数的判断结果,则直接返回\n if (ConstructFunCacheMap.has(fn)) {\n return ConstructFunCacheMap.get(fn);\n }\n\n // 使用正则表达式测试函数的字符串表示,判断是否可实例化\n const constructable = COMMON_CONTRUCT_FU_REGEX.test(fn.toString()) || CLASS_REGEX.test(fn.toString());\n\n // 将判断结果保存到缓存中\n ConstructFunCacheMap.set(fn, constructable);\n\n return constructable;\n}\n\n// 创建一个弱映射,用于存储函数和其绑定版本之间的关系\nconst functionBoundedValueMap = new WeakMap<CallableFunction, CallableFunction>();\n\n// 导出默认函数,用于将给定的值绑定到原始窗口对象\nexport default function bindFunctionToRawWindow(rawWindow: Window, value: any): unknown {\n // 如果值已经存在于映射中,直接返回与该值相关联的绑定版本\n if (functionBoundedValueMap.has(value)) {\n return functionBoundedValueMap.get(value);\n }\n // 如果值是一个函数且不是构造函数\n if (typeof value === 'function' && !isConstructFun(value)) {\n // 创建一个绑定到原始窗口对象的函数\n const boundValue = Function.prototype.bind.call(value, rawWindow);\n // 将原始函数的属性复制到绑定版本上\n for (const key in value) {\n boundValue[key] = value[key];\n }\n // 如果原始函数拥有原型并且绑定版本没有原型\n if (value.hasOwnProperty('prototype') && !boundValue.hasOwnProperty('prototype')) {\n // 将原始函数的原型属性设置到绑定版本上\n Object.defineProperty(boundValue, 'prototype', { enumerable: false, value: value.prototype, writable: true });\n }\n // 如果原始函数拥有 toString 方法\n if (typeof value.toString === 'function') {\n // 检查原始函数是否拥有 toString 属性,且绑定版本没有该属性\n const valueHasInstanceToString = value.hasOwnProperty('toString') && !boundValue.hasOwnProperty('toString');\n // 检查绑定版本的 toString 是否与 Function.prototype.toString 相同\n const boundValueHasPrototypeToString = boundValue.toString === Function.prototype.toString;\n\n // 如果原始函数的 toString 属性需要继承\n if (valueHasInstanceToString || boundValueHasPrototypeToString) {\n // 获取原始 toString 属性的描述符\n const originToStringDescriptor = Object.getOwnPropertyDescriptor(\n valueHasInstanceToString ? value : Function.prototype,\n 'toString',\n );\n\n // 将绑定版本的 toString 属性设置为与原始函数相同的方法\n Object.defineProperty(boundValue, 'toString', {\n ...originToStringDescriptor,\n ...(originToStringDescriptor?.get ? null : { value: () => value.toString() }),\n });\n }\n }\n // 将原始函数和绑定版本存储到映射中\n functionBoundedValueMap.set(value, boundValue);\n // 返回绑定版本\n return boundValue;\n }\n // 如果不是函数或是构造函数,则直接返回原始值\n return value;\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport type { DocumentEventListener } from '../typings';\n// rewrite window funtion like settimeout setinterval ...\nexport function rewriteWindowFunction(fakeWindow: Window & any): Record<string, CallableFunction> {\n const windowEventLisenerMap = new Map<string, DocumentEventListener[]>();\n const intervalTimerList: ReturnType<typeof setInterval>[] = [];\n const rawWindow = window;\n const { addEventListener, clearInterval, removeEventListener, setInterval } = window;\n\n fakeWindow.addEventListener = (\n type: string,\n listener: DocumentEventListener,\n options?: AddEventListenerOptions | boolean,\n ): void => {\n windowEventLisenerMap.set(type, [...(windowEventLisenerMap.get(type) || []), listener]);\n addEventListener.call(rawWindow, type, listener, options);\n };\n fakeWindow.removeEventListener = (\n type: string,\n listener: DocumentEventListener,\n options?: AddEventListenerOptions | boolean,\n ): void => {\n const listenerList = windowEventLisenerMap.get(type);\n if (listenerList?.length) {\n const index = listenerList.indexOf(listener);\n index > -1 && listenerList.splice(index, 1);\n }\n removeEventListener.call(rawWindow, type, listener, options);\n };\n fakeWindow.setInterval = (\n handler: TimerHandler | string,\n timeout?: number | undefined,\n ...args: any[]\n ): ReturnType<typeof setInterval> => {\n const timer = setInterval.call(rawWindow, handler as any, timeout, ...(args as []));\n intervalTimerList.push(timer);\n return timer;\n };\n fakeWindow.clearInterval = (timer: ReturnType<typeof setInterval>) => {\n const index = intervalTimerList.indexOf(timer);\n index > -1 && intervalTimerList.splice(index, 1);\n clearInterval.call(rawWindow, timer as any);\n };\n // reset all event listener & interval & timeout when unmount app\n function resetWindowFunction() {\n // clear window events listener\n if (windowEventLisenerMap.size) {\n windowEventLisenerMap.forEach((listenerList, type) => {\n listenerList.forEach(listener => removeEventListener.call(rawWindow, type, listener));\n });\n windowEventLisenerMap.clear();\n }\n // clear settimeout timers\n if (intervalTimerList.length) {\n intervalTimerList.forEach(timer => {\n clearInterval.call(rawWindow, timer);\n });\n }\n }\n return {\n resetWindowFunction,\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/member-ordering */\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { MicroAppModel } from '../mode/app';\nimport {\n BK_WEWEB_INJECT_KEY_LIST,\n BK_WEWEB_LOCATION_KEY_LIST,\n type BaseModel,\n DEV_MICRO_APP_WINDOE_KEY_MAP,\n type IInjectWindowAttrs,\n WINDOW_ALIAS_LIST,\n WINDOW_WHITE_LIST,\n} from '../typings';\nimport { random } from '../utils/common';\nimport { windowNativeFuncMap } from './cache';\nimport { createProxyDocument } from './document';\nimport { rewriteDocumentAndBodyEvent } from './event';\nimport bindFunctionToRawWindow from './function';\nimport { rewriteWindowFunction } from './window';\nexport default class SandBox {\n private active = false;\n private inRawWindowKeySet = new Set<PropertyKey>();\n private resetDocumentAndBodyEvent?: CallableFunction;\n private resetWindowFunction: CallableFunction;\n private sameRawWindowKeySet = new Set<PropertyKey>();\n\n public fakeWindow: Window & IInjectWindowAttrs;\n public proxyDocument: any;\n public proxyWindow: WindowProxy & IInjectWindowAttrs;\n public rawDocument: Record<string, any>;\n public rawWindow: Window;\n public windowSymbolKey: keyof Window;\n constructor(public app: BaseModel) {\n const windowDescriptorSet = new Set<PropertyKey>();\n const rawWindow = window;\n this.rawWindow = rawWindow;\n this.rawDocument = createProxyDocument(document, app);\n const fakeWindow = Object.create({});\n fakeWindow.__BK_WEWEB_APP_KEY__ = app.appCacheKey;\n fakeWindow.__POWERED_BY_BK_WEWEB__ = true;\n fakeWindow.rawDocument = document;\n fakeWindow.rawWindow = rawWindow;\n fakeWindow.__proto__ = Window;\n this.fakeWindow = fakeWindow as Window & IInjectWindowAttrs;\n\n const { resetWindowFunction } = rewriteWindowFunction(this.fakeWindow);\n this.resetWindowFunction = resetWindowFunction;\n this.windowSymbolKey = `__${(app.name || app.appCacheKey).replace(/(-|,|:|~|'|\")/gim, '_')}_${random(\n 10,\n )}__` as keyof Window;\n this.proxyWindow = new Proxy(this.fakeWindow, {\n // Object.defineProperty(window, key, Descriptor)\n defineProperty: (target: Window, key: PropertyKey, value: PropertyDescriptor): boolean => {\n if (windowDescriptorSet.has(key)) {\n return Reflect.defineProperty(rawWindow, key, value);\n }\n return Reflect.defineProperty(target, key, value);\n },\n deleteProperty: (target: Window, key: PropertyKey): boolean => {\n if (Object.hasOwn(target, key)) {\n this.sameRawWindowKeySet.has(key) && this.sameRawWindowKeySet.delete(key);\n this.inRawWindowKeySet.has(key) && Reflect.deleteProperty(rawWindow, key);\n return Reflect.deleteProperty(target, key);\n }\n return true;\n },\n get: (target: Window, key: string | symbol): unknown => {\n if (key === Symbol.unscopables || windowNativeFuncMap.has(key)) return rawWindow[key as any];\n if (DEV_MICRO_APP_WINDOE_KEY_MAP[key]) return this.fakeWindow[key as any];\n if (WINDOW_ALIAS_LIST.includes(key as string)) return this.proxyWindow;\n if (key === 'document') {\n app.registerRunningApp();\n return this.rawDocument;\n }\n if (key === 'eval') {\n app.registerRunningApp();\n // biome-ignore lint/security/noGlobalEval: <explanation>\n return eval;\n }\n if (\n BK_WEWEB_LOCATION_KEY_LIST.includes(key) &&\n this.app instanceof MicroAppModel &&\n this.app.iframe &&\n this.app.scopeLocation\n ) {\n return this.app.iframe.contentWindow?.[key];\n }\n if (key === 'hasOwnProperty')\n return (key: PropertyKey) => Object.hasOwn(this.fakeWindow, key) || Object.hasOwn(rawWindow, key);\n if (key === 'top' || key === 'parent') {\n if (rawWindow === rawWindow.parent) {\n return this.proxyWindow;\n }\n return Reflect.get(rawWindow, key); // iframe\n }\n if (key === 'getComputedStyle') {\n return (element: Element, pseudoElt?: null | string) => {\n if (element instanceof Element) {\n return rawWindow.getComputedStyle(element, pseudoElt);\n }\n return rawWindow.getComputedStyle(document.body, pseudoElt);\n };\n }\n if (Reflect.has(target, key) || BK_WEWEB_INJECT_KEY_LIST.includes(key)) return Reflect.get(target, key);\n const rawValue = Reflect.get(rawWindow, key);\n return bindFunctionToRawWindow(rawWindow, rawValue);\n },\n getOwnPropertyDescriptor: (target: any, key: PropertyKey): PropertyDescriptor | undefined => {\n if (Object.hasOwn(target, key)) {\n return Object.getOwnPropertyDescriptor(target, key);\n }\n if (Object.hasOwn(rawWindow, key)) {\n windowDescriptorSet.add(key);\n const descriptor = Object.getOwnPropertyDescriptor(rawWindow, key);\n if (descriptor && !descriptor.configurable) {\n descriptor.configurable = true;\n }\n return descriptor;\n }\n return undefined;\n },\n has: (target: Window & any, key: PropertyKey): boolean =>\n windowNativeFuncMap.has(key) || key in target || key in rawWindow,\n // Object.getOwnPropertyNames(window)\n ownKeys: (target: Window & any): Array<string | symbol> =>\n Array.from(new Set(Reflect.ownKeys(rawWindow).concat(Reflect.ownKeys(target)))),\n set: (target: any, key: PropertyKey, value: unknown): boolean => {\n if (this.active) {\n // 设置了scope location,需要同步到iframe\n if (\n BK_WEWEB_LOCATION_KEY_LIST.includes(key) &&\n this.app instanceof MicroAppModel &&\n this.app.iframe &&\n this.app.scopeLocation\n ) {\n return Reflect.set(this.app.iframe.contentWindow!, key, value);\n }\n // 共享主应用 location\n if (key === 'location') {\n Reflect.set(rawWindow, key, value);\n } else if (\n !Object.hasOwn(target, key) &&\n Object.hasOwn(rawWindow, key) &&\n !BK_WEWEB_INJECT_KEY_LIST.includes(key)\n ) {\n const descriptor = Object.getOwnPropertyDescriptor(rawWindow, key);\n const { configurable, enumerable, writable } = descriptor!;\n if (writable) {\n Object.defineProperty(target, key, {\n configurable,\n enumerable,\n value,\n writable,\n });\n this.sameRawWindowKeySet.add(key);\n }\n } else {\n Reflect.set(target, key, value);\n this.sameRawWindowKeySet.add(key);\n }\n if (\n WINDOW_WHITE_LIST.includes(key) &&\n !Reflect.has(rawWindow, key) &&\n !BK_WEWEB_INJECT_KEY_LIST.includes(key)\n ) {\n Reflect.set(rawWindow, key, value);\n this.inRawWindowKeySet.add(key);\n }\n }\n return true;\n },\n });\n // if (app.showSourceCode) {\n // }\n rawWindow[this.windowSymbolKey as any] = this.proxyWindow;\n }\n /**\n *\n * @param data data for sandbox\n * @description active hook for sandbox\n */\n activated(data?: Record<string, unknown>): void {\n if (!this.active) {\n this.active = true;\n this.rawDocument = createProxyDocument(document, this.app);\n this.fakeWindow.__BK_WEWEB_DATA__ = data ?? {};\n const { resetDocumentAndBodyEvent } = rewriteDocumentAndBodyEvent();\n this.resetDocumentAndBodyEvent = resetDocumentAndBodyEvent;\n }\n }\n /**\n *\n * @description decativated hook for sandbox\n */\n deactivated(): void {\n if (!this.active) return;\n this.active = false;\n this.resetWindowFunction();\n for (const key of this.inRawWindowKeySet) {\n Reflect.deleteProperty(window, key);\n }\n this.inRawWindowKeySet.clear();\n this.resetDocumentAndBodyEvent?.();\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nconst ELEMENT_TARGET_NAME = ['currentTarget', 'srcElement', 'target'];\n/**\n *\n * @param event\n * @param element\n * @returns {Event} event\n * @description 为事件对象添加 element 属性\n */\nexport function defineEventSourceElement(element: HTMLLinkElement | HTMLScriptElement, eventName = 'custom'): Event {\n return Object.defineProperties(\n new CustomEvent(eventName),\n ELEMENT_TARGET_NAME.reduce<Record<PropertyKey, any>>((props, name) => {\n props[name] = {\n get() {\n return element;\n },\n };\n return props;\n }, {}),\n );\n}\n/**\n *\n * @param element HTMLLinkElement | HTMLScriptElement\n * @description 触发 link 或者 script 的 onload 事件\n */\nexport function dispatchLinkOrScriptLoad(element: HTMLLinkElement | HTMLScriptElement): void {\n const event = defineEventSourceElement(element, 'load');\n if (typeof element.onload === 'function') {\n element.onload!(event);\n return;\n }\n element.dispatchEvent(event);\n}\n/**\n *\n * @param element HTMLLinkElement | HTMLScriptElement\n * @description 触发 link 或者 script 的 onerror 事件\n */\nexport function dispatchLinkOrScriptError(element: HTMLLinkElement | HTMLScriptElement): void {\n const event = defineEventSourceElement(element, 'error');\n if (typeof element.onerror === 'function') {\n element.onerror!(event);\n return;\n }\n element.dispatchEvent(event);\n}\n","/* eslint-disable @typescript-eslint/ban-types */\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { Script } from '../entry/script';\nimport { Style } from '../entry/style';\nimport { isJsonpUrl, randomUrl } from './common';\nimport { dispatchLinkOrScriptLoad } from './custom';\n\nimport type { BaseModel } from '../typings';\n\nconst { appendChild: bodyAppendChild } = HTMLBodyElement.prototype;\nexport function resetNewElement(parent: Node, child: Node, app: BaseModel): Node {\n if (child instanceof HTMLStyleElement) {\n if (child.hasAttribute('exclude')) {\n return document.createComment('【bk-weweb】style with exclude attribute is ignored');\n }\n if (child.textContent) {\n // 父级应用样式已生效情况下 即可忽略子应用对应样式 web component的隔离下优化不生效\n if (!(app.container instanceof ShadowRoot) && appCache.getBaseAppStyle(child.textContent)) {\n return document.createComment('【bk-weweb】style is effective in base app');\n }\n }\n // else {\n // const observer = new MutationObserver(() => {\n // if (child.textContent) {\n // observer.disconnect();\n // if (!(app.container instanceof ShadowRoot)\n // && appCache.getBaseAppStyle(child.textContent)) {\n // debugger;\n // console.info('--------------');\n // child.sheet!.disabled = true;\n // child.setAttribute('aaaaaaaaaaaa', '------');\n // parent.removeChild(child);\n // }\n // }\n // });\n // observer.observe(child, { attributeFilter: ['src'], childList: true, subtree: false });\n // }\n if (!child.hasAttribute('ignore')) {\n const styleInstance = new Style({\n code: child.textContent || '',\n fromHtml: false,\n url: '',\n });\n app.source?.setStyle(randomUrl(), styleInstance);\n styleInstance.scopedStyleCSS(app, child);\n }\n return child;\n }\n if (child instanceof HTMLLinkElement) {\n const result = app.source?.collectLink(child, parent, true);\n if (!result) return child;\n if (result.style) {\n result.style.scopedLinkCSS(app, child);\n }\n if (result.replace !== child) {\n return result.replace;\n }\n return child;\n }\n if (child instanceof HTMLScriptElement) {\n const replaceInfo = app.source!.collectScript(child, parent, true);\n if (!replaceInfo) {\n return child;\n }\n if (replaceInfo.script) {\n replaceInfo.script.executeCode(app);\n }\n if (replaceInfo.replace !== child) {\n return replaceInfo.replace;\n }\n if (app.scopeJs && !child.getAttribute('src') && !child.textContent) {\n const observer = new MutationObserver(() => {\n if (child.getAttribute('src')) {\n observer.disconnect();\n const scriptInfo = app.source!.collectScript(child, parent, true);\n if (scriptInfo?.replace) {\n bodyAppendChild.call(app.container, scriptInfo.replace);\n }\n // 处理异步jsonp\n if (isJsonpUrl(child.getAttribute('src'))) {\n app.container?.append(child);\n return;\n }\n if (scriptInfo?.script) {\n scriptInfo.script.executeCode(app);\n }\n child.remove();\n } else if (child.textContent) {\n observer.disconnect();\n const scriptInstance = new Script({\n async: false,\n code: child.textContent,\n defer: child.type === 'module',\n fromHtml: false,\n isModule: child.type === 'module',\n });\n app.source!.scripts.set(randomUrl(), scriptInstance);\n try {\n scriptInstance.executeCode(app);\n } catch (e) {\n console.error(e);\n } finally {\n !scriptInstance.isModule && dispatchLinkOrScriptLoad(child);\n child.remove();\n }\n }\n });\n observer.observe(child, { attributeFilter: ['src'], childList: true, subtree: false });\n return document.createComment('【bk-weweb】dynamic script or module');\n }\n return child;\n }\n return child;\n}\nexport function isSpecialElement(node: Node) {\n return node instanceof HTMLScriptElement || node instanceof HTMLStyleElement || node instanceof HTMLLinkElement;\n}\n// biome-ignore lint/complexity/noBannedTypes: <explanation>\nexport function elementAppendHandler(parent: Node, newChild: Node, rawMethod: Function) {\n if (newChild.__BK_WEWEB_APP_KEY__) {\n const app = appCache.getApp(newChild.__BK_WEWEB_APP_KEY__);\n if (app?.container) {\n const targetChild = resetNewElement(parent, newChild, app);\n const needKeepAlive = isSpecialElement(newChild) && !!app.keepAlive && !(app.container instanceof ShadowRoot);\n const container = needKeepAlive ? document.head : app?.container;\n setMarkElement(targetChild as Element, app, needKeepAlive);\n return rawMethod.call(container, targetChild);\n }\n }\n return rawMethod.call(parent, newChild);\n}\n// biome-ignore lint/complexity/noBannedTypes: <explanation>\nexport function elementInsertHandler(parent: Node, newChild: Node, passiveChild: Node | null, rawMethod: Function) {\n if (newChild.__BK_WEWEB_APP_KEY__) {\n const app = appCache.getApp(newChild.__BK_WEWEB_APP_KEY__!);\n if (app?.container) {\n const needKeepAlive = isSpecialElement(newChild) && app.keepAlive && !(app.container instanceof ShadowRoot);\n const container = needKeepAlive ? document.head : app?.container;\n const targetChild = resetNewElement(parent, newChild, app);\n if (needKeepAlive) {\n setMarkElement(targetChild as Element, app, needKeepAlive);\n }\n if (passiveChild && !container.contains(passiveChild)) {\n return bodyAppendChild.call(container, targetChild);\n }\n return rawMethod.call(container, targetChild, passiveChild);\n }\n }\n return rawMethod.call(parent, newChild, passiveChild);\n}\n\nexport function setMarkElement<T extends Element>(element: T, app?: BaseModel, keepAlive?: boolean): T {\n if (keepAlive && app) {\n element.__KEEP_ALIVE__ = app.appCacheKey;\n element.setAttribute('data-from', app.name);\n element.setAttribute('data-keep-alive', 'true');\n }\n element.setAttribute?.('powered-by', 'bk-weweb');\n return element;\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport weWeb from '..';\n\nimport type { BaseModel } from '../typings';\n\nexport function fetchSource(url: string, options = {}, app?: BaseModel): Promise<string> {\n if (typeof app?.fetchSource === 'function') {\n return app.fetchSource(url, options).catch(() => '');\n }\n if (weWeb.fetchSource) {\n return weWeb.fetchSource(url, options);\n }\n return window.fetch(url, options).then(res => res.text());\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { appCache } from '../cache/app-cache';\n// import { disabledStyleDom } from '../context/cache';\nimport { type BaseModel, CssRuleEnum, type IStyleOption } from '../typings';\nimport { setMarkElement } from '../utils';\nimport { addUrlProtocol, fillUpPath } from '../utils/common';\nimport { dispatchLinkOrScriptError, dispatchLinkOrScriptLoad } from '../utils/custom';\nimport { fetchSource } from '../utils/fetch';\n\nexport class Style {\n code = '';\n fromHtml: boolean;\n initial: boolean;\n prefetch = false;\n preload = false;\n scoped: boolean;\n scopedCode = '';\n url: string | undefined;\n constructor({ code, fromHtml, initial, prefetch, preload, url }: IStyleOption) {\n this.scoped = false;\n this.code = code;\n this.prefetch = prefetch ?? false;\n this.preload = preload ?? false;\n this.url = url;\n this.fromHtml = fromHtml;\n this.initial = initial ?? false;\n }\n /**\n * @param styleElement 样式node\n * @param app 应用实例\n */\n commonScoped(styleElement: HTMLStyleElement, app: BaseModel) {\n if (app.scopeCss && !(app.container instanceof ShadowRoot)) {\n const cssStyleSheet = new CSSStyleSheet({ disabled: true });\n cssStyleSheet.replaceSync(styleElement.textContent || this.code);\n const rules: CSSRule[] = Array.from(cssStyleSheet?.cssRules ?? []);\n const cssPrefix = `#${app.name}`;\n const scopedCss = this.scopeRule(rules, cssPrefix);\n const cssText = this.resetUrlHost(scopedCss, app.url, this.url);\n styleElement.textContent = cssText;\n this.scopedCode = cssText;\n } else {\n const cssText = this.resetUrlHost(styleElement.textContent || this.code || '', app.url, this.url);\n // fix https://bugs.chromium.org/p/chromium/issues/detail?id=336876\n if (cssText && app.container instanceof ShadowRoot) {\n let fontContent = '';\n for (const fontFace of cssText.match(/@font-face\\s*\\{[^}]+\\}/g) || []) {\n fontContent += `${fontFace}\\n`;\n }\n const rawDocument = app.sandBox?.rawDocument;\n if (rawDocument && fontContent) {\n const fontStyle = rawDocument.createElement('style');\n fontStyle.setAttribute('type', 'text/css');\n fontStyle.setAttribute('powered-by', 'bk-weweb');\n fontStyle.textContent = fontContent;\n rawDocument?.head?.append(fontStyle);\n }\n }\n styleElement.textContent = cssText.replace(/(:?:root|html)/gm, ':host');\n }\n this.scoped = true;\n }\n createStyleElement() {\n const styleElement = document.createElement('style');\n if (styleElement.__BK_WEWEB_APP_KEY__) {\n styleElement.__BK_WEWEB_APP_KEY__ = undefined;\n }\n return styleElement;\n }\n /**\n * @param app 应用实例\n * @returns 返回执行后的style标签\n */\n async executeCode(app: BaseModel): Promise<HTMLStyleElement> {\n app.registerRunningApp();\n let styleElement = this.createStyleElement();\n styleElement.setAttribute('type', 'text/css');\n styleElement.textContent = this.code!;\n try {\n if (!this.code) await this.getCode(app);\n styleElement = this.scopedStyleCSS(app, styleElement);\n this.scoped = true;\n } catch (e) {\n console.error('scoped style error', e);\n }\n return styleElement;\n }\n async getCode(app?: BaseModel): Promise<string> {\n if (this.code.length || !this.url) {\n return this.code;\n }\n let code = '';\n if (app?.source?.styles?.has(this.url)) {\n code = app.source.styles.get(this.url)?.code || '';\n }\n if (!code && appCache.getCacheStyle(this.url)) {\n const style = appCache.getCacheStyle(this.url);\n code = style?.code || '';\n }\n if (!code) {\n code = await fetchSource(this.url, {}, app).catch(() => '');\n }\n this.code = code;\n return code;\n }\n // 主应用已生效的样式 不再应用在子应用\n linkedBaseStyle(styleElement: HTMLStyleElement, app: BaseModel) {\n if (\n !(app.container instanceof ShadowRoot) &&\n styleElement.textContent &&\n appCache.getBaseAppStyle(styleElement.textContent)\n ) {\n styleElement.textContent = '';\n styleElement.innerHTML = '';\n styleElement.setAttribute('linked-from-base', 'true');\n return true;\n }\n return false;\n }\n resetPackRule(rule: CSSMediaRule | CSSSupportsRule, prefix: string, packName: string): string {\n const result = this.scopeRule(Array.from(rule.cssRules), prefix);\n return `@${packName} ${rule.conditionText} {${result}}`;\n }\n resetUrlHost(cssText: string, uri: string, linkPath?: string) {\n let baseURI = uri;\n return cssText.replace(/url\\([\"']?([^)\"']+)[\"']?\\)/gm, (text, $1) => {\n if (/^(data|blob):/.test($1) || /^(https?:)?\\/\\//.test($1)) {\n return text;\n }\n if (/^((\\.\\.?\\/)|[^/])/.test($1) && linkPath) {\n const pathArr = linkPath.split('/');\n pathArr.pop();\n baseURI = addUrlProtocol(`${pathArr.join('/')}/`);\n }\n return `url(\"${fillUpPath($1, baseURI)}\")`;\n });\n }\n scopeRule(rules: CSSRule[], cssPrefix: string): string {\n let result = '';\n for (const rule of rules) {\n switch (rule.type) {\n case CssRuleEnum.STYLE_RULE:\n result += this.scopeStyleRule(rule as CSSStyleRule, cssPrefix);\n break;\n case CssRuleEnum.MEDIA_RULE:\n result += this.resetPackRule(rule as CSSMediaRule, cssPrefix, 'media');\n break;\n case CssRuleEnum.SUPPORTS_RULE:\n result += this.resetPackRule(rule as CSSSupportsRule, cssPrefix, 'supports');\n break;\n default:\n result += rule.cssText;\n break;\n }\n }\n return result.replace(/^\\s+/, '');\n }\n scopeStyleRule(rule: CSSStyleRule, prefix: string): string {\n const { cssText, selectorText } = rule;\n if (/^((html[\\s>~,]+body)|(html|body|:root))$/.test(selectorText)) {\n return cssText.replace(/^((html[\\s>~,]+body)|(html|body|:root))/, prefix);\n }\n if (selectorText === '*') {\n return cssText.replace('*', `${prefix} *`);\n }\n\n const builtInRootSelectorRE = /(^|\\s+)((html[\\s>~]+body)|(html|body|:root))(?=[\\s>~]+|$)/;\n\n return cssText.replace(/^[\\s\\S]+{/, selectors =>\n selectors.replace(/(^|,)([^,]+)/g, (all, $1, $2) => {\n if (builtInRootSelectorRE.test($2)) {\n return all.replace(builtInRootSelectorRE, prefix);\n }\n return `${$1} ${prefix} ${$2.replace(/^\\s*/, '')}`;\n }),\n );\n }\n scopedLinkCSS(app: BaseModel, linkElement: HTMLLinkElement): HTMLStyleElement {\n const styleElement = this.createStyleElement();\n styleElement.setAttribute('type', 'text/css');\n const needKeepAlive = !!app.keepAlive && !(app.container instanceof ShadowRoot);\n setMarkElement(styleElement, app, needKeepAlive);\n const container = needKeepAlive ? document.head : app.container;\n try {\n if (this.code) {\n this.commonScoped(styleElement, app);\n container?.prepend(styleElement);\n linkElement && dispatchLinkOrScriptLoad(linkElement);\n } else if (linkElement.getAttribute('href')) {\n this.url = fillUpPath(linkElement.getAttribute('href')!, app.url);\n this.getCode(app).then(() => {\n this.scopedStyleCSS(app, styleElement);\n linkElement.remove();\n container?.prepend(styleElement);\n linkElement && dispatchLinkOrScriptLoad(linkElement);\n this.scoped = true;\n });\n } else {\n const observer = new MutationObserver(() => {\n if (!linkElement.href) return;\n observer.disconnect();\n this.url = fillUpPath(linkElement.getAttribute('href')!, app.url);\n this.getCode(app).then(() => {\n this.scopedStyleCSS(app, styleElement);\n linkElement.remove();\n container?.prepend(styleElement);\n linkElement && dispatchLinkOrScriptLoad(linkElement);\n this.scoped = true;\n });\n });\n observer.observe(linkElement, { attributeFilter: ['href'], childList: false, subtree: false });\n }\n } catch {\n linkElement && dispatchLinkOrScriptError(linkElement);\n }\n return styleElement;\n }\n scopedStyleCSS(app: BaseModel, styleElement: HTMLStyleElement): HTMLStyleElement {\n const needKeepAlive = !!app.keepAlive && !(app.container instanceof ShadowRoot);\n setMarkElement(styleElement, app, needKeepAlive);\n if (this.code || styleElement.textContent) {\n if (styleElement.textContent) {\n styleElement.textContent = '';\n styleElement.innerHTML = '';\n }\n if (this.linkedBaseStyle(styleElement, app)) return styleElement;\n this.commonScoped(styleElement, app);\n } else {\n const observer = new MutationObserver(() => {\n if (!(styleElement.textContent || styleElement.sheet?.cssRules?.length)) return;\n observer.disconnect();\n if (!this.linkedBaseStyle(styleElement, app)) {\n this.commonScoped(styleElement, app);\n }\n });\n observer.observe(styleElement, { attributes: false, characterData: true, childList: true, subtree: true });\n }\n this.url && styleElement.setAttribute('origin-src', this.url);\n return styleElement;\n }\n}\n\nexport async function executeAppStyles(app: BaseModel, container?: Element | ShadowRoot) {\n const styleList: Style[] = Array.from(app.source!.styles.values());\n const promiseList: Promise<HTMLStyleElement>[] = [];\n for (const style of styleList) {\n promiseList.push(style.executeCode(app));\n }\n await Promise.all(promiseList).then((styleElementList: HTMLStyleElement[]) => {\n const parentElement = container || app.container;\n if (app.keepAlive && !(parentElement instanceof ShadowRoot)) {\n document.head.append(...styleElementList);\n } else {\n parentElement?.append(...styleElementList);\n }\n });\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { setCurrentRunningApp } from '../context/cache';\nimport SandBox from '../context/sandbox';\nimport { EntrySource } from '../entry/entry';\nimport { execAppScripts } from '../entry/script';\nimport { executeAppStyles } from '../entry/style';\nimport { type BaseModel, CSS_ATTRIBUTE_KEY, type IJsModelProps } from '../typings';\nimport { random } from '../utils/common';\n\nimport type { fetchSource } from '../utils/fetch';\nimport type { SourceType } from '../utils/load-source';\n// bk-kweweb 微模块模式\nexport class MicroInstanceModel implements BaseModel {\n private state: AppState = AppState.UNSET; // 当前实例状态\n appCacheKey: string; // 缓存key\n container?: HTMLElement | ShadowRoot; // 容器\n data: Record<string, unknown>; // 数据\n initSource: SourceType; // 初始资源\n isPreLoad = false; // 是否预加载\n keepAlive: boolean; // 是否缓存\n name: string; // 名称\n sandBox?: SandBox; // 沙箱\n scopeCss = true; // 是否隔离样式\n scopeJs = false; // 是否隔离js\n showSourceCode = true; // 是否显示源码\n source?: EntrySource; // 入口资源\n url: string; // url\n fetchSource?: typeof fetchSource;\n constructor(props: IJsModelProps & { fetchSource?: typeof fetchSource }) {\n this.name = props.id !== props.url ? props.id! : random(5);\n this.appCacheKey = props.id || this.name;\n this.url = props.url;\n this.container = props.container ?? undefined;\n this.scopeJs = props.scopeJs ?? true;\n this.showSourceCode = props.showSourceCode ?? true;\n this.scopeCss = props.scopeCss ?? true;\n this.keepAlive = props.keepAlive ?? false;\n this.data = props.data ?? {};\n this.initSource = props.initSource ?? [];\n // 是否启用沙盒\n if (this.scopeJs) {\n this.sandBox = new SandBox(this);\n }\n this.fetchSource = props.fetchSource;\n }\n activated<T>(\n container: HTMLElement | ShadowRoot,\n callback?: (instance: BaseModel, exportInstance?: T) => void,\n ): void {\n this.isPreLoad = false;\n this.state = AppState.ACTIVATED;\n if (this.container && container) {\n if (container instanceof Element) container?.setAttribute(CSS_ATTRIBUTE_KEY, this.name);\n const fragment = document.createDocumentFragment();\n for (const node of Array.from(this.container.childNodes)) {\n fragment.appendChild(node);\n }\n container.appendChild(fragment);\n this.container = container;\n this.sandBox?.activated();\n const scriptInfo = this.source?.getScript(this.url);\n callback?.(this, scriptInfo?.exportInstance);\n }\n }\n deactivated(): void {\n this.state = AppState.DEACTIVATED;\n this.sandBox?.deactivated();\n }\n mount<T>(\n container?: HTMLElement | ShadowRoot,\n callback?: (instance: MicroInstanceModel, exportInstance: T) => void,\n ): void {\n this.isPreLoad = false;\n this.container = container ?? this.container!;\n this.state = AppState.MOUNTING;\n if (this.container instanceof HTMLElement) {\n this.container?.setAttribute(CSS_ATTRIBUTE_KEY, this.name);\n }\n this.container.innerHTML = '';\n const instanceWrap = document.createElement('div');\n const wrapId = `${this.name}-wrapper`;\n instanceWrap.setAttribute('id', wrapId);\n if (this.source?.styles.size) {\n executeAppStyles(this, this.container);\n }\n this.container.appendChild(instanceWrap);\n this.sandBox?.activated();\n execAppScripts(this).finally(() => {\n this.state = AppState.MOUNTED;\n const scriptInfo = this.source?.getScript(this.url);\n if (typeof scriptInfo?.exportInstance?.render === 'function') {\n scriptInfo.exportInstance.render(instanceWrap, this.data);\n }\n callback?.(this, scriptInfo?.exportInstance);\n });\n }\n onError(): void {\n this.state = AppState.ERROR;\n }\n onMount(): void {\n if (this.isPreLoad) return;\n this.state = AppState.LOADED;\n this.mount();\n }\n registerRunningApp() {\n setCurrentRunningApp(this);\n Promise.resolve().then(() => setCurrentRunningApp(null));\n }\n async start(): Promise<void> {\n if (!this.source || [AppState.ERROR, AppState.UNSET].includes(this.status)) {\n this.source = new EntrySource(this.url);\n await this.source.importEntry(this);\n }\n }\n unmount(needDestroy?: boolean): void {\n this.state = AppState.UNMOUNT;\n this.sandBox?.deactivated();\n needDestroy && appCache.deleteApp(this.url);\n this.container!.innerHTML = '';\n this.container = undefined;\n }\n set status(v: AppState) {\n this.state = v;\n }\n get status(): AppState {\n return this.state;\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { appCache } from '../cache/app-cache';\nimport { getGlobalContextCode } from '../context/cache';\nimport { MicroAppModel } from '../mode/app';\nimport { MicroInstanceModel } from '../mode/instance';\nimport { setMarkElement } from '../utils';\nimport { fetchSource } from '../utils/fetch';\n\nimport type { BaseModel, IScriptOption } from '../typings';\n\nlet firstGlobalProp: string | undefined;\nlet secondGlobalProp: string | undefined;\nlet lastGlobalProp: string | undefined;\n\n// Script脚本实例\nexport class Script {\n async = false;\n code = '';\n defer = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n exportInstance?: any;\n fromHtml: boolean;\n initial: boolean;\n isModule = false;\n scoped: boolean;\n url: string | undefined;\n\n constructor({ async, code, defer, fromHtml, initial, isModule, url }: IScriptOption) {\n this.code = code;\n this.async = async;\n this.defer = defer;\n this.isModule = isModule;\n this.url = url;\n this.scoped = false;\n this.fromHtml = fromHtml ?? false;\n this.initial = initial ?? false;\n }\n /**\n * @param app 应用\n * @param needReplaceScriptElement 是否需要替换script标签\n * @returns 返回执行后的script标签或注释\n */\n async executeCode(\n app: BaseModel,\n needReplaceScriptElement = false,\n ): Promise<Comment | HTMLScriptElement | undefined> {\n try {\n if (!this.code) await this.getCode(app);\n if (app instanceof MicroInstanceModel) {\n const globalWindow = app.scopeJs ? app.sandBox?.proxyWindow || window : window;\n noteGlobalProps(globalWindow);\n }\n let scopedCode = this.code;\n scopedCode = this.transformCode(app);\n if (app.showSourceCode || this.isModule) {\n const scriptElement = document.createElement('script');\n if (scriptElement.__BK_WEWEB_APP_KEY__) {\n scriptElement.__BK_WEWEB_APP_KEY__ = undefined;\n }\n app.registerRunningApp();\n this.executeSourceScript(scriptElement, scopedCode);\n if (needReplaceScriptElement) return scriptElement;\n const needKeepAlive = !!app.keepAlive && !(app.container instanceof ShadowRoot);\n const container = needKeepAlive ? document.head : app.container;\n setMarkElement(scriptElement, app, needKeepAlive);\n container!.appendChild(scriptElement);\n } else {\n this.executeMemoryScript(app, scopedCode);\n if (needReplaceScriptElement) return document.createComment('【bk-weweb】dynamic script');\n }\n if (app instanceof MicroInstanceModel) {\n const globalWindow = app.scopeJs ? app.sandBox?.proxyWindow || window : window;\n const exportProp = getGlobalProp(globalWindow);\n if (exportProp) {\n this.exportInstance = globalWindow[exportProp];\n // window 下需清除全局副作用\n if (!app.scopeJs) {\n delete globalWindow[exportProp];\n }\n }\n }\n } catch (e) {\n console.error('execute script code error', e);\n }\n return;\n }\n // 内存脚本执行\n executeMemoryScript(app: BaseModel, scopedCode: string) {\n try {\n const isScopedLocation = app instanceof MicroAppModel && app.scopeLocation;\n app.registerRunningApp();\n\n new Function('window', 'location', 'history', scopedCode)(\n app.sandBox!.proxyWindow,\n isScopedLocation ? app.iframe!.contentWindow!.location : window.location,\n isScopedLocation ? app.iframe!.contentWindow!.history : window.history,\n );\n } catch (e) {\n console.error(e);\n }\n }\n // 脚本标签执行\n executeSourceScript(scriptElement: HTMLScriptElement, scopedCode: string): void {\n if (this.isModule) {\n scriptElement.src = `${this.url}?key=${Date.now()}`;\n // if (this.url?.match(/\\.ts$/)) {\n // // scriptElement.src = this.url + '?key=' + Date.now()!;\n // } else {\n // // const blob = new Blob([this.code], { type: 'text/javascript' });\n // // scriptElement.src = URL.createObjectURL(blob);\n // }\n scriptElement.setAttribute('type', 'module');\n } else {\n scriptElement.textContent = scopedCode;\n }\n this.url && scriptElement.setAttribute('origin-src', this.url);\n }\n // 获取脚本内容\n async getCode(app?: BaseModel): Promise<string> {\n if (this.code.length || !this.url) {\n return this.code;\n }\n let code = '';\n if (app?.source?.getScript(this.url)) {\n code = app.source.getScript(this.url)?.code || '';\n }\n if (!code && appCache.getCacheScript(this.url)) {\n code = appCache.getCacheScript(this.url)?.code || '';\n }\n if (!code) {\n code = await fetchSource(this.url, {}, app).catch(e => {\n console.error(`fetch script ${this.url} error`, e);\n return '';\n });\n }\n code = code.replace(/^\"use\\sstrict\";$/gim, '');\n this.code = code;\n return code;\n }\n setCode(code: string) {\n this.code = code;\n }\n // 转换脚本内容\n transformCode(app: BaseModel): string {\n // const sourceMapUrl = this.url ? `//# sourceURL=${this.url}\\n` : '';\n const sourceMapUrl = '';\n if (app.sandBox) {\n if (this.isModule) {\n return ` with(window.${app.sandBox.windowSymbolKey}){\n ;${this.code}\\n\n ${sourceMapUrl}\n }`;\n }\n if (app.showSourceCode) {\n return `;(function(window, self, globalThis){\n with(window){\n ${getGlobalContextCode()}\\n\n ${this.code}\\n\n ${sourceMapUrl}\n }\n }).call(window.${app.sandBox.windowSymbolKey},\n window.${app.sandBox.windowSymbolKey}, window.${app.sandBox.windowSymbolKey}, window.${app.sandBox.windowSymbolKey});`;\n }\n return `\n with(window) {\n try {\n ${getGlobalContextCode()}\\n\n ${this.code}\\n\n ${sourceMapUrl}\n }\n catch(e) {\n console.error(e)\n }\n }\n `;\n }\n return this.code;\n }\n}\n// 全局属性是否跳过标记\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function shouldSkipProperty(global: Window, p: any) {\n return (\n // biome-ignore lint/suspicious/noPrototypeBuiltins: <explanation>\n !global.hasOwnProperty(p) ||\n (!Number.isNaN(p) && p < global.length) ||\n (typeof navigator !== 'undefined' &&\n navigator.userAgent.indexOf('Trident') !== -1 &&\n global[p] &&\n typeof window !== 'undefined' &&\n global[p].parent === window)\n );\n}\n// 获取instance js source code 执行后 绑定的export 实例\nexport function getGlobalProp(global: Window, useFirstGlobalProp?: boolean) {\n let cnt = 0;\n let foundLastProp: boolean | undefined;\n let result: string | undefined;\n for (const p in global) {\n // do not check frames cause it could be removed during import\n if (shouldSkipProperty(global, p)) continue;\n if ((cnt === 0 && p !== firstGlobalProp) || (cnt === 1 && p !== secondGlobalProp)) return p;\n if (foundLastProp) {\n lastGlobalProp = p;\n result = (useFirstGlobalProp && result) || p;\n } else {\n foundLastProp = p === lastGlobalProp;\n }\n cnt += 1;\n }\n return result;\n}\n// 标记全局属性\nexport function noteGlobalProps(global: Window) {\n secondGlobalProp = undefined;\n firstGlobalProp = secondGlobalProp;\n for (const p in global) {\n if (shouldSkipProperty(global, p)) continue;\n if (!firstGlobalProp) firstGlobalProp = p;\n else if (!secondGlobalProp) secondGlobalProp = p;\n lastGlobalProp = p;\n }\n return lastGlobalProp;\n}\n// app初始化dom 脚本执行\nexport async function execAppScripts(app: BaseModel) {\n // const appInitialScriptList = Array.from(app.source!.scripts.values()).filter(script => script.initial);\n // // 初始化脚本最先执行\n // if (appInitialScriptList.length) {\n // await Promise.all(appInitialScriptList.map(script => script.executeCode(app)));\n // }\n const appScriptList = Array.from(app.source!.scripts.values()).filter(script => script.fromHtml || script.initial);\n const commonList = appScriptList.filter(script => (!script.async && !script.defer) || script.isModule);\n // 保证同步脚本 和 module类型 最先执行\n await Promise.all(commonList.map(script => script.getCode(app)));\n await Promise.all(commonList.map(script => script.executeCode(app)));\n\n // 最后执行 defer 和 async 脚本\n const deferScriptList: Promise<Comment | HTMLScriptElement | undefined>[] = [];\n const asyncScriptList: Promise<Comment | HTMLScriptElement | undefined>[] = [];\n // async defer 脚本执行\n for (const script of appScriptList) {\n if (script.defer || script.async) {\n if (!script.code && script.defer) {\n deferScriptList.push(script.executeCode(app));\n } else asyncScriptList.push(script.executeCode(app));\n }\n }\n await Promise.all([...asyncScriptList, ...deferScriptList]).catch(e => {\n console.error(e);\n });\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { setCurrentRunningApp } from '../context/cache';\nimport SandBox from '../context/sandbox';\nimport { EntrySource } from '../entry/entry';\nimport { execAppScripts } from '../entry/script';\nimport { type BaseModel, CSS_ATTRIBUTE_KEY, type IAppModleProps, WewebMode } from '../typings';\nimport { addUrlProtocol, random } from '../utils/common';\n\nimport type { SourceType } from '../utils/load-source';\n\nconst BLANK_ORIGN = 'about:blank';\n// bk-weweb 微应用模式\nexport class MicroAppModel implements BaseModel {\n private state: AppState = AppState.UNSET; // 状态\n container?: HTMLElement | ShadowRoot; // 容器\n public data: Record<string, unknown>; // 数据\n iframe: HTMLIFrameElement | null = null; // scoped iframe\n initSource: SourceType; // 初始资源\n isModuleApp = false; // 是否预加载\n public isPreLoad = false; // 是否缓存\n keepAlive: boolean;\n mode: WewebMode = WewebMode.APP; // 名称\n name: string; // 沙箱\n sandBox?: SandBox; // 是否隔离样式\n scopeCss: boolean; // 是否隔离js\n scopeJs: boolean; // 是否隔离location\n scopeLocation: boolean; // 是否显示源码\n showSourceCode: boolean; // 入口资源\n source?: EntrySource; // url\n url: string; // 是否是esm应用\n constructor(props: IAppModleProps) {\n this.name = props.id !== props.url ? props.id! : random(5);\n this.mode = props.mode ?? WewebMode.APP;\n this.container = props.container ?? undefined;\n this.showSourceCode = props.showSourceCode ?? false;\n this.url = props.url;\n this.data = props.data || {};\n this.scopeJs = props.scopeJs ?? true;\n this.scopeCss = props.scopeCss ?? true;\n this.scopeLocation = props.scopeLocation ?? false;\n this.isPreLoad = props.isPreLoad ?? false;\n this.keepAlive = props.keepAlive ?? false;\n this.initSource = props.initSource ?? [];\n if (this.scopeJs) {\n this.sandBox = new SandBox(this);\n }\n if (this.container instanceof HTMLElement) {\n this.container.setAttribute(CSS_ATTRIBUTE_KEY, this.name);\n }\n }\n // 激活\n activated(container: HTMLElement | ShadowRoot, callback?: (app: BaseModel) => void) {\n this.isPreLoad = false;\n this.state = AppState.ACTIVATED;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const app = this;\n if (container && this.container) {\n if (container instanceof Element) container!.setAttribute(CSS_ATTRIBUTE_KEY, this.name);\n const fragment = document.createDocumentFragment();\n const list = Array.from(this.container.childNodes);\n for (const node of list) {\n node.__BK_WEWEB_APP_KEY__ = this.appCacheKey;\n Object.defineProperties(node, {\n ownerDocument: {\n get() {\n return app.sandBox?.rawDocument;\n },\n },\n });\n fragment.appendChild(node);\n }\n container.innerHTML = '';\n container.appendChild(fragment);\n this.container = container;\n this.initShadowRootContainer();\n this.sandBox?.activated(this.data);\n callback?.(this);\n }\n }\n // 创建隔离iframe\n createIframe(): Promise<HTMLIFrameElement> {\n return new Promise(resolve => {\n const iframe = document.createElement('iframe');\n const url = new URL(addUrlProtocol(this.url));\n const isChrome = navigator.userAgent.indexOf('Chrome') > -1;\n iframe.setAttribute(\n 'src',\n `${isChrome ? BLANK_ORIGN : location.origin}${url.pathname || '/'}${url.search}${url.hash}`,\n );\n iframe.style.cssText = 'display: none;';\n document.body.appendChild(iframe);\n if (isChrome) {\n setTimeout(() => resolve(iframe), 0);\n } else {\n // 其他浏览器在about:blank下会出现同源检测安全错误 换另一种方式来做location保持\n const interval = setInterval(() => {\n if (iframe.contentWindow && iframe.contentWindow.location.href !== BLANK_ORIGN) {\n iframe.contentWindow!.stop();\n iframe.contentDocument!.body.parentElement!.innerHTML = '<head></head><body></body>';\n clearInterval(interval);\n resolve(iframe);\n }\n }, 0);\n }\n });\n }\n deactivated() {\n this.state = AppState.DEACTIVATED;\n this.sandBox?.deactivated();\n }\n initShadowRootContainer() {\n if (this.container instanceof ShadowRoot) {\n // inject echarts in shadowRoot\n Object.defineProperties(this.container, {\n getBoundingClientRect: {\n get() {\n return this.host.getBoundingClientRect;\n },\n },\n });\n }\n }\n mount(container?: HTMLElement | ShadowRoot, callback?: (app: BaseModel) => void): void {\n this.isPreLoad = false;\n this.container = container ?? this.container!;\n this.initShadowRootContainer();\n this.state = AppState.MOUNTING;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const app = this;\n if (this.container) {\n if (this.container instanceof Element) this.container!.setAttribute(CSS_ATTRIBUTE_KEY, this.name);\n const clonedNode = this.source!.html!.cloneNode(true);\n const fragment = document.createDocumentFragment();\n for (const node of Array.from(clonedNode.childNodes)) {\n node.__BK_WEWEB_APP_KEY__ = this.appCacheKey;\n Object.defineProperties(node, {\n ownerDocument: {\n get() {\n return app.sandBox?.rawDocument;\n },\n },\n });\n fragment.appendChild(node);\n }\n this.container.innerHTML = '';\n this.container.appendChild(fragment);\n this.sandBox?.activated(this.data);\n execAppScripts(this).finally(() => {\n this.state = AppState.MOUNTED;\n callback?.(this);\n });\n }\n }\n onError(): void {\n this.state = AppState.ERROR;\n }\n onMount(): void {\n if (this.isPreLoad) return;\n this.state = AppState.LOADED;\n this.mount();\n }\n registerRunningApp() {\n setCurrentRunningApp(this);\n Promise.resolve().then(() => setCurrentRunningApp(null));\n }\n async start() {\n if (!this.source || [AppState.ERROR, AppState.UNSET].includes(this.status)) {\n this.state = AppState.LOADING;\n if (this.scopeLocation || this.isModuleApp) {\n const iframe = await this.createIframe();\n this.iframe = iframe;\n }\n this.source = new EntrySource(this.url);\n await this.source.importEntry(this);\n }\n }\n unmount(needDestroy = false): void {\n this.state = AppState.UNMOUNT;\n this.sandBox?.deactivated();\n needDestroy && appCache.deleteApp(this.url);\n this.container!.innerHTML = '';\n this.container = undefined;\n }\n get appCacheKey(): string {\n return this.url;\n }\n public get status() {\n return this.state;\n }\n public set status(v: AppState) {\n this.state = v;\n }\n}\nexport const createApp = (props: IAppModleProps) => {\n appCache.deleteApp(props.url);\n const instance = new MicroAppModel(props);\n appCache.setApp(instance);\n};\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { Script } from '../entry/script';\nimport { Style } from '../entry/style';\n\nexport type SourceFuncType = () => Promise<string[]>;\n\nexport type SourceType = SourceFuncType | string[];\n\n// 收集和辩证资源\nexport async function collectSource(soruceList: SourceType) {\n let source: string[] = [];\n if (typeof soruceList === 'function') {\n source = await soruceList();\n } else {\n source = soruceList || [];\n }\n if (!source.length) return {};\n const collectScript: Map<string, Script> = new Map();\n const collectStyle: Map<string, Style> = new Map();\n source.forEach(str => {\n try {\n const url = new URL(str);\n if (url.pathname.match(/\\.js$/)) {\n const script = appCache.getCacheScript(str);\n collectScript.set(\n str,\n new Script({\n async: false,\n code: script?.code || '',\n defer: false,\n fromHtml: false,\n initial: true,\n isModule: false,\n url: str,\n }),\n );\n } else if (url.pathname.match(/\\.css$/)) {\n const style = appCache.getCacheStyle(str);\n collectStyle.set(\n str,\n new Style({\n code: style?.code || '',\n fromHtml: true,\n initial: true,\n prefetch: false,\n preload: false,\n url: str,\n }),\n );\n }\n } catch {\n console.error(`【bk-weweb】: ${str} is invalid URL`);\n }\n });\n return {\n collectScript,\n collectStyle,\n };\n}\n// 加载全局静态资源\nexport async function loadGlobalSource(soruceList: SourceType) {\n const { collectScript, collectStyle } = await collectSource(soruceList);\n const promiseList: Promise<string>[] = [];\n collectScript &&\n Array.from(collectScript.entries()).forEach(item => {\n promiseList.push(item[1].getCode());\n appCache.setBaseAppScript(...item);\n });\n collectStyle &&\n Array.from(collectStyle.entries()).forEach(item => {\n promiseList.push(item[1].getCode());\n appCache.setBaseAppStyle(...item);\n });\n await Promise.all(promiseList).catch(e => {\n throw e;\n });\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { MicroAppModel } from '../mode/app';\nimport { MicroInstanceModel } from '../mode/instance';\nimport { addUrlProtocol, fillUpPath, isJsonpUrl, randomUrl } from '../utils/common';\nimport { fetchSource } from '../utils/fetch';\nimport { collectSource } from '../utils/load-source';\nimport { Script } from './script';\nimport { Style, executeAppStyles } from './style';\n\nimport type { BaseModel, IScriptOption } from '../typings';\n\nconst SCRIPT_TYPE_NAMES = [\n 'text/javascript',\n 'text/ecmascript',\n 'application/javascript',\n 'application/ecmascript',\n 'module',\n];\nexport class EntrySource {\n html: HTMLElement | null = null;\n rawHtml?: string;\n scripts: Map<string, Script>;\n styles: Map<string, Style>;\n constructor(public url: string) {\n this.scripts = new Map();\n this.styles = new Map();\n }\n collectLink(\n link: HTMLLinkElement,\n parent: Node,\n needReplaceELement = false,\n ): { replace: Comment | Element; style?: Style } {\n if (link.hasAttribute('exclude')) {\n return { replace: document.createComment('【bk-weweb】style with exclude attribute is ignored') };\n }\n if (link.hasAttribute('ignore')) {\n return { replace: link };\n }\n const rel = link.getAttribute('rel');\n let href = link.getAttribute('href');\n let replaceElement: Comment;\n if (rel === 'stylesheet' && href) {\n href = fillUpPath(href, this.url);\n replaceElement = document.createComment(`【bk-weweb】style with href=${href}`);\n let styleInstance = this.getStyle(href);\n if (!styleInstance) {\n styleInstance = new Style({\n code: '',\n fromHtml: !needReplaceELement,\n prefetch: !!link.getAttribute('prefetch'),\n preload: !!link.getAttribute('preload'),\n url: href,\n });\n this.styles.set(href, styleInstance);\n }\n !needReplaceELement && parent.replaceChild(replaceElement, link);\n return { replace: replaceElement, style: styleInstance };\n }\n if (rel && ['apple-touch-icon', 'icon', 'prefetch', 'preload', 'prerender'].includes(rel)) {\n // preload prefetch icon ....\n replaceElement = document.createComment(`【bk-weweb】style with rel=${rel}${href ? ` & href=${href}` : ''}`);\n !needReplaceELement && parent.removeChild(link);\n return { replace: replaceElement };\n }\n if (href) {\n // dns-prefetch preconnect modulepreload search ....\n link.setAttribute('href', fillUpPath(href, this.url));\n }\n return { replace: link };\n }\n collectScript(\n script: HTMLScriptElement,\n parent: Node,\n needReplaceELement = false,\n ): { replace: Comment | Element; script?: Script } | undefined {\n if (\n script.hasAttribute('ignore') ||\n (script.type !== 'module' && isJsonpUrl(script.getAttribute('src'))) ||\n (script.hasAttribute('type') && !SCRIPT_TYPE_NAMES.includes(script.type))\n ) {\n return;\n }\n let replaceElement: Comment | null = null;\n if (script.hasAttribute('exclude')) {\n replaceElement = document.createComment('【bk-weweb】script element with exclude attribute is removed');\n !needReplaceELement && parent.replaceChild(replaceElement!, script);\n return { replace: replaceElement! };\n }\n let src: null | string = script.getAttribute('src');\n if (src) {\n src = fillUpPath(src, this.url);\n let scriptInstance = this.getScript(src);\n if (!scriptInstance) {\n scriptInstance = new Script({\n async: script.hasAttribute('async'),\n code: '',\n defer: script.defer || script.type === 'module',\n fromHtml: !needReplaceELement,\n isModule: script.type === 'module',\n url: src,\n });\n this.scripts.set(src, scriptInstance);\n }\n replaceElement = document.createComment(`【bk-weweb】script with src='${src}'`);\n !needReplaceELement && parent.replaceChild(replaceElement, script);\n return { replace: replaceElement, script: scriptInstance };\n }\n if (script.textContent) {\n const nonceStr: string = randomUrl();\n const scriptInstance = new Script({\n async: false,\n // code: script.textContent.replace(/var\\s+(\\w+)=/gm, `window.$1 = `),\n code: script.textContent,\n defer: script.type === 'module',\n fromHtml: !needReplaceELement,\n initial: false,\n isModule: script.type === 'module',\n url: nonceStr!,\n });\n this.scripts.set(nonceStr, scriptInstance);\n replaceElement = document.createComment('【bk-weweb】script with text content');\n !needReplaceELement && parent.replaceChild(replaceElement, script);\n return {\n replace: replaceElement,\n script: scriptInstance,\n };\n }\n return { replace: script };\n }\n collectScriptAndStyle(parent: HTMLElement): void {\n const links = Array.from(parent.querySelectorAll('link'));\n for (const link of links || []) {\n this.collectLink(link, link.parentElement!);\n }\n const styles = Array.from(parent.querySelectorAll('style'));\n for (const style of styles || []) {\n if (!style.hasAttribute('exclude') && !style.hasAttribute('ignore')) {\n this.styles.set(\n randomUrl(),\n new Style({\n code: style.textContent || '',\n fromHtml: true,\n url: '',\n }),\n );\n style.remove();\n }\n }\n const scripts = Array.from(parent.querySelectorAll('script'));\n for (const script of scripts) {\n this.collectScript(script, script.parentElement!);\n }\n const metas = Array.from(parent.querySelectorAll('meta'));\n for (const meta of metas) {\n meta.parentElement!.removeChild(meta);\n }\n const imgs = Array.from(parent.querySelectorAll('img'));\n for (const img of imgs) {\n if (img.hasAttribute('src')) {\n img.setAttribute('src', fillUpPath(img.getAttribute('src')!, this.url));\n }\n }\n // const children = Array.from(parent.children);\n // children?.forEach(dom => {\n // if (dom instanceof HTMLLinkElement) {\n // this.collectLink(dom, parent);\n // } else if (dom instanceof HTMLStyleElement) {\n // if (!dom.hasAttribute('exclude') && !dom.hasAttribute('ignore')) {\n // this.styles.set(\n // randomUrl(),\n // new Style({\n // code: dom.textContent || '',\n // fromHtml: true,\n // url: '',\n // }),\n // );\n // dom.remove();\n // }\n // } else if (dom instanceof HTMLScriptElement) {\n // this.collectScript(dom, parent);\n // } else if (dom instanceof HTMLMetaElement || dom instanceof HTMLTitleElement) {\n // parent.removeChild(dom);\n // } else if (dom instanceof HTMLImageElement && dom.hasAttribute('src')) {\n // dom.setAttribute('src', fillUpPath(dom.getAttribute('src')!, this.url));\n // }\n // });\n // children.length &&\n // children.forEach(child => {\n // this.collectScriptAndStyle(child as HTMLElement, app);\n // });\n }\n getScript(url: string) {\n return this.scripts.get(url);\n }\n getStyle(urlOrCode: string) {\n return this.styles.get(urlOrCode) || Array.from(this.styles.values()).find(style => style.code === urlOrCode);\n }\n async importEntry(app: BaseModel): Promise<void> {\n if (app.initSource?.length) {\n // 初始化配置的公共source资源\n const { collectScript, collectStyle } = await collectSource(app.initSource);\n if (collectScript) {\n this.scripts = collectScript;\n }\n if (collectStyle) {\n this.styles = collectStyle;\n }\n }\n if (app instanceof MicroAppModel) await this.importHtmlEntry(app);\n else if (app instanceof MicroInstanceModel) await this.importInstanceEntry(app);\n }\n async importHtmlEntry(app: MicroAppModel): Promise<void> {\n let htmlStr = appCache.getCacheHtml(this.url);\n if (!htmlStr) {\n htmlStr = await fetchSource(addUrlProtocol(this.url), { cache: 'no-cache' }, app);\n if (!htmlStr) {\n console.error('load app entry error, place check');\n return Promise.reject();\n }\n }\n this.rawHtml = htmlStr;\n const wrapElement = document.createElement('div');\n if (wrapElement.__BK_WEWEB_APP_KEY__) {\n wrapElement.__BK_WEWEB_APP_KEY__ = undefined;\n }\n wrapElement.innerHTML = htmlStr.replace(/<\\/?head>/gim, '').replace(/<\\/?body>/i, '');\n this.collectScriptAndStyle(wrapElement);\n await executeAppStyles(app, wrapElement);\n this.html = wrapElement;\n }\n async importInstanceEntry(app: BaseModel): Promise<void> {\n let jsStr = appCache.getCacheScript(this.url)?.code;\n if (!jsStr) {\n jsStr = await fetchSource(this.url, { cache: 'no-cache' }, app);\n }\n if (!jsStr) {\n console.error('load app entry error, place check');\n return Promise.reject();\n }\n this.scripts.set(\n this.url,\n new Script({\n async: false,\n code: jsStr,\n defer: false,\n fromHtml: true,\n isModule: !!this.url.match(/\\.ts$/),\n url: this.url,\n }),\n );\n }\n setScript(url: string, script: IScriptOption | Script) {\n this.scripts.set(url, script instanceof Script ? script : new Script(script));\n }\n setStyle(url: string, style: Style) {\n this.styles.set(url, style);\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { AppState } from '../common';\nimport { EntrySource } from '../entry/entry';\n\nimport type { Script } from '../entry/script';\nimport type { Style } from '../entry/style';\nimport type { BaseModel } from '../typings';\n// 所有应用缓存\nexport class AppCache {\n // todo 主应用共享资源包\n private baseSource: EntrySource;\n private cache: Map<string, BaseModel>;\n constructor() {\n this.cache = new Map();\n this.baseSource = new EntrySource(location.href);\n }\n // 删除缓存\n deleteApp(url: string) {\n this.cache.delete(url);\n }\n // 获取缓存app\n getApp(name?: null | string): BaseModel | undefined {\n if (!name) return undefined;\n const app = this.cache.get(name);\n if (app) return app;\n return Array.from(this.cache.values()).find((item: BaseModel) => item.name === name);\n }\n // 获取缓存app\n getBaseAppStyle(urlOrCode: string) {\n return this.baseSource.getStyle(urlOrCode);\n }\n getCacheHtml(url: string): string {\n const list = Array.from(this.cache.values());\n const app = list.find(item => item.url === url);\n if (app) return app.source?.rawHtml || '';\n return '';\n }\n getCacheScript(url: string): Script | undefined {\n let script: Script | undefined = this.baseSource.getScript(url);\n if (script) return;\n const list = Array.from(this.cache.values());\n list.some(app => {\n script = app.source?.getScript(url);\n return !!script;\n });\n return script;\n }\n getCacheStyle(url: string): Style | undefined {\n let style: Style | undefined = this.baseSource.getStyle(url);\n if (style) return;\n const list = Array.from(this.cache.values());\n list.some(app => {\n style = app.source?.getStyle(url);\n return !!style;\n });\n return style;\n }\n setApp(app: BaseModel) {\n this.cache.set(app.appCacheKey, app);\n }\n setBaseAppScript(url: string, script: Script) {\n this.baseSource.setScript(url, script);\n }\n setBaseAppStyle(url: string, style: Style) {\n this.baseSource.setStyle(url, style);\n }\n get hasActiveApp() {\n return Array.from(this.cache.values()).some((app: BaseModel) => app.status !== AppState.UNMOUNT);\n }\n}\nconst appCache = new AppCache();\n// 注册全局获取缓存app 或者 instance\nwindow.__getAppOrInstance__ = (id?: string) => {\n if (!id) return appCache;\n return appCache.getApp(id);\n};\nexport { appCache };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { Script } from '../entry/script';\nimport { Style } from '../entry/style';\nimport { setMarkElement } from '../utils';\nimport { fillUpPath } from '../utils/common';\nimport { dispatchLinkOrScriptError, dispatchLinkOrScriptLoad } from '../utils/custom';\nimport { fetchSource } from '../utils/fetch';\n/**\n * @param url 资源地址\n * @param style 样式实例\n * @param originLink 原始link标签\n * @returns 返回替换的style标签\n */\nfunction getStyleSource(url: string, style: Style, originLink: HTMLLinkElement): HTMLStyleElement {\n const replaceStyle = document.createElement('style');\n setMarkElement(replaceStyle);\n fetchSource(url)\n .then((data: string) => {\n style.code = data;\n appCache.setBaseAppStyle(url, style);\n replaceStyle.textContent = data;\n dispatchLinkOrScriptLoad(originLink);\n })\n .catch(err => {\n console.error(err);\n dispatchLinkOrScriptError(originLink);\n });\n return replaceStyle;\n}\n/**\n * @param url 资源地址\n * @param script 脚本实例\n * @param originScript 原始script标签\n * @returns 返回替换的script标签\n */\nfunction getScriptSource(url: string, script: Script, originScript: HTMLScriptElement): Comment | HTMLScriptElement {\n const replaceScript: HTMLScriptElement = document.createElement('script');\n setMarkElement(replaceScript);\n fetchSource(url)\n .then((code: string) => {\n script.setCode(code);\n try {\n replaceScript.textContent = code;\n if (!url.startsWith('inline-')) {\n originScript.setAttribute('origin-src', url);\n }\n } catch (e) {\n console.error(e, url);\n }\n dispatchLinkOrScriptLoad(originScript);\n })\n .catch(err => {\n console.error(err);\n dispatchLinkOrScriptError(originScript);\n });\n return replaceScript;\n}\n/**\n * @param child link或者script标签\n * @returns 返回替换的link或者script标签\n */\nfunction createNewNode(child: Node): Node {\n if (child instanceof HTMLLinkElement) {\n const rel = child.getAttribute('rel');\n let href = child.getAttribute('href');\n if (rel === 'stylesheet' && href) {\n href = fillUpPath(href, location.origin);\n const replaceStyle = document.createElement('style');\n const styleInstance = new Style({\n code: '',\n fromHtml: false,\n url: href,\n });\n getStyleSource(href, styleInstance, child);\n return replaceStyle;\n }\n }\n if (child instanceof HTMLScriptElement) {\n let src = child.getAttribute('src');\n if (src && child.type !== 'module') {\n src = fillUpPath(src, location.origin);\n const script = new Script({\n async: child.hasAttribute('async'),\n code: '',\n defer: child.defer || child.type === 'module',\n fromHtml: false,\n isModule: false,\n });\n appCache.setBaseAppScript(src, script);\n const replaceElement = getScriptSource(src, script, child);\n return replaceElement || child;\n }\n }\n return child;\n}\n/**\n * @param node 节点\n * @returns 返回是否是link或者script标签\n */\nfunction isLinkOrScript(node: Node) {\n return node instanceof HTMLLinkElement || node instanceof HTMLScriptElement;\n}\n/**\n * @param parent 父节点\n * @param newChild 新节点\n * @param passiveChild 被动节点\n * @param rawMethod 原始方法\n * @returns 返回原始方法的执行结果\n */\nexport function baseElementInertHandle(\n parent: Node,\n newChild: Node,\n passiveChild: Node | null,\n rawMethod: (...args: any[]) => any,\n) {\n if (isLinkOrScript(newChild)) {\n const targetChild = createNewNode(newChild);\n return rawMethod.call(parent, targetChild, passiveChild);\n }\n return rawMethod.call(parent, newChild, passiveChild);\n}\n/**\n * @param parent 父节点\n * @param newChild 新节点\n * @param rawMethod 原始方法\n * @returns 返回原始方法的执行结果\n */\n\nexport function baseElementAppendHandle(parent: Node, newChild: Node, rawMethod: (...args: any[]) => any) {\n if (isLinkOrScript(newChild)) {\n const targetChild = createNewNode(newChild);\n return rawMethod.call(parent, targetChild);\n }\n return rawMethod.call(parent, newChild);\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { Style } from '../entry/style';\nimport { randomUrl } from '../utils/common';\nimport { baseElementAppendHandle, baseElementInertHandle } from './element';\n/**\n * 收集主应用的资源\n */\nexport function collectBaseSource() {\n const rawBodyAppendChild = HTMLBodyElement.prototype.appendChild;\n const rawHeadAppendChild = HTMLHeadElement.prototype.appendChild;\n const rawHeadInsertBefore = HTMLHeadElement.prototype.appendChild;\n HTMLBodyElement.prototype.appendChild = function <T extends Node>(newChild: T): T {\n return baseElementAppendHandle(this, newChild, rawBodyAppendChild);\n };\n HTMLHeadElement.prototype.appendChild = function <T extends Node>(newChild: T): T {\n return baseElementAppendHandle(this, newChild, rawHeadAppendChild);\n };\n HTMLHeadElement.prototype.insertBefore = function <T extends Node>(newChild: T, refChild: Node | null): T {\n return baseElementInertHandle(this, newChild, refChild, rawHeadInsertBefore);\n };\n window.addEventListener('load', () => {\n const nodeList = document.head.querySelectorAll('style');\n for (const node of Array.from(nodeList)) {\n node.textContent &&\n appCache.setBaseAppStyle(\n randomUrl(),\n new Style({\n code: node.textContent,\n fromHtml: false,\n url: '',\n }),\n );\n }\n });\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { fillUpPath } from '../utils/common';\nimport { elementInsertHandler, elementAppendHandler, isSpecialElement } from '../utils/element';\nimport { setCurrentRunningApp } from './cache';\n\nconst { setAttribute } = Element.prototype;\n\nconst {\n append,\n appendChild: bodyAppendChild,\n insertBefore: bodyInsertBefore,\n removeChild: bodyRemoveChild,\n} = HTMLBodyElement.prototype;\nconst {\n appendChild: headAppendChild,\n insertBefore: headInsertBefore,\n removeChild: headRemoveChild,\n} = HTMLHeadElement.prototype;\nconst rawHead = document.head;\nlet hasRewrite = false;\nexport function rewriteBodyAndHeaderMethods(): void {\n if (hasRewrite) return;\n hasRewrite = true;\n Element.prototype.setAttribute = function (key: string, value: string): void {\n const tagName = this.tagName.toLocaleUpperCase();\n if (\n ((['src', 'srcset'].includes(key) && ['IMG', 'SCRIPT'].includes(tagName)) ||\n (key === 'href' && ['LINK'].includes(tagName))) &&\n this.__BK_WEWEB_APP_KEY__ &&\n appCache.getApp(this.__BK_WEWEB_APP_KEY__ || '')\n ) {\n setAttribute.call(this, key, fillUpPath(value, appCache.getApp(this.__BK_WEWEB_APP_KEY__!)!.url));\n } else {\n setAttribute.call(this, key, value);\n }\n };\n HTMLBodyElement.prototype.appendChild = function appendChildNew<T extends Node>(newChild: T): T {\n if (newChild.__KEEP_ALIVE__ && isSpecialElement(newChild)) return (headAppendChild as any).call(rawHead, newChild);\n return elementAppendHandler(this, newChild, bodyAppendChild);\n };\n HTMLBodyElement.prototype.append = function <T extends Node>(...nodes: T[]): void {\n // biome-ignore lint/complexity/noForEach: <explanation>\n nodes.forEach(node => {\n // keepalive link script style set in head\n if (node.__KEEP_ALIVE__ && isSpecialElement(node)) {\n return (headAppendChild as any).call(rawHead, node);\n }\n elementAppendHandler(this, node as Node, bodyAppendChild);\n });\n };\n HTMLHeadElement.prototype.appendChild = HTMLBodyElement.prototype.appendChild;\n\n HTMLHeadElement.prototype.insertBefore = function <T extends Node>(newChild: T, refChild: Node | null): T {\n return elementInsertHandler(this, newChild, refChild, headInsertBefore);\n };\n HTMLBodyElement.prototype.insertBefore = function <T extends Node>(newChild: T, refChild: Node | null): T {\n return elementInsertHandler(this, newChild, refChild, headInsertBefore);\n };\n HTMLBodyElement.prototype.removeChild = function removeChildNew<T extends Node>(oldChild: T): T {\n const app = appCache.getApp(oldChild.__BK_WEWEB_APP_KEY__!);\n if (app?.container?.contains(oldChild)) {\n const node = bodyRemoveChild.call(app.container, oldChild) as T;\n return node;\n }\n if (this.contains(oldChild)) {\n return bodyRemoveChild.call(this, oldChild) as T;\n }\n return oldChild;\n };\n HTMLHeadElement.prototype.removeChild = HTMLBodyElement.prototype.removeChild;\n}\n\nexport function resetBodyAndHeaderMethods(): void {\n setCurrentRunningApp(null);\n Element.prototype.setAttribute = setAttribute;\n HTMLBodyElement.prototype.appendChild = bodyAppendChild;\n HTMLBodyElement.prototype.append = append;\n HTMLBodyElement.prototype.removeChild = bodyRemoveChild;\n HTMLBodyElement.prototype.insertBefore = bodyInsertBefore;\n HTMLHeadElement.prototype.appendChild = headAppendChild;\n HTMLHeadElement.prototype.insertBefore = headInsertBefore;\n HTMLHeadElement.prototype.removeChild = headRemoveChild;\n hasRewrite = false;\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { rewriteBodyAndHeaderMethods } from '../context/element';\n// before load\nexport function beforeLoad() {\n rewriteBodyAndHeaderMethods();\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { nextTask } from '../utils/common';\nimport { beforeLoad } from './before-load';\n\nimport type { BaseModel } from '../typings';\n// 激活应用\nexport function activated<T>(\n appKey: string,\n container: HTMLElement | ShadowRoot,\n callback?: <M extends BaseModel>(instance: M, exportInstance?: T) => void,\n) {\n const app = appCache.getApp(appKey);\n if (app?.status === AppState.DEACTIVATED && app.keepAlive) {\n nextTask(() => {\n beforeLoad();\n app.activated(container, callback);\n });\n } else {\n app &&\n nextTask(() => {\n beforeLoad();\n app.mount(container, callback);\n });\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { resetBodyAndHeaderMethods } from '../context/element';\n// deactivated\nexport function deactivated(appKey: string) {\n const app = appCache.getApp(appKey);\n if (app && [AppState.ACTIVATED, AppState.MOUNTED].includes(app.status)) {\n app.keepAlive ? app.deactivated() : app.unmount();\n }\n if (!appCache.hasActiveApp) {\n resetBodyAndHeaderMethods();\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { MicroAppModel } from '../mode/app';\nimport { MicroInstanceModel } from '../mode/instance';\nimport { type BaseModel, type IAppModleProps, type IBaseModelProps, type IJsModelProps, WewebMode } from '../typings';\nimport { beforeLoad } from './before-load';\n\nexport async function load(props: IBaseModelProps): Promise<BaseModel> {\n beforeLoad();\n if (props.mode === WewebMode.INSTANCE) return await loadInstance(props);\n return await loadApp(props);\n}\n// 加载app\nexport async function loadApp(props: IAppModleProps): Promise<MicroAppModel> {\n beforeLoad();\n let instance = appCache.getApp(props.id);\n if (!instance) {\n instance = new MicroAppModel(props);\n appCache.setApp(instance);\n }\n await instance.start();\n return instance as MicroAppModel;\n}\n// 加载instance\nexport function loadInstance(props: IJsModelProps): Promise<MicroInstanceModel> {\n beforeLoad();\n return new Promise(resolve => {\n let instance = appCache.getApp(props.id);\n if (!instance) {\n instance = new MicroInstanceModel(props);\n appCache.setApp(instance);\n instance.start().then(() => resolve(instance as MicroInstanceModel));\n } else if ([AppState.MOUNTING, AppState.UNSET].includes(instance.status)) {\n const timer = setInterval(() => {\n if ([AppState.ERROR, AppState.MOUNTED].includes(instance!.status)) {\n resolve(instance as MicroInstanceModel);\n clearInterval(timer);\n }\n }, 300);\n } else {\n resolve(instance as MicroInstanceModel);\n }\n });\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { resetBodyAndHeaderMethods } from '../context/element';\n// unmount\nexport function unmount(appKey: string) {\n const app = appCache.getApp(appKey);\n if (app && app.status !== AppState.UNMOUNT) {\n app.unmount();\n }\n if (!appCache.hasActiveApp) {\n resetBodyAndHeaderMethods();\n }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\n\n/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { AppState } from '../common';\nimport { activated } from '../lifecircle/activated';\nimport { deactivated } from '../lifecircle/deactivated';\nimport { load } from '../lifecircle/load';\nimport { unmount } from '../lifecircle/unmount';\nimport { type IAppModleProps, type IJsModelProps, WewebMode } from '../typings';\n// bk-weweb支持的属性配置\nexport enum WewebCustomAttrs {\n data = 'data', // 传递给子应用的数据\n id = 'id', // 应用id\n keepAlive = 'keepAlive', // 是否缓存\n mode = 'mode', // 模式\n scopeCss = 'scopeCss', // 是否开启css隔离\n scopeJs = 'scopeJs', // 是否开启js隔离\n scopeLocation = 'scopeLocation', // 是否开启location隔离\n setShodowDom = 'setShodowDom', // 是否开启shadowDom\n showSourceCode = 'showSourceCode', // 是否显示源码\n url = 'url',\n}\nexport default class BkWewebElement extends HTMLElement {\n private appUrl = '';\n private connected = false;\n static get observedAttributes(): string[] {\n return [WewebCustomAttrs.url];\n }\n private getBooleanAttr(name: string): boolean | undefined {\n return this.hasAttribute(name) || this.hasAttribute(name.replace(/([A-Z])/g, '-$1').toLocaleLowerCase())\n ? this.getAttribute(name) !== 'false'\n : undefined;\n }\n private async handleAttributeChanged(): Promise<void> {\n if (!this.appKey) return;\n if (this.getBooleanAttr(WewebCustomAttrs.setShodowDom)) {\n this.attachShadow({ mode: 'open' });\n }\n const app = appCache.getApp(this.appKey);\n if (app && app.url === this.appUrl && (app.isPreLoad || app.status === AppState.UNMOUNT)) {\n activated(this.appKey, this.shadowRoot ?? this);\n return;\n }\n await load(this.appProps);\n }\n attributeChangedCallback(attr: WewebCustomAttrs, _oldVal: string, newVal: string): void {\n if (attr !== WewebCustomAttrs.url || this[attr] === newVal || !this.connected) return;\n this.appUrl = newVal;\n const cacheApp = appCache.getApp(this.appKey!);\n (this.connected || cacheApp) && this.handleAttributeChanged();\n }\n async connectedCallback(): Promise<void> {\n if (this.getBooleanAttr(WewebCustomAttrs.setShodowDom) && !this.shadowRoot) {\n this.attachShadow({ delegatesFocus: false, mode: 'open' });\n }\n await load(this.appProps);\n activated(this.appKey!, this.shadowRoot ?? this);\n this.connected = true;\n }\n disconnectedCallback(): void {\n this.connected = false;\n if (this.appProps.keepAlive) {\n deactivated(this.appKey!);\n } else unmount(this.appKey!);\n }\n get appData(): Record<string, unknown> {\n if (this.hasAttribute(WewebCustomAttrs.data)) {\n try {\n return JSON.parse(this.getAttribute(WewebCustomAttrs.data)!);\n } catch {}\n }\n return {};\n }\n // 考虑到js模式下 需要js bundle的复用性 需用户设置id属性 如果单实例下则可以不用配置\n get appKey(): null | string {\n return this.getAttribute(WewebCustomAttrs.id) || this.getAttribute(WewebCustomAttrs.url);\n }\n get appProps(): IAppModleProps | IJsModelProps {\n if (this.getAttribute('mode') === WewebMode.INSTANCE) {\n return {\n container: this.shadowRoot ?? this,\n data: this.appData,\n id: this.appKey!,\n keepAlive: this.getBooleanAttr(WewebCustomAttrs.keepAlive),\n mode: WewebMode.INSTANCE,\n scopeCss: this.getBooleanAttr(WewebCustomAttrs.scopeCss) && !this.getBooleanAttr(WewebCustomAttrs.setShodowDom),\n scopeJs: this.getBooleanAttr(WewebCustomAttrs.scopeJs),\n showSourceCode: this.getBooleanAttr(WewebCustomAttrs.showSourceCode),\n url: this.getAttribute(WewebCustomAttrs.url)!,\n };\n }\n return {\n container: this.shadowRoot ?? this,\n data: this.appData,\n id: this.appKey!,\n keepAlive: this.getBooleanAttr(WewebCustomAttrs.keepAlive),\n mode: WewebMode.APP,\n scopeCss: !this.getBooleanAttr(WewebCustomAttrs.setShodowDom),\n scopeJs: !this.getBooleanAttr(WewebCustomAttrs.scopeJs),\n scopeLocation: this.getBooleanAttr(WewebCustomAttrs.scopeLocation),\n showSourceCode: this.getBooleanAttr(WewebCustomAttrs.showSourceCode),\n url: this.getAttribute(WewebCustomAttrs.url)!,\n };\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\nimport { nextTask } from '../utils/common';\nimport { beforeLoad } from './before-load';\n\nimport type { BaseModel } from '../typings';\n// mount\nexport function mount<T>(\n appKey: string,\n container?: HTMLElement | ShadowRoot,\n callback?: <M extends BaseModel>(instance: M, exportInstance?: T) => void,\n) {\n const app = appCache.getApp(appKey);\n app &&\n nextTask(() => {\n beforeLoad();\n app.mount(container, callback);\n });\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { appCache } from '../cache/app-cache';\n// unload\nexport function unload(url: string) {\n appCache.deleteApp(url);\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n/* eslint-disable @typescript-eslint/no-misused-promises */\nimport { loadApp, loadInstance } from '../lifecircle/load';\nimport { requestIdleCallback } from '../utils/common';\nimport { type SourceType, loadGlobalSource } from '../utils/load-source';\n\nimport type { IAppModleProps, IJsModelProps } from '../typings';\n\n/**\n * @param options 加载模块的参数\n * @description 预加载实例\n */\nexport function preLoadInstance(options: IJsModelProps) {\n requestIdleCallback(() =>\n loadInstance({\n ...options,\n isPreLoad: true,\n }),\n );\n}\n\n/**\n * @param options 加载应用的参数\n * @description 预加载应用\n */\nexport function preLoadApp(options: IAppModleProps) {\n requestIdleCallback(() =>\n loadApp({\n ...options,\n isPreLoad: true,\n }),\n );\n}\n\n/**\n * @param sourceList 要预加载的资源列表\n * @description 预加载资源\n */\nexport function preLoadSource(sourceList: SourceType) {\n requestIdleCallback(() => {\n loadGlobalSource(sourceList);\n });\n}\n","/*\n * Tencent is pleased to support the open source community by making\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.\n *\n * License for 蓝鲸智云PaaS平台 (BlueKing PaaS):\n *\n * ---------------------------------------------------\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n * documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and\n * to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n * the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\nimport { collectBaseSource } from './base-app/collect-source';\nimport BkWewebElement from './component/web-compnent';\nimport './context/cache';\n\nimport type { FetchSourceType, IStartOption } from './typings';\nexport * from './lifecircle/activated';\nexport * from './lifecircle/deactivated';\nexport * from './lifecircle/load';\nexport * from './lifecircle/mount';\nexport * from './lifecircle/unload';\nexport * from './lifecircle/unmount';\nexport * from './preload/preload';\nexport { WewebMode } from './typings';\nconst CUSTOM_ELEMENT_TAG = 'bk-weweb';\nexport class WeWeb {\n fetchSource?: FetchSourceType;\n webcomponentTag = CUSTOM_ELEMENT_TAG;\n constructor() {\n if (!window.customElements.get(CUSTOM_ELEMENT_TAG)) {\n window.customElements.define(CUSTOM_ELEMENT_TAG, BkWewebElement);\n }\n }\n // 设置自定义dom标签名\n setWebComponentTag() {\n if (!window.customElements.get(this.webcomponentTag)) {\n window.customElements.define(this.webcomponentTag, BkWewebElement);\n }\n }\n // todo set some global start props\n start(option?: IStartOption) {\n // 是否收集主应用资源\n if (option?.collectBaseSource) {\n collectBaseSource();\n }\n if (typeof option?.fetchSource === 'function') {\n this.fetchSource = option.fetchSource;\n }\n this.webcomponentTag = option?.webcomponentTag || CUSTOM_ELEMENT_TAG;\n this.setWebComponentTag();\n }\n}\nconst weWeb = new WeWeb();\nexport default weWeb;\n"],"mappings":"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","names":["WewebMode","value","clearInterval","setInterval","key","bodyAppendChild"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blueking/bk-weweb",
3
- "version": "0.0.34",
3
+ "version": "0.0.35",
4
4
  "description": "bk micro frontend web",
5
5
  "private": false,
6
6
  "main": "dist/index.esm.js",