@pulse-editor/react-api 0.1.1-beta.73 → 0.1.1-beta.75
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/hooks/editor/use-register-action.d.ts +7 -7
- package/dist/main.d.ts +2 -2
- package/dist/main.js +5643 -114
- package/dist/main.js.map +1 -1
- package/package.json +5 -4
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../../../node_modules/uuid/dist/stringify.js","../../../node_modules/uuid/dist/rng.js","../../../node_modules/uuid/dist/native.js","../../../node_modules/uuid/dist/v4.js","../src/hooks/imc/use-imc.tsx","../src/hooks/agent/use-agent-tools.ts","../src/hooks/agent/use-agents.ts","../src/hooks/editor/use-loading.ts","../src/hooks/editor/use-notification.ts","../src/hooks/editor/use-register-action.ts","../src/hooks/editor/use-theme.ts","../../../node_modules/use-debounce/dist/index.module.js","../src/hooks/workspace/use-file.ts","../src/hooks/ai-modality/use-image-gen.ts","../src/hooks/ai-modality/use-llm.ts","../src/hooks/ai-modality/use-ocr.ts","../src/hooks/ai-modality/use-stt.ts","../src/hooks/ai-modality/use-tts.ts","../src/hooks/ai-modality/use-video-gen.ts","../src/hooks/editor/use-artifact.ts","../src/hooks/editor/use-editor-env.ts","../src/hooks/editor/use-open-app.ts","../src/hooks/editor/use-open-link.ts","../src/hooks/editor/use-owned-app-view.ts","../src/providers/snapshot-provider.tsx","../src/hooks/editor/use-snapshot-state.ts","../src/hooks/editor/use-translations.ts","../src/hooks/workspace/use-file-system.ts","../src/providers/receive-file-provider.tsx","../src/hooks/workspace/use-receive-file.ts","../src/hooks/workspace/use-terminal.ts","../src/hooks/workspace/use-workspace-info.ts"],"sourcesContent":["import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","import {\r\n IMCMessageTypeEnum,\r\n InterModuleCommunication,\r\n ReceiverHandlerMap,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { v4 } from \"uuid\";\r\n\r\nexport default function useIMC(handlerMap: ReceiverHandlerMap, intent: string) {\r\n const [imc, setImc] = useState<InterModuleCommunication | undefined>(\r\n undefined\r\n );\r\n const [isReady, setIsReady] = useState(false);\r\n const [isMounted, setIsMounted] = useState(false);\r\n\r\n const targetWindow = window.parent;\r\n\r\n useEffect(() => {\r\n setIsMounted(true);\r\n\r\n return () => {\r\n setIsMounted(false);\r\n imc?.close();\r\n setImc(undefined);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n async function initIMC() {\r\n if (!isMounted) return;\r\n else if (imc !== undefined) return;\r\n\r\n const newImc = new InterModuleCommunication(intent, v4());\r\n newImc.initThisWindow(window);\r\n newImc.updateReceiverHandlerMap(handlerMap);\r\n await newImc.initOtherWindow(targetWindow);\r\n setImc(newImc);\r\n\r\n await newImc.sendMessage(IMCMessageTypeEnum.AppReady, {\r\n intent,\r\n channelId: newImc.channelId,\r\n });\r\n setIsReady(true);\r\n }\r\n\r\n initIMC();\r\n }, [isMounted, imc]);\r\n\r\n return {\r\n imc,\r\n isReady,\r\n };\r\n}\r\n","import { AgentTool, IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\n/**\r\n * Add or use agent tools in the editor.\r\n * @param moduleName \r\n * @returns \r\n */\r\nexport default function useAgentTools() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc } = useIMC(receiverHandlerMap, \"agent-tools\");\r\n\r\n return { };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n LLMModelConfig,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useAgents() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"agents\");\r\n\r\n async function runAgentMethod(\r\n agentName: string,\r\n methodName: string,\r\n args: Record<string, any>,\r\n abortSignal?: AbortSignal,\r\n llmConfig?: LLMModelConfig,\r\n ): Promise<any> {\r\n if (!imc) {\r\n throw new Error(\"IMC not initialized.\");\r\n }\r\n\r\n const result = await imc\r\n .sendMessage(\r\n IMCMessageTypeEnum.EditorRunAgentMethod,\r\n {\r\n agentName,\r\n methodName,\r\n args,\r\n llmConfig,\r\n },\r\n abortSignal,\r\n )\r\n .then((response) => {\r\n return response as any;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return {\r\n runAgentMethod,\r\n isReady,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useLoading() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<any>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"loading\");\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n if (isReady) {\r\n imc?.sendMessage(IMCMessageTypeEnum.EditorLoadingApp, {\r\n isLoading,\r\n });\r\n }\r\n }, [isLoading]);\r\n\r\n function toggleLoading(isLoading: boolean) {\r\n setIsLoading((prev) => isLoading);\r\n }\r\n\r\n return {\r\n isReady,\r\n toggleLoading,\r\n };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n NotificationTypeEnum,\r\n} from \"@pulse-editor/shared-utils\";\r\n\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useNotification() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"notification\");\r\n\r\n function openNotification(text: string, type: NotificationTypeEnum) {\r\n if (isReady) {\r\n imc?.sendMessage(IMCMessageTypeEnum.EditorShowNotification, {\r\n text,\r\n type,\r\n });\r\n }\r\n }\r\n\r\n return { isReady, openNotification };\r\n}\r\n","import {\r\n Action,\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n ReceiverHandler,\r\n TypedVariable,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport { DependencyList, useEffect, useRef, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\n/**\r\n * Register an app action to listen to IMC messages from the core,\r\n * and pass to the action to handle.\r\n *\r\n * @param name Name of the command.\r\n * @param description Description of the command.\r\n * @param parameters Parameters of the command.\r\n * @param returns Return values of the command.\r\n * @param callbackHandler Callback handler function to handle the command.\r\n * @param deps Dependency list to re-register the action when changed.\r\n * @param isExtReady Whether the extension is ready to receive commands.\r\n * Useful for actions that need to wait for some certain app state to be ready.\r\n *\r\n */\r\nexport default function useRegisterAction(\r\n actionInfo: {\r\n name: string;\r\n description: string;\r\n parameters?: Record<string, TypedVariable>;\r\n returns?: Record<string, TypedVariable>;\r\n },\r\n callbackHandler: (args: any) => Promise<any>,\r\n deps: DependencyList,\r\n isExtReady: boolean = true,\r\n) {\r\n const { isReady, imc } = useIMC(getReceiverHandlerMap(), \"register-action\");\r\n\r\n // Queue to hold commands until extension is ready\r\n const commandQueue = useRef<{ args: any; resolve: (v: any) => void }[]>([]);\r\n const isCommandExecuting = useRef(false);\r\n\r\n const [action, setAction] = useState<Action>({\r\n name: actionInfo.name,\r\n description: actionInfo.description,\r\n parameters: actionInfo.parameters ?? {},\r\n returns: actionInfo.returns ?? {},\r\n handler: callbackHandler,\r\n });\r\n\r\n // Flush queued commands when isExtReady becomes true\r\n useEffect(() => {\r\n async function runQueuedCommands() {\r\n const pendingCMDs = [...commandQueue.current];\r\n commandQueue.current = [];\r\n for (const cmd of pendingCMDs) {\r\n const { args, resolve } = cmd;\r\n if (isCommandExecuting.current) {\r\n return;\r\n }\r\n isCommandExecuting.current = true;\r\n const res = await executeAction(args);\r\n isCommandExecuting.current = false;\r\n resolve(res);\r\n }\r\n }\r\n\r\n if (isExtReady && commandQueue.current.length > 0) {\r\n runQueuedCommands();\r\n }\r\n }, [isExtReady]);\r\n\r\n useEffect(() => {\r\n async function updateAction() {\r\n // Register or update action.\r\n // This will only pass signature info to the editor.\r\n // The actual handler is stored in this hook,\r\n // so the execution happens inside the extension app.\r\n await imc?.sendMessage(IMCMessageTypeEnum.EditorRegisterAction, {\r\n name: action.name,\r\n description: action.description,\r\n parameters: action.parameters,\r\n returns: action.returns,\r\n });\r\n\r\n // Update receiver\r\n imc?.updateReceiverHandlerMap(getReceiverHandlerMap());\r\n }\r\n\r\n if (isExtReady) {\r\n updateAction();\r\n }\r\n }, [action, imc, isExtReady]);\r\n\r\n useEffect(() => {\r\n setAction((prev) => ({\r\n ...prev,\r\n name: actionInfo.name,\r\n description: actionInfo.description,\r\n parameters: actionInfo.parameters ?? {},\r\n returns: actionInfo.returns ?? {},\r\n handler: callbackHandler,\r\n }));\r\n }, [...deps]);\r\n\r\n async function executeAction(args: any) {\r\n if (!action.handler) return;\r\n\r\n const res = await action.handler(args);\r\n\r\n return res;\r\n }\r\n\r\n function getReceiverHandlerMap() {\r\n const receiverHandlerMap = new Map<IMCMessageTypeEnum, ReceiverHandler>([\r\n [\r\n IMCMessageTypeEnum.EditorRunAppAction,\r\n async (_senderWindow: Window, message: IMCMessage) => {\r\n const { name: requestedName, args }: { name: string; args: any } =\r\n message.payload;\r\n\r\n if (actionInfo.name !== requestedName) {\r\n throw new Error(\"Message ignored by receiver\");\r\n }\r\n // Validate parameters\r\n const actionParams = actionInfo.parameters ?? {};\r\n\r\n const requiredParamCount = Object.entries(actionParams).filter(\r\n ([, paramInfo]) => !(paramInfo as TypedVariable).optional,\r\n ).length;\r\n\r\n if (Object.keys(args).length < requiredParamCount) {\r\n throw new Error(\r\n `Invalid number of parameters: expected at least${\r\n Object.keys(actionParams).length\r\n }, got ${Object.keys(args).length}`,\r\n );\r\n }\r\n\r\n // Check types\r\n for (const [key, value] of Object.entries(args)) {\r\n if (actionParams[key] === undefined) {\r\n throw new Error(`Invalid parameter: ${key}`);\r\n }\r\n if (\r\n typeof value !== actionParams[key].type &&\r\n // Allow object for \"app-instance\"\r\n (actionParams[key].type !== \"app-instance\" ||\r\n typeof value !== \"object\")\r\n ) {\r\n throw new Error(\r\n `Invalid type for parameter ${key}: expected ${\r\n actionParams[key].type\r\n }, got ${typeof value}. Value received: ${value}`,\r\n );\r\n }\r\n }\r\n\r\n // If extension is ready, execute immediately\r\n if (isExtReady) {\r\n const result = await executeAction(args);\r\n return result;\r\n }\r\n\r\n // Otherwise, queue the command and return when executed\r\n return new Promise((resolve) => {\r\n commandQueue.current.push({ args, resolve });\r\n });\r\n },\r\n ],\r\n ]);\r\n return receiverHandlerMap;\r\n }\r\n\r\n return {\r\n isReady,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useTheme() {\r\n const [theme, setTheme] = useState<string>(\"light\");\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n receiverHandlerMap.set(\r\n IMCMessageTypeEnum.EditorThemeUpdate,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const theme = message.payload;\r\n setTheme((prev) => theme);\r\n }\r\n );\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"theme\");\r\n\r\n // Upon initial load, request theme from main app\r\n useEffect(() => {\r\n if (isReady) {\r\n imc\r\n ?.sendMessage(IMCMessageTypeEnum.EditorAppRequestTheme)\r\n .then((result) => {\r\n setTheme((prev) => result);\r\n });\r\n }\r\n }, [isReady]);\r\n\r\n return {\r\n theme,\r\n };\r\n}\r\n","import{useRef as r,useMemo as n,useEffect as t,useState as e,useCallback as u}from\"react\";function c(e,u,c,i){var l=this,a=r(null),o=r(0),f=r(0),v=r(null),d=r([]),m=r(),s=r(),g=r(e),h=r(!0),x=r(),E=r();g.current=e;var b=\"undefined\"!=typeof window,p=!u&&0!==u&&b;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");u=+u||0;var y=!!(c=c||{}).leading,w=!(\"trailing\"in c)||!!c.trailing,O=!!c.flushOnExit&&w,F=\"maxWait\"in c,L=\"debounceOnServer\"in c&&!!c.debounceOnServer,A=F?Math.max(+c.maxWait||0,u):null,D=n(function(){var r=function(r){var n=d.current,t=m.current;return d.current=m.current=null,o.current=r,f.current=f.current||r,s.current=g.current.apply(t,n)},n=function(r,n){p&&cancelAnimationFrame(v.current),v.current=p?requestAnimationFrame(r):setTimeout(r,n)},t=function(r){if(!h.current)return!1;var n=r-a.current;return!a.current||n>=u||n<0||F&&r-o.current>=A},e=function(n){return v.current=null,w&&d.current?r(n):(d.current=m.current=null,s.current)},c=function r(){var c=Date.now();if(y&&f.current===o.current&&D(),t(c))return e(c);if(h.current){var i=u-(c-a.current),l=F?Math.min(i,A-(c-o.current)):i;n(r,l)}},D=function(){i&&i({})},S=function(){if(b||L){var e,i=Date.now(),f=t(i);if(d.current=[].slice.call(arguments),m.current=l,a.current=i,O&&!x.current&&(x.current=function(){var r;\"hidden\"===(null==(r=global.document)?void 0:r.visibilityState)&&E.current.flush()},null==(e=global.document)||null==e.addEventListener||e.addEventListener(\"visibilitychange\",x.current)),f){if(!v.current&&h.current)return o.current=a.current,n(c,u),y?r(a.current):s.current;if(F)return n(c,u),r(a.current)}return v.current||n(c,u),s.current}};return S.cancel=function(){var r=v.current;r&&(p?cancelAnimationFrame(v.current):clearTimeout(v.current)),o.current=0,d.current=a.current=m.current=v.current=null,r&&i&&i({})},S.isPending=function(){return!!v.current},S.flush=function(){return v.current?e(Date.now()):s.current},S},[y,F,u,A,w,O,p,b,L,i]);return E.current=D,t(function(){return h.current=!0,function(){var r;O&&E.current.flush(),x.current&&(null==(r=global.document)||null==r.removeEventListener||r.removeEventListener(\"visibilitychange\",x.current),x.current=null),h.current=!1}},[O]),D}function i(r,n){return r===n}function l(n,t,l){var a=l&&l.equalityFn||i,o=r(n),f=e({})[1],v=c(u(function(r){o.current=r,f({})},[f]),t,l,f),d=r(n);return a(d.current,n)||(v(n),d.current=n),[o.current,v]}function a(r,n,t){var e=void 0===t?{}:t,u=e.leading,i=e.trailing,l=e.flushOnExit;return c(r,n,{maxWait:n,leading:void 0===u||u,trailing:void 0===i||i,flushOnExit:void 0!==l&&l})}export{l as useDebounce,c as useDebouncedCallback,a as useThrottledCallback};\n//# sourceMappingURL=index.module.js.map\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport { useDebouncedCallback } from \"use-debounce\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\n/**\r\n *\r\n * @param uri The file URI to read/write\r\n * @param debounce Debounce time in ms for write operations\r\n * @returns\r\n */\r\nexport default function useFile(uri: string | undefined, debounce = 0) {\r\n const [file, setFile] = useState<File | undefined>(undefined);\r\n\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >([\r\n [\r\n IMCMessageTypeEnum.PlatformFileUpdate,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const updatedFile = message.payload as File;\r\n setFile(updatedFile);\r\n },\r\n ],\r\n ]);\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"file\");\r\n\r\n const sendFileDebounced = useDebouncedCallback(\r\n async (newFile: File) => {\r\n if (!isReady || !uri) return;\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformWriteFile, {\r\n uri,\r\n file: newFile,\r\n });\r\n },\r\n debounce,\r\n { maxWait: debounce * 2 },\r\n );\r\n\r\n const saveFile = useCallback(\r\n async (fileContent: string) => {\r\n if (!uri || !file) return;\r\n\r\n const newFile = new File([fileContent], file.name, {\r\n type: file.type,\r\n lastModified: Date.now(),\r\n });\r\n setFile(newFile);\r\n\r\n // ✅ This now waits until the debounced write actually finishes\r\n await sendFileDebounced(newFile);\r\n },\r\n [file, uri, sendFileDebounced],\r\n );\r\n\r\n // Read file when uri changes\r\n useEffect(() => {\r\n if (isReady && uri) {\r\n imc\r\n ?.sendMessage(IMCMessageTypeEnum.PlatformReadFile, {\r\n uri,\r\n })\r\n .then((f: File | undefined) => {\r\n setFile(f);\r\n });\r\n }\r\n }, [isReady, uri]);\r\n\r\n return {\r\n file,\r\n saveFile,\r\n };\r\n}\r\n","import {\r\n ImageModelConfig,\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useImageGen() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"image-gen\");\r\n\r\n /**\r\n *\r\n * @param textPrompt The text prompt to generate the image.\r\n * @param imagePrompt A URL to an image or an image in an ArrayBuffer.\r\n * @param imageModelConfig (optional) The image model config to use.\r\n * @returns The generated image in an ArrayBuffer.\r\n */\r\n async function runImageGen(\r\n textPrompt?: string,\r\n imagePrompt?: string | ArrayBuffer,\r\n // LLM config is optional, if not provided, the default config will be used.\r\n imageModelConfig?: ImageModelConfig\r\n ): Promise<{\r\n arrayBuffer?: ArrayBuffer;\r\n url?: string;\r\n }> {\r\n if (!imc) {\r\n throw new Error(\"IMC not initialized.\");\r\n }\r\n\r\n if (!textPrompt && !imagePrompt) {\r\n throw new Error(\"At least one of textPrompt or imagePrompt is required.\");\r\n }\r\n\r\n const result = await imc\r\n .sendMessage(IMCMessageTypeEnum.ModalityImageGen, {\r\n textPrompt,\r\n imagePrompt,\r\n imageModelConfig,\r\n })\r\n .then((response) => {\r\n return response as {\r\n arrayBuffer?: ArrayBuffer;\r\n url?: string;\r\n };\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return {\r\n runImageGen,\r\n isReady,\r\n };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n LLMModelConfig,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useLLM() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"llm\");\r\n\r\n async function runLLM(\r\n prompt: string,\r\n // LLM config is optional, if not provided, the default config will be used.\r\n llmConfig?: LLMModelConfig\r\n ): Promise<string> {\r\n if (!imc) {\r\n throw new Error(\"IMC not initialized.\");\r\n }\r\n\r\n const result = await imc\r\n .sendMessage(IMCMessageTypeEnum.ModalityLLM, {\r\n prompt,\r\n llmConfig,\r\n })\r\n .then((response) => {\r\n return response as string;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return {\r\n runLLM,\r\n isReady,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\n\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useOCR() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc } = useIMC(receiverHandlerMap, \"ocr\");\r\n\r\n /**\r\n * \r\n * @param image The image to be recognized. This is a base64 encoded string.\r\n * @returns \r\n */\r\n async function recognizeText(image: string): Promise<string> {\r\n if (!imc) {\r\n throw new Error(\"IMC is not initialized.\");\r\n }\r\n\r\n // Send the message to the extension\r\n const result = await imc.sendMessage(IMCMessageTypeEnum.ModalityOCR, { image });\r\n\r\n return result.payload.text;\r\n }\r\n\r\n return {\r\n recognizeText,\r\n };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n STTModelConfig,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useSTT() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"stt\");\r\n\r\n async function runSTT(\r\n audio: Uint8Array,\r\n // Config is optional, if not provided, the default config will be used.\r\n sttConfig?: STTModelConfig,\r\n ): Promise<string> {\r\n if (!imc) {\r\n throw new Error(\"IMC not initialized.\");\r\n }\r\n\r\n const result = await imc\r\n .sendMessage(IMCMessageTypeEnum.ModalitySTT, {\r\n audio,\r\n sttConfig,\r\n })\r\n .then((response) => {\r\n return response as string;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return {\r\n runSTT,\r\n isReady,\r\n };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n TTSModelConfig,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useTTS() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"tts\");\r\n\r\n async function runTTS(\r\n text: string,\r\n // Config is optional, if not provided, the default config will be used.\r\n ttsConfig?: TTSModelConfig,\r\n ): Promise<Uint8Array> {\r\n if (!imc) {\r\n throw new Error(\"IMC not initialized.\");\r\n }\r\n\r\n const result = await imc\r\n .sendMessage(IMCMessageTypeEnum.ModalityTTS, {\r\n text,\r\n ttsConfig,\r\n })\r\n .then((response) => {\r\n return response as Uint8Array;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return {\r\n runTTS,\r\n isReady,\r\n };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n VideoModelConfig,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useVideoGen() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"video-gen\");\r\n\r\n /**\r\n *\r\n * @param textPrompt The text prompt to generate the video.\r\n * @param imagePrompt A URL to an image or an image in an ArrayBuffer.\r\n * @param videoModelConfig (optional) The video model config to use.\r\n * @returns The generated video in an ArrayBuffer.\r\n */\r\n async function runVideoGen(\r\n duration: number,\r\n textPrompt?: string,\r\n imagePrompt?: string | ArrayBuffer,\r\n // LLM config is optional, if not provided, the default config will be used.\r\n videoModelConfig?: VideoModelConfig\r\n ): Promise<{\r\n url?: string;\r\n arrayBuffer?: ArrayBuffer;\r\n }> {\r\n if (!imc) {\r\n throw new Error(\"IMC not initialized.\");\r\n }\r\n\r\n if (!textPrompt && !imagePrompt) {\r\n throw new Error(\"At least one of textPrompt or imagePrompt is required.\");\r\n }\r\n\r\n const result = await imc\r\n .sendMessage(IMCMessageTypeEnum.ModalityVideoGen, {\r\n duration,\r\n textPrompt,\r\n imagePrompt,\r\n videoModelConfig,\r\n })\r\n .then((response) => {\r\n return response as {\r\n url?: string;\r\n arrayBuffer?: ArrayBuffer;\r\n };\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return {\r\n runVideoGen,\r\n isReady,\r\n };\r\n}\r\n","import {\r\n Artifact,\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport function useArtifact() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"artifact\");\r\n\r\n function sendArtifact(artifact: Artifact) {\r\n if (isReady) {\r\n imc?.sendMessage(IMCMessageTypeEnum.EditorArtifactUpdate, artifact);\r\n }\r\n }\r\n\r\n return {\r\n isReady,\r\n sendArtifact,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\n/**\r\n * Hook to access editor environment variables in the frontend (saved in storage).\r\n * @returns\r\n */\r\nexport default function useEditorEnv() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"env\");\r\n const [envs, setEnvs] = useState<Record<string, string>>(\r\n // default to process env\r\n process.env as Record<string, string>,\r\n );\r\n\r\n useEffect(() => {\r\n if (isReady) {\r\n imc?.sendMessage(IMCMessageTypeEnum.EditorGetEnv).then((env) => {\r\n // Create or update envs state\r\n setEnvs((prev) => ({\r\n ...prev,\r\n ...env,\r\n }));\r\n });\r\n }\r\n }, [isReady]);\r\n\r\n return {\r\n isReady,\r\n envs,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useOpenApp() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<any>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"open-app\");\r\n\r\n async function openApp(appId: string, location: \"canvas\", version?: string) {\r\n if (!isReady) {\r\n throw new Error(\"IMC is not ready\");\r\n }\r\n await imc?.sendMessage(IMCMessageTypeEnum.EditorOpenApp, {\r\n appId,\r\n version,\r\n location,\r\n });\r\n }\r\n\r\n return {\r\n isReady,\r\n openApp,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useOpenLink() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<any>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"open-link\");\r\n\r\n async function openLink(url: URL) {\r\n if (!isReady) {\r\n throw new Error(\"IMC is not ready\");\r\n }\r\n await imc?.sendMessage(IMCMessageTypeEnum.EditorOpenLink, {\r\n url: url.toString(),\r\n });\r\n }\r\n\r\n return {\r\n isReady,\r\n openLink,\r\n };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n ViewModel,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport { useCallback } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useOwnedAppView() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >([]);\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"owned-app\");\r\n\r\n const runAppAction = useCallback(\r\n async (ownedAppViewModel: ViewModel, actionName: string, args: any) => {\r\n if (isReady) {\r\n const appViewId = ownedAppViewModel.viewId;\r\n const preRegisteredActions =\r\n ownedAppViewModel.appConfig.preRegisteredActions || [];\r\n\r\n const action = preRegisteredActions.find((a) => a.name === actionName);\r\n if (!action) {\r\n throw new Error(\r\n `Action ${actionName} not found in owned app ${ownedAppViewModel.appConfig.id}`,\r\n );\r\n }\r\n\r\n const result = await imc?.sendMessage(\r\n IMCMessageTypeEnum.EditorAppUseOwnedApp,\r\n {\r\n viewId: appViewId,\r\n actionName,\r\n args,\r\n },\r\n );\r\n return result;\r\n }\r\n return undefined;\r\n },\r\n [imc, isReady],\r\n );\r\n\r\n return {\r\n isReady,\r\n runAppAction,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport React, {\r\n createContext,\r\n Dispatch,\r\n ReactNode,\r\n SetStateAction,\r\n useEffect,\r\n useState,\r\n} from \"react\";\r\nimport useIMC from \"../hooks/imc/use-imc\";\r\n\r\nexport const SnapshotContext = createContext<SnapshotContextType | undefined>(\r\n undefined\r\n);\r\n\r\nexport type SnapshotContextType = {\r\n states: { [key: string]: any };\r\n setStates: Dispatch<SetStateAction<{ [key: string]: any }>>;\r\n};\r\n\r\nexport default function SnapshotProvider({\r\n children,\r\n}: {\r\n children: ReactNode;\r\n}) {\r\n const [states, setStates] = useState<{ [key: string]: any }>({});\r\n \r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<any>\r\n >([\r\n [\r\n IMCMessageTypeEnum.EditorAppStateSnapshotRestore,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const { states } = message.payload;\r\n\r\n // Update all states in the context\r\n console.log(\"Restoring snapshot states:\", states);\r\n setStates((prev) => ({ ...states }));\r\n },\r\n ],\r\n [\r\n IMCMessageTypeEnum.EditorAppStateSnapshotSave,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n // Return current states in the context\r\n return { states };\r\n },\r\n ],\r\n ]);\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"snapshot-provider\");\r\n\r\n useEffect(() => {\r\n if (isReady) {\r\n imc?.updateReceiverHandlerMap(receiverHandlerMap);\r\n }\r\n }, [isReady, states]);\r\n\r\n return (\r\n <SnapshotContext.Provider value={{ states, setStates }}>\r\n {children}\r\n </SnapshotContext.Provider>\r\n );\r\n}\r\n","import { useContext, useEffect, useRef, useState } from \"react\";\r\nimport { SnapshotContext } from \"../../providers/snapshot-provider\";\r\n\r\nexport default function useSnapShotState<T>(\r\n key: string,\r\n initialValue?: T,\r\n onRestore?: (value: T) => void\r\n) {\r\n const snapshotContext = useContext(SnapshotContext);\r\n if (!snapshotContext) {\r\n throw new Error(\"useSnapShotState must be used within a SnapshotProvider\");\r\n }\r\n\r\n const { states, setStates } = snapshotContext;\r\n const [state, setState] = useState<T>(\r\n states[key] !== undefined ? states[key] : initialValue\r\n );\r\n\r\n const isLocalUpdate = useRef(false);\r\n\r\n const setSnapshotState: React.Dispatch<React.SetStateAction<T>> = (value) => {\r\n setState((prev) => {\r\n const newValue =\r\n typeof value === \"function\" ? (value as (prev: T) => T)(prev) : value;\r\n\r\n isLocalUpdate.current = true; // mark as local\r\n Promise.resolve().then(() => {\r\n setStates((prevStates) => ({\r\n ...prevStates,\r\n [key]: newValue,\r\n }));\r\n });\r\n\r\n return newValue;\r\n });\r\n };\r\n\r\n // Initialize context with initial value\r\n useEffect(() => {\r\n if (states[key] === undefined && initialValue !== undefined) {\r\n setStates((prev) => ({\r\n ...prev,\r\n [key]: initialValue,\r\n }));\r\n }\r\n }, []);\r\n\r\n // Only restore when external changes occur\r\n useEffect(() => {\r\n const contextValue = states[key];\r\n if (contextValue === undefined) return;\r\n\r\n if (isLocalUpdate.current) {\r\n // skip this run because we caused it ourselves\r\n isLocalUpdate.current = false;\r\n return;\r\n }\r\n\r\n if (contextValue !== state) {\r\n console.log(\"Restoring state for key:\", key, contextValue);\r\n setState(contextValue);\r\n onRestore?.(contextValue);\r\n }\r\n }, [states[key]]);\r\n\r\n return [state, setSnapshotState] as const;\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\n/**\r\n * Use internationalization for app. The locale is synced with Editor.\r\n *\r\n * @param messages The messages object containing translations for different locales,\r\n * where each key is a locale code (e.g., 'en', 'es') and the value is an ICU message object.\r\n *\r\n * @return An object containing:\r\n * - locale: The current locale string.\r\n * - getTranslations: A function that takes an ICU message key and optional variables to return the translated string\r\n * for the current locale provided in the messages parameter.\r\n */\r\nexport function useTranslations(messages: { [key: string]: any }) {\r\n const [locale, setLocale] = useState(\"en\");\r\n\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n receiverHandlerMap.set(\r\n IMCMessageTypeEnum.EditorLocaleUpdate,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const locale = message.payload;\r\n setLocale((prev) => locale);\r\n },\r\n );\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"locale\");\r\n\r\n // Upon initial load, request locale from main app\r\n useEffect(() => {\r\n if (isReady) {\r\n imc\r\n ?.sendMessage(IMCMessageTypeEnum.EditorAppRequestLocale)\r\n .then((result) => {\r\n setLocale((prev) => result);\r\n });\r\n }\r\n }, [isReady]);\r\n\r\n function getTranslations(key: string, variables?: { [key: string]: any }) {\r\n const localeMessages = messages[locale] ?? messages[\"en\"];\r\n\r\n // Localize nested keys using dot notation\r\n const keys = key.split(\".\");\r\n let translation = localeMessages;\r\n for (const k of keys) {\r\n translation = translation[k];\r\n }\r\n if (typeof translation !== \"string\") {\r\n translation = key;\r\n }\r\n\r\n if (variables) {\r\n Object.keys(variables).forEach((varKey) => {\r\n const varValue = variables[varKey];\r\n const regex = new RegExp(`{${varKey}}`, \"g\");\r\n translation = translation.replace(regex, varValue);\r\n });\r\n }\r\n return translation;\r\n }\r\n\r\n return { locale, getTranslations };\r\n}\r\n","import {\r\n FileSystemObject,\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n ListPathOptions,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\n/**\r\n * Hook for managing file system operations in the editor.\r\n */\r\n\r\nexport default function useFileSystem() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >([]);\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"file-system\");\r\n\r\n async function listPath(uri: string, options?: ListPathOptions) {\r\n const result: FileSystemObject[] =\r\n (await imc?.sendMessage(IMCMessageTypeEnum.PlatformListPath, {\r\n uri,\r\n options,\r\n })) ?? [];\r\n return result;\r\n }\r\n\r\n async function createFolder(uri: string) {\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformCreateFolder, { uri });\r\n }\r\n\r\n async function createFile(uri: string) {\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformCreateFile, { uri });\r\n }\r\n\r\n async function rename(oldUri: string, newUri: string) {\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformRename, {\r\n oldUri,\r\n newUri,\r\n });\r\n }\r\n\r\n async function deletePath(uri: string) {\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformDelete, { uri });\r\n }\r\n\r\n async function hasPath(uri: string) {\r\n const exists: boolean =\r\n (await imc?.sendMessage(IMCMessageTypeEnum.PlatformHasPath, { uri })) ??\r\n false;\r\n return !!exists;\r\n }\r\n\r\n async function copyFiles(from: string, to: string) {\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformCopyFiles, { from, to });\r\n }\r\n\r\n async function readFile(uri: string) {\r\n const file: File | undefined = await imc?.sendMessage(\r\n IMCMessageTypeEnum.PlatformReadFile,\r\n { uri },\r\n );\r\n return file;\r\n }\r\n\r\n async function writeFile(uri: string, content: string) {\r\n const newFile: File | undefined = new File([content], uri);\r\n\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformWriteFile, {\r\n uri,\r\n file: newFile,\r\n });\r\n }\r\n\r\n return {\r\n isReady,\r\n listPath,\r\n createFolder,\r\n createFile,\r\n rename,\r\n deletePath,\r\n hasPath,\r\n copyFiles,\r\n readFile,\r\n writeFile,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport React, { createContext, ReactNode, useState } from \"react\";\r\nimport useIMC from \"../hooks/imc/use-imc\";\r\n\r\nexport const ReceiveFileContext = createContext<\r\n ReceiveFileContextType | undefined\r\n>(undefined);\r\n\r\nexport type ReceiveFileContextType = {\r\n // Define any state or functions you want to provide here\r\n selectedFileUri: string | undefined;\r\n};\r\n\r\nexport default function ReceiveFileProvider({\r\n children,\r\n}: {\r\n children: ReactNode;\r\n}) {\r\n const [receivedFileUri, setReceivedFileUri] = useState<string | undefined>(\r\n undefined\r\n );\r\n\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<any>\r\n >([\r\n [\r\n IMCMessageTypeEnum.EditorAppReceiveFileUri,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const { uri } = message.payload;\r\n setReceivedFileUri((prev) => uri);\r\n },\r\n ],\r\n ]);\r\n useIMC(receiverHandlerMap, \"receive-file-provider\");\r\n\r\n return (\r\n <ReceiveFileContext.Provider value={{ selectedFileUri: receivedFileUri }}>\r\n {children}\r\n </ReceiveFileContext.Provider>\r\n );\r\n}\r\n","import { useContext } from \"react\";\r\nimport { ReceiveFileContext } from \"../../providers/receive-file-provider\";\r\n\r\nexport default function useReceiveFile() {\r\n const context = useContext(ReceiveFileContext);\r\n\r\n if (!context) {\r\n throw new Error(\"useReceiveFile must be used within a ReceiveFileProvider\");\r\n }\r\n\r\n return { receivedFileUri: context.selectedFileUri };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useTerminal() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"terminal\");\r\n const [websocketUrl, setWebsocketUrl] = useState<string | undefined>(\r\n undefined,\r\n );\r\n const [projectHomePath, setProjectHomePath] = useState<string | undefined>(\r\n undefined,\r\n );\r\n\r\n useEffect(() => {\r\n if (isReady) {\r\n imc\r\n ?.sendMessage(IMCMessageTypeEnum.PlatformCreateTerminal)\r\n .then((response) => {\r\n const {\r\n websocketUrl,\r\n projectHomePath,\r\n }: {\r\n websocketUrl: string;\r\n projectHomePath: string;\r\n } = response;\r\n\r\n setWebsocketUrl(websocketUrl);\r\n setProjectHomePath(projectHomePath);\r\n });\r\n }\r\n }, [isReady]);\r\n\r\n return {\r\n websocketUrl,\r\n projectHomePath,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useWorkspaceInfo() {\r\n const [workspaceId, setWorkspaceId] = useState<string | undefined>(undefined);\r\n\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"theme\");\r\n\r\n // Upon initial load, request theme from main app\r\n useEffect(() => {\r\n if (isReady) {\r\n imc\r\n ?.sendMessage(IMCMessageTypeEnum.EditorAppRequestWorkspace)\r\n .then((result) => {\r\n const { id }: { id: string } = result;\r\n setWorkspaceId((prev) => id);\r\n });\r\n }\r\n }, [isReady]);\r\n\r\n return {\r\n workspaceId,\r\n };\r\n}\r\n"],"names":["byteToHex","i","push","toString","slice","unsafeStringify","arr","offset","arguments","length","undefined","toLowerCase","getRandomValues","rnds8","Uint8Array","rng","crypto","Error","bind","randomUUID","_v4","options","buf","_ref","_options$random","_options$rng","_options","rnds","random","call","v4","native","c","e","u","l","a","r","o","f","v","d","m","s","g","h","x","E","current","b","window","p","TypeError","y","leading","w","trailing","O","flushOnExit","F","L","debounceOnServer","A","Math","max","maxWait","D","n","t","apply","cancelAnimationFrame","requestAnimationFrame","setTimeout","Date","now","min","S","global","document","visibilityState","flush","addEventListener","cancel","clearTimeout","isPending","removeEventListener","useDebouncedCallback"],"mappings":"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","x_google_ignoreList":[0,1,2,3,11]}
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../../../node_modules/uuid/dist/stringify.js","../../../node_modules/uuid/dist/rng.js","../../../node_modules/uuid/dist/native.js","../../../node_modules/uuid/dist/v4.js","../src/hooks/imc/use-imc.tsx","../src/hooks/agent/use-agent-tools.ts","../src/hooks/agent/use-agents.ts","../src/hooks/editor/use-loading.ts","../src/hooks/editor/use-notification.ts","../../../node_modules/@module-federation/sdk/dist/index.esm.js","../../../node_modules/@module-federation/error-codes/dist/index.esm.mjs","../../../node_modules/@module-federation/runtime-core/dist/index.esm.js","../../../node_modules/@module-federation/runtime/dist/index.esm.js","../src/hooks/editor/use-register-action.ts","../src/hooks/editor/use-theme.ts","../../../node_modules/use-debounce/dist/index.module.js","../src/hooks/workspace/use-file.ts","../src/hooks/ai-modality/use-image-gen.ts","../src/hooks/ai-modality/use-llm.ts","../src/hooks/ai-modality/use-ocr.ts","../src/hooks/ai-modality/use-stt.ts","../src/hooks/ai-modality/use-tts.ts","../src/hooks/ai-modality/use-video-gen.ts","../src/hooks/editor/use-artifact.ts","../src/hooks/editor/use-editor-env.ts","../src/hooks/editor/use-open-app.ts","../src/hooks/editor/use-open-link.ts","../src/hooks/editor/use-owned-app-view.ts","../src/providers/snapshot-provider.tsx","../src/hooks/editor/use-snapshot-state.ts","../src/hooks/editor/use-translations.ts","../src/hooks/workspace/use-file-system.ts","../src/providers/receive-file-provider.tsx","../src/hooks/workspace/use-receive-file.ts","../src/hooks/workspace/use-terminal.ts","../src/hooks/workspace/use-workspace-info.ts"],"sourcesContent":["import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","import {\r\n IMCMessageTypeEnum,\r\n InterModuleCommunication,\r\n ReceiverHandlerMap,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { v4 } from \"uuid\";\r\n\r\nexport default function useIMC(handlerMap: ReceiverHandlerMap, intent: string) {\r\n const [imc, setImc] = useState<InterModuleCommunication | undefined>(\r\n undefined\r\n );\r\n const [isReady, setIsReady] = useState(false);\r\n const [isMounted, setIsMounted] = useState(false);\r\n\r\n const targetWindow = window.parent;\r\n\r\n useEffect(() => {\r\n setIsMounted(true);\r\n\r\n return () => {\r\n setIsMounted(false);\r\n imc?.close();\r\n setImc(undefined);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n async function initIMC() {\r\n if (!isMounted) return;\r\n else if (imc !== undefined) return;\r\n\r\n const newImc = new InterModuleCommunication(intent, v4());\r\n newImc.initThisWindow(window);\r\n newImc.updateReceiverHandlerMap(handlerMap);\r\n await newImc.initOtherWindow(targetWindow);\r\n setImc(newImc);\r\n\r\n await newImc.sendMessage(IMCMessageTypeEnum.AppReady, {\r\n intent,\r\n channelId: newImc.channelId,\r\n });\r\n setIsReady(true);\r\n }\r\n\r\n initIMC();\r\n }, [isMounted, imc]);\r\n\r\n return {\r\n imc,\r\n isReady,\r\n };\r\n}\r\n","import { AgentTool, IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\n/**\r\n * Add or use agent tools in the editor.\r\n * @param moduleName \r\n * @returns \r\n */\r\nexport default function useAgentTools() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc } = useIMC(receiverHandlerMap, \"agent-tools\");\r\n\r\n return { };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n LLMModelConfig,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useAgents() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"agents\");\r\n\r\n async function runAgentMethod(\r\n agentName: string,\r\n methodName: string,\r\n args: Record<string, any>,\r\n abortSignal?: AbortSignal,\r\n llmConfig?: LLMModelConfig,\r\n ): Promise<any> {\r\n if (!imc) {\r\n throw new Error(\"IMC not initialized.\");\r\n }\r\n\r\n const result = await imc\r\n .sendMessage(\r\n IMCMessageTypeEnum.EditorRunAgentMethod,\r\n {\r\n agentName,\r\n methodName,\r\n args,\r\n llmConfig,\r\n },\r\n abortSignal,\r\n )\r\n .then((response) => {\r\n return response as any;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return {\r\n runAgentMethod,\r\n isReady,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useLoading() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<any>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"loading\");\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n if (isReady) {\r\n imc?.sendMessage(IMCMessageTypeEnum.EditorLoadingApp, {\r\n isLoading,\r\n });\r\n }\r\n }, [isLoading]);\r\n\r\n function toggleLoading(isLoading: boolean) {\r\n setIsLoading((prev) => isLoading);\r\n }\r\n\r\n return {\r\n isReady,\r\n toggleLoading,\r\n };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n NotificationTypeEnum,\r\n} from \"@pulse-editor/shared-utils\";\r\n\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useNotification() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"notification\");\r\n\r\n function openNotification(text: string, type: NotificationTypeEnum) {\r\n if (isReady) {\r\n imc?.sendMessage(IMCMessageTypeEnum.EditorShowNotification, {\r\n text,\r\n type,\r\n });\r\n }\r\n }\r\n\r\n return { isReady, openNotification };\r\n}\r\n","const FederationModuleManifest = 'federation-manifest.json';\nconst MANIFEST_EXT = '.json';\nconst BROWSER_LOG_KEY = 'FEDERATION_DEBUG';\nconst NameTransformSymbol = {\n AT: '@',\n HYPHEN: '-',\n SLASH: '/',\n};\nconst NameTransformMap = {\n [NameTransformSymbol.AT]: 'scope_',\n [NameTransformSymbol.HYPHEN]: '_',\n [NameTransformSymbol.SLASH]: '__',\n};\nconst EncodedNameTransformMap = {\n [NameTransformMap[NameTransformSymbol.AT]]: NameTransformSymbol.AT,\n [NameTransformMap[NameTransformSymbol.HYPHEN]]: NameTransformSymbol.HYPHEN,\n [NameTransformMap[NameTransformSymbol.SLASH]]: NameTransformSymbol.SLASH,\n};\nconst SEPARATOR = ':';\nconst ManifestFileName = 'mf-manifest.json';\nconst StatsFileName = 'mf-stats.json';\nconst MFModuleType = {\n NPM: 'npm',\n APP: 'app',\n};\nconst MODULE_DEVTOOL_IDENTIFIER = '__MF_DEVTOOLS_MODULE_INFO__';\nconst ENCODE_NAME_PREFIX = 'ENCODE_NAME_PREFIX';\nconst TEMP_DIR = '.federation';\nconst MFPrefetchCommon = {\n identifier: 'MFDataPrefetch',\n globalKey: '__PREFETCH__',\n library: 'mf-data-prefetch',\n exportsKey: '__PREFETCH_EXPORTS__',\n fileName: 'bootstrap.js',\n};\n\nvar ContainerPlugin = /*#__PURE__*/Object.freeze({\n __proto__: null\n});\n\nvar ContainerReferencePlugin = /*#__PURE__*/Object.freeze({\n __proto__: null\n});\n\nvar ModuleFederationPlugin = /*#__PURE__*/Object.freeze({\n __proto__: null\n});\n\nvar SharePlugin = /*#__PURE__*/Object.freeze({\n __proto__: null\n});\n\nfunction isBrowserEnv() {\n return (typeof window !== 'undefined' && typeof window.document !== 'undefined');\n}\nfunction isReactNativeEnv() {\n return (typeof navigator !== 'undefined' && navigator?.product === 'ReactNative');\n}\nfunction isBrowserDebug() {\n try {\n if (isBrowserEnv() && window.localStorage) {\n return Boolean(localStorage.getItem(BROWSER_LOG_KEY));\n }\n }\n catch (error) {\n return false;\n }\n return false;\n}\nfunction isDebugMode() {\n if (typeof process !== 'undefined' &&\n process.env &&\n process.env['FEDERATION_DEBUG']) {\n return Boolean(process.env['FEDERATION_DEBUG']);\n }\n if (typeof FEDERATION_DEBUG !== 'undefined' && Boolean(FEDERATION_DEBUG)) {\n return true;\n }\n return isBrowserDebug();\n}\nconst getProcessEnv = function () {\n return typeof process !== 'undefined' && process.env ? process.env : {};\n};\n\nconst LOG_CATEGORY = '[ Federation Runtime ]';\n// entry: name:version version : 1.0.0 | ^1.2.3\n// entry: name:entry entry: https://localhost:9000/federation-manifest.json\nconst parseEntry = (str, devVerOrUrl, separator = SEPARATOR) => {\n const strSplit = str.split(separator);\n const devVersionOrUrl = getProcessEnv()['NODE_ENV'] === 'development' && devVerOrUrl;\n const defaultVersion = '*';\n const isEntry = (s) => s.startsWith('http') || s.includes(MANIFEST_EXT);\n // Check if the string starts with a type\n if (strSplit.length >= 2) {\n let [name, ...versionOrEntryArr] = strSplit;\n // @name@manifest-url.json\n if (str.startsWith(separator)) {\n name = strSplit.slice(0, 2).join(separator);\n versionOrEntryArr = [\n devVersionOrUrl || strSplit.slice(2).join(separator),\n ];\n }\n let versionOrEntry = devVersionOrUrl || versionOrEntryArr.join(separator);\n if (isEntry(versionOrEntry)) {\n return {\n name,\n entry: versionOrEntry,\n };\n }\n else {\n // Apply version rule\n // devVersionOrUrl => inputVersion => defaultVersion\n return {\n name,\n version: versionOrEntry || defaultVersion,\n };\n }\n }\n else if (strSplit.length === 1) {\n const [name] = strSplit;\n if (devVersionOrUrl && isEntry(devVersionOrUrl)) {\n return {\n name,\n entry: devVersionOrUrl,\n };\n }\n return {\n name,\n version: devVersionOrUrl || defaultVersion,\n };\n }\n else {\n throw `Invalid entry value: ${str}`;\n }\n};\nconst composeKeyWithSeparator = function (...args) {\n if (!args.length) {\n return '';\n }\n return args.reduce((sum, cur) => {\n if (!cur) {\n return sum;\n }\n if (!sum) {\n return cur;\n }\n return `${sum}${SEPARATOR}${cur}`;\n }, '');\n};\nconst encodeName = function (name, prefix = '', withExt = false) {\n try {\n const ext = withExt ? '.js' : '';\n return `${prefix}${name\n .replace(new RegExp(`${NameTransformSymbol.AT}`, 'g'), NameTransformMap[NameTransformSymbol.AT])\n .replace(new RegExp(`${NameTransformSymbol.HYPHEN}`, 'g'), NameTransformMap[NameTransformSymbol.HYPHEN])\n .replace(new RegExp(`${NameTransformSymbol.SLASH}`, 'g'), NameTransformMap[NameTransformSymbol.SLASH])}${ext}`;\n }\n catch (err) {\n throw err;\n }\n};\nconst decodeName = function (name, prefix, withExt) {\n try {\n let decodedName = name;\n if (prefix) {\n if (!decodedName.startsWith(prefix)) {\n return decodedName;\n }\n decodedName = decodedName.replace(new RegExp(prefix, 'g'), '');\n }\n decodedName = decodedName\n .replace(new RegExp(`${NameTransformMap[NameTransformSymbol.AT]}`, 'g'), EncodedNameTransformMap[NameTransformMap[NameTransformSymbol.AT]])\n .replace(new RegExp(`${NameTransformMap[NameTransformSymbol.SLASH]}`, 'g'), EncodedNameTransformMap[NameTransformMap[NameTransformSymbol.SLASH]])\n .replace(new RegExp(`${NameTransformMap[NameTransformSymbol.HYPHEN]}`, 'g'), EncodedNameTransformMap[NameTransformMap[NameTransformSymbol.HYPHEN]]);\n if (withExt) {\n decodedName = decodedName.replace('.js', '');\n }\n return decodedName;\n }\n catch (err) {\n throw err;\n }\n};\nconst generateExposeFilename = (exposeName, withExt) => {\n if (!exposeName) {\n return '';\n }\n let expose = exposeName;\n if (expose === '.') {\n expose = 'default_export';\n }\n if (expose.startsWith('./')) {\n expose = expose.replace('./', '');\n }\n return encodeName(expose, '__federation_expose_', withExt);\n};\nconst generateShareFilename = (pkgName, withExt) => {\n if (!pkgName) {\n return '';\n }\n return encodeName(pkgName, '__federation_shared_', withExt);\n};\nconst getResourceUrl = (module, sourceUrl) => {\n if ('getPublicPath' in module) {\n let publicPath;\n if (!module.getPublicPath.startsWith('function')) {\n publicPath = new Function(module.getPublicPath)();\n }\n else {\n publicPath = new Function('return ' + module.getPublicPath)()();\n }\n return `${publicPath}${sourceUrl}`;\n }\n else if ('publicPath' in module) {\n if (!isBrowserEnv() && !isReactNativeEnv() && 'ssrPublicPath' in module) {\n return `${module.ssrPublicPath}${sourceUrl}`;\n }\n return `${module.publicPath}${sourceUrl}`;\n }\n else {\n console.warn('Cannot get resource URL. If in debug mode, please ignore.', module, sourceUrl);\n return '';\n }\n};\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nconst assert = (condition, msg) => {\n if (!condition) {\n error(msg);\n }\n};\nconst error = (msg) => {\n throw new Error(`${LOG_CATEGORY}: ${msg}`);\n};\nconst warn = (msg) => {\n console.warn(`${LOG_CATEGORY}: ${msg}`);\n};\nfunction safeToString(info) {\n try {\n return JSON.stringify(info, null, 2);\n }\n catch (e) {\n return '';\n }\n}\n// RegExp for version string\nconst VERSION_PATTERN_REGEXP = /^([\\d^=v<>~]|[*xX]$)/;\nfunction isRequiredVersion(str) {\n return VERSION_PATTERN_REGEXP.test(str);\n}\n\nconst simpleJoinRemoteEntry = (rPath, rName) => {\n if (!rPath) {\n return rName;\n }\n const transformPath = (str) => {\n if (str === '.') {\n return '';\n }\n if (str.startsWith('./')) {\n return str.replace('./', '');\n }\n if (str.startsWith('/')) {\n const strWithoutSlash = str.slice(1);\n if (strWithoutSlash.endsWith('/')) {\n return strWithoutSlash.slice(0, -1);\n }\n return strWithoutSlash;\n }\n return str;\n };\n const transformedPath = transformPath(rPath);\n if (!transformedPath) {\n return rName;\n }\n if (transformedPath.endsWith('/')) {\n return `${transformedPath}${rName}`;\n }\n return `${transformedPath}/${rName}`;\n};\nfunction inferAutoPublicPath(url) {\n return url\n .replace(/#.*$/, '')\n .replace(/\\?.*$/, '')\n .replace(/\\/[^\\/]+$/, '/');\n}\n// Priority: overrides > remotes\n// eslint-disable-next-line max-lines-per-function\nfunction generateSnapshotFromManifest(manifest, options = {}) {\n const { remotes = {}, overrides = {}, version } = options;\n let remoteSnapshot;\n const getPublicPath = () => {\n if ('publicPath' in manifest.metaData) {\n if (manifest.metaData.publicPath === 'auto' && version) {\n // use same implementation as publicPath auto runtime module implements\n return inferAutoPublicPath(version);\n }\n return manifest.metaData.publicPath;\n }\n else {\n return manifest.metaData.getPublicPath;\n }\n };\n const overridesKeys = Object.keys(overrides);\n let remotesInfo = {};\n // If remotes are not provided, only the remotes in the manifest will be read\n if (!Object.keys(remotes).length) {\n remotesInfo =\n manifest.remotes?.reduce((res, next) => {\n let matchedVersion;\n const name = next.federationContainerName;\n // overrides have higher priority\n if (overridesKeys.includes(name)) {\n matchedVersion = overrides[name];\n }\n else {\n if ('version' in next) {\n matchedVersion = next.version;\n }\n else {\n matchedVersion = next.entry;\n }\n }\n res[name] = {\n matchedVersion,\n };\n return res;\n }, {}) || {};\n }\n // If remotes (deploy scenario) are specified, they need to be traversed again\n Object.keys(remotes).forEach((key) => (remotesInfo[key] = {\n // overrides will override dependencies\n matchedVersion: overridesKeys.includes(key)\n ? overrides[key]\n : remotes[key],\n }));\n const { remoteEntry: { path: remoteEntryPath, name: remoteEntryName, type: remoteEntryType, }, types: remoteTypes = { path: '', name: '', zip: '', api: '' }, buildInfo: { buildVersion }, globalName, ssrRemoteEntry, } = manifest.metaData;\n const { exposes } = manifest;\n let basicRemoteSnapshot = {\n version: version ? version : '',\n buildVersion,\n globalName,\n remoteEntry: simpleJoinRemoteEntry(remoteEntryPath, remoteEntryName),\n remoteEntryType,\n remoteTypes: simpleJoinRemoteEntry(remoteTypes.path, remoteTypes.name),\n remoteTypesZip: remoteTypes.zip || '',\n remoteTypesAPI: remoteTypes.api || '',\n remotesInfo,\n shared: manifest?.shared.map((item) => ({\n assets: item.assets,\n sharedName: item.name,\n version: item.version,\n // @ts-ignore\n usedExports: item.referenceExports || [],\n })),\n modules: exposes?.map((expose) => ({\n moduleName: expose.name,\n modulePath: expose.path,\n assets: expose.assets,\n })),\n };\n if (manifest.metaData?.prefetchInterface) {\n const prefetchInterface = manifest.metaData.prefetchInterface;\n basicRemoteSnapshot = {\n ...basicRemoteSnapshot,\n prefetchInterface,\n };\n }\n if (manifest.metaData?.prefetchEntry) {\n const { path, name, type } = manifest.metaData.prefetchEntry;\n basicRemoteSnapshot = {\n ...basicRemoteSnapshot,\n prefetchEntry: simpleJoinRemoteEntry(path, name),\n prefetchEntryType: type,\n };\n }\n if ('publicPath' in manifest.metaData) {\n remoteSnapshot = {\n ...basicRemoteSnapshot,\n publicPath: getPublicPath(),\n ssrPublicPath: manifest.metaData.ssrPublicPath,\n };\n }\n else {\n remoteSnapshot = {\n ...basicRemoteSnapshot,\n getPublicPath: getPublicPath(),\n };\n }\n if (ssrRemoteEntry) {\n const fullSSRRemoteEntry = simpleJoinRemoteEntry(ssrRemoteEntry.path, ssrRemoteEntry.name);\n remoteSnapshot.ssrRemoteEntry = fullSSRRemoteEntry;\n remoteSnapshot.ssrRemoteEntryType =\n ssrRemoteEntry.type || 'commonjs-module';\n }\n return remoteSnapshot;\n}\nfunction isManifestProvider(moduleInfo) {\n if ('remoteEntry' in moduleInfo &&\n moduleInfo.remoteEntry.includes(MANIFEST_EXT)) {\n return true;\n }\n else {\n return false;\n }\n}\nfunction getManifestFileName(manifestOptions) {\n if (!manifestOptions) {\n return {\n statsFileName: StatsFileName,\n manifestFileName: ManifestFileName,\n };\n }\n let filePath = typeof manifestOptions === 'boolean' ? '' : manifestOptions.filePath || '';\n let fileName = typeof manifestOptions === 'boolean' ? '' : manifestOptions.fileName || '';\n const JSON_EXT = '.json';\n const addExt = (name) => {\n if (name.endsWith(JSON_EXT)) {\n return name;\n }\n return `${name}${JSON_EXT}`;\n };\n const insertSuffix = (name, suffix) => {\n return name.replace(JSON_EXT, `${suffix}${JSON_EXT}`);\n };\n const manifestFileName = fileName ? addExt(fileName) : ManifestFileName;\n const statsFileName = fileName\n ? insertSuffix(manifestFileName, '-stats')\n : StatsFileName;\n return {\n statsFileName: simpleJoinRemoteEntry(filePath, statsFileName),\n manifestFileName: simpleJoinRemoteEntry(filePath, manifestFileName),\n };\n}\n\nconst PREFIX = '[ Module Federation ]';\nconst DEFAULT_DELEGATE = console;\nconst LOGGER_STACK_SKIP_TOKENS = [\n 'logger.ts',\n 'logger.js',\n 'captureStackTrace',\n 'Logger.emit',\n 'Logger.log',\n 'Logger.info',\n 'Logger.warn',\n 'Logger.error',\n 'Logger.debug',\n];\nfunction captureStackTrace() {\n try {\n const stack = new Error().stack;\n if (!stack) {\n return undefined;\n }\n const [, ...rawLines] = stack.split('\\n');\n const filtered = rawLines.filter((line) => !LOGGER_STACK_SKIP_TOKENS.some((token) => line.includes(token)));\n if (!filtered.length) {\n return undefined;\n }\n const stackPreview = filtered.slice(0, 5).join('\\n');\n return `Stack trace:\\n${stackPreview}`;\n }\n catch {\n return undefined;\n }\n}\nclass Logger {\n constructor(prefix, delegate = DEFAULT_DELEGATE) {\n this.prefix = prefix;\n this.delegate = delegate ?? DEFAULT_DELEGATE;\n }\n setPrefix(prefix) {\n this.prefix = prefix;\n }\n setDelegate(delegate) {\n this.delegate = delegate ?? DEFAULT_DELEGATE;\n }\n emit(method, args) {\n const delegate = this.delegate;\n const debugMode = isDebugMode();\n const stackTrace = debugMode ? captureStackTrace() : undefined;\n const enrichedArgs = stackTrace ? [...args, stackTrace] : args;\n const order = (() => {\n switch (method) {\n case 'log':\n return ['log', 'info'];\n case 'info':\n return ['info', 'log'];\n case 'warn':\n return ['warn', 'info', 'log'];\n case 'error':\n return ['error', 'warn', 'log'];\n case 'debug':\n default:\n return ['debug', 'log'];\n }\n })();\n for (const candidate of order) {\n const handler = delegate[candidate];\n if (typeof handler === 'function') {\n handler.call(delegate, this.prefix, ...enrichedArgs);\n return;\n }\n }\n for (const candidate of order) {\n const handler = DEFAULT_DELEGATE[candidate];\n if (typeof handler === 'function') {\n handler.call(DEFAULT_DELEGATE, this.prefix, ...enrichedArgs);\n return;\n }\n }\n }\n log(...args) {\n this.emit('log', args);\n }\n warn(...args) {\n this.emit('warn', args);\n }\n error(...args) {\n this.emit('error', args);\n }\n success(...args) {\n this.emit('info', args);\n }\n info(...args) {\n this.emit('info', args);\n }\n ready(...args) {\n this.emit('info', args);\n }\n debug(...args) {\n if (isDebugMode()) {\n this.emit('debug', args);\n }\n }\n}\nfunction createLogger(prefix) {\n return new Logger(prefix);\n}\nfunction createInfrastructureLogger(prefix) {\n const infrastructureLogger = new Logger(prefix);\n Object.defineProperty(infrastructureLogger, '__mf_infrastructure_logger__', {\n value: true,\n enumerable: false,\n configurable: false,\n });\n return infrastructureLogger;\n}\nfunction bindLoggerToCompiler(loggerInstance, compiler, name) {\n if (!loggerInstance\n .__mf_infrastructure_logger__) {\n return;\n }\n if (!compiler?.getInfrastructureLogger) {\n return;\n }\n try {\n const infrastructureLogger = compiler.getInfrastructureLogger(name);\n if (infrastructureLogger &&\n typeof infrastructureLogger === 'object' &&\n (typeof infrastructureLogger.log === 'function' ||\n typeof infrastructureLogger.info === 'function' ||\n typeof infrastructureLogger.warn === 'function' ||\n typeof infrastructureLogger.error === 'function')) {\n loggerInstance.setDelegate(infrastructureLogger);\n }\n }\n catch {\n // If the bundler throws (older versions), fall back to default console logger.\n loggerInstance.setDelegate(undefined);\n }\n}\nconst logger = createLogger(PREFIX);\nconst infrastructureLogger = createInfrastructureLogger(PREFIX);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function safeWrapper(callback, disableWarn) {\n try {\n const res = await callback();\n return res;\n }\n catch (e) {\n !disableWarn && warn(e);\n return;\n }\n}\nfunction isStaticResourcesEqual(url1, url2) {\n const REG_EXP = /^(https?:)?\\/\\//i;\n // Transform url1 and url2 into relative paths\n const relativeUrl1 = url1.replace(REG_EXP, '').replace(/\\/$/, '');\n const relativeUrl2 = url2.replace(REG_EXP, '').replace(/\\/$/, '');\n // Check if the relative paths are identical\n return relativeUrl1 === relativeUrl2;\n}\nfunction createScript(info) {\n // Retrieve the existing script element by its src attribute\n let script = null;\n let needAttach = true;\n let timeout = 20000;\n let timeoutId;\n const scripts = document.getElementsByTagName('script');\n for (let i = 0; i < scripts.length; i++) {\n const s = scripts[i];\n const scriptSrc = s.getAttribute('src');\n if (scriptSrc && isStaticResourcesEqual(scriptSrc, info.url)) {\n script = s;\n needAttach = false;\n break;\n }\n }\n if (!script) {\n const attrs = info.attrs;\n script = document.createElement('script');\n script.type = attrs?.['type'] === 'module' ? 'module' : 'text/javascript';\n let createScriptRes = undefined;\n if (info.createScriptHook) {\n createScriptRes = info.createScriptHook(info.url, info.attrs);\n if (createScriptRes instanceof HTMLScriptElement) {\n script = createScriptRes;\n }\n else if (typeof createScriptRes === 'object') {\n if ('script' in createScriptRes && createScriptRes.script) {\n script = createScriptRes.script;\n }\n if ('timeout' in createScriptRes && createScriptRes.timeout) {\n timeout = createScriptRes.timeout;\n }\n }\n }\n if (!script.src) {\n script.src = info.url;\n }\n if (attrs && !createScriptRes) {\n Object.keys(attrs).forEach((name) => {\n if (script) {\n if (name === 'async' || name === 'defer') {\n script[name] = attrs[name];\n // Attributes that do not exist are considered overridden\n }\n else if (!script.getAttribute(name)) {\n script.setAttribute(name, attrs[name]);\n }\n }\n });\n }\n }\n const onScriptComplete = async (prev, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n event) => {\n clearTimeout(timeoutId);\n const onScriptCompleteCallback = () => {\n if (event?.type === 'error') {\n info?.onErrorCallback && info?.onErrorCallback(event);\n }\n else {\n info?.cb && info?.cb();\n }\n };\n // Prevent memory leaks in IE.\n if (script) {\n script.onerror = null;\n script.onload = null;\n safeWrapper(() => {\n const { needDeleteScript = true } = info;\n if (needDeleteScript) {\n script?.parentNode && script.parentNode.removeChild(script);\n }\n });\n if (prev && typeof prev === 'function') {\n const result = prev(event);\n if (result instanceof Promise) {\n const res = await result;\n onScriptCompleteCallback();\n return res;\n }\n onScriptCompleteCallback();\n return result;\n }\n }\n onScriptCompleteCallback();\n };\n script.onerror = onScriptComplete.bind(null, script.onerror);\n script.onload = onScriptComplete.bind(null, script.onload);\n timeoutId = setTimeout(() => {\n onScriptComplete(null, new Error(`Remote script \"${info.url}\" time-outed.`));\n }, timeout);\n return { script, needAttach };\n}\nfunction createLink(info) {\n // <link rel=\"preload\" href=\"script.js\" as=\"script\">\n // Retrieve the existing script element by its src attribute\n let link = null;\n let needAttach = true;\n const links = document.getElementsByTagName('link');\n for (let i = 0; i < links.length; i++) {\n const l = links[i];\n const linkHref = l.getAttribute('href');\n const linkRel = l.getAttribute('rel');\n if (linkHref &&\n isStaticResourcesEqual(linkHref, info.url) &&\n linkRel === info.attrs['rel']) {\n link = l;\n needAttach = false;\n break;\n }\n }\n if (!link) {\n link = document.createElement('link');\n link.setAttribute('href', info.url);\n let createLinkRes = undefined;\n const attrs = info.attrs;\n if (info.createLinkHook) {\n createLinkRes = info.createLinkHook(info.url, attrs);\n if (createLinkRes instanceof HTMLLinkElement) {\n link = createLinkRes;\n }\n }\n if (attrs && !createLinkRes) {\n Object.keys(attrs).forEach((name) => {\n if (link && !link.getAttribute(name)) {\n link.setAttribute(name, attrs[name]);\n }\n });\n }\n }\n const onLinkComplete = (prev, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n event) => {\n const onLinkCompleteCallback = () => {\n if (event?.type === 'error') {\n info?.onErrorCallback && info?.onErrorCallback(event);\n }\n else {\n info?.cb && info?.cb();\n }\n };\n // Prevent memory leaks in IE.\n if (link) {\n link.onerror = null;\n link.onload = null;\n safeWrapper(() => {\n const { needDeleteLink = true } = info;\n if (needDeleteLink) {\n link?.parentNode && link.parentNode.removeChild(link);\n }\n });\n if (prev) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const res = prev(event);\n onLinkCompleteCallback();\n return res;\n }\n }\n onLinkCompleteCallback();\n };\n link.onerror = onLinkComplete.bind(null, link.onerror);\n link.onload = onLinkComplete.bind(null, link.onload);\n return { link, needAttach };\n}\nfunction loadScript(url, info) {\n const { attrs = {}, createScriptHook } = info;\n return new Promise((resolve, reject) => {\n const { script, needAttach } = createScript({\n url,\n cb: resolve,\n onErrorCallback: reject,\n attrs: {\n fetchpriority: 'high',\n ...attrs,\n },\n createScriptHook,\n needDeleteScript: true,\n });\n needAttach && document.head.appendChild(script);\n });\n}\n\nconst sdkImportCache = new Map();\nfunction importNodeModule(name) {\n if (!name) {\n throw new Error('import specifier is required');\n }\n // Check cache to prevent infinite recursion\n if (sdkImportCache.has(name)) {\n return sdkImportCache.get(name);\n }\n const importModule = new Function('name', `return import(name)`);\n const promise = importModule(name)\n .then((res) => res)\n .catch((error) => {\n console.error(`Error importing module ${name}:`, error);\n // Remove from cache on error so it can be retried\n sdkImportCache.delete(name);\n throw error;\n });\n // Cache the promise to prevent recursive calls\n sdkImportCache.set(name, promise);\n return promise;\n}\nconst loadNodeFetch = async () => {\n const fetchModule = await importNodeModule('node-fetch');\n return (fetchModule.default || fetchModule);\n};\nconst lazyLoaderHookFetch = async (input, init, loaderHook) => {\n const hook = (url, init) => {\n return loaderHook.lifecycle.fetch.emit(url, init);\n };\n const res = await hook(input, init || {});\n if (!res || !(res instanceof Response)) {\n const fetchFunction = typeof fetch === 'undefined' ? await loadNodeFetch() : fetch;\n return fetchFunction(input, init || {});\n }\n return res;\n};\nconst createScriptNode = typeof ENV_TARGET === 'undefined' || ENV_TARGET !== 'web'\n ? (url, cb, attrs, loaderHook) => {\n if (loaderHook?.createScriptHook) {\n const hookResult = loaderHook.createScriptHook(url);\n if (hookResult &&\n typeof hookResult === 'object' &&\n 'url' in hookResult) {\n url = hookResult.url;\n }\n }\n let urlObj;\n try {\n urlObj = new URL(url);\n }\n catch (e) {\n console.error('Error constructing URL:', e);\n cb(new Error(`Invalid URL: ${e}`));\n return;\n }\n const getFetch = async () => {\n if (loaderHook?.fetch) {\n return (input, init) => lazyLoaderHookFetch(input, init, loaderHook);\n }\n return typeof fetch === 'undefined' ? loadNodeFetch() : fetch;\n };\n const handleScriptFetch = async (f, urlObj) => {\n try {\n const res = await f(urlObj.href);\n const data = await res.text();\n const [path, vm] = await Promise.all([\n importNodeModule('path'),\n importNodeModule('vm'),\n ]);\n const scriptContext = { exports: {}, module: { exports: {} } };\n const urlDirname = urlObj.pathname\n .split('/')\n .slice(0, -1)\n .join('/');\n const filename = path.basename(urlObj.pathname);\n const script = new vm.Script(`(function(exports, module, require, __dirname, __filename) {${data}\\n})`, {\n filename,\n importModuleDynamically: \n //@ts-ignore\n vm.constants?.USE_MAIN_CONTEXT_DEFAULT_LOADER ??\n importNodeModule,\n });\n script.runInThisContext()(scriptContext.exports, scriptContext.module, eval('require'), urlDirname, filename);\n const exportedInterface = scriptContext.module.exports || scriptContext.exports;\n if (attrs && exportedInterface && attrs['globalName']) {\n const container = exportedInterface[attrs['globalName']] || exportedInterface;\n cb(undefined, container);\n return;\n }\n cb(undefined, exportedInterface);\n }\n catch (e) {\n cb(e instanceof Error\n ? e\n : new Error(`Script execution error: ${e}`));\n }\n };\n getFetch()\n .then(async (f) => {\n if (attrs?.['type'] === 'esm' || attrs?.['type'] === 'module') {\n return loadModule(urlObj.href, {\n fetch: f,\n vm: await importNodeModule('vm'),\n })\n .then(async (module) => {\n await module.evaluate();\n cb(undefined, module.namespace);\n })\n .catch((e) => {\n cb(e instanceof Error\n ? e\n : new Error(`Script execution error: ${e}`));\n });\n }\n handleScriptFetch(f, urlObj);\n })\n .catch((err) => {\n cb(err);\n });\n }\n : (url, cb, attrs, loaderHook) => {\n cb(new Error('createScriptNode is disabled in non-Node.js environment'));\n };\nconst loadScriptNode = typeof ENV_TARGET === 'undefined' || ENV_TARGET !== 'web'\n ? (url, info) => {\n return new Promise((resolve, reject) => {\n createScriptNode(url, (error, scriptContext) => {\n if (error) {\n reject(error);\n }\n else {\n const remoteEntryKey = info?.attrs?.['globalName'] ||\n `__FEDERATION_${info?.attrs?.['name']}:custom__`;\n const entryExports = (globalThis[remoteEntryKey] =\n scriptContext);\n resolve(entryExports);\n }\n }, info.attrs, info.loaderHook);\n });\n }\n : (url, info) => {\n throw new Error('loadScriptNode is disabled in non-Node.js environment');\n };\nconst esmModuleCache = new Map();\nasync function loadModule(url, options) {\n // Check cache to prevent infinite recursion in ESM loading\n if (esmModuleCache.has(url)) {\n return esmModuleCache.get(url);\n }\n const { fetch, vm } = options;\n const response = await fetch(url);\n const code = await response.text();\n const module = new vm.SourceTextModule(code, {\n // @ts-ignore\n importModuleDynamically: async (specifier, script) => {\n const resolvedUrl = new URL(specifier, url).href;\n return loadModule(resolvedUrl, options);\n },\n });\n // Cache the module before linking to prevent cycles\n esmModuleCache.set(url, module);\n await module.link(async (specifier) => {\n const resolvedUrl = new URL(specifier, url).href;\n const module = await loadModule(resolvedUrl, options);\n return module;\n });\n return module;\n}\n\nfunction normalizeOptions(enableDefault, defaultOptions, key) {\n return function (options) {\n if (options === false) {\n return false;\n }\n if (typeof options === 'undefined') {\n if (enableDefault) {\n return defaultOptions;\n }\n else {\n return false;\n }\n }\n if (options === true) {\n return defaultOptions;\n }\n if (options && typeof options === 'object') {\n return {\n ...defaultOptions,\n ...options,\n };\n }\n throw new Error(`Unexpected type for \\`${key}\\`, expect boolean/undefined/object, got: ${typeof options}`);\n };\n}\n\nconst createModuleFederationConfig = (options) => {\n return options;\n};\n\nexport { BROWSER_LOG_KEY, ENCODE_NAME_PREFIX, EncodedNameTransformMap, FederationModuleManifest, MANIFEST_EXT, MFModuleType, MFPrefetchCommon, MODULE_DEVTOOL_IDENTIFIER, ManifestFileName, NameTransformMap, NameTransformSymbol, SEPARATOR, StatsFileName, TEMP_DIR, assert, bindLoggerToCompiler, composeKeyWithSeparator, ContainerPlugin as containerPlugin, ContainerReferencePlugin as containerReferencePlugin, createInfrastructureLogger, createLink, createLogger, createModuleFederationConfig, createScript, createScriptNode, decodeName, encodeName, error, generateExposeFilename, generateShareFilename, generateSnapshotFromManifest, getManifestFileName, getProcessEnv, getResourceUrl, inferAutoPublicPath, infrastructureLogger, isBrowserEnv, isDebugMode, isManifestProvider, isReactNativeEnv, isRequiredVersion, isStaticResourcesEqual, loadScript, loadScriptNode, logger, ModuleFederationPlugin as moduleFederationPlugin, normalizeOptions, parseEntry, safeToString, safeWrapper, SharePlugin as sharePlugin, simpleJoinRemoteEntry, warn };\n//# sourceMappingURL=index.esm.js.map\n","const RUNTIME_001 = 'RUNTIME-001';\nconst RUNTIME_002 = 'RUNTIME-002';\nconst RUNTIME_003 = 'RUNTIME-003';\nconst RUNTIME_004 = 'RUNTIME-004';\nconst RUNTIME_005 = 'RUNTIME-005';\nconst RUNTIME_006 = 'RUNTIME-006';\nconst RUNTIME_007 = 'RUNTIME-007';\nconst RUNTIME_008 = 'RUNTIME-008';\nconst RUNTIME_009 = 'RUNTIME-009';\nconst TYPE_001 = 'TYPE-001';\nconst BUILD_001 = 'BUILD-001';\nconst BUILD_002 = 'BUILD-002';\n\nconst getDocsUrl = (errorCode) => {\n const type = errorCode.split('-')[0].toLowerCase();\n return `View the docs to see how to solve: https://module-federation.io/guide/troubleshooting/${type}#${errorCode.toLowerCase()}`;\n};\nconst getShortErrorMsg = (errorCode, errorDescMap, args, originalErrorMsg) => {\n const msg = [`${[errorDescMap[errorCode]]} #${errorCode}`];\n args && msg.push(`args: ${JSON.stringify(args)}`);\n msg.push(getDocsUrl(errorCode));\n originalErrorMsg && msg.push(`Original Error Message:\\n ${originalErrorMsg}`);\n return msg.join('\\n');\n};\n\nconst runtimeDescMap = {\n [RUNTIME_001]: 'Failed to get remoteEntry exports.',\n [RUNTIME_002]: 'The remote entry interface does not contain \"init\"',\n [RUNTIME_003]: 'Failed to get manifest.',\n [RUNTIME_004]: 'Failed to locate remote.',\n [RUNTIME_005]: 'Invalid loadShareSync function call from bundler runtime',\n [RUNTIME_006]: 'Invalid loadShareSync function call from runtime',\n [RUNTIME_007]: 'Failed to get remote snapshot.',\n [RUNTIME_008]: 'Failed to load script resources.',\n [RUNTIME_009]: 'Please call createInstance first.',\n};\nconst typeDescMap = {\n [TYPE_001]: 'Failed to generate type declaration. Execute the below cmd to reproduce and fix the error.',\n};\nconst buildDescMap = {\n [BUILD_001]: 'Failed to find expose module.',\n [BUILD_002]: 'PublicPath is required in prod mode.',\n};\nconst errorDescMap = {\n ...runtimeDescMap,\n ...typeDescMap,\n ...buildDescMap,\n};\n\nexport { BUILD_001, BUILD_002, RUNTIME_001, RUNTIME_002, RUNTIME_003, RUNTIME_004, RUNTIME_005, RUNTIME_006, RUNTIME_007, RUNTIME_008, RUNTIME_009, TYPE_001, buildDescMap, errorDescMap, getShortErrorMsg, runtimeDescMap, typeDescMap };\n//# sourceMappingURL=index.esm.mjs.map\n","import { createLogger, isBrowserEnv, isReactNativeEnv, isDebugMode, composeKeyWithSeparator, loadScriptNode, loadScript, createLink, createScript, safeToString, getResourceUrl, isManifestProvider, generateSnapshotFromManifest, warn as warn$1 } from '@module-federation/sdk';\nexport { loadScript, loadScriptNode } from '@module-federation/sdk';\nimport { RUNTIME_008, getShortErrorMsg, runtimeDescMap, RUNTIME_001, RUNTIME_002, RUNTIME_007, RUNTIME_003, RUNTIME_005, RUNTIME_006, RUNTIME_004 } from '@module-federation/error-codes';\n\nconst LOG_CATEGORY = '[ Federation Runtime ]';\n// FIXME: pre-bundle ?\nconst logger = createLogger(LOG_CATEGORY);\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction assert(condition, msg) {\n if (!condition) {\n error(msg);\n }\n}\nfunction error(msg) {\n if (msg instanceof Error) {\n // Check if the message already starts with the log category to avoid duplication\n if (!msg.message.startsWith(LOG_CATEGORY)) {\n msg.message = `${LOG_CATEGORY}: ${msg.message}`;\n }\n throw msg;\n }\n throw new Error(`${LOG_CATEGORY}: ${msg}`);\n}\nfunction warn(msg) {\n if (msg instanceof Error) {\n // Check if the message already starts with the log category to avoid duplication\n if (!msg.message.startsWith(LOG_CATEGORY)) {\n msg.message = `${LOG_CATEGORY}: ${msg.message}`;\n }\n logger.warn(msg);\n }\n else {\n logger.warn(msg);\n }\n}\n\nfunction addUniqueItem(arr, item) {\n if (arr.findIndex((name) => name === item) === -1) {\n arr.push(item);\n }\n return arr;\n}\nfunction getFMId(remoteInfo) {\n if ('version' in remoteInfo && remoteInfo.version) {\n return `${remoteInfo.name}:${remoteInfo.version}`;\n }\n else if ('entry' in remoteInfo && remoteInfo.entry) {\n return `${remoteInfo.name}:${remoteInfo.entry}`;\n }\n else {\n return `${remoteInfo.name}`;\n }\n}\nfunction isRemoteInfoWithEntry(remote) {\n return typeof remote.entry !== 'undefined';\n}\nfunction isPureRemoteEntry(remote) {\n return !remote.entry.includes('.json');\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function safeWrapper(callback, disableWarn) {\n try {\n const res = await callback();\n return res;\n }\n catch (e) {\n !disableWarn && warn(e);\n return;\n }\n}\nfunction isObject(val) {\n return val && typeof val === 'object';\n}\nconst objectToString = Object.prototype.toString;\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isPlainObject(val) {\n return objectToString.call(val) === '[object Object]';\n}\nfunction isStaticResourcesEqual(url1, url2) {\n const REG_EXP = /^(https?:)?\\/\\//i;\n // Transform url1 and url2 into relative paths\n const relativeUrl1 = url1.replace(REG_EXP, '').replace(/\\/$/, '');\n const relativeUrl2 = url2.replace(REG_EXP, '').replace(/\\/$/, '');\n // Check if the relative paths are identical\n return relativeUrl1 === relativeUrl2;\n}\nfunction arrayOptions(options) {\n return Array.isArray(options) ? options : [options];\n}\nfunction getRemoteEntryInfoFromSnapshot(snapshot) {\n const defaultRemoteEntryInfo = {\n url: '',\n type: 'global',\n globalName: '',\n };\n if (isBrowserEnv() || isReactNativeEnv() || !('ssrRemoteEntry' in snapshot)) {\n return 'remoteEntry' in snapshot\n ? {\n url: snapshot.remoteEntry,\n type: snapshot.remoteEntryType,\n globalName: snapshot.globalName,\n }\n : defaultRemoteEntryInfo;\n }\n if ('ssrRemoteEntry' in snapshot) {\n return {\n url: snapshot.ssrRemoteEntry || defaultRemoteEntryInfo.url,\n type: snapshot.ssrRemoteEntryType || defaultRemoteEntryInfo.type,\n globalName: snapshot.globalName,\n };\n }\n return defaultRemoteEntryInfo;\n}\nconst processModuleAlias = (name, subPath) => {\n // @host/ ./button -> @host/button\n let moduleName;\n if (name.endsWith('/')) {\n moduleName = name.slice(0, -1);\n }\n else {\n moduleName = name;\n }\n if (subPath.startsWith('.')) {\n subPath = subPath.slice(1);\n }\n moduleName = moduleName + subPath;\n return moduleName;\n};\n\nconst CurrentGlobal = typeof globalThis === 'object' ? globalThis : window;\nconst nativeGlobal = (() => {\n try {\n // get real window (incase of sandbox)\n return document.defaultView;\n }\n catch {\n // node env\n return CurrentGlobal;\n }\n})();\nconst Global = nativeGlobal;\nfunction definePropertyGlobalVal(target, key, val) {\n Object.defineProperty(target, key, {\n value: val,\n configurable: false,\n writable: true,\n });\n}\nfunction includeOwnProperty(target, key) {\n return Object.hasOwnProperty.call(target, key);\n}\n// This section is to prevent encapsulation by certain microfrontend frameworks. Due to reuse policies, sandbox escapes.\n// The sandbox in the microfrontend does not replicate the value of 'configurable'.\n// If there is no loading content on the global object, this section defines the loading object.\nif (!includeOwnProperty(CurrentGlobal, '__GLOBAL_LOADING_REMOTE_ENTRY__')) {\n definePropertyGlobalVal(CurrentGlobal, '__GLOBAL_LOADING_REMOTE_ENTRY__', {});\n}\nconst globalLoading = CurrentGlobal.__GLOBAL_LOADING_REMOTE_ENTRY__;\nfunction setGlobalDefaultVal(target) {\n if (includeOwnProperty(target, '__VMOK__') &&\n !includeOwnProperty(target, '__FEDERATION__')) {\n definePropertyGlobalVal(target, '__FEDERATION__', target.__VMOK__);\n }\n if (!includeOwnProperty(target, '__FEDERATION__')) {\n definePropertyGlobalVal(target, '__FEDERATION__', {\n __GLOBAL_PLUGIN__: [],\n __INSTANCES__: [],\n moduleInfo: {},\n __SHARE__: {},\n __MANIFEST_LOADING__: {},\n __PRELOADED_MAP__: new Map(),\n });\n definePropertyGlobalVal(target, '__VMOK__', target.__FEDERATION__);\n }\n target.__FEDERATION__.__GLOBAL_PLUGIN__ ??= [];\n target.__FEDERATION__.__INSTANCES__ ??= [];\n target.__FEDERATION__.moduleInfo ??= {};\n target.__FEDERATION__.__SHARE__ ??= {};\n target.__FEDERATION__.__MANIFEST_LOADING__ ??= {};\n target.__FEDERATION__.__PRELOADED_MAP__ ??= new Map();\n}\nsetGlobalDefaultVal(CurrentGlobal);\nsetGlobalDefaultVal(nativeGlobal);\nfunction resetFederationGlobalInfo() {\n CurrentGlobal.__FEDERATION__.__GLOBAL_PLUGIN__ = [];\n CurrentGlobal.__FEDERATION__.__INSTANCES__ = [];\n CurrentGlobal.__FEDERATION__.moduleInfo = {};\n CurrentGlobal.__FEDERATION__.__SHARE__ = {};\n CurrentGlobal.__FEDERATION__.__MANIFEST_LOADING__ = {};\n Object.keys(globalLoading).forEach((key) => {\n delete globalLoading[key];\n });\n}\nfunction setGlobalFederationInstance(FederationInstance) {\n CurrentGlobal.__FEDERATION__.__INSTANCES__.push(FederationInstance);\n}\nfunction getGlobalFederationConstructor() {\n return CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR__;\n}\nfunction setGlobalFederationConstructor(FederationConstructor, isDebug = isDebugMode()) {\n if (isDebug) {\n CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor;\n CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = \"2.0.1\";\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getInfoWithoutType(target, key) {\n if (typeof key === 'string') {\n const keyRes = target[key];\n if (keyRes) {\n return {\n value: target[key],\n key: key,\n };\n }\n else {\n const targetKeys = Object.keys(target);\n for (const targetKey of targetKeys) {\n const [targetTypeOrName, _] = targetKey.split(':');\n const nKey = `${targetTypeOrName}:${key}`;\n const typeWithKeyRes = target[nKey];\n if (typeWithKeyRes) {\n return {\n value: typeWithKeyRes,\n key: nKey,\n };\n }\n }\n return {\n value: undefined,\n key: key,\n };\n }\n }\n else {\n throw new Error('key must be string');\n }\n}\nconst getGlobalSnapshot = () => nativeGlobal.__FEDERATION__.moduleInfo;\nconst getTargetSnapshotInfoByModuleInfo = (moduleInfo, snapshot) => {\n // Check if the remote is included in the hostSnapshot\n const moduleKey = getFMId(moduleInfo);\n const getModuleInfo = getInfoWithoutType(snapshot, moduleKey).value;\n // The remoteSnapshot might not include a version\n if (getModuleInfo &&\n !getModuleInfo.version &&\n 'version' in moduleInfo &&\n moduleInfo['version']) {\n getModuleInfo.version = moduleInfo['version'];\n }\n if (getModuleInfo) {\n return getModuleInfo;\n }\n // If the remote is not included in the hostSnapshot, deploy a micro app snapshot\n if ('version' in moduleInfo && moduleInfo['version']) {\n const { version, ...resModuleInfo } = moduleInfo;\n const moduleKeyWithoutVersion = getFMId(resModuleInfo);\n const getModuleInfoWithoutVersion = getInfoWithoutType(nativeGlobal.__FEDERATION__.moduleInfo, moduleKeyWithoutVersion).value;\n if (getModuleInfoWithoutVersion?.version === version) {\n return getModuleInfoWithoutVersion;\n }\n }\n return;\n};\nconst getGlobalSnapshotInfoByModuleInfo = (moduleInfo) => getTargetSnapshotInfoByModuleInfo(moduleInfo, nativeGlobal.__FEDERATION__.moduleInfo);\nconst setGlobalSnapshotInfoByModuleInfo = (remoteInfo, moduleDetailInfo) => {\n const moduleKey = getFMId(remoteInfo);\n nativeGlobal.__FEDERATION__.moduleInfo[moduleKey] = moduleDetailInfo;\n return nativeGlobal.__FEDERATION__.moduleInfo;\n};\nconst addGlobalSnapshot = (moduleInfos) => {\n nativeGlobal.__FEDERATION__.moduleInfo = {\n ...nativeGlobal.__FEDERATION__.moduleInfo,\n ...moduleInfos,\n };\n return () => {\n const keys = Object.keys(moduleInfos);\n for (const key of keys) {\n delete nativeGlobal.__FEDERATION__.moduleInfo[key];\n }\n };\n};\nconst getRemoteEntryExports = (name, globalName) => {\n const remoteEntryKey = globalName || `__FEDERATION_${name}:custom__`;\n const entryExports = CurrentGlobal[remoteEntryKey];\n return {\n remoteEntryKey,\n entryExports,\n };\n};\n// This function is used to register global plugins.\n// It iterates over the provided plugins and checks if they are already registered.\n// If a plugin is not registered, it is added to the global plugins.\n// If a plugin is already registered, a warning message is logged.\nconst registerGlobalPlugins = (plugins) => {\n const { __GLOBAL_PLUGIN__ } = nativeGlobal.__FEDERATION__;\n plugins.forEach((plugin) => {\n if (__GLOBAL_PLUGIN__.findIndex((p) => p.name === plugin.name) === -1) {\n __GLOBAL_PLUGIN__.push(plugin);\n }\n else {\n warn(`The plugin ${plugin.name} has been registered.`);\n }\n });\n};\nconst getGlobalHostPlugins = () => nativeGlobal.__FEDERATION__.__GLOBAL_PLUGIN__;\nconst getPreloaded = (id) => CurrentGlobal.__FEDERATION__.__PRELOADED_MAP__.get(id);\nconst setPreloaded = (id) => CurrentGlobal.__FEDERATION__.__PRELOADED_MAP__.set(id, true);\n\nconst DEFAULT_SCOPE = 'default';\nconst DEFAULT_REMOTE_TYPE = 'global';\n\n// fork from https://github.com/originjs/vite-plugin-federation/blob/v1.1.12/packages/lib/src/utils/semver/index.ts\n// those constants are based on https://www.rubydoc.info/gems/semantic_range/3.0.0/SemanticRange#BUILDIDENTIFIER-constant\n// Copyright (c)\n// vite-plugin-federation is licensed under Mulan PSL v2.\n// You can use this software according to the terms and conditions of the Mulan PSL v2.\n// You may obtain a copy of Mulan PSL v2 at:\n// http://license.coscl.org.cn/MulanPSL2\n// THIS SOFTWARE IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.\n// See the Mulan PSL v2 for more details.\nconst buildIdentifier = '[0-9A-Za-z-]+';\nconst build = `(?:\\\\+(${buildIdentifier}(?:\\\\.${buildIdentifier})*))`;\nconst numericIdentifier = '0|[1-9]\\\\d*';\nconst numericIdentifierLoose = '[0-9]+';\nconst nonNumericIdentifier = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*';\nconst preReleaseIdentifierLoose = `(?:${numericIdentifierLoose}|${nonNumericIdentifier})`;\nconst preReleaseLoose = `(?:-?(${preReleaseIdentifierLoose}(?:\\\\.${preReleaseIdentifierLoose})*))`;\nconst preReleaseIdentifier = `(?:${numericIdentifier}|${nonNumericIdentifier})`;\nconst preRelease = `(?:-(${preReleaseIdentifier}(?:\\\\.${preReleaseIdentifier})*))`;\nconst xRangeIdentifier = `${numericIdentifier}|x|X|\\\\*`;\nconst xRangePlain = `[v=\\\\s]*(${xRangeIdentifier})(?:\\\\.(${xRangeIdentifier})(?:\\\\.(${xRangeIdentifier})(?:${preRelease})?${build}?)?)?`;\nconst hyphenRange = `^\\\\s*(${xRangePlain})\\\\s+-\\\\s+(${xRangePlain})\\\\s*$`;\nconst mainVersionLoose = `(${numericIdentifierLoose})\\\\.(${numericIdentifierLoose})\\\\.(${numericIdentifierLoose})`;\nconst loosePlain = `[v=\\\\s]*${mainVersionLoose}${preReleaseLoose}?${build}?`;\nconst gtlt = '((?:<|>)?=?)';\nconst comparatorTrim = `(\\\\s*)${gtlt}\\\\s*(${loosePlain}|${xRangePlain})`;\nconst loneTilde = '(?:~>?)';\nconst tildeTrim = `(\\\\s*)${loneTilde}\\\\s+`;\nconst loneCaret = '(?:\\\\^)';\nconst caretTrim = `(\\\\s*)${loneCaret}\\\\s+`;\nconst star = '(<|>)?=?\\\\s*\\\\*';\nconst caret = `^${loneCaret}${xRangePlain}$`;\nconst mainVersion = `(${numericIdentifier})\\\\.(${numericIdentifier})\\\\.(${numericIdentifier})`;\nconst fullPlain = `v?${mainVersion}${preRelease}?${build}?`;\nconst tilde = `^${loneTilde}${xRangePlain}$`;\nconst xRange = `^${gtlt}\\\\s*${xRangePlain}$`;\nconst comparator = `^${gtlt}\\\\s*(${fullPlain})$|^$`;\n// copy from semver package\nconst gte0 = '^\\\\s*>=\\\\s*0.0.0\\\\s*$';\n\n// fork from https://github.com/originjs/vite-plugin-federation/blob/v1.1.12/packages/lib/src/utils/semver/index.ts\n// Copyright (c)\n// vite-plugin-federation is licensed under Mulan PSL v2.\n// You can use this software according to the terms and conditions of the Mulan PSL v2.\n// You may obtain a copy of Mulan PSL v2 at:\n// http://license.coscl.org.cn/MulanPSL2\n// THIS SOFTWARE IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.\n// See the Mulan PSL v2 for more details.\nfunction parseRegex(source) {\n return new RegExp(source);\n}\nfunction isXVersion(version) {\n return !version || version.toLowerCase() === 'x' || version === '*';\n}\nfunction pipe(...fns) {\n return (x) => fns.reduce((v, f) => f(v), x);\n}\nfunction extractComparator(comparatorString) {\n return comparatorString.match(parseRegex(comparator));\n}\nfunction combineVersion(major, minor, patch, preRelease) {\n const mainVersion = `${major}.${minor}.${patch}`;\n if (preRelease) {\n return `${mainVersion}-${preRelease}`;\n }\n return mainVersion;\n}\n\n// fork from https://github.com/originjs/vite-plugin-federation/blob/v1.1.12/packages/lib/src/utils/semver/index.ts\n// Copyright (c)\n// vite-plugin-federation is licensed under Mulan PSL v2.\n// You can use this software according to the terms and conditions of the Mulan PSL v2.\n// You may obtain a copy of Mulan PSL v2 at:\n// http://license.coscl.org.cn/MulanPSL2\n// THIS SOFTWARE IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.\n// See the Mulan PSL v2 for more details.\nfunction parseHyphen(range) {\n return range.replace(parseRegex(hyphenRange), (_range, from, fromMajor, fromMinor, fromPatch, _fromPreRelease, _fromBuild, to, toMajor, toMinor, toPatch, toPreRelease) => {\n if (isXVersion(fromMajor)) {\n from = '';\n }\n else if (isXVersion(fromMinor)) {\n from = `>=${fromMajor}.0.0`;\n }\n else if (isXVersion(fromPatch)) {\n from = `>=${fromMajor}.${fromMinor}.0`;\n }\n else {\n from = `>=${from}`;\n }\n if (isXVersion(toMajor)) {\n to = '';\n }\n else if (isXVersion(toMinor)) {\n to = `<${Number(toMajor) + 1}.0.0-0`;\n }\n else if (isXVersion(toPatch)) {\n to = `<${toMajor}.${Number(toMinor) + 1}.0-0`;\n }\n else if (toPreRelease) {\n to = `<=${toMajor}.${toMinor}.${toPatch}-${toPreRelease}`;\n }\n else {\n to = `<=${to}`;\n }\n return `${from} ${to}`.trim();\n });\n}\nfunction parseComparatorTrim(range) {\n return range.replace(parseRegex(comparatorTrim), '$1$2$3');\n}\nfunction parseTildeTrim(range) {\n return range.replace(parseRegex(tildeTrim), '$1~');\n}\nfunction parseCaretTrim(range) {\n return range.replace(parseRegex(caretTrim), '$1^');\n}\nfunction parseCarets(range) {\n return range\n .trim()\n .split(/\\s+/)\n .map((rangeVersion) => rangeVersion.replace(parseRegex(caret), (_, major, minor, patch, preRelease) => {\n if (isXVersion(major)) {\n return '';\n }\n else if (isXVersion(minor)) {\n return `>=${major}.0.0 <${Number(major) + 1}.0.0-0`;\n }\n else if (isXVersion(patch)) {\n if (major === '0') {\n return `>=${major}.${minor}.0 <${major}.${Number(minor) + 1}.0-0`;\n }\n else {\n return `>=${major}.${minor}.0 <${Number(major) + 1}.0.0-0`;\n }\n }\n else if (preRelease) {\n if (major === '0') {\n if (minor === '0') {\n return `>=${major}.${minor}.${patch}-${preRelease} <${major}.${minor}.${Number(patch) + 1}-0`;\n }\n else {\n return `>=${major}.${minor}.${patch}-${preRelease} <${major}.${Number(minor) + 1}.0-0`;\n }\n }\n else {\n return `>=${major}.${minor}.${patch}-${preRelease} <${Number(major) + 1}.0.0-0`;\n }\n }\n else {\n if (major === '0') {\n if (minor === '0') {\n return `>=${major}.${minor}.${patch} <${major}.${minor}.${Number(patch) + 1}-0`;\n }\n else {\n return `>=${major}.${minor}.${patch} <${major}.${Number(minor) + 1}.0-0`;\n }\n }\n return `>=${major}.${minor}.${patch} <${Number(major) + 1}.0.0-0`;\n }\n }))\n .join(' ');\n}\nfunction parseTildes(range) {\n return range\n .trim()\n .split(/\\s+/)\n .map((rangeVersion) => rangeVersion.replace(parseRegex(tilde), (_, major, minor, patch, preRelease) => {\n if (isXVersion(major)) {\n return '';\n }\n else if (isXVersion(minor)) {\n return `>=${major}.0.0 <${Number(major) + 1}.0.0-0`;\n }\n else if (isXVersion(patch)) {\n return `>=${major}.${minor}.0 <${major}.${Number(minor) + 1}.0-0`;\n }\n else if (preRelease) {\n return `>=${major}.${minor}.${patch}-${preRelease} <${major}.${Number(minor) + 1}.0-0`;\n }\n return `>=${major}.${minor}.${patch} <${major}.${Number(minor) + 1}.0-0`;\n }))\n .join(' ');\n}\nfunction parseXRanges(range) {\n return range\n .split(/\\s+/)\n .map((rangeVersion) => rangeVersion\n .trim()\n .replace(parseRegex(xRange), (ret, gtlt, major, minor, patch, preRelease) => {\n const isXMajor = isXVersion(major);\n const isXMinor = isXMajor || isXVersion(minor);\n const isXPatch = isXMinor || isXVersion(patch);\n if (gtlt === '=' && isXPatch) {\n gtlt = '';\n }\n preRelease = '';\n if (isXMajor) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n return '<0.0.0-0';\n }\n else {\n // nothing is forbidden\n return '*';\n }\n }\n else if (gtlt && isXPatch) {\n // replace X with 0\n if (isXMinor) {\n minor = 0;\n }\n patch = 0;\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>=';\n if (isXMinor) {\n major = Number(major) + 1;\n minor = 0;\n patch = 0;\n }\n else {\n minor = Number(minor) + 1;\n patch = 0;\n }\n }\n else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should pass\n // Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<';\n if (isXMinor) {\n major = Number(major) + 1;\n }\n else {\n minor = Number(minor) + 1;\n }\n }\n if (gtlt === '<') {\n preRelease = '-0';\n }\n return `${gtlt + major}.${minor}.${patch}${preRelease}`;\n }\n else if (isXMinor) {\n return `>=${major}.0.0${preRelease} <${Number(major) + 1}.0.0-0`;\n }\n else if (isXPatch) {\n return `>=${major}.${minor}.0${preRelease} <${major}.${Number(minor) + 1}.0-0`;\n }\n return ret;\n }))\n .join(' ');\n}\nfunction parseStar(range) {\n return range.trim().replace(parseRegex(star), '');\n}\nfunction parseGTE0(comparatorString) {\n return comparatorString.trim().replace(parseRegex(gte0), '');\n}\n\n// fork from https://github.com/originjs/vite-plugin-federation/blob/v1.1.12/packages/lib/src/utils/semver/index.ts\n// Copyright (c)\n// vite-plugin-federation is licensed under Mulan PSL v2.\n// You can use this software according to the terms and conditions of the Mulan PSL v2.\n// You may obtain a copy of Mulan PSL v2 at:\n// http://license.coscl.org.cn/MulanPSL2\n// THIS SOFTWARE IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.\n// See the Mulan PSL v2 for more details.\nfunction compareAtom(rangeAtom, versionAtom) {\n rangeAtom = Number(rangeAtom) || rangeAtom;\n versionAtom = Number(versionAtom) || versionAtom;\n if (rangeAtom > versionAtom) {\n return 1;\n }\n if (rangeAtom === versionAtom) {\n return 0;\n }\n return -1;\n}\nfunction comparePreRelease(rangeAtom, versionAtom) {\n const { preRelease: rangePreRelease } = rangeAtom;\n const { preRelease: versionPreRelease } = versionAtom;\n if (rangePreRelease === undefined && Boolean(versionPreRelease)) {\n return 1;\n }\n if (Boolean(rangePreRelease) && versionPreRelease === undefined) {\n return -1;\n }\n if (rangePreRelease === undefined && versionPreRelease === undefined) {\n return 0;\n }\n for (let i = 0, n = rangePreRelease.length; i <= n; i++) {\n const rangeElement = rangePreRelease[i];\n const versionElement = versionPreRelease[i];\n if (rangeElement === versionElement) {\n continue;\n }\n if (rangeElement === undefined && versionElement === undefined) {\n return 0;\n }\n if (!rangeElement) {\n return 1;\n }\n if (!versionElement) {\n return -1;\n }\n return compareAtom(rangeElement, versionElement);\n }\n return 0;\n}\nfunction compareVersion(rangeAtom, versionAtom) {\n return (compareAtom(rangeAtom.major, versionAtom.major) ||\n compareAtom(rangeAtom.minor, versionAtom.minor) ||\n compareAtom(rangeAtom.patch, versionAtom.patch) ||\n comparePreRelease(rangeAtom, versionAtom));\n}\nfunction eq(rangeAtom, versionAtom) {\n return rangeAtom.version === versionAtom.version;\n}\nfunction compare(rangeAtom, versionAtom) {\n switch (rangeAtom.operator) {\n case '':\n case '=':\n return eq(rangeAtom, versionAtom);\n case '>':\n return compareVersion(rangeAtom, versionAtom) < 0;\n case '>=':\n return (eq(rangeAtom, versionAtom) || compareVersion(rangeAtom, versionAtom) < 0);\n case '<':\n return compareVersion(rangeAtom, versionAtom) > 0;\n case '<=':\n return (eq(rangeAtom, versionAtom) || compareVersion(rangeAtom, versionAtom) > 0);\n case undefined: {\n // mean * or x -> all versions\n return true;\n }\n default:\n return false;\n }\n}\n\n// fork from https://github.com/originjs/vite-plugin-federation/blob/v1.1.12/packages/lib/src/utils/semver/index.ts\n// Copyright (c)\n// vite-plugin-federation is licensed under Mulan PSL v2.\n// You can use this software according to the terms and conditions of the Mulan PSL v2.\n// You may obtain a copy of Mulan PSL v2 at:\n// http://license.coscl.org.cn/MulanPSL2\n// THIS SOFTWARE IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.\n// See the Mulan PSL v2 for more details.\nfunction parseComparatorString(range) {\n return pipe(\n // handle caret\n // ^ --> * (any, kinda silly)\n // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n // ^1.2.3 --> >=1.2.3 <2.0.0-0\n // ^1.2.0 --> >=1.2.0 <2.0.0-0\n parseCarets, \n // handle tilde\n // ~, ~> --> * (any, kinda silly)\n // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n parseTildes, parseXRanges, parseStar)(range);\n}\nfunction parseRange(range) {\n return pipe(\n // handle hyphenRange\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n parseHyphen, \n // handle trim comparator\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n parseComparatorTrim, \n // handle trim tilde\n // `~ 1.2.3` => `~1.2.3`\n parseTildeTrim, \n // handle trim caret\n // `^ 1.2.3` => `^1.2.3`\n parseCaretTrim)(range.trim())\n .split(/\\s+/)\n .join(' ');\n}\nfunction satisfy(version, range) {\n if (!version) {\n return false;\n }\n // Extract version details once\n const extractedVersion = extractComparator(version);\n if (!extractedVersion) {\n // If the version string is invalid, it can't satisfy any range\n return false;\n }\n const [, versionOperator, , versionMajor, versionMinor, versionPatch, versionPreRelease,] = extractedVersion;\n const versionAtom = {\n operator: versionOperator,\n version: combineVersion(versionMajor, versionMinor, versionPatch, versionPreRelease), // exclude build atom\n major: versionMajor,\n minor: versionMinor,\n patch: versionPatch,\n preRelease: versionPreRelease?.split('.'),\n };\n // Split the range by || to handle OR conditions\n const orRanges = range.split('||');\n for (const orRange of orRanges) {\n const trimmedOrRange = orRange.trim();\n if (!trimmedOrRange) {\n // An empty range string signifies wildcard *, satisfy any valid version\n // (We already checked if the version itself is valid)\n return true;\n }\n // Handle simple wildcards explicitly before complex parsing\n if (trimmedOrRange === '*' || trimmedOrRange === 'x') {\n return true;\n }\n try {\n // Apply existing parsing logic to the current OR sub-range\n const parsedSubRange = parseRange(trimmedOrRange); // Handles hyphens, trims etc.\n // Check if the result of initial parsing is empty, which can happen\n // for some wildcard cases handled by parseRange/parseComparatorString.\n // E.g. `parseStar` used in `parseComparatorString` returns ''.\n if (!parsedSubRange.trim()) {\n // If parsing results in empty string, treat as wildcard match\n return true;\n }\n const parsedComparatorString = parsedSubRange\n .split(' ')\n .map((rangeVersion) => parseComparatorString(rangeVersion)) // Expands ^, ~\n .join(' ');\n // Check again if the comparator string became empty after specific parsing like ^ or ~\n if (!parsedComparatorString.trim()) {\n return true;\n }\n // Split the sub-range by space for implicit AND conditions\n const comparators = parsedComparatorString\n .split(/\\s+/)\n .map((comparator) => parseGTE0(comparator))\n // Filter out empty strings that might result from multiple spaces\n .filter(Boolean);\n // If a sub-range becomes empty after parsing (e.g., invalid characters),\n // it cannot be satisfied. This check might be redundant now but kept for safety.\n if (comparators.length === 0) {\n continue;\n }\n let subRangeSatisfied = true;\n for (const comparator of comparators) {\n const extractedComparator = extractComparator(comparator);\n // If any part of the AND sub-range is invalid, the sub-range is not satisfied\n if (!extractedComparator) {\n subRangeSatisfied = false;\n break;\n }\n const [, rangeOperator, , rangeMajor, rangeMinor, rangePatch, rangePreRelease,] = extractedComparator;\n const rangeAtom = {\n operator: rangeOperator,\n version: combineVersion(rangeMajor, rangeMinor, rangePatch, rangePreRelease),\n major: rangeMajor,\n minor: rangeMinor,\n patch: rangePatch,\n preRelease: rangePreRelease?.split('.'),\n };\n // Check if the version satisfies this specific comparator in the AND chain\n if (!compare(rangeAtom, versionAtom)) {\n subRangeSatisfied = false; // This part of the AND condition failed\n break; // No need to check further comparators in this sub-range\n }\n }\n // If all AND conditions within this OR sub-range were met, the overall range is satisfied\n if (subRangeSatisfied) {\n return true;\n }\n }\n catch (e) {\n // Log error and treat this sub-range as unsatisfied\n console.error(`[semver] Error processing range part \"${trimmedOrRange}\":`, e);\n continue;\n }\n }\n // If none of the OR sub-ranges were satisfied\n return false;\n}\n\nfunction formatShare(shareArgs, from, name, shareStrategy) {\n let get;\n if ('get' in shareArgs) {\n // eslint-disable-next-line prefer-destructuring\n get = shareArgs.get;\n }\n else if ('lib' in shareArgs) {\n get = () => Promise.resolve(shareArgs.lib);\n }\n else {\n get = () => Promise.resolve(() => {\n throw new Error(`Can not get shared '${name}'!`);\n });\n }\n if (shareArgs.shareConfig?.eager && shareArgs.treeShaking?.mode) {\n throw new Error('Can not set \"eager:true\" and \"treeShaking\" at the same time!');\n }\n return {\n deps: [],\n useIn: [],\n from,\n loading: null,\n ...shareArgs,\n shareConfig: {\n requiredVersion: `^${shareArgs.version}`,\n singleton: false,\n eager: false,\n strictVersion: false,\n ...shareArgs.shareConfig,\n },\n get,\n loaded: shareArgs?.loaded || 'lib' in shareArgs ? true : undefined,\n version: shareArgs.version ?? '0',\n scope: Array.isArray(shareArgs.scope)\n ? shareArgs.scope\n : [shareArgs.scope ?? 'default'],\n strategy: (shareArgs.strategy ?? shareStrategy) || 'version-first',\n treeShaking: shareArgs.treeShaking\n ? {\n ...shareArgs.treeShaking,\n mode: shareArgs.treeShaking.mode ?? 'server-calc',\n status: shareArgs.treeShaking.status ?? 1 /* TreeShakingStatus.UNKNOWN */,\n useIn: [],\n }\n : undefined,\n };\n}\nfunction formatShareConfigs(prevOptions, newOptions) {\n const shareArgs = newOptions.shared || {};\n const from = newOptions.name;\n const newShareInfos = Object.keys(shareArgs).reduce((res, pkgName) => {\n const arrayShareArgs = arrayOptions(shareArgs[pkgName]);\n res[pkgName] = res[pkgName] || [];\n arrayShareArgs.forEach((shareConfig) => {\n res[pkgName].push(formatShare(shareConfig, from, pkgName, newOptions.shareStrategy));\n });\n return res;\n }, {});\n const allShareInfos = {\n ...prevOptions.shared,\n };\n Object.keys(newShareInfos).forEach((shareKey) => {\n if (!allShareInfos[shareKey]) {\n allShareInfos[shareKey] = newShareInfos[shareKey];\n }\n else {\n newShareInfos[shareKey].forEach((newUserSharedOptions) => {\n const isSameVersion = allShareInfos[shareKey].find((sharedVal) => sharedVal.version === newUserSharedOptions.version);\n if (!isSameVersion) {\n allShareInfos[shareKey].push(newUserSharedOptions);\n }\n });\n }\n });\n return { allShareInfos, newShareInfos };\n}\nfunction shouldUseTreeShaking(treeShaking, usedExports) {\n if (!treeShaking) {\n return false;\n }\n const { status, mode } = treeShaking;\n if (status === 0 /* TreeShakingStatus.NO_USE */) {\n return false;\n }\n if (status === 2 /* TreeShakingStatus.CALCULATED */) {\n return true;\n }\n if (mode === 'runtime-infer') {\n if (!usedExports) {\n return true;\n }\n return isMatchUsedExports(treeShaking, usedExports);\n }\n return false;\n}\n/**\n * compare version a and b, return true if a is less than b\n */\nfunction versionLt(a, b) {\n const transformInvalidVersion = (version) => {\n const isNumberVersion = !Number.isNaN(Number(version));\n if (isNumberVersion) {\n const splitArr = version.split('.');\n let validVersion = version;\n for (let i = 0; i < 3 - splitArr.length; i++) {\n validVersion += '.0';\n }\n return validVersion;\n }\n return version;\n };\n if (satisfy(transformInvalidVersion(a), `<=${transformInvalidVersion(b)}`)) {\n return true;\n }\n else {\n return false;\n }\n}\nconst findVersion = (shareVersionMap, cb) => {\n const callback = cb ||\n function (prev, cur) {\n return versionLt(prev, cur);\n };\n return Object.keys(shareVersionMap).reduce((prev, cur) => {\n if (!prev) {\n return cur;\n }\n if (callback(prev, cur)) {\n return cur;\n }\n // default version is '0' https://github.com/webpack/webpack/blob/main/lib/sharing/ProvideSharedModule.js#L136\n if (prev === '0') {\n return cur;\n }\n return prev;\n }, 0);\n};\nconst isLoaded = (shared) => {\n return Boolean(shared.loaded) || typeof shared.lib === 'function';\n};\nconst isLoading = (shared) => {\n return Boolean(shared.loading);\n};\nconst isMatchUsedExports = (treeShaking, usedExports) => {\n if (!treeShaking || !usedExports) {\n return false;\n }\n const { usedExports: treeShakingUsedExports } = treeShaking;\n if (!treeShakingUsedExports) {\n return false;\n }\n if (usedExports.every((e) => treeShakingUsedExports.includes(e))) {\n return true;\n }\n return false;\n};\nfunction findSingletonVersionOrderByVersion(shareScopeMap, scope, pkgName, treeShaking) {\n const versions = shareScopeMap[scope][pkgName];\n let version = '';\n let useTreesShaking = shouldUseTreeShaking(treeShaking);\n // return false means use prev version\n const callback = function (prev, cur) {\n if (useTreesShaking) {\n if (!versions[prev].treeShaking) {\n return true;\n }\n if (!versions[cur].treeShaking) {\n return false;\n }\n return !isLoaded(versions[prev].treeShaking) && versionLt(prev, cur);\n }\n return !isLoaded(versions[prev]) && versionLt(prev, cur);\n };\n if (useTreesShaking) {\n version = findVersion(shareScopeMap[scope][pkgName], callback);\n if (version) {\n return {\n version,\n useTreesShaking,\n };\n }\n useTreesShaking = false;\n }\n return {\n version: findVersion(shareScopeMap[scope][pkgName], callback),\n useTreesShaking,\n };\n}\nconst isLoadingOrLoaded = (shared) => {\n return isLoaded(shared) || isLoading(shared);\n};\nfunction findSingletonVersionOrderByLoaded(shareScopeMap, scope, pkgName, treeShaking) {\n const versions = shareScopeMap[scope][pkgName];\n let version = '';\n let useTreesShaking = shouldUseTreeShaking(treeShaking);\n // return false means use prev version\n const callback = function (prev, cur) {\n if (useTreesShaking) {\n if (!versions[prev].treeShaking) {\n return true;\n }\n if (!versions[cur].treeShaking) {\n return false;\n }\n if (isLoadingOrLoaded(versions[cur].treeShaking)) {\n if (isLoadingOrLoaded(versions[prev].treeShaking)) {\n return Boolean(versionLt(prev, cur));\n }\n else {\n return true;\n }\n }\n if (isLoadingOrLoaded(versions[prev].treeShaking)) {\n return false;\n }\n }\n if (isLoadingOrLoaded(versions[cur])) {\n if (isLoadingOrLoaded(versions[prev])) {\n return Boolean(versionLt(prev, cur));\n }\n else {\n return true;\n }\n }\n if (isLoadingOrLoaded(versions[prev])) {\n return false;\n }\n return versionLt(prev, cur);\n };\n if (useTreesShaking) {\n version = findVersion(shareScopeMap[scope][pkgName], callback);\n if (version) {\n return {\n version,\n useTreesShaking,\n };\n }\n useTreesShaking = false;\n }\n return {\n version: findVersion(shareScopeMap[scope][pkgName], callback),\n useTreesShaking,\n };\n}\nfunction getFindShareFunction(strategy) {\n if (strategy === 'loaded-first') {\n return findSingletonVersionOrderByLoaded;\n }\n return findSingletonVersionOrderByVersion;\n}\nfunction getRegisteredShare(localShareScopeMap, pkgName, shareInfo, resolveShare) {\n if (!localShareScopeMap) {\n return;\n }\n const { shareConfig, scope = DEFAULT_SCOPE, strategy, treeShaking, } = shareInfo;\n const scopes = Array.isArray(scope) ? scope : [scope];\n for (const sc of scopes) {\n if (shareConfig &&\n localShareScopeMap[sc] &&\n localShareScopeMap[sc][pkgName]) {\n const { requiredVersion } = shareConfig;\n const findShareFunction = getFindShareFunction(strategy);\n const { version: maxOrSingletonVersion, useTreesShaking } = findShareFunction(localShareScopeMap, sc, pkgName, treeShaking);\n const defaultResolver = () => {\n const shared = localShareScopeMap[sc][pkgName][maxOrSingletonVersion];\n if (shareConfig.singleton) {\n if (typeof requiredVersion === 'string' &&\n !satisfy(maxOrSingletonVersion, requiredVersion)) {\n const msg = `Version ${maxOrSingletonVersion} from ${maxOrSingletonVersion && shared.from} of shared singleton module ${pkgName} does not satisfy the requirement of ${shareInfo.from} which needs ${requiredVersion})`;\n if (shareConfig.strictVersion) {\n error(msg);\n }\n else {\n warn(msg);\n }\n }\n return {\n shared,\n useTreesShaking,\n };\n }\n else {\n if (requiredVersion === false || requiredVersion === '*') {\n return {\n shared,\n useTreesShaking,\n };\n }\n if (satisfy(maxOrSingletonVersion, requiredVersion)) {\n return {\n shared,\n useTreesShaking,\n };\n }\n const _usedTreeShaking = shouldUseTreeShaking(treeShaking);\n if (_usedTreeShaking) {\n for (const [versionKey, versionValue] of Object.entries(localShareScopeMap[sc][pkgName])) {\n if (!shouldUseTreeShaking(versionValue.treeShaking, treeShaking?.usedExports)) {\n continue;\n }\n if (satisfy(versionKey, requiredVersion)) {\n return {\n shared: versionValue,\n useTreesShaking: _usedTreeShaking,\n };\n }\n }\n }\n for (const [versionKey, versionValue] of Object.entries(localShareScopeMap[sc][pkgName])) {\n if (satisfy(versionKey, requiredVersion)) {\n return {\n shared: versionValue,\n useTreesShaking: false,\n };\n }\n }\n }\n return;\n };\n const params = {\n shareScopeMap: localShareScopeMap,\n scope: sc,\n pkgName,\n version: maxOrSingletonVersion,\n GlobalFederation: Global.__FEDERATION__,\n shareInfo,\n resolver: defaultResolver,\n };\n const resolveShared = resolveShare.emit(params) || params;\n return resolveShared.resolver();\n }\n }\n}\nfunction getGlobalShareScope() {\n return Global.__FEDERATION__.__SHARE__;\n}\nfunction getTargetSharedOptions(options) {\n const { pkgName, extraOptions, shareInfos } = options;\n const defaultResolver = (sharedOptions) => {\n if (!sharedOptions) {\n return undefined;\n }\n const shareVersionMap = {};\n sharedOptions.forEach((shared) => {\n shareVersionMap[shared.version] = shared;\n });\n const callback = function (prev, cur) {\n return (\n // TODO: consider multiple treeShaking shared scenes\n !isLoaded(shareVersionMap[prev]) && versionLt(prev, cur));\n };\n const maxVersion = findVersion(shareVersionMap, callback);\n return shareVersionMap[maxVersion];\n };\n const resolver = extraOptions?.resolver ?? defaultResolver;\n const isPlainObject = (val) => {\n return val !== null && typeof val === 'object' && !Array.isArray(val);\n };\n const merge = (...sources) => {\n const out = {};\n for (const src of sources) {\n if (!src)\n continue;\n for (const [key, value] of Object.entries(src)) {\n const prev = out[key];\n if (isPlainObject(prev) && isPlainObject(value)) {\n out[key] = merge(prev, value);\n }\n else if (value !== undefined) {\n out[key] = value;\n }\n }\n }\n return out;\n };\n return merge(resolver(shareInfos[pkgName]), extraOptions?.customShareInfo);\n}\nconst addUseIn = (shared, from) => {\n if (!shared.useIn) {\n shared.useIn = [];\n }\n addUniqueItem(shared.useIn, from);\n};\nfunction directShare(shared, useTreesShaking) {\n if (useTreesShaking && shared.treeShaking) {\n return shared.treeShaking;\n }\n return shared;\n}\n\nfunction getBuilderId() {\n //@ts-ignore\n return typeof FEDERATION_BUILD_IDENTIFIER !== 'undefined'\n ? //@ts-ignore\n FEDERATION_BUILD_IDENTIFIER\n : '';\n}\n\n// Function to match a remote with its name and expose\n// id: pkgName(@federation/app1) + expose(button) = @federation/app1/button\n// id: alias(app1) + expose(button) = app1/button\n// id: alias(app1/utils) + expose(loadash/sort) = app1/utils/loadash/sort\nfunction matchRemoteWithNameAndExpose(remotes, id) {\n for (const remote of remotes) {\n // match pkgName\n const isNameMatched = id.startsWith(remote.name);\n let expose = id.replace(remote.name, '');\n if (isNameMatched) {\n if (expose.startsWith('/')) {\n const pkgNameOrAlias = remote.name;\n expose = `.${expose}`;\n return {\n pkgNameOrAlias,\n expose,\n remote,\n };\n }\n else if (expose === '') {\n return {\n pkgNameOrAlias: remote.name,\n expose: '.',\n remote,\n };\n }\n }\n // match alias\n const isAliasMatched = remote.alias && id.startsWith(remote.alias);\n let exposeWithAlias = remote.alias && id.replace(remote.alias, '');\n if (remote.alias && isAliasMatched) {\n if (exposeWithAlias && exposeWithAlias.startsWith('/')) {\n const pkgNameOrAlias = remote.alias;\n exposeWithAlias = `.${exposeWithAlias}`;\n return {\n pkgNameOrAlias,\n expose: exposeWithAlias,\n remote,\n };\n }\n else if (exposeWithAlias === '') {\n return {\n pkgNameOrAlias: remote.alias,\n expose: '.',\n remote,\n };\n }\n }\n }\n return;\n}\n// Function to match a remote with its name or alias\nfunction matchRemote(remotes, nameOrAlias) {\n for (const remote of remotes) {\n const isNameMatched = nameOrAlias === remote.name;\n if (isNameMatched) {\n return remote;\n }\n const isAliasMatched = remote.alias && nameOrAlias === remote.alias;\n if (isAliasMatched) {\n return remote;\n }\n }\n return;\n}\n\nfunction registerPlugins(plugins, instance) {\n const globalPlugins = getGlobalHostPlugins();\n const hookInstances = [\n instance.hooks,\n instance.remoteHandler.hooks,\n instance.sharedHandler.hooks,\n instance.snapshotHandler.hooks,\n instance.loaderHook,\n instance.bridgeHook,\n ];\n // Incorporate global plugins\n if (globalPlugins.length > 0) {\n globalPlugins.forEach((plugin) => {\n if (plugins?.find((item) => item.name !== plugin.name)) {\n plugins.push(plugin);\n }\n });\n }\n if (plugins && plugins.length > 0) {\n plugins.forEach((plugin) => {\n hookInstances.forEach((hookInstance) => {\n hookInstance.applyPlugin(plugin, instance);\n });\n });\n }\n return plugins;\n}\n\nconst importCallback = '.then(callbacks[0]).catch(callbacks[1])';\nasync function loadEsmEntry({ entry, remoteEntryExports, }) {\n return new Promise((resolve, reject) => {\n try {\n if (!remoteEntryExports) {\n if (typeof FEDERATION_ALLOW_NEW_FUNCTION !== 'undefined') {\n new Function('callbacks', `import(\"${entry}\")${importCallback}`)([\n resolve,\n reject,\n ]);\n }\n else {\n import(/* webpackIgnore: true */ /* @vite-ignore */ entry)\n .then(resolve)\n .catch(reject);\n }\n }\n else {\n resolve(remoteEntryExports);\n }\n }\n catch (e) {\n reject(e);\n }\n });\n}\nasync function loadSystemJsEntry({ entry, remoteEntryExports, }) {\n return new Promise((resolve, reject) => {\n try {\n if (!remoteEntryExports) {\n //@ts-ignore\n if (typeof __system_context__ === 'undefined') {\n //@ts-ignore\n System.import(entry).then(resolve).catch(reject);\n }\n else {\n new Function('callbacks', `System.import(\"${entry}\")${importCallback}`)([resolve, reject]);\n }\n }\n else {\n resolve(remoteEntryExports);\n }\n }\n catch (e) {\n reject(e);\n }\n });\n}\nfunction handleRemoteEntryLoaded(name, globalName, entry) {\n const { remoteEntryKey, entryExports } = getRemoteEntryExports(name, globalName);\n assert(entryExports, getShortErrorMsg(RUNTIME_001, runtimeDescMap, {\n remoteName: name,\n remoteEntryUrl: entry,\n remoteEntryKey,\n }));\n return entryExports;\n}\nasync function loadEntryScript({ name, globalName, entry, loaderHook, getEntryUrl, }) {\n const { entryExports: remoteEntryExports } = getRemoteEntryExports(name, globalName);\n if (remoteEntryExports) {\n return remoteEntryExports;\n }\n // if getEntryUrl is passed, use the getEntryUrl to get the entry url\n const url = getEntryUrl ? getEntryUrl(entry) : entry;\n return loadScript(url, {\n attrs: {},\n createScriptHook: (url, attrs) => {\n const res = loaderHook.lifecycle.createScript.emit({ url, attrs });\n if (!res)\n return;\n if (res instanceof HTMLScriptElement) {\n return res;\n }\n if ('script' in res || 'timeout' in res) {\n return res;\n }\n return;\n },\n })\n .then(() => {\n return handleRemoteEntryLoaded(name, globalName, entry);\n })\n .catch((e) => {\n assert(undefined, getShortErrorMsg(RUNTIME_008, runtimeDescMap, {\n remoteName: name,\n resourceUrl: entry,\n }));\n throw e;\n });\n}\nasync function loadEntryDom({ remoteInfo, remoteEntryExports, loaderHook, getEntryUrl, }) {\n const { entry, entryGlobalName: globalName, name, type } = remoteInfo;\n switch (type) {\n case 'esm':\n case 'module':\n return loadEsmEntry({ entry, remoteEntryExports });\n case 'system':\n return loadSystemJsEntry({ entry, remoteEntryExports });\n default:\n return loadEntryScript({\n entry,\n globalName,\n name,\n loaderHook,\n getEntryUrl,\n });\n }\n}\nasync function loadEntryNode({ remoteInfo, loaderHook, }) {\n const { entry, entryGlobalName: globalName, name, type } = remoteInfo;\n const { entryExports: remoteEntryExports } = getRemoteEntryExports(name, globalName);\n if (remoteEntryExports) {\n return remoteEntryExports;\n }\n return loadScriptNode(entry, {\n attrs: { name, globalName, type },\n loaderHook: {\n createScriptHook: (url, attrs = {}) => {\n const res = loaderHook.lifecycle.createScript.emit({ url, attrs });\n if (!res)\n return;\n if ('url' in res) {\n return res;\n }\n return;\n },\n },\n })\n .then(() => {\n return handleRemoteEntryLoaded(name, globalName, entry);\n })\n .catch((e) => {\n throw e;\n });\n}\nfunction getRemoteEntryUniqueKey(remoteInfo) {\n const { entry, name } = remoteInfo;\n return composeKeyWithSeparator(name, entry);\n}\nasync function getRemoteEntry(params) {\n const { origin, remoteEntryExports, remoteInfo, getEntryUrl, _inErrorHandling = false, } = params;\n const uniqueKey = getRemoteEntryUniqueKey(remoteInfo);\n if (remoteEntryExports) {\n return remoteEntryExports;\n }\n if (!globalLoading[uniqueKey]) {\n const loadEntryHook = origin.remoteHandler.hooks.lifecycle.loadEntry;\n const loaderHook = origin.loaderHook;\n globalLoading[uniqueKey] = loadEntryHook\n .emit({\n loaderHook,\n remoteInfo,\n remoteEntryExports,\n })\n .then((res) => {\n if (res) {\n return res;\n }\n // Use ENV_TARGET if defined, otherwise fallback to isBrowserEnv, must keep this\n const isWebEnvironment = typeof ENV_TARGET !== 'undefined'\n ? ENV_TARGET === 'web'\n : isBrowserEnv();\n return isWebEnvironment\n ? loadEntryDom({\n remoteInfo,\n remoteEntryExports,\n loaderHook,\n getEntryUrl,\n })\n : loadEntryNode({ remoteInfo, loaderHook });\n })\n .catch(async (err) => {\n const uniqueKey = getRemoteEntryUniqueKey(remoteInfo);\n const isScriptLoadError = err instanceof Error && err.message.includes(RUNTIME_008);\n if (isScriptLoadError && !_inErrorHandling) {\n const wrappedGetRemoteEntry = (params) => {\n return getRemoteEntry({ ...params, _inErrorHandling: true });\n };\n const RemoteEntryExports = await origin.loaderHook.lifecycle.loadEntryError.emit({\n getRemoteEntry: wrappedGetRemoteEntry,\n origin,\n remoteInfo: remoteInfo,\n remoteEntryExports,\n globalLoading,\n uniqueKey,\n });\n if (RemoteEntryExports) {\n return RemoteEntryExports;\n }\n }\n throw err;\n });\n }\n return globalLoading[uniqueKey];\n}\nfunction getRemoteInfo(remote) {\n return {\n ...remote,\n entry: 'entry' in remote ? remote.entry : '',\n type: remote.type || DEFAULT_REMOTE_TYPE,\n entryGlobalName: remote.entryGlobalName || remote.name,\n shareScope: remote.shareScope || DEFAULT_SCOPE,\n };\n}\n\nfunction defaultPreloadArgs(preloadConfig) {\n return {\n resourceCategory: 'sync',\n share: true,\n depsRemote: true,\n prefetchInterface: false,\n ...preloadConfig,\n };\n}\nfunction formatPreloadArgs(remotes, preloadArgs) {\n return preloadArgs.map((args) => {\n const remoteInfo = matchRemote(remotes, args.nameOrAlias);\n assert(remoteInfo, `Unable to preload ${args.nameOrAlias} as it is not included in ${!remoteInfo &&\n safeToString({\n remoteInfo,\n remotes,\n })}`);\n return {\n remote: remoteInfo,\n preloadConfig: defaultPreloadArgs(args),\n };\n });\n}\nfunction normalizePreloadExposes(exposes) {\n if (!exposes) {\n return [];\n }\n return exposes.map((expose) => {\n if (expose === '.') {\n return expose;\n }\n if (expose.startsWith('./')) {\n return expose.replace('./', '');\n }\n return expose;\n });\n}\nfunction preloadAssets(remoteInfo, host, assets, \n// It is used to distinguish preload from load remote parallel loading\nuseLinkPreload = true) {\n const { cssAssets, jsAssetsWithoutEntry, entryAssets } = assets;\n if (host.options.inBrowser) {\n entryAssets.forEach((asset) => {\n const { moduleInfo } = asset;\n const module = host.moduleCache.get(remoteInfo.name);\n if (module) {\n getRemoteEntry({\n origin: host,\n remoteInfo: moduleInfo,\n remoteEntryExports: module.remoteEntryExports,\n });\n }\n else {\n getRemoteEntry({\n origin: host,\n remoteInfo: moduleInfo,\n remoteEntryExports: undefined,\n });\n }\n });\n if (useLinkPreload) {\n const defaultAttrs = {\n rel: 'preload',\n as: 'style',\n };\n cssAssets.forEach((cssUrl) => {\n const { link: cssEl, needAttach } = createLink({\n url: cssUrl,\n cb: () => {\n // noop\n },\n attrs: defaultAttrs,\n createLinkHook: (url, attrs) => {\n const res = host.loaderHook.lifecycle.createLink.emit({\n url,\n attrs,\n });\n if (res instanceof HTMLLinkElement) {\n return res;\n }\n return;\n },\n });\n needAttach && document.head.appendChild(cssEl);\n });\n }\n else {\n const defaultAttrs = {\n rel: 'stylesheet',\n type: 'text/css',\n };\n cssAssets.forEach((cssUrl) => {\n const { link: cssEl, needAttach } = createLink({\n url: cssUrl,\n cb: () => {\n // noop\n },\n attrs: defaultAttrs,\n createLinkHook: (url, attrs) => {\n const res = host.loaderHook.lifecycle.createLink.emit({\n url,\n attrs,\n });\n if (res instanceof HTMLLinkElement) {\n return res;\n }\n return;\n },\n needDeleteLink: false,\n });\n needAttach && document.head.appendChild(cssEl);\n });\n }\n if (useLinkPreload) {\n const defaultAttrs = {\n rel: 'preload',\n as: 'script',\n };\n jsAssetsWithoutEntry.forEach((jsUrl) => {\n const { link: linkEl, needAttach } = createLink({\n url: jsUrl,\n cb: () => {\n // noop\n },\n attrs: defaultAttrs,\n createLinkHook: (url, attrs) => {\n const res = host.loaderHook.lifecycle.createLink.emit({\n url,\n attrs,\n });\n if (res instanceof HTMLLinkElement) {\n return res;\n }\n return;\n },\n });\n needAttach && document.head.appendChild(linkEl);\n });\n }\n else {\n const defaultAttrs = {\n fetchpriority: 'high',\n type: remoteInfo?.type === 'module' ? 'module' : 'text/javascript',\n };\n jsAssetsWithoutEntry.forEach((jsUrl) => {\n const { script: scriptEl, needAttach } = createScript({\n url: jsUrl,\n cb: () => {\n // noop\n },\n attrs: defaultAttrs,\n createScriptHook: (url, attrs) => {\n const res = host.loaderHook.lifecycle.createScript.emit({\n url,\n attrs,\n });\n if (res instanceof HTMLScriptElement) {\n return res;\n }\n return;\n },\n needDeleteScript: true,\n });\n needAttach && document.head.appendChild(scriptEl);\n });\n }\n }\n}\n\nconst ShareUtils = {\n getRegisteredShare,\n getGlobalShareScope,\n};\nconst GlobalUtils = {\n Global,\n nativeGlobal,\n resetFederationGlobalInfo,\n setGlobalFederationInstance,\n getGlobalFederationConstructor,\n setGlobalFederationConstructor,\n getInfoWithoutType,\n getGlobalSnapshot,\n getTargetSnapshotInfoByModuleInfo,\n getGlobalSnapshotInfoByModuleInfo,\n setGlobalSnapshotInfoByModuleInfo,\n addGlobalSnapshot,\n getRemoteEntryExports,\n registerGlobalPlugins,\n getGlobalHostPlugins,\n getPreloaded,\n setPreloaded,\n};\nvar helpers = {\n global: GlobalUtils,\n share: ShareUtils,\n utils: {\n matchRemoteWithNameAndExpose,\n preloadAssets,\n getRemoteInfo,\n },\n};\n\nfunction createRemoteEntryInitOptions(remoteInfo, hostShareScopeMap) {\n const localShareScopeMap = hostShareScopeMap;\n const shareScopeKeys = Array.isArray(remoteInfo.shareScope)\n ? remoteInfo.shareScope\n : [remoteInfo.shareScope];\n if (!shareScopeKeys.length) {\n shareScopeKeys.push('default');\n }\n shareScopeKeys.forEach((shareScopeKey) => {\n if (!localShareScopeMap[shareScopeKey]) {\n localShareScopeMap[shareScopeKey] = {};\n }\n });\n const remoteEntryInitOptions = {\n version: remoteInfo.version || '',\n shareScopeKeys: Array.isArray(remoteInfo.shareScope)\n ? shareScopeKeys\n : remoteInfo.shareScope || 'default',\n };\n // Help to find host instance\n Object.defineProperty(remoteEntryInitOptions, 'shareScopeMap', {\n value: localShareScopeMap,\n // remoteEntryInitOptions will be traversed and assigned during container init, ,so this attribute is not allowed to be traversed\n enumerable: false,\n });\n // TODO: compate legacy init params, should use shareScopeMap if exist\n const shareScope = localShareScopeMap[shareScopeKeys[0]];\n const initScope = [];\n return {\n remoteEntryInitOptions,\n shareScope,\n initScope,\n };\n}\nclass Module {\n constructor({ remoteInfo, host, }) {\n this.inited = false;\n this.initing = false;\n this.lib = undefined;\n this.remoteInfo = remoteInfo;\n this.host = host;\n }\n async getEntry() {\n if (this.remoteEntryExports) {\n return this.remoteEntryExports;\n }\n const remoteEntryExports = await getRemoteEntry({\n origin: this.host,\n remoteInfo: this.remoteInfo,\n remoteEntryExports: this.remoteEntryExports,\n });\n assert(remoteEntryExports, `remoteEntryExports is undefined \\n ${safeToString(this.remoteInfo)}`);\n this.remoteEntryExports = remoteEntryExports;\n return this.remoteEntryExports;\n }\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n async init(id, remoteSnapshot) {\n // Get remoteEntry.js\n const remoteEntryExports = await this.getEntry();\n if (this.inited) {\n return remoteEntryExports;\n }\n if (this.initPromise) {\n await this.initPromise;\n return remoteEntryExports;\n }\n this.initing = true;\n this.initPromise = (async () => {\n const { remoteEntryInitOptions, shareScope, initScope } = createRemoteEntryInitOptions(this.remoteInfo, this.host.shareScopeMap);\n const initContainerOptions = await this.host.hooks.lifecycle.beforeInitContainer.emit({\n shareScope,\n // @ts-ignore shareScopeMap will be set by Object.defineProperty\n remoteEntryInitOptions,\n initScope,\n remoteInfo: this.remoteInfo,\n origin: this.host,\n });\n if (typeof remoteEntryExports?.init === 'undefined') {\n error(getShortErrorMsg(RUNTIME_002, runtimeDescMap, {\n hostName: this.host.name,\n remoteName: this.remoteInfo.name,\n remoteEntryUrl: this.remoteInfo.entry,\n remoteEntryKey: this.remoteInfo.entryGlobalName,\n }));\n }\n await remoteEntryExports.init(initContainerOptions.shareScope, initContainerOptions.initScope, initContainerOptions.remoteEntryInitOptions);\n await this.host.hooks.lifecycle.initContainer.emit({\n ...initContainerOptions,\n id,\n remoteSnapshot,\n remoteEntryExports,\n });\n this.inited = true;\n })();\n try {\n await this.initPromise;\n }\n finally {\n this.initing = false;\n this.initPromise = undefined;\n }\n return remoteEntryExports;\n }\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n async get(id, expose, options, remoteSnapshot) {\n const { loadFactory = true } = options || { loadFactory: true };\n const remoteEntryExports = await this.init(id, remoteSnapshot);\n this.lib = remoteEntryExports;\n let moduleFactory;\n moduleFactory = await this.host.loaderHook.lifecycle.getModuleFactory.emit({\n remoteEntryExports,\n expose,\n moduleInfo: this.remoteInfo,\n });\n // get exposeGetter\n if (!moduleFactory) {\n moduleFactory = await remoteEntryExports.get(expose);\n }\n assert(moduleFactory, `${getFMId(this.remoteInfo)} remote don't export ${expose}.`);\n // keep symbol for module name always one format\n const symbolName = processModuleAlias(this.remoteInfo.name, expose);\n const wrapModuleFactory = this.wraperFactory(moduleFactory, symbolName);\n if (!loadFactory) {\n return wrapModuleFactory;\n }\n const exposeContent = await wrapModuleFactory();\n return exposeContent;\n }\n wraperFactory(moduleFactory, id) {\n function defineModuleId(res, id) {\n if (res &&\n typeof res === 'object' &&\n Object.isExtensible(res) &&\n !Object.getOwnPropertyDescriptor(res, Symbol.for('mf_module_id'))) {\n Object.defineProperty(res, Symbol.for('mf_module_id'), {\n value: id,\n enumerable: false,\n });\n }\n }\n if (moduleFactory instanceof Promise) {\n return async () => {\n const res = await moduleFactory();\n // This parameter is used for bridge debugging\n defineModuleId(res, id);\n return res;\n };\n }\n else {\n return () => {\n const res = moduleFactory();\n // This parameter is used for bridge debugging\n defineModuleId(res, id);\n return res;\n };\n }\n }\n}\n\nclass SyncHook {\n constructor(type) {\n this.type = '';\n this.listeners = new Set();\n if (type) {\n this.type = type;\n }\n }\n on(fn) {\n if (typeof fn === 'function') {\n this.listeners.add(fn);\n }\n }\n once(fn) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n this.on(function wrapper(...args) {\n self.remove(wrapper);\n // eslint-disable-next-line prefer-spread\n return fn.apply(null, args);\n });\n }\n emit(...data) {\n let result;\n if (this.listeners.size > 0) {\n // eslint-disable-next-line prefer-spread\n this.listeners.forEach((fn) => {\n result = fn(...data);\n });\n }\n return result;\n }\n remove(fn) {\n this.listeners.delete(fn);\n }\n removeAll() {\n this.listeners.clear();\n }\n}\n\nclass AsyncHook extends SyncHook {\n emit(...data) {\n let result;\n const ls = Array.from(this.listeners);\n if (ls.length > 0) {\n let i = 0;\n const call = (prev) => {\n if (prev === false) {\n return false; // Abort process\n }\n else if (i < ls.length) {\n return Promise.resolve(ls[i++].apply(null, data)).then(call);\n }\n else {\n return prev;\n }\n };\n result = call();\n }\n return Promise.resolve(result);\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction checkReturnData(originalData, returnedData) {\n if (!isObject(returnedData)) {\n return false;\n }\n if (originalData !== returnedData) {\n // eslint-disable-next-line no-restricted-syntax\n for (const key in originalData) {\n if (!(key in returnedData)) {\n return false;\n }\n }\n }\n return true;\n}\nclass SyncWaterfallHook extends SyncHook {\n constructor(type) {\n super();\n this.onerror = error;\n this.type = type;\n }\n emit(data) {\n if (!isObject(data)) {\n error(`The data for the \"${this.type}\" hook should be an object.`);\n }\n for (const fn of this.listeners) {\n try {\n const tempData = fn(data);\n if (checkReturnData(data, tempData)) {\n data = tempData;\n }\n else {\n this.onerror(`A plugin returned an unacceptable value for the \"${this.type}\" type.`);\n break;\n }\n }\n catch (e) {\n warn(e);\n this.onerror(e);\n }\n }\n return data;\n }\n}\n\nclass AsyncWaterfallHook extends SyncHook {\n constructor(type) {\n super();\n this.onerror = error;\n this.type = type;\n }\n emit(data) {\n if (!isObject(data)) {\n error(`The response data for the \"${this.type}\" hook must be an object.`);\n }\n const ls = Array.from(this.listeners);\n if (ls.length > 0) {\n let i = 0;\n const processError = (e) => {\n warn(e);\n this.onerror(e);\n return data;\n };\n const call = (prevData) => {\n if (checkReturnData(data, prevData)) {\n data = prevData;\n if (i < ls.length) {\n try {\n return Promise.resolve(ls[i++](data)).then(call, processError);\n }\n catch (e) {\n return processError(e);\n }\n }\n }\n else {\n this.onerror(`A plugin returned an incorrect value for the \"${this.type}\" type.`);\n }\n return data;\n };\n return Promise.resolve(call(data));\n }\n return Promise.resolve(data);\n }\n}\n\nclass PluginSystem {\n constructor(lifecycle) {\n this.registerPlugins = {};\n this.lifecycle = lifecycle;\n this.lifecycleKeys = Object.keys(lifecycle);\n }\n applyPlugin(plugin, instance) {\n assert(isPlainObject(plugin), 'Plugin configuration is invalid.');\n // The plugin's name is mandatory and must be unique\n const pluginName = plugin.name;\n assert(pluginName, 'A name must be provided by the plugin.');\n if (!this.registerPlugins[pluginName]) {\n this.registerPlugins[pluginName] = plugin;\n plugin.apply?.(instance);\n Object.keys(this.lifecycle).forEach((key) => {\n const pluginLife = plugin[key];\n if (pluginLife) {\n this.lifecycle[key].on(pluginLife);\n }\n });\n }\n }\n removePlugin(pluginName) {\n assert(pluginName, 'A name is required.');\n const plugin = this.registerPlugins[pluginName];\n assert(plugin, `The plugin \"${pluginName}\" is not registered.`);\n Object.keys(plugin).forEach((key) => {\n if (key !== 'name') {\n this.lifecycle[key].remove(plugin[key]);\n }\n });\n }\n}\n\nfunction assignRemoteInfo(remoteInfo, remoteSnapshot) {\n const remoteEntryInfo = getRemoteEntryInfoFromSnapshot(remoteSnapshot);\n if (!remoteEntryInfo.url) {\n error(`The attribute remoteEntry of ${remoteInfo.name} must not be undefined.`);\n }\n let entryUrl = getResourceUrl(remoteSnapshot, remoteEntryInfo.url);\n if (!isBrowserEnv() && !entryUrl.startsWith('http')) {\n entryUrl = `https:${entryUrl}`;\n }\n remoteInfo.type = remoteEntryInfo.type;\n remoteInfo.entryGlobalName = remoteEntryInfo.globalName;\n remoteInfo.entry = entryUrl;\n remoteInfo.version = remoteSnapshot.version;\n remoteInfo.buildVersion = remoteSnapshot.buildVersion;\n}\nfunction snapshotPlugin() {\n return {\n name: 'snapshot-plugin',\n async afterResolve(args) {\n const { remote, pkgNameOrAlias, expose, origin, remoteInfo, id } = args;\n if (!isRemoteInfoWithEntry(remote) || !isPureRemoteEntry(remote)) {\n const { remoteSnapshot, globalSnapshot } = await origin.snapshotHandler.loadRemoteSnapshotInfo({\n moduleInfo: remote,\n id,\n });\n assignRemoteInfo(remoteInfo, remoteSnapshot);\n // preloading assets\n const preloadOptions = {\n remote,\n preloadConfig: {\n nameOrAlias: pkgNameOrAlias,\n exposes: [expose],\n resourceCategory: 'sync',\n share: false,\n depsRemote: false,\n },\n };\n const assets = await origin.remoteHandler.hooks.lifecycle.generatePreloadAssets.emit({\n origin,\n preloadOptions,\n remoteInfo,\n remote,\n remoteSnapshot,\n globalSnapshot,\n });\n if (assets) {\n preloadAssets(remoteInfo, origin, assets, false);\n }\n return {\n ...args,\n remoteSnapshot,\n };\n }\n return args;\n },\n };\n}\n\n// name\n// name:version\nfunction splitId(id) {\n const splitInfo = id.split(':');\n if (splitInfo.length === 1) {\n return {\n name: splitInfo[0],\n version: undefined,\n };\n }\n else if (splitInfo.length === 2) {\n return {\n name: splitInfo[0],\n version: splitInfo[1],\n };\n }\n else {\n return {\n name: splitInfo[1],\n version: splitInfo[2],\n };\n }\n}\n// Traverse all nodes in moduleInfo and traverse the entire snapshot\nfunction traverseModuleInfo(globalSnapshot, remoteInfo, traverse, isRoot, memo = {}, remoteSnapshot) {\n const id = getFMId(remoteInfo);\n const { value: snapshotValue } = getInfoWithoutType(globalSnapshot, id);\n const effectiveRemoteSnapshot = remoteSnapshot || snapshotValue;\n if (effectiveRemoteSnapshot && !isManifestProvider(effectiveRemoteSnapshot)) {\n traverse(effectiveRemoteSnapshot, remoteInfo, isRoot);\n if (effectiveRemoteSnapshot.remotesInfo) {\n const remoteKeys = Object.keys(effectiveRemoteSnapshot.remotesInfo);\n for (const key of remoteKeys) {\n if (memo[key]) {\n continue;\n }\n memo[key] = true;\n const subRemoteInfo = splitId(key);\n const remoteValue = effectiveRemoteSnapshot.remotesInfo[key];\n traverseModuleInfo(globalSnapshot, {\n name: subRemoteInfo.name,\n version: remoteValue.matchedVersion,\n }, traverse, false, memo, undefined);\n }\n }\n }\n}\nconst isExisted = (type, url) => {\n return document.querySelector(`${type}[${type === 'link' ? 'href' : 'src'}=\"${url}\"]`);\n};\n// eslint-disable-next-line max-lines-per-function\nfunction generatePreloadAssets(origin, preloadOptions, remote, globalSnapshot, remoteSnapshot) {\n const cssAssets = [];\n const jsAssets = [];\n const entryAssets = [];\n const loadedSharedJsAssets = new Set();\n const loadedSharedCssAssets = new Set();\n const { options } = origin;\n const { preloadConfig: rootPreloadConfig } = preloadOptions;\n const { depsRemote } = rootPreloadConfig;\n const memo = {};\n traverseModuleInfo(globalSnapshot, remote, (moduleInfoSnapshot, remoteInfo, isRoot) => {\n let preloadConfig;\n if (isRoot) {\n preloadConfig = rootPreloadConfig;\n }\n else {\n if (Array.isArray(depsRemote)) {\n // eslint-disable-next-line array-callback-return\n const findPreloadConfig = depsRemote.find((remoteConfig) => {\n if (remoteConfig.nameOrAlias === remoteInfo.name ||\n remoteConfig.nameOrAlias === remoteInfo.alias) {\n return true;\n }\n return false;\n });\n if (!findPreloadConfig) {\n return;\n }\n preloadConfig = defaultPreloadArgs(findPreloadConfig);\n }\n else if (depsRemote === true) {\n preloadConfig = rootPreloadConfig;\n }\n else {\n return;\n }\n }\n const remoteEntryUrl = getResourceUrl(moduleInfoSnapshot, getRemoteEntryInfoFromSnapshot(moduleInfoSnapshot).url);\n if (remoteEntryUrl) {\n entryAssets.push({\n name: remoteInfo.name,\n moduleInfo: {\n name: remoteInfo.name,\n entry: remoteEntryUrl,\n type: 'remoteEntryType' in moduleInfoSnapshot\n ? moduleInfoSnapshot.remoteEntryType\n : 'global',\n entryGlobalName: 'globalName' in moduleInfoSnapshot\n ? moduleInfoSnapshot.globalName\n : remoteInfo.name,\n shareScope: '',\n version: 'version' in moduleInfoSnapshot\n ? moduleInfoSnapshot.version\n : undefined,\n },\n url: remoteEntryUrl,\n });\n }\n let moduleAssetsInfo = 'modules' in moduleInfoSnapshot ? moduleInfoSnapshot.modules : [];\n const normalizedPreloadExposes = normalizePreloadExposes(preloadConfig.exposes);\n if (normalizedPreloadExposes.length && 'modules' in moduleInfoSnapshot) {\n moduleAssetsInfo = moduleInfoSnapshot?.modules?.reduce((assets, moduleAssetInfo) => {\n if (normalizedPreloadExposes?.indexOf(moduleAssetInfo.moduleName) !==\n -1) {\n assets.push(moduleAssetInfo);\n }\n return assets;\n }, []);\n }\n function handleAssets(assets) {\n const assetsRes = assets.map((asset) => getResourceUrl(moduleInfoSnapshot, asset));\n if (preloadConfig.filter) {\n return assetsRes.filter(preloadConfig.filter);\n }\n return assetsRes;\n }\n if (moduleAssetsInfo) {\n const assetsLength = moduleAssetsInfo.length;\n for (let index = 0; index < assetsLength; index++) {\n const assetsInfo = moduleAssetsInfo[index];\n const exposeFullPath = `${remoteInfo.name}/${assetsInfo.moduleName}`;\n origin.remoteHandler.hooks.lifecycle.handlePreloadModule.emit({\n id: assetsInfo.moduleName === '.' ? remoteInfo.name : exposeFullPath,\n name: remoteInfo.name,\n remoteSnapshot: moduleInfoSnapshot,\n preloadConfig,\n remote: remoteInfo,\n origin,\n });\n const preloaded = getPreloaded(exposeFullPath);\n if (preloaded) {\n continue;\n }\n if (preloadConfig.resourceCategory === 'all') {\n cssAssets.push(...handleAssets(assetsInfo.assets.css.async));\n cssAssets.push(...handleAssets(assetsInfo.assets.css.sync));\n jsAssets.push(...handleAssets(assetsInfo.assets.js.async));\n jsAssets.push(...handleAssets(assetsInfo.assets.js.sync));\n // eslint-disable-next-line no-constant-condition\n }\n else if ((preloadConfig.resourceCategory = 'sync')) {\n cssAssets.push(...handleAssets(assetsInfo.assets.css.sync));\n jsAssets.push(...handleAssets(assetsInfo.assets.js.sync));\n }\n setPreloaded(exposeFullPath);\n }\n }\n }, true, memo, remoteSnapshot);\n if (remoteSnapshot.shared && remoteSnapshot.shared.length > 0) {\n const collectSharedAssets = (shareInfo, snapshotShared) => {\n const { shared: registeredShared } = getRegisteredShare(origin.shareScopeMap, snapshotShared.sharedName, shareInfo, origin.sharedHandler.hooks.lifecycle.resolveShare) || {};\n // If the global share does not exist, or the lib function does not exist, it means that the shared has not been loaded yet and can be preloaded.\n if (registeredShared && typeof registeredShared.lib === 'function') {\n snapshotShared.assets.js.sync.forEach((asset) => {\n loadedSharedJsAssets.add(asset);\n });\n snapshotShared.assets.css.sync.forEach((asset) => {\n loadedSharedCssAssets.add(asset);\n });\n }\n };\n remoteSnapshot.shared.forEach((shared) => {\n const shareInfos = options.shared?.[shared.sharedName];\n if (!shareInfos) {\n return;\n }\n // if no version, preload all shared\n const sharedOptions = shared.version\n ? shareInfos.find((s) => s.version === shared.version)\n : shareInfos;\n if (!sharedOptions) {\n return;\n }\n const arrayShareInfo = arrayOptions(sharedOptions);\n arrayShareInfo.forEach((s) => {\n collectSharedAssets(s, shared);\n });\n });\n }\n const needPreloadJsAssets = jsAssets.filter((asset) => !loadedSharedJsAssets.has(asset) && !isExisted('script', asset));\n const needPreloadCssAssets = cssAssets.filter((asset) => !loadedSharedCssAssets.has(asset) && !isExisted('link', asset));\n return {\n cssAssets: needPreloadCssAssets,\n jsAssetsWithoutEntry: needPreloadJsAssets,\n entryAssets: entryAssets.filter((entry) => !isExisted('script', entry.url)),\n };\n}\nconst generatePreloadAssetsPlugin = function () {\n return {\n name: 'generate-preload-assets-plugin',\n async generatePreloadAssets(args) {\n const { origin, preloadOptions, remoteInfo, remote, globalSnapshot, remoteSnapshot, } = args;\n if (!isBrowserEnv()) {\n return {\n cssAssets: [],\n jsAssetsWithoutEntry: [],\n entryAssets: [],\n };\n }\n if (isRemoteInfoWithEntry(remote) && isPureRemoteEntry(remote)) {\n return {\n cssAssets: [],\n jsAssetsWithoutEntry: [],\n entryAssets: [\n {\n name: remote.name,\n url: remote.entry,\n moduleInfo: {\n name: remoteInfo.name,\n entry: remote.entry,\n type: remoteInfo.type || 'global',\n entryGlobalName: '',\n shareScope: '',\n },\n },\n ],\n };\n }\n assignRemoteInfo(remoteInfo, remoteSnapshot);\n const assets = generatePreloadAssets(origin, preloadOptions, remoteInfo, globalSnapshot, remoteSnapshot);\n return assets;\n },\n };\n};\n\nfunction getGlobalRemoteInfo(moduleInfo, origin) {\n const hostGlobalSnapshot = getGlobalSnapshotInfoByModuleInfo({\n name: origin.name,\n version: origin.options.version,\n });\n // get remote detail info from global\n const globalRemoteInfo = hostGlobalSnapshot &&\n 'remotesInfo' in hostGlobalSnapshot &&\n hostGlobalSnapshot.remotesInfo &&\n getInfoWithoutType(hostGlobalSnapshot.remotesInfo, moduleInfo.name).value;\n if (globalRemoteInfo && globalRemoteInfo.matchedVersion) {\n return {\n hostGlobalSnapshot,\n globalSnapshot: getGlobalSnapshot(),\n remoteSnapshot: getGlobalSnapshotInfoByModuleInfo({\n name: moduleInfo.name,\n version: globalRemoteInfo.matchedVersion,\n }),\n };\n }\n return {\n hostGlobalSnapshot: undefined,\n globalSnapshot: getGlobalSnapshot(),\n remoteSnapshot: getGlobalSnapshotInfoByModuleInfo({\n name: moduleInfo.name,\n version: 'version' in moduleInfo ? moduleInfo.version : undefined,\n }),\n };\n}\nclass SnapshotHandler {\n constructor(HostInstance) {\n this.loadingHostSnapshot = null;\n this.manifestCache = new Map();\n this.hooks = new PluginSystem({\n beforeLoadRemoteSnapshot: new AsyncHook('beforeLoadRemoteSnapshot'),\n loadSnapshot: new AsyncWaterfallHook('loadGlobalSnapshot'),\n loadRemoteSnapshot: new AsyncWaterfallHook('loadRemoteSnapshot'),\n afterLoadSnapshot: new AsyncWaterfallHook('afterLoadSnapshot'),\n });\n this.manifestLoading = Global.__FEDERATION__.__MANIFEST_LOADING__;\n this.HostInstance = HostInstance;\n this.loaderHook = HostInstance.loaderHook;\n }\n // eslint-disable-next-line max-lines-per-function\n async loadRemoteSnapshotInfo({ moduleInfo, id, expose, }) {\n const { options } = this.HostInstance;\n await this.hooks.lifecycle.beforeLoadRemoteSnapshot.emit({\n options,\n moduleInfo,\n });\n let hostSnapshot = getGlobalSnapshotInfoByModuleInfo({\n name: this.HostInstance.options.name,\n version: this.HostInstance.options.version,\n });\n if (!hostSnapshot) {\n hostSnapshot = {\n version: this.HostInstance.options.version || '',\n remoteEntry: '',\n remotesInfo: {},\n };\n addGlobalSnapshot({\n [this.HostInstance.options.name]: hostSnapshot,\n });\n }\n // In dynamic loadRemote scenarios, incomplete remotesInfo delivery may occur. In such cases, the remotesInfo in the host needs to be completed in the snapshot at runtime.\n // This ensures the snapshot's integrity and helps the chrome plugin correctly identify all producer modules, ensuring that proxyable producer modules will not be missing.\n if (hostSnapshot &&\n 'remotesInfo' in hostSnapshot &&\n !getInfoWithoutType(hostSnapshot.remotesInfo, moduleInfo.name).value) {\n if ('version' in moduleInfo || 'entry' in moduleInfo) {\n hostSnapshot.remotesInfo = {\n ...hostSnapshot?.remotesInfo,\n [moduleInfo.name]: {\n matchedVersion: 'version' in moduleInfo ? moduleInfo.version : moduleInfo.entry,\n },\n };\n }\n }\n const { hostGlobalSnapshot, remoteSnapshot, globalSnapshot } = this.getGlobalRemoteInfo(moduleInfo);\n const { remoteSnapshot: globalRemoteSnapshot, globalSnapshot: globalSnapshotRes, } = await this.hooks.lifecycle.loadSnapshot.emit({\n options,\n moduleInfo,\n hostGlobalSnapshot,\n remoteSnapshot,\n globalSnapshot,\n });\n let mSnapshot;\n let gSnapshot;\n // global snapshot includes manifest or module info includes manifest\n if (globalRemoteSnapshot) {\n if (isManifestProvider(globalRemoteSnapshot)) {\n const remoteEntry = isBrowserEnv()\n ? globalRemoteSnapshot.remoteEntry\n : globalRemoteSnapshot.ssrRemoteEntry ||\n globalRemoteSnapshot.remoteEntry ||\n '';\n const moduleSnapshot = await this.getManifestJson(remoteEntry, moduleInfo, {});\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const globalSnapshotRes = setGlobalSnapshotInfoByModuleInfo({\n ...moduleInfo,\n // The global remote may be overridden\n // Therefore, set the snapshot key to the global address of the actual request\n entry: remoteEntry,\n }, moduleSnapshot);\n mSnapshot = moduleSnapshot;\n gSnapshot = globalSnapshotRes;\n }\n else {\n const { remoteSnapshot: remoteSnapshotRes } = await this.hooks.lifecycle.loadRemoteSnapshot.emit({\n options: this.HostInstance.options,\n moduleInfo,\n remoteSnapshot: globalRemoteSnapshot,\n from: 'global',\n });\n mSnapshot = remoteSnapshotRes;\n gSnapshot = globalSnapshotRes;\n }\n }\n else {\n if (isRemoteInfoWithEntry(moduleInfo)) {\n // get from manifest.json and merge remote info from remote server\n const moduleSnapshot = await this.getManifestJson(moduleInfo.entry, moduleInfo, {});\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const globalSnapshotRes = setGlobalSnapshotInfoByModuleInfo(moduleInfo, moduleSnapshot);\n const { remoteSnapshot: remoteSnapshotRes } = await this.hooks.lifecycle.loadRemoteSnapshot.emit({\n options: this.HostInstance.options,\n moduleInfo,\n remoteSnapshot: moduleSnapshot,\n from: 'global',\n });\n mSnapshot = remoteSnapshotRes;\n gSnapshot = globalSnapshotRes;\n }\n else {\n error(getShortErrorMsg(RUNTIME_007, runtimeDescMap, {\n hostName: moduleInfo.name,\n hostVersion: moduleInfo.version,\n globalSnapshot: JSON.stringify(globalSnapshotRes),\n }));\n }\n }\n await this.hooks.lifecycle.afterLoadSnapshot.emit({\n id,\n host: this.HostInstance,\n options,\n moduleInfo,\n remoteSnapshot: mSnapshot,\n });\n return {\n remoteSnapshot: mSnapshot,\n globalSnapshot: gSnapshot,\n };\n }\n getGlobalRemoteInfo(moduleInfo) {\n return getGlobalRemoteInfo(moduleInfo, this.HostInstance);\n }\n async getManifestJson(manifestUrl, moduleInfo, extraOptions) {\n const getManifest = async () => {\n let manifestJson = this.manifestCache.get(manifestUrl);\n if (manifestJson) {\n return manifestJson;\n }\n try {\n let res = await this.loaderHook.lifecycle.fetch.emit(manifestUrl, {});\n if (!res || !(res instanceof Response)) {\n res = await fetch(manifestUrl, {});\n }\n manifestJson = (await res.json());\n }\n catch (err) {\n manifestJson =\n (await this.HostInstance.remoteHandler.hooks.lifecycle.errorLoadRemote.emit({\n id: manifestUrl,\n error: err,\n from: 'runtime',\n lifecycle: 'afterResolve',\n origin: this.HostInstance,\n }));\n if (!manifestJson) {\n delete this.manifestLoading[manifestUrl];\n error(getShortErrorMsg(RUNTIME_003, runtimeDescMap, {\n manifestUrl,\n moduleName: moduleInfo.name,\n hostName: this.HostInstance.options.name,\n }, `${err}`));\n }\n }\n assert(manifestJson.metaData && manifestJson.exposes && manifestJson.shared, `${manifestUrl} is not a federation manifest`);\n this.manifestCache.set(manifestUrl, manifestJson);\n return manifestJson;\n };\n const asyncLoadProcess = async () => {\n const manifestJson = await getManifest();\n const remoteSnapshot = generateSnapshotFromManifest(manifestJson, {\n version: manifestUrl,\n });\n const { remoteSnapshot: remoteSnapshotRes } = await this.hooks.lifecycle.loadRemoteSnapshot.emit({\n options: this.HostInstance.options,\n moduleInfo,\n manifestJson,\n remoteSnapshot,\n manifestUrl,\n from: 'manifest',\n });\n return remoteSnapshotRes;\n };\n if (!this.manifestLoading[manifestUrl]) {\n this.manifestLoading[manifestUrl] = asyncLoadProcess().then((res) => res);\n }\n return this.manifestLoading[manifestUrl];\n }\n}\n\nclass SharedHandler {\n constructor(host) {\n this.hooks = new PluginSystem({\n beforeRegisterShare: new SyncWaterfallHook('beforeRegisterShare'),\n afterResolve: new AsyncWaterfallHook('afterResolve'),\n beforeLoadShare: new AsyncWaterfallHook('beforeLoadShare'),\n // not used yet\n loadShare: new AsyncHook(),\n resolveShare: new SyncWaterfallHook('resolveShare'),\n // maybe will change, temporarily for internal use only\n initContainerShareScopeMap: new SyncWaterfallHook('initContainerShareScopeMap'),\n });\n this.host = host;\n this.shareScopeMap = {};\n this.initTokens = {};\n this._setGlobalShareScopeMap(host.options);\n }\n // register shared in shareScopeMap\n registerShared(globalOptions, userOptions) {\n const { newShareInfos, allShareInfos } = formatShareConfigs(globalOptions, userOptions);\n const sharedKeys = Object.keys(newShareInfos);\n sharedKeys.forEach((sharedKey) => {\n const sharedVals = newShareInfos[sharedKey];\n sharedVals.forEach((sharedVal) => {\n sharedVal.scope.forEach((sc) => {\n this.hooks.lifecycle.beforeRegisterShare.emit({\n origin: this.host,\n pkgName: sharedKey,\n shared: sharedVal,\n });\n const registeredShared = this.shareScopeMap[sc]?.[sharedKey];\n if (!registeredShared) {\n this.setShared({\n pkgName: sharedKey,\n lib: sharedVal.lib,\n get: sharedVal.get,\n loaded: sharedVal.loaded || Boolean(sharedVal.lib),\n shared: sharedVal,\n from: userOptions.name,\n });\n }\n });\n });\n });\n return {\n newShareInfos,\n allShareInfos,\n };\n }\n async loadShare(pkgName, extraOptions) {\n const { host } = this;\n // This function performs the following steps:\n // 1. Checks if the currently loaded share already exists, if not, it throws an error\n // 2. Searches globally for a matching share, if found, it uses it directly\n // 3. If not found, it retrieves it from the current share and stores the obtained share globally.\n const shareOptions = getTargetSharedOptions({\n pkgName,\n extraOptions,\n shareInfos: host.options.shared,\n });\n if (shareOptions?.scope) {\n await Promise.all(shareOptions.scope.map(async (shareScope) => {\n await Promise.all(this.initializeSharing(shareScope, {\n strategy: shareOptions.strategy,\n }));\n return;\n }));\n }\n const loadShareRes = await this.hooks.lifecycle.beforeLoadShare.emit({\n pkgName,\n shareInfo: shareOptions,\n shared: host.options.shared,\n origin: host,\n });\n const { shareInfo: shareOptionsRes } = loadShareRes;\n // Assert that shareInfoRes exists, if not, throw an error\n assert(shareOptionsRes, `Cannot find ${pkgName} Share in the ${host.options.name}. Please ensure that the ${pkgName} Share parameters have been injected`);\n const { shared: registeredShared, useTreesShaking } = getRegisteredShare(this.shareScopeMap, pkgName, shareOptionsRes, this.hooks.lifecycle.resolveShare) || {};\n if (registeredShared) {\n const targetShared = directShare(registeredShared, useTreesShaking);\n if (targetShared.lib) {\n addUseIn(targetShared, host.options.name);\n return targetShared.lib;\n }\n else if (targetShared.loading && !targetShared.loaded) {\n const factory = await targetShared.loading;\n targetShared.loaded = true;\n if (!targetShared.lib) {\n targetShared.lib = factory;\n }\n addUseIn(targetShared, host.options.name);\n return factory;\n }\n else {\n const asyncLoadProcess = async () => {\n const factory = await targetShared.get();\n addUseIn(targetShared, host.options.name);\n targetShared.loaded = true;\n targetShared.lib = factory;\n return factory;\n };\n const loading = asyncLoadProcess();\n this.setShared({\n pkgName,\n loaded: false,\n shared: registeredShared,\n from: host.options.name,\n lib: null,\n loading,\n treeShaking: useTreesShaking\n ? targetShared\n : undefined,\n });\n return loading;\n }\n }\n else {\n if (extraOptions?.customShareInfo) {\n return false;\n }\n const _useTreeShaking = shouldUseTreeShaking(shareOptionsRes.treeShaking);\n const targetShared = directShare(shareOptionsRes, _useTreeShaking);\n const asyncLoadProcess = async () => {\n const factory = await targetShared.get();\n targetShared.lib = factory;\n targetShared.loaded = true;\n addUseIn(targetShared, host.options.name);\n const { shared: gShared, useTreesShaking: gUseTreeShaking } = getRegisteredShare(this.shareScopeMap, pkgName, shareOptionsRes, this.hooks.lifecycle.resolveShare) || {};\n if (gShared) {\n const targetGShared = directShare(gShared, gUseTreeShaking);\n targetGShared.lib = factory;\n targetGShared.loaded = true;\n gShared.from = shareOptionsRes.from;\n }\n return factory;\n };\n const loading = asyncLoadProcess();\n this.setShared({\n pkgName,\n loaded: false,\n shared: shareOptionsRes,\n from: host.options.name,\n lib: null,\n loading,\n treeShaking: _useTreeShaking\n ? targetShared\n : undefined,\n });\n return loading;\n }\n }\n /**\n * This function initializes the sharing sequence (executed only once per share scope).\n * It accepts one argument, the name of the share scope.\n * If the share scope does not exist, it creates one.\n */\n // eslint-disable-next-line @typescript-eslint/member-ordering\n initializeSharing(shareScopeName = DEFAULT_SCOPE, extraOptions) {\n const { host } = this;\n const from = extraOptions?.from;\n const strategy = extraOptions?.strategy;\n let initScope = extraOptions?.initScope;\n const promises = [];\n if (from !== 'build') {\n const { initTokens } = this;\n if (!initScope)\n initScope = [];\n let initToken = initTokens[shareScopeName];\n if (!initToken)\n initToken = initTokens[shareScopeName] = { from: this.host.name };\n if (initScope.indexOf(initToken) >= 0)\n return promises;\n initScope.push(initToken);\n }\n const shareScope = this.shareScopeMap;\n const hostName = host.options.name;\n // Creates a new share scope if necessary\n if (!shareScope[shareScopeName]) {\n shareScope[shareScopeName] = {};\n }\n // Executes all initialization snippets from all accessible modules\n const scope = shareScope[shareScopeName];\n const register = (name, shared) => {\n const { version, eager } = shared;\n scope[name] = scope[name] || {};\n const versions = scope[name];\n const activeVersion = versions[version] && directShare(versions[version]);\n const activeVersionEager = Boolean(activeVersion &&\n (('eager' in activeVersion && activeVersion.eager) ||\n ('shareConfig' in activeVersion &&\n activeVersion.shareConfig?.eager)));\n if (!activeVersion ||\n (activeVersion.strategy !== 'loaded-first' &&\n !activeVersion.loaded &&\n (Boolean(!eager) !== !activeVersionEager\n ? eager\n : hostName > versions[version].from))) {\n versions[version] = shared;\n }\n };\n const initRemoteModule = async (key) => {\n const { module } = await host.remoteHandler.getRemoteModuleAndOptions({\n id: key,\n });\n let remoteEntryExports = undefined;\n try {\n remoteEntryExports = await module.getEntry();\n }\n catch (error) {\n remoteEntryExports =\n (await host.remoteHandler.hooks.lifecycle.errorLoadRemote.emit({\n id: key,\n error,\n from: 'runtime',\n lifecycle: 'beforeLoadShare',\n origin: host,\n }));\n }\n finally {\n if (remoteEntryExports?.init) {\n module.remoteEntryExports = remoteEntryExports;\n await module.init();\n }\n }\n };\n Object.keys(host.options.shared).forEach((shareName) => {\n const sharedArr = host.options.shared[shareName];\n sharedArr.forEach((shared) => {\n if (shared.scope.includes(shareScopeName)) {\n register(shareName, shared);\n }\n });\n });\n // TODO: strategy==='version-first' need to be removed in the future\n if (host.options.shareStrategy === 'version-first' ||\n strategy === 'version-first') {\n host.options.remotes.forEach((remote) => {\n if (remote.shareScope === shareScopeName) {\n promises.push(initRemoteModule(remote.name));\n }\n });\n }\n return promises;\n }\n // The lib function will only be available if the shared set by eager or runtime init is set or the shared is successfully loaded.\n // 1. If the loaded shared already exists globally, then it will be reused\n // 2. If lib exists in local shared, it will be used directly\n // 3. If the local get returns something other than Promise, then it will be used directly\n loadShareSync(pkgName, extraOptions) {\n const { host } = this;\n const shareOptions = getTargetSharedOptions({\n pkgName,\n extraOptions,\n shareInfos: host.options.shared,\n });\n if (shareOptions?.scope) {\n shareOptions.scope.forEach((shareScope) => {\n this.initializeSharing(shareScope, { strategy: shareOptions.strategy });\n });\n }\n const { shared: registeredShared, useTreesShaking } = getRegisteredShare(this.shareScopeMap, pkgName, shareOptions, this.hooks.lifecycle.resolveShare) || {};\n if (registeredShared) {\n if (typeof registeredShared.lib === 'function') {\n addUseIn(registeredShared, host.options.name);\n if (!registeredShared.loaded) {\n registeredShared.loaded = true;\n if (registeredShared.from === host.options.name) {\n shareOptions.loaded = true;\n }\n }\n return registeredShared.lib;\n }\n if (typeof registeredShared.get === 'function') {\n const module = registeredShared.get();\n if (!(module instanceof Promise)) {\n addUseIn(registeredShared, host.options.name);\n this.setShared({\n pkgName,\n loaded: true,\n from: host.options.name,\n lib: module,\n shared: registeredShared,\n });\n return module;\n }\n }\n }\n if (shareOptions.lib) {\n if (!shareOptions.loaded) {\n shareOptions.loaded = true;\n }\n return shareOptions.lib;\n }\n if (shareOptions.get) {\n const module = shareOptions.get();\n if (module instanceof Promise) {\n const errorCode = extraOptions?.from === 'build' ? RUNTIME_005 : RUNTIME_006;\n throw new Error(getShortErrorMsg(errorCode, runtimeDescMap, {\n hostName: host.options.name,\n sharedPkgName: pkgName,\n }));\n }\n shareOptions.lib = module;\n this.setShared({\n pkgName,\n loaded: true,\n from: host.options.name,\n lib: shareOptions.lib,\n shared: shareOptions,\n });\n return shareOptions.lib;\n }\n throw new Error(getShortErrorMsg(RUNTIME_006, runtimeDescMap, {\n hostName: host.options.name,\n sharedPkgName: pkgName,\n }));\n }\n initShareScopeMap(scopeName, shareScope, extraOptions = {}) {\n const { host } = this;\n this.shareScopeMap[scopeName] = shareScope;\n this.hooks.lifecycle.initContainerShareScopeMap.emit({\n shareScope,\n options: host.options,\n origin: host,\n scopeName,\n hostShareScopeMap: extraOptions.hostShareScopeMap,\n });\n }\n setShared({ pkgName, shared, from, lib, loading, loaded, get, treeShaking, }) {\n const { version, scope = 'default', ...shareInfo } = shared;\n const scopes = Array.isArray(scope) ? scope : [scope];\n const mergeAttrs = (shared) => {\n const merge = (s, key, val) => {\n if (val && !s[key]) {\n s[key] = val;\n }\n };\n const targetShared = (treeShaking ? shared.treeShaking : shared);\n merge(targetShared, 'loaded', loaded);\n merge(targetShared, 'loading', loading);\n merge(targetShared, 'get', get);\n };\n scopes.forEach((sc) => {\n if (!this.shareScopeMap[sc]) {\n this.shareScopeMap[sc] = {};\n }\n if (!this.shareScopeMap[sc][pkgName]) {\n this.shareScopeMap[sc][pkgName] = {};\n }\n if (!this.shareScopeMap[sc][pkgName][version]) {\n this.shareScopeMap[sc][pkgName][version] = {\n version,\n scope: [sc],\n ...shareInfo,\n lib,\n };\n }\n const registeredShared = this.shareScopeMap[sc][pkgName][version];\n mergeAttrs(registeredShared);\n if (from && registeredShared.from !== from) {\n registeredShared.from = from;\n }\n });\n }\n _setGlobalShareScopeMap(hostOptions) {\n const globalShareScopeMap = getGlobalShareScope();\n const identifier = hostOptions.id || hostOptions.name;\n if (identifier && !globalShareScopeMap[identifier]) {\n globalShareScopeMap[identifier] = this.shareScopeMap;\n }\n }\n}\n\nclass RemoteHandler {\n constructor(host) {\n this.hooks = new PluginSystem({\n beforeRegisterRemote: new SyncWaterfallHook('beforeRegisterRemote'),\n registerRemote: new SyncWaterfallHook('registerRemote'),\n beforeRequest: new AsyncWaterfallHook('beforeRequest'),\n onLoad: new AsyncHook('onLoad'),\n handlePreloadModule: new SyncHook('handlePreloadModule'),\n errorLoadRemote: new AsyncHook('errorLoadRemote'),\n beforePreloadRemote: new AsyncHook('beforePreloadRemote'),\n generatePreloadAssets: new AsyncHook('generatePreloadAssets'),\n // not used yet\n afterPreloadRemote: new AsyncHook(),\n // TODO: Move to loaderHook\n loadEntry: new AsyncHook(),\n });\n this.host = host;\n this.idToRemoteMap = {};\n }\n formatAndRegisterRemote(globalOptions, userOptions) {\n const userRemotes = userOptions.remotes || [];\n return userRemotes.reduce((res, remote) => {\n this.registerRemote(remote, res, { force: false });\n return res;\n }, globalOptions.remotes);\n }\n setIdToRemoteMap(id, remoteMatchInfo) {\n const { remote, expose } = remoteMatchInfo;\n const { name, alias } = remote;\n this.idToRemoteMap[id] = { name: remote.name, expose };\n if (alias && id.startsWith(name)) {\n const idWithAlias = id.replace(name, alias);\n this.idToRemoteMap[idWithAlias] = { name: remote.name, expose };\n return;\n }\n if (alias && id.startsWith(alias)) {\n const idWithName = id.replace(alias, name);\n this.idToRemoteMap[idWithName] = { name: remote.name, expose };\n }\n }\n // eslint-disable-next-line max-lines-per-function\n // eslint-disable-next-line @typescript-eslint/member-ordering\n async loadRemote(id, options) {\n const { host } = this;\n try {\n const { loadFactory = true } = options || {\n loadFactory: true,\n };\n // 1. Validate the parameters of the retrieved module. There are two module request methods: pkgName + expose and alias + expose.\n // 2. Request the snapshot information of the current host and globally store the obtained snapshot information. The retrieved module information is partially offline and partially online. The online module information will retrieve the modules used online.\n // 3. Retrieve the detailed information of the current module from global (remoteEntry address, expose resource address)\n // 4. After retrieving remoteEntry, call the init of the module, and then retrieve the exported content of the module through get\n // id: pkgName(@federation/app1) + expose(button) = @federation/app1/button\n // id: alias(app1) + expose(button) = app1/button\n // id: alias(app1/utils) + expose(loadash/sort) = app1/utils/loadash/sort\n const { module, moduleOptions, remoteMatchInfo } = await this.getRemoteModuleAndOptions({\n id,\n });\n const { pkgNameOrAlias, remote, expose, id: idRes, remoteSnapshot, } = remoteMatchInfo;\n const moduleOrFactory = (await module.get(idRes, expose, options, remoteSnapshot));\n const moduleWrapper = await this.hooks.lifecycle.onLoad.emit({\n id: idRes,\n pkgNameOrAlias,\n expose,\n exposeModule: loadFactory ? moduleOrFactory : undefined,\n exposeModuleFactory: loadFactory ? undefined : moduleOrFactory,\n remote,\n options: moduleOptions,\n moduleInstance: module,\n origin: host,\n });\n this.setIdToRemoteMap(id, remoteMatchInfo);\n if (typeof moduleWrapper === 'function') {\n return moduleWrapper;\n }\n return moduleOrFactory;\n }\n catch (error) {\n const { from = 'runtime' } = options || { from: 'runtime' };\n const failOver = await this.hooks.lifecycle.errorLoadRemote.emit({\n id,\n error,\n from,\n lifecycle: 'onLoad',\n origin: host,\n });\n if (!failOver) {\n throw error;\n }\n return failOver;\n }\n }\n // eslint-disable-next-line @typescript-eslint/member-ordering\n async preloadRemote(preloadOptions) {\n const { host } = this;\n await this.hooks.lifecycle.beforePreloadRemote.emit({\n preloadOps: preloadOptions,\n options: host.options,\n origin: host,\n });\n const preloadOps = formatPreloadArgs(host.options.remotes, preloadOptions);\n await Promise.all(preloadOps.map(async (ops) => {\n const { remote } = ops;\n const remoteInfo = getRemoteInfo(remote);\n const { globalSnapshot, remoteSnapshot } = await host.snapshotHandler.loadRemoteSnapshotInfo({\n moduleInfo: remote,\n });\n const assets = await this.hooks.lifecycle.generatePreloadAssets.emit({\n origin: host,\n preloadOptions: ops,\n remote,\n remoteInfo,\n globalSnapshot,\n remoteSnapshot,\n });\n if (!assets) {\n return;\n }\n preloadAssets(remoteInfo, host, assets);\n }));\n }\n registerRemotes(remotes, options) {\n const { host } = this;\n remotes.forEach((remote) => {\n this.registerRemote(remote, host.options.remotes, {\n force: options?.force,\n });\n });\n }\n async getRemoteModuleAndOptions(options) {\n const { host } = this;\n const { id } = options;\n let loadRemoteArgs;\n try {\n loadRemoteArgs = await this.hooks.lifecycle.beforeRequest.emit({\n id,\n options: host.options,\n origin: host,\n });\n }\n catch (error) {\n loadRemoteArgs = (await this.hooks.lifecycle.errorLoadRemote.emit({\n id,\n options: host.options,\n origin: host,\n from: 'runtime',\n error,\n lifecycle: 'beforeRequest',\n }));\n if (!loadRemoteArgs) {\n throw error;\n }\n }\n const { id: idRes } = loadRemoteArgs;\n const remoteSplitInfo = matchRemoteWithNameAndExpose(host.options.remotes, idRes);\n assert(remoteSplitInfo, getShortErrorMsg(RUNTIME_004, runtimeDescMap, {\n hostName: host.options.name,\n requestId: idRes,\n }));\n const { remote: rawRemote } = remoteSplitInfo;\n const remoteInfo = getRemoteInfo(rawRemote);\n const matchInfo = await host.sharedHandler.hooks.lifecycle.afterResolve.emit({\n id: idRes,\n ...remoteSplitInfo,\n options: host.options,\n origin: host,\n remoteInfo,\n });\n const { remote, expose } = matchInfo;\n assert(remote && expose, `The 'beforeRequest' hook was executed, but it failed to return the correct 'remote' and 'expose' values while loading ${idRes}.`);\n let module = host.moduleCache.get(remote.name);\n const moduleOptions = {\n host: host,\n remoteInfo,\n };\n if (!module) {\n module = new Module(moduleOptions);\n host.moduleCache.set(remote.name, module);\n }\n return {\n module,\n moduleOptions,\n remoteMatchInfo: matchInfo,\n };\n }\n registerRemote(remote, targetRemotes, options) {\n const { host } = this;\n const normalizeRemote = () => {\n if (remote.alias) {\n // Validate if alias equals the prefix of remote.name and remote.alias, if so, throw an error\n // As multi-level path references cannot guarantee unique names, alias being a prefix of remote.name is not supported\n const findEqual = targetRemotes.find((item) => remote.alias &&\n (item.name.startsWith(remote.alias) ||\n item.alias?.startsWith(remote.alias)));\n assert(!findEqual, `The alias ${remote.alias} of remote ${remote.name} is not allowed to be the prefix of ${findEqual && findEqual.name} name or alias`);\n }\n // Set the remote entry to a complete path\n if ('entry' in remote) {\n if (isBrowserEnv() && !remote.entry.startsWith('http')) {\n remote.entry = new URL(remote.entry, window.location.origin).href;\n }\n }\n if (!remote.shareScope) {\n remote.shareScope = DEFAULT_SCOPE;\n }\n if (!remote.type) {\n remote.type = DEFAULT_REMOTE_TYPE;\n }\n };\n this.hooks.lifecycle.beforeRegisterRemote.emit({ remote, origin: host });\n const registeredRemote = targetRemotes.find((item) => item.name === remote.name);\n if (!registeredRemote) {\n normalizeRemote();\n targetRemotes.push(remote);\n this.hooks.lifecycle.registerRemote.emit({ remote, origin: host });\n }\n else {\n const messages = [\n `The remote \"${remote.name}\" is already registered.`,\n 'Please note that overriding it may cause unexpected errors.',\n ];\n if (options?.force) {\n // remove registered remote\n this.removeRemote(registeredRemote);\n normalizeRemote();\n targetRemotes.push(remote);\n this.hooks.lifecycle.registerRemote.emit({ remote, origin: host });\n warn$1(messages.join(' '));\n }\n }\n }\n removeRemote(remote) {\n try {\n const { host } = this;\n const { name } = remote;\n const remoteIndex = host.options.remotes.findIndex((item) => item.name === name);\n if (remoteIndex !== -1) {\n host.options.remotes.splice(remoteIndex, 1);\n }\n const loadedModule = host.moduleCache.get(remote.name);\n if (loadedModule) {\n const remoteInfo = loadedModule.remoteInfo;\n const key = remoteInfo.entryGlobalName;\n if (CurrentGlobal[key]) {\n if (Object.getOwnPropertyDescriptor(CurrentGlobal, key)?.configurable) {\n delete CurrentGlobal[key];\n }\n else {\n // @ts-ignore\n CurrentGlobal[key] = undefined;\n }\n }\n const remoteEntryUniqueKey = getRemoteEntryUniqueKey(loadedModule.remoteInfo);\n if (globalLoading[remoteEntryUniqueKey]) {\n delete globalLoading[remoteEntryUniqueKey];\n }\n host.snapshotHandler.manifestCache.delete(remoteInfo.entry);\n // delete unloaded shared and instance\n let remoteInsId = remoteInfo.buildVersion\n ? composeKeyWithSeparator(remoteInfo.name, remoteInfo.buildVersion)\n : remoteInfo.name;\n const remoteInsIndex = CurrentGlobal.__FEDERATION__.__INSTANCES__.findIndex((ins) => {\n if (remoteInfo.buildVersion) {\n return ins.options.id === remoteInsId;\n }\n else {\n return ins.name === remoteInsId;\n }\n });\n if (remoteInsIndex !== -1) {\n const remoteIns = CurrentGlobal.__FEDERATION__.__INSTANCES__[remoteInsIndex];\n remoteInsId = remoteIns.options.id || remoteInsId;\n const globalShareScopeMap = getGlobalShareScope();\n let isAllSharedNotUsed = true;\n const needDeleteKeys = [];\n Object.keys(globalShareScopeMap).forEach((instId) => {\n const shareScopeMap = globalShareScopeMap[instId];\n shareScopeMap &&\n Object.keys(shareScopeMap).forEach((shareScope) => {\n const shareScopeVal = shareScopeMap[shareScope];\n shareScopeVal &&\n Object.keys(shareScopeVal).forEach((shareName) => {\n const sharedPkgs = shareScopeVal[shareName];\n sharedPkgs &&\n Object.keys(sharedPkgs).forEach((shareVersion) => {\n const shared = sharedPkgs[shareVersion];\n if (shared &&\n typeof shared === 'object' &&\n shared.from === remoteInfo.name) {\n if (shared.loaded || shared.loading) {\n shared.useIn = shared.useIn.filter((usedHostName) => usedHostName !== remoteInfo.name);\n if (shared.useIn.length) {\n isAllSharedNotUsed = false;\n }\n else {\n needDeleteKeys.push([\n instId,\n shareScope,\n shareName,\n shareVersion,\n ]);\n }\n }\n else {\n needDeleteKeys.push([\n instId,\n shareScope,\n shareName,\n shareVersion,\n ]);\n }\n }\n });\n });\n });\n });\n if (isAllSharedNotUsed) {\n remoteIns.shareScopeMap = {};\n delete globalShareScopeMap[remoteInsId];\n }\n needDeleteKeys.forEach(([insId, shareScope, shareName, shareVersion]) => {\n delete globalShareScopeMap[insId]?.[shareScope]?.[shareName]?.[shareVersion];\n });\n CurrentGlobal.__FEDERATION__.__INSTANCES__.splice(remoteInsIndex, 1);\n }\n const { hostGlobalSnapshot } = getGlobalRemoteInfo(remote, host);\n if (hostGlobalSnapshot) {\n const remoteKey = hostGlobalSnapshot &&\n 'remotesInfo' in hostGlobalSnapshot &&\n hostGlobalSnapshot.remotesInfo &&\n getInfoWithoutType(hostGlobalSnapshot.remotesInfo, remote.name).key;\n if (remoteKey) {\n delete hostGlobalSnapshot.remotesInfo[remoteKey];\n if (\n //eslint-disable-next-line no-extra-boolean-cast\n Boolean(Global.__FEDERATION__.__MANIFEST_LOADING__[remoteKey])) {\n delete Global.__FEDERATION__.__MANIFEST_LOADING__[remoteKey];\n }\n }\n }\n host.moduleCache.delete(remote.name);\n }\n }\n catch (err) {\n logger.log('removeRemote fail: ', err);\n }\n }\n}\n\nconst USE_SNAPSHOT = typeof FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN\n : true; // Default to true (use snapshot) when not explicitly defined\nclass ModuleFederation {\n constructor(userOptions) {\n this.hooks = new PluginSystem({\n beforeInit: new SyncWaterfallHook('beforeInit'),\n init: new SyncHook(),\n // maybe will change, temporarily for internal use only\n beforeInitContainer: new AsyncWaterfallHook('beforeInitContainer'),\n // maybe will change, temporarily for internal use only\n initContainer: new AsyncWaterfallHook('initContainer'),\n });\n this.version = \"2.0.1\";\n this.moduleCache = new Map();\n this.loaderHook = new PluginSystem({\n // FIXME: may not be suitable , not open to the public yet\n getModuleInfo: new SyncHook(),\n createScript: new SyncHook(),\n createLink: new SyncHook(),\n fetch: new AsyncHook(),\n loadEntryError: new AsyncHook(),\n getModuleFactory: new AsyncHook(),\n });\n this.bridgeHook = new PluginSystem({\n beforeBridgeRender: new SyncHook(),\n afterBridgeRender: new SyncHook(),\n beforeBridgeDestroy: new SyncHook(),\n afterBridgeDestroy: new SyncHook(),\n });\n const plugins = USE_SNAPSHOT\n ? [snapshotPlugin(), generatePreloadAssetsPlugin()]\n : [];\n // TODO: Validate the details of the options\n // Initialize options with default values\n const defaultOptions = {\n id: getBuilderId(),\n name: userOptions.name,\n plugins,\n remotes: [],\n shared: {},\n inBrowser: isBrowserEnv(),\n };\n this.name = userOptions.name;\n this.options = defaultOptions;\n this.snapshotHandler = new SnapshotHandler(this);\n this.sharedHandler = new SharedHandler(this);\n this.remoteHandler = new RemoteHandler(this);\n this.shareScopeMap = this.sharedHandler.shareScopeMap;\n this.registerPlugins([\n ...defaultOptions.plugins,\n ...(userOptions.plugins || []),\n ]);\n this.options = this.formatOptions(defaultOptions, userOptions);\n }\n initOptions(userOptions) {\n this.registerPlugins(userOptions.plugins);\n const options = this.formatOptions(this.options, userOptions);\n this.options = options;\n return options;\n }\n async loadShare(pkgName, extraOptions) {\n return this.sharedHandler.loadShare(pkgName, extraOptions);\n }\n // The lib function will only be available if the shared set by eager or runtime init is set or the shared is successfully loaded.\n // 1. If the loaded shared already exists globally, then it will be reused\n // 2. If lib exists in local shared, it will be used directly\n // 3. If the local get returns something other than Promise, then it will be used directly\n loadShareSync(pkgName, extraOptions) {\n return this.sharedHandler.loadShareSync(pkgName, extraOptions);\n }\n initializeSharing(shareScopeName = DEFAULT_SCOPE, extraOptions) {\n return this.sharedHandler.initializeSharing(shareScopeName, extraOptions);\n }\n initRawContainer(name, url, container) {\n const remoteInfo = getRemoteInfo({ name, entry: url });\n const module = new Module({ host: this, remoteInfo });\n module.remoteEntryExports = container;\n this.moduleCache.set(name, module);\n return module;\n }\n // eslint-disable-next-line max-lines-per-function\n // eslint-disable-next-line @typescript-eslint/member-ordering\n async loadRemote(id, options) {\n return this.remoteHandler.loadRemote(id, options);\n }\n // eslint-disable-next-line @typescript-eslint/member-ordering\n async preloadRemote(preloadOptions) {\n return this.remoteHandler.preloadRemote(preloadOptions);\n }\n initShareScopeMap(scopeName, shareScope, extraOptions = {}) {\n this.sharedHandler.initShareScopeMap(scopeName, shareScope, extraOptions);\n }\n formatOptions(globalOptions, userOptions) {\n const { allShareInfos: shared} = formatShareConfigs(globalOptions, userOptions);\n const { userOptions: userOptionsRes, options: globalOptionsRes } = this.hooks.lifecycle.beforeInit.emit({\n origin: this,\n userOptions,\n options: globalOptions,\n shareInfo: shared,\n });\n const remotes = this.remoteHandler.formatAndRegisterRemote(globalOptionsRes, userOptionsRes);\n const { allShareInfos } = this.sharedHandler.registerShared(globalOptionsRes, userOptionsRes);\n const plugins = [...globalOptionsRes.plugins];\n if (userOptionsRes.plugins) {\n userOptionsRes.plugins.forEach((plugin) => {\n if (!plugins.includes(plugin)) {\n plugins.push(plugin);\n }\n });\n }\n const optionsRes = {\n ...globalOptions,\n ...userOptions,\n plugins,\n remotes,\n shared: allShareInfos,\n };\n this.hooks.lifecycle.init.emit({\n origin: this,\n options: optionsRes,\n });\n return optionsRes;\n }\n registerPlugins(plugins) {\n const pluginRes = registerPlugins(plugins, this);\n // Merge plugin\n this.options.plugins = this.options.plugins.reduce((res, plugin) => {\n if (!plugin)\n return res;\n if (res && !res.find((item) => item.name === plugin.name)) {\n res.push(plugin);\n }\n return res;\n }, pluginRes || []);\n }\n registerRemotes(remotes, options) {\n return this.remoteHandler.registerRemotes(remotes, options);\n }\n registerShared(shared) {\n this.sharedHandler.registerShared(this.options, {\n ...this.options,\n shared,\n });\n }\n}\n\nvar index = /*#__PURE__*/Object.freeze({\n __proto__: null\n});\n\nexport { CurrentGlobal, Global, Module, ModuleFederation, addGlobalSnapshot, assert, getGlobalFederationConstructor, getGlobalSnapshot, getInfoWithoutType, getRegisteredShare, getRemoteEntry, getRemoteInfo, helpers, isStaticResourcesEqual, matchRemoteWithNameAndExpose, registerGlobalPlugins, resetFederationGlobalInfo, safeWrapper, satisfy, setGlobalFederationConstructor, setGlobalFederationInstance, index as types };\n//# sourceMappingURL=index.esm.js.map\n","import { setGlobalFederationConstructor, ModuleFederation, getGlobalFederationConstructor, setGlobalFederationInstance, assert } from '@module-federation/runtime-core';\nexport { Module, ModuleFederation, getRemoteEntry, getRemoteInfo, loadScript, loadScriptNode, registerGlobalPlugins } from '@module-federation/runtime-core';\nimport { getShortErrorMsg, RUNTIME_009, runtimeDescMap } from '@module-federation/error-codes';\nimport { g as getGlobalFederationInstance } from './utils.esm.js';\n\nfunction createInstance(options) {\n // Retrieve debug constructor\n const ModuleFederationConstructor = getGlobalFederationConstructor() || ModuleFederation;\n const instance = new ModuleFederationConstructor(options);\n setGlobalFederationInstance(instance);\n return instance;\n}\nlet FederationInstance = null;\n/**\n * @deprecated Use createInstance or getInstance instead\n */\nfunction init(options) {\n // Retrieve the same instance with the same name\n const instance = getGlobalFederationInstance(options.name, options.version);\n if (!instance) {\n FederationInstance = createInstance(options);\n return FederationInstance;\n }\n else {\n // Merge options\n instance.initOptions(options);\n if (!FederationInstance) {\n FederationInstance = instance;\n }\n return instance;\n }\n}\nfunction loadRemote(...args) {\n assert(FederationInstance, getShortErrorMsg(RUNTIME_009, runtimeDescMap));\n const loadRemote = FederationInstance.loadRemote;\n // eslint-disable-next-line prefer-spread\n return loadRemote.apply(FederationInstance, args);\n}\nfunction loadShare(...args) {\n assert(FederationInstance, getShortErrorMsg(RUNTIME_009, runtimeDescMap));\n // eslint-disable-next-line prefer-spread\n const loadShare = FederationInstance.loadShare;\n return loadShare.apply(FederationInstance, args);\n}\nfunction loadShareSync(...args) {\n assert(FederationInstance, getShortErrorMsg(RUNTIME_009, runtimeDescMap));\n const loadShareSync = FederationInstance.loadShareSync;\n // eslint-disable-next-line prefer-spread\n return loadShareSync.apply(FederationInstance, args);\n}\nfunction preloadRemote(...args) {\n assert(FederationInstance, getShortErrorMsg(RUNTIME_009, runtimeDescMap));\n // eslint-disable-next-line prefer-spread\n return FederationInstance.preloadRemote.apply(FederationInstance, args);\n}\nfunction registerRemotes(...args) {\n assert(FederationInstance, getShortErrorMsg(RUNTIME_009, runtimeDescMap));\n // eslint-disable-next-line prefer-spread\n return FederationInstance.registerRemotes.apply(FederationInstance, args);\n}\nfunction registerPlugins(...args) {\n assert(FederationInstance, getShortErrorMsg(RUNTIME_009, runtimeDescMap));\n // eslint-disable-next-line prefer-spread\n return FederationInstance.registerPlugins.apply(FederationInstance, args);\n}\nfunction getInstance() {\n return FederationInstance;\n}\nfunction registerShared(...args) {\n assert(FederationInstance, getShortErrorMsg(RUNTIME_009, runtimeDescMap));\n // eslint-disable-next-line prefer-spread\n return FederationInstance.registerShared.apply(FederationInstance, args);\n}\n// Inject for debug\nsetGlobalFederationConstructor(ModuleFederation);\n\nexport { createInstance, getInstance, init, loadRemote, loadShare, loadShareSync, preloadRemote, registerPlugins, registerRemotes, registerShared };\n//# sourceMappingURL=index.esm.js.map\n","import { createInstance } from \"@module-federation/runtime\";\r\nimport {\r\n Action,\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n ReceiverHandler,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport { DependencyList, useEffect, useRef, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\n/**\r\n * Register an app action to listen to IMC messages from the core,\r\n * and pass to the action to handle.\r\n * This will attach side effects to the action\r\n *\r\n * @param name Name of the command.\r\n * @param description Description of the command.\r\n * @param parameters Parameters of the command.\r\n * @param returns Return values of the command.\r\n * @param callbackHandler Callback handler function to handle the command.\r\n * @param deps Dependency list to re-register the action when changed.\r\n * @param isExtReady Whether the extension is ready to receive commands.\r\n * Useful for actions that need to wait for some certain app state to be ready.\r\n *\r\n */\r\nexport default function useActionEffect(\r\n params: {\r\n actionName: string;\r\n // callbackHandler: (args: any) => Promise<any>, -- this is moved to src/actions\r\n beforeAction?: (args: any) => Promise<void>;\r\n afterAction?: (args: any, result: any) => Promise<void>;\r\n },\r\n deps: DependencyList,\r\n isExtReady: boolean = true,\r\n) {\r\n const { isReady, imc } = useIMC(getReceiverHandlerMap(), \"register-action\");\r\n\r\n // Queue to hold commands until extension is ready\r\n const commandQueue = useRef<{ args: any; resolve: (v: any) => void }[]>([]);\r\n const isCommandExecuting = useRef(false);\r\n\r\n const [beforeAction, setBeforeAction] = useState<\r\n ((args: any) => Promise<void>) | undefined\r\n >(params.beforeAction);\r\n\r\n const [afterAction, setAfterAction] = useState<\r\n ((args: any, result: any) => Promise<void>) | undefined\r\n >(params.afterAction);\r\n\r\n const [handler, setHandler] = useState<\r\n ((args: any) => Promise<any>) | undefined\r\n >(undefined);\r\n\r\n // Flush queued commands when isExtReady becomes true\r\n useEffect(() => {\r\n async function runQueuedCommands() {\r\n const pendingCMDs = [...commandQueue.current];\r\n commandQueue.current = [];\r\n for (const cmd of pendingCMDs) {\r\n const { args, resolve } = cmd;\r\n if (isCommandExecuting.current) {\r\n return;\r\n }\r\n isCommandExecuting.current = true;\r\n const res = await executeAction(args);\r\n isCommandExecuting.current = false;\r\n resolve(res);\r\n }\r\n }\r\n\r\n if (isExtReady && commandQueue.current.length > 0) {\r\n runQueuedCommands();\r\n }\r\n }, [isExtReady]);\r\n\r\n useEffect(() => {\r\n async function getActionInfo(actionName: string): Promise<{\r\n appId: string;\r\n version: string;\r\n actionInfo: Action;\r\n }> {\r\n // Read actions from pulse.config.json\r\n const pulseConfig = await fetch(\"/pulse.config.json\");\r\n const config = await pulseConfig.json();\r\n const actionInfo = config.actions?.find(\r\n (action: Action) => action.name === actionName,\r\n );\r\n\r\n if (!actionInfo) {\r\n throw new Error(`Action ${actionName} not found in pulse.config.json`);\r\n }\r\n\r\n return {\r\n appId: config.id,\r\n version: config.version,\r\n actionInfo,\r\n };\r\n }\r\n\r\n async function updateAction() {\r\n // Register or update action.\r\n // This will only pass signature info to the editor.\r\n // The actual handler is stored in this hook,\r\n // so the execution happens inside the extension app.\r\n const { appId, version, actionInfo } = await getActionInfo(\r\n params.actionName,\r\n );\r\n\r\n // Setup handler\r\n const func = await loadAppAction(actionInfo.name, appId, \"/\", version);\r\n\r\n setHandler(() => func);\r\n\r\n await imc?.sendMessage(IMCMessageTypeEnum.EditorRegisterAction, {\r\n name: actionInfo.name,\r\n description: actionInfo.description,\r\n parameters: actionInfo.parameters,\r\n returns: actionInfo.returns,\r\n });\r\n\r\n // Update receiver\r\n imc?.updateReceiverHandlerMap(getReceiverHandlerMap());\r\n }\r\n\r\n if (isExtReady) {\r\n updateAction();\r\n }\r\n }, [params.actionName, imc, isExtReady]);\r\n\r\n useEffect(() => {\r\n setBeforeAction(() => params.beforeAction ?? (async () => {}));\r\n setAfterAction(() => params.afterAction ?? (async () => {}));\r\n }, [...deps]);\r\n\r\n async function executeAction(args: any) {\r\n if (!handler) {\r\n throw new Error(\"Action handler is not set\");\r\n }\r\n\r\n if (beforeAction) {\r\n await beforeAction(args);\r\n }\r\n\r\n const res = await handler(args);\r\n\r\n if (afterAction) {\r\n await afterAction(args, res);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n function getReceiverHandlerMap() {\r\n const receiverHandlerMap = new Map<IMCMessageTypeEnum, ReceiverHandler>([\r\n [\r\n IMCMessageTypeEnum.EditorRunAppAction,\r\n async (_senderWindow: Window, message: IMCMessage) => {\r\n const { name: requestedName, args }: { name: string; args: any } =\r\n message.payload;\r\n\r\n if (params.actionName !== requestedName) {\r\n throw new Error(\"Message ignored by receiver\");\r\n }\r\n /* This should go to where the action is actually handled \r\n // Validate parameters\r\n const actionParams = actionInfo.parameters ?? {};\r\n\r\n const requiredParamCount = Object.entries(actionParams).filter(\r\n ([, paramInfo]) => !(paramInfo as TypedVariable).optional,\r\n ).length;\r\n\r\n if (Object.keys(args).length < requiredParamCount) {\r\n throw new Error(\r\n `Invalid number of parameters: expected at least${\r\n Object.keys(actionParams).length\r\n }, got ${Object.keys(args).length}`,\r\n );\r\n }\r\n\r\n // Check types\r\n for (const [key, value] of Object.entries(args)) {\r\n if (actionParams[key] === undefined) {\r\n throw new Error(`Invalid parameter: ${key}`);\r\n }\r\n if (\r\n typeof value !== actionParams[key].type &&\r\n // Allow object for \"app-instance\"\r\n (actionParams[key].type !== \"app-instance\" ||\r\n typeof value !== \"object\")\r\n ) {\r\n throw new Error(\r\n `Invalid type for parameter ${key}: expected ${\r\n actionParams[key].type\r\n }, got ${typeof value}. Value received: ${value}`,\r\n );\r\n }\r\n } */\r\n\r\n // If extension is ready, execute immediately\r\n if (isExtReady) {\r\n const result = await executeAction(args);\r\n return result;\r\n }\r\n\r\n // Otherwise, queue the command and return when executed\r\n return new Promise((resolve) => {\r\n commandQueue.current.push({ args, resolve });\r\n });\r\n },\r\n ],\r\n ]);\r\n return receiverHandlerMap;\r\n }\r\n\r\n async function loadAppAction(\r\n func: string,\r\n appId: string,\r\n remoteOrigin: string,\r\n version: string,\r\n ) {\r\n // here we assign the return value of the init() function, which can be used to do some more complex\r\n // things with the module federation runtime\r\n const instance = createInstance({\r\n name: appId + \"_client\",\r\n remotes: [\r\n {\r\n name: appId + \"_client\",\r\n entry: `${remoteOrigin}/${appId}/${version}/client/remoteEntry.js`,\r\n },\r\n ],\r\n });\r\n\r\n console.log(\r\n \"Loaded remote from\",\r\n `${remoteOrigin}/${appId}/${version}/client/remoteEntry.js`,\r\n );\r\n\r\n const loadedFunc =\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (await instance.loadRemote<any>(`${appId}_client/skill/${func}`)).default;\r\n\r\n return loadedFunc;\r\n }\r\n\r\n return {\r\n isReady,\r\n runAppAction: handler,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useTheme() {\r\n const [theme, setTheme] = useState<string>(\"light\");\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n receiverHandlerMap.set(\r\n IMCMessageTypeEnum.EditorThemeUpdate,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const theme = message.payload;\r\n setTheme((prev) => theme);\r\n }\r\n );\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"theme\");\r\n\r\n // Upon initial load, request theme from main app\r\n useEffect(() => {\r\n if (isReady) {\r\n imc\r\n ?.sendMessage(IMCMessageTypeEnum.EditorAppRequestTheme)\r\n .then((result) => {\r\n setTheme((prev) => result);\r\n });\r\n }\r\n }, [isReady]);\r\n\r\n return {\r\n theme,\r\n };\r\n}\r\n","import{useRef as r,useMemo as n,useEffect as t,useState as e,useCallback as u}from\"react\";function c(e,u,c,i){var l=this,a=r(null),o=r(0),f=r(0),v=r(null),d=r([]),m=r(),s=r(),g=r(e),h=r(!0),x=r(),E=r();g.current=e;var b=\"undefined\"!=typeof window,p=!u&&0!==u&&b;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");u=+u||0;var y=!!(c=c||{}).leading,w=!(\"trailing\"in c)||!!c.trailing,O=!!c.flushOnExit&&w,F=\"maxWait\"in c,L=\"debounceOnServer\"in c&&!!c.debounceOnServer,A=F?Math.max(+c.maxWait||0,u):null,D=n(function(){var r=function(r){var n=d.current,t=m.current;return d.current=m.current=null,o.current=r,f.current=f.current||r,s.current=g.current.apply(t,n)},n=function(r,n){p&&cancelAnimationFrame(v.current),v.current=p?requestAnimationFrame(r):setTimeout(r,n)},t=function(r){if(!h.current)return!1;var n=r-a.current;return!a.current||n>=u||n<0||F&&r-o.current>=A},e=function(n){return v.current=null,w&&d.current?r(n):(d.current=m.current=null,s.current)},c=function r(){var c=Date.now();if(y&&f.current===o.current&&D(),t(c))return e(c);if(h.current){var i=u-(c-a.current),l=F?Math.min(i,A-(c-o.current)):i;n(r,l)}},D=function(){i&&i({})},S=function(){if(b||L){var e,i=Date.now(),f=t(i);if(d.current=[].slice.call(arguments),m.current=l,a.current=i,O&&!x.current&&(x.current=function(){var r;\"hidden\"===(null==(r=global.document)?void 0:r.visibilityState)&&E.current.flush()},null==(e=global.document)||null==e.addEventListener||e.addEventListener(\"visibilitychange\",x.current)),f){if(!v.current&&h.current)return o.current=a.current,n(c,u),y?r(a.current):s.current;if(F)return n(c,u),r(a.current)}return v.current||n(c,u),s.current}};return S.cancel=function(){var r=v.current;r&&(p?cancelAnimationFrame(v.current):clearTimeout(v.current)),o.current=0,d.current=a.current=m.current=v.current=null,r&&i&&i({})},S.isPending=function(){return!!v.current},S.flush=function(){return v.current?e(Date.now()):s.current},S},[y,F,u,A,w,O,p,b,L,i]);return E.current=D,t(function(){return h.current=!0,function(){var r;O&&E.current.flush(),x.current&&(null==(r=global.document)||null==r.removeEventListener||r.removeEventListener(\"visibilitychange\",x.current),x.current=null),h.current=!1}},[O]),D}function i(r,n){return r===n}function l(n,t,l){var a=l&&l.equalityFn||i,o=r(n),f=e({})[1],v=c(u(function(r){o.current=r,f({})},[f]),t,l,f),d=r(n);return a(d.current,n)||(v(n),d.current=n),[o.current,v]}function a(r,n,t){var e=void 0===t?{}:t,u=e.leading,i=e.trailing,l=e.flushOnExit;return c(r,n,{maxWait:n,leading:void 0===u||u,trailing:void 0===i||i,flushOnExit:void 0!==l&&l})}export{l as useDebounce,c as useDebouncedCallback,a as useThrottledCallback};\n//# sourceMappingURL=index.module.js.map\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport { useDebouncedCallback } from \"use-debounce\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\n/**\r\n *\r\n * @param uri The file URI to read/write\r\n * @param debounce Debounce time in ms for write operations\r\n * @returns\r\n */\r\nexport default function useFile(uri: string | undefined, debounce = 0) {\r\n const [file, setFile] = useState<File | undefined>(undefined);\r\n\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >([\r\n [\r\n IMCMessageTypeEnum.PlatformFileUpdate,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const updatedFile = message.payload as File;\r\n setFile(updatedFile);\r\n },\r\n ],\r\n ]);\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"file\");\r\n\r\n const sendFileDebounced = useDebouncedCallback(\r\n async (newFile: File) => {\r\n if (!isReady || !uri) return;\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformWriteFile, {\r\n uri,\r\n file: newFile,\r\n });\r\n },\r\n debounce,\r\n { maxWait: debounce * 2 },\r\n );\r\n\r\n const saveFile = useCallback(\r\n async (fileContent: string) => {\r\n if (!uri || !file) return;\r\n\r\n const newFile = new File([fileContent], file.name, {\r\n type: file.type,\r\n lastModified: Date.now(),\r\n });\r\n setFile(newFile);\r\n\r\n // ✅ This now waits until the debounced write actually finishes\r\n await sendFileDebounced(newFile);\r\n },\r\n [file, uri, sendFileDebounced],\r\n );\r\n\r\n // Read file when uri changes\r\n useEffect(() => {\r\n if (isReady && uri) {\r\n imc\r\n ?.sendMessage(IMCMessageTypeEnum.PlatformReadFile, {\r\n uri,\r\n })\r\n .then((f: File | undefined) => {\r\n setFile(f);\r\n });\r\n }\r\n }, [isReady, uri]);\r\n\r\n return {\r\n file,\r\n saveFile,\r\n };\r\n}\r\n","import {\r\n ImageModelConfig,\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useImageGen() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"image-gen\");\r\n\r\n /**\r\n *\r\n * @param textPrompt The text prompt to generate the image.\r\n * @param imagePrompt A URL to an image or an image in an ArrayBuffer.\r\n * @param imageModelConfig (optional) The image model config to use.\r\n * @returns The generated image in an ArrayBuffer.\r\n */\r\n async function runImageGen(\r\n textPrompt?: string,\r\n imagePrompt?: string | ArrayBuffer,\r\n // LLM config is optional, if not provided, the default config will be used.\r\n imageModelConfig?: ImageModelConfig\r\n ): Promise<{\r\n arrayBuffer?: ArrayBuffer;\r\n url?: string;\r\n }> {\r\n if (!imc) {\r\n throw new Error(\"IMC not initialized.\");\r\n }\r\n\r\n if (!textPrompt && !imagePrompt) {\r\n throw new Error(\"At least one of textPrompt or imagePrompt is required.\");\r\n }\r\n\r\n const result = await imc\r\n .sendMessage(IMCMessageTypeEnum.ModalityImageGen, {\r\n textPrompt,\r\n imagePrompt,\r\n imageModelConfig,\r\n })\r\n .then((response) => {\r\n return response as {\r\n arrayBuffer?: ArrayBuffer;\r\n url?: string;\r\n };\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return {\r\n runImageGen,\r\n isReady,\r\n };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n LLMModelConfig,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useLLM() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"llm\");\r\n\r\n async function runLLM(\r\n prompt: string,\r\n // LLM config is optional, if not provided, the default config will be used.\r\n llmConfig?: LLMModelConfig\r\n ): Promise<string> {\r\n if (!imc) {\r\n throw new Error(\"IMC not initialized.\");\r\n }\r\n\r\n const result = await imc\r\n .sendMessage(IMCMessageTypeEnum.ModalityLLM, {\r\n prompt,\r\n llmConfig,\r\n })\r\n .then((response) => {\r\n return response as string;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return {\r\n runLLM,\r\n isReady,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\n\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useOCR() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc } = useIMC(receiverHandlerMap, \"ocr\");\r\n\r\n /**\r\n * \r\n * @param image The image to be recognized. This is a base64 encoded string.\r\n * @returns \r\n */\r\n async function recognizeText(image: string): Promise<string> {\r\n if (!imc) {\r\n throw new Error(\"IMC is not initialized.\");\r\n }\r\n\r\n // Send the message to the extension\r\n const result = await imc.sendMessage(IMCMessageTypeEnum.ModalityOCR, { image });\r\n\r\n return result.payload.text;\r\n }\r\n\r\n return {\r\n recognizeText,\r\n };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n STTModelConfig,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useSTT() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"stt\");\r\n\r\n async function runSTT(\r\n audio: Uint8Array,\r\n // Config is optional, if not provided, the default config will be used.\r\n sttConfig?: STTModelConfig,\r\n ): Promise<string> {\r\n if (!imc) {\r\n throw new Error(\"IMC not initialized.\");\r\n }\r\n\r\n const result = await imc\r\n .sendMessage(IMCMessageTypeEnum.ModalitySTT, {\r\n audio,\r\n sttConfig,\r\n })\r\n .then((response) => {\r\n return response as string;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return {\r\n runSTT,\r\n isReady,\r\n };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n TTSModelConfig,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useTTS() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"tts\");\r\n\r\n async function runTTS(\r\n text: string,\r\n // Config is optional, if not provided, the default config will be used.\r\n ttsConfig?: TTSModelConfig,\r\n ): Promise<Uint8Array> {\r\n if (!imc) {\r\n throw new Error(\"IMC not initialized.\");\r\n }\r\n\r\n const result = await imc\r\n .sendMessage(IMCMessageTypeEnum.ModalityTTS, {\r\n text,\r\n ttsConfig,\r\n })\r\n .then((response) => {\r\n return response as Uint8Array;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return {\r\n runTTS,\r\n isReady,\r\n };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n VideoModelConfig,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useVideoGen() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"video-gen\");\r\n\r\n /**\r\n *\r\n * @param textPrompt The text prompt to generate the video.\r\n * @param imagePrompt A URL to an image or an image in an ArrayBuffer.\r\n * @param videoModelConfig (optional) The video model config to use.\r\n * @returns The generated video in an ArrayBuffer.\r\n */\r\n async function runVideoGen(\r\n duration: number,\r\n textPrompt?: string,\r\n imagePrompt?: string | ArrayBuffer,\r\n // LLM config is optional, if not provided, the default config will be used.\r\n videoModelConfig?: VideoModelConfig\r\n ): Promise<{\r\n url?: string;\r\n arrayBuffer?: ArrayBuffer;\r\n }> {\r\n if (!imc) {\r\n throw new Error(\"IMC not initialized.\");\r\n }\r\n\r\n if (!textPrompt && !imagePrompt) {\r\n throw new Error(\"At least one of textPrompt or imagePrompt is required.\");\r\n }\r\n\r\n const result = await imc\r\n .sendMessage(IMCMessageTypeEnum.ModalityVideoGen, {\r\n duration,\r\n textPrompt,\r\n imagePrompt,\r\n videoModelConfig,\r\n })\r\n .then((response) => {\r\n return response as {\r\n url?: string;\r\n arrayBuffer?: ArrayBuffer;\r\n };\r\n });\r\n\r\n return result;\r\n }\r\n\r\n return {\r\n runVideoGen,\r\n isReady,\r\n };\r\n}\r\n","import {\r\n Artifact,\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport function useArtifact() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"artifact\");\r\n\r\n function sendArtifact(artifact: Artifact) {\r\n if (isReady) {\r\n imc?.sendMessage(IMCMessageTypeEnum.EditorArtifactUpdate, artifact);\r\n }\r\n }\r\n\r\n return {\r\n isReady,\r\n sendArtifact,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\n/**\r\n * Hook to access editor environment variables in the frontend (saved in storage).\r\n * @returns\r\n */\r\nexport default function useEditorEnv() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"env\");\r\n const [envs, setEnvs] = useState<Record<string, string>>(\r\n // default to process env\r\n process.env as Record<string, string>,\r\n );\r\n\r\n useEffect(() => {\r\n if (isReady) {\r\n imc?.sendMessage(IMCMessageTypeEnum.EditorGetEnv).then((env) => {\r\n // Create or update envs state\r\n setEnvs((prev) => ({\r\n ...prev,\r\n ...env,\r\n }));\r\n });\r\n }\r\n }, [isReady]);\r\n\r\n return {\r\n isReady,\r\n envs,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useOpenApp() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<any>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"open-app\");\r\n\r\n async function openApp(appId: string, location: \"canvas\", version?: string) {\r\n if (!isReady) {\r\n throw new Error(\"IMC is not ready\");\r\n }\r\n await imc?.sendMessage(IMCMessageTypeEnum.EditorOpenApp, {\r\n appId,\r\n version,\r\n location,\r\n });\r\n }\r\n\r\n return {\r\n isReady,\r\n openApp,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useOpenLink() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<any>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"open-link\");\r\n\r\n async function openLink(url: URL) {\r\n if (!isReady) {\r\n throw new Error(\"IMC is not ready\");\r\n }\r\n await imc?.sendMessage(IMCMessageTypeEnum.EditorOpenLink, {\r\n url: url.toString(),\r\n });\r\n }\r\n\r\n return {\r\n isReady,\r\n openLink,\r\n };\r\n}\r\n","import {\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n ViewModel,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport { useCallback } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useOwnedAppView() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >([]);\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"owned-app\");\r\n\r\n const runAppAction = useCallback(\r\n async (ownedAppViewModel: ViewModel, actionName: string, args: any) => {\r\n if (isReady) {\r\n const appViewId = ownedAppViewModel.viewId;\r\n const preRegisteredActions =\r\n ownedAppViewModel.appConfig.preRegisteredActions || [];\r\n\r\n const action = preRegisteredActions.find((a) => a.name === actionName);\r\n if (!action) {\r\n throw new Error(\r\n `Action ${actionName} not found in owned app ${ownedAppViewModel.appConfig.id}`,\r\n );\r\n }\r\n\r\n const result = await imc?.sendMessage(\r\n IMCMessageTypeEnum.EditorAppUseOwnedApp,\r\n {\r\n viewId: appViewId,\r\n actionName,\r\n args,\r\n },\r\n );\r\n return result;\r\n }\r\n return undefined;\r\n },\r\n [imc, isReady],\r\n );\r\n\r\n return {\r\n isReady,\r\n runAppAction,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport React, {\r\n createContext,\r\n Dispatch,\r\n ReactNode,\r\n SetStateAction,\r\n useEffect,\r\n useState,\r\n} from \"react\";\r\nimport useIMC from \"../hooks/imc/use-imc\";\r\n\r\nexport const SnapshotContext = createContext<SnapshotContextType | undefined>(\r\n undefined\r\n);\r\n\r\nexport type SnapshotContextType = {\r\n states: { [key: string]: any };\r\n setStates: Dispatch<SetStateAction<{ [key: string]: any }>>;\r\n};\r\n\r\nexport default function SnapshotProvider({\r\n children,\r\n}: {\r\n children: ReactNode;\r\n}) {\r\n const [states, setStates] = useState<{ [key: string]: any }>({});\r\n \r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<any>\r\n >([\r\n [\r\n IMCMessageTypeEnum.EditorAppStateSnapshotRestore,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const { states } = message.payload;\r\n\r\n // Update all states in the context\r\n console.log(\"Restoring snapshot states:\", states);\r\n setStates((prev) => ({ ...states }));\r\n },\r\n ],\r\n [\r\n IMCMessageTypeEnum.EditorAppStateSnapshotSave,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n // Return current states in the context\r\n return { states };\r\n },\r\n ],\r\n ]);\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"snapshot-provider\");\r\n\r\n useEffect(() => {\r\n if (isReady) {\r\n imc?.updateReceiverHandlerMap(receiverHandlerMap);\r\n }\r\n }, [isReady, states]);\r\n\r\n return (\r\n <SnapshotContext.Provider value={{ states, setStates }}>\r\n {children}\r\n </SnapshotContext.Provider>\r\n );\r\n}\r\n","import { useContext, useEffect, useRef, useState } from \"react\";\r\nimport { SnapshotContext } from \"../../providers/snapshot-provider\";\r\n\r\nexport default function useSnapShotState<T>(\r\n key: string,\r\n initialValue?: T,\r\n onRestore?: (value: T) => void\r\n) {\r\n const snapshotContext = useContext(SnapshotContext);\r\n if (!snapshotContext) {\r\n throw new Error(\"useSnapShotState must be used within a SnapshotProvider\");\r\n }\r\n\r\n const { states, setStates } = snapshotContext;\r\n const [state, setState] = useState<T>(\r\n states[key] !== undefined ? states[key] : initialValue\r\n );\r\n\r\n const isLocalUpdate = useRef(false);\r\n\r\n const setSnapshotState: React.Dispatch<React.SetStateAction<T>> = (value) => {\r\n setState((prev) => {\r\n const newValue =\r\n typeof value === \"function\" ? (value as (prev: T) => T)(prev) : value;\r\n\r\n isLocalUpdate.current = true; // mark as local\r\n Promise.resolve().then(() => {\r\n setStates((prevStates) => ({\r\n ...prevStates,\r\n [key]: newValue,\r\n }));\r\n });\r\n\r\n return newValue;\r\n });\r\n };\r\n\r\n // Initialize context with initial value\r\n useEffect(() => {\r\n if (states[key] === undefined && initialValue !== undefined) {\r\n setStates((prev) => ({\r\n ...prev,\r\n [key]: initialValue,\r\n }));\r\n }\r\n }, []);\r\n\r\n // Only restore when external changes occur\r\n useEffect(() => {\r\n const contextValue = states[key];\r\n if (contextValue === undefined) return;\r\n\r\n if (isLocalUpdate.current) {\r\n // skip this run because we caused it ourselves\r\n isLocalUpdate.current = false;\r\n return;\r\n }\r\n\r\n if (contextValue !== state) {\r\n console.log(\"Restoring state for key:\", key, contextValue);\r\n setState(contextValue);\r\n onRestore?.(contextValue);\r\n }\r\n }, [states[key]]);\r\n\r\n return [state, setSnapshotState] as const;\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\n/**\r\n * Use internationalization for app. The locale is synced with Editor.\r\n *\r\n * @param messages The messages object containing translations for different locales,\r\n * where each key is a locale code (e.g., 'en', 'es') and the value is an ICU message object.\r\n *\r\n * @return An object containing:\r\n * - locale: The current locale string.\r\n * - getTranslations: A function that takes an ICU message key and optional variables to return the translated string\r\n * for the current locale provided in the messages parameter.\r\n */\r\nexport function useTranslations(messages: { [key: string]: any }) {\r\n const [locale, setLocale] = useState(\"en\");\r\n\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n receiverHandlerMap.set(\r\n IMCMessageTypeEnum.EditorLocaleUpdate,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const locale = message.payload;\r\n setLocale((prev) => locale);\r\n },\r\n );\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"locale\");\r\n\r\n // Upon initial load, request locale from main app\r\n useEffect(() => {\r\n if (isReady) {\r\n imc\r\n ?.sendMessage(IMCMessageTypeEnum.EditorAppRequestLocale)\r\n .then((result) => {\r\n setLocale((prev) => result);\r\n });\r\n }\r\n }, [isReady]);\r\n\r\n function getTranslations(key: string, variables?: { [key: string]: any }) {\r\n const localeMessages = messages[locale] ?? messages[\"en\"];\r\n\r\n // Localize nested keys using dot notation\r\n const keys = key.split(\".\");\r\n let translation = localeMessages;\r\n for (const k of keys) {\r\n translation = translation[k];\r\n }\r\n if (typeof translation !== \"string\") {\r\n translation = key;\r\n }\r\n\r\n if (variables) {\r\n Object.keys(variables).forEach((varKey) => {\r\n const varValue = variables[varKey];\r\n const regex = new RegExp(`{${varKey}}`, \"g\");\r\n translation = translation.replace(regex, varValue);\r\n });\r\n }\r\n return translation;\r\n }\r\n\r\n return { locale, getTranslations };\r\n}\r\n","import {\r\n FileSystemObject,\r\n IMCMessage,\r\n IMCMessageTypeEnum,\r\n ListPathOptions,\r\n} from \"@pulse-editor/shared-utils\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\n/**\r\n * Hook for managing file system operations in the editor.\r\n */\r\n\r\nexport default function useFileSystem() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >([]);\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"file-system\");\r\n\r\n async function listPath(uri: string, options?: ListPathOptions) {\r\n const result: FileSystemObject[] =\r\n (await imc?.sendMessage(IMCMessageTypeEnum.PlatformListPath, {\r\n uri,\r\n options,\r\n })) ?? [];\r\n return result;\r\n }\r\n\r\n async function createFolder(uri: string) {\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformCreateFolder, { uri });\r\n }\r\n\r\n async function createFile(uri: string) {\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformCreateFile, { uri });\r\n }\r\n\r\n async function rename(oldUri: string, newUri: string) {\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformRename, {\r\n oldUri,\r\n newUri,\r\n });\r\n }\r\n\r\n async function deletePath(uri: string) {\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformDelete, { uri });\r\n }\r\n\r\n async function hasPath(uri: string) {\r\n const exists: boolean =\r\n (await imc?.sendMessage(IMCMessageTypeEnum.PlatformHasPath, { uri })) ??\r\n false;\r\n return !!exists;\r\n }\r\n\r\n async function copyFiles(from: string, to: string) {\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformCopyFiles, { from, to });\r\n }\r\n\r\n async function readFile(uri: string) {\r\n const file: File | undefined = await imc?.sendMessage(\r\n IMCMessageTypeEnum.PlatformReadFile,\r\n { uri },\r\n );\r\n return file;\r\n }\r\n\r\n async function writeFile(uri: string, content: string) {\r\n const newFile: File | undefined = new File([content], uri);\r\n\r\n await imc?.sendMessage(IMCMessageTypeEnum.PlatformWriteFile, {\r\n uri,\r\n file: newFile,\r\n });\r\n }\r\n\r\n return {\r\n isReady,\r\n listPath,\r\n createFolder,\r\n createFile,\r\n rename,\r\n deletePath,\r\n hasPath,\r\n copyFiles,\r\n readFile,\r\n writeFile,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport React, { createContext, ReactNode, useState } from \"react\";\r\nimport useIMC from \"../hooks/imc/use-imc\";\r\n\r\nexport const ReceiveFileContext = createContext<\r\n ReceiveFileContextType | undefined\r\n>(undefined);\r\n\r\nexport type ReceiveFileContextType = {\r\n // Define any state or functions you want to provide here\r\n selectedFileUri: string | undefined;\r\n};\r\n\r\nexport default function ReceiveFileProvider({\r\n children,\r\n}: {\r\n children: ReactNode;\r\n}) {\r\n const [receivedFileUri, setReceivedFileUri] = useState<string | undefined>(\r\n undefined\r\n );\r\n\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<any>\r\n >([\r\n [\r\n IMCMessageTypeEnum.EditorAppReceiveFileUri,\r\n async (senderWindow: Window, message: IMCMessage) => {\r\n const { uri } = message.payload;\r\n setReceivedFileUri((prev) => uri);\r\n },\r\n ],\r\n ]);\r\n useIMC(receiverHandlerMap, \"receive-file-provider\");\r\n\r\n return (\r\n <ReceiveFileContext.Provider value={{ selectedFileUri: receivedFileUri }}>\r\n {children}\r\n </ReceiveFileContext.Provider>\r\n );\r\n}\r\n","import { useContext } from \"react\";\r\nimport { ReceiveFileContext } from \"../../providers/receive-file-provider\";\r\n\r\nexport default function useReceiveFile() {\r\n const context = useContext(ReceiveFileContext);\r\n\r\n if (!context) {\r\n throw new Error(\"useReceiveFile must be used within a ReceiveFileProvider\");\r\n }\r\n\r\n return { receivedFileUri: context.selectedFileUri };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useTerminal() {\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"terminal\");\r\n const [websocketUrl, setWebsocketUrl] = useState<string | undefined>(\r\n undefined,\r\n );\r\n const [projectHomePath, setProjectHomePath] = useState<string | undefined>(\r\n undefined,\r\n );\r\n\r\n useEffect(() => {\r\n if (isReady) {\r\n imc\r\n ?.sendMessage(IMCMessageTypeEnum.PlatformCreateTerminal)\r\n .then((response) => {\r\n const {\r\n websocketUrl,\r\n projectHomePath,\r\n }: {\r\n websocketUrl: string;\r\n projectHomePath: string;\r\n } = response;\r\n\r\n setWebsocketUrl(websocketUrl);\r\n setProjectHomePath(projectHomePath);\r\n });\r\n }\r\n }, [isReady]);\r\n\r\n return {\r\n websocketUrl,\r\n projectHomePath,\r\n };\r\n}\r\n","import { IMCMessage, IMCMessageTypeEnum } from \"@pulse-editor/shared-utils\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useIMC from \"../imc/use-imc\";\r\n\r\nexport default function useWorkspaceInfo() {\r\n const [workspaceId, setWorkspaceId] = useState<string | undefined>(undefined);\r\n\r\n const receiverHandlerMap = new Map<\r\n IMCMessageTypeEnum,\r\n (senderWindow: Window, message: IMCMessage) => Promise<void>\r\n >();\r\n\r\n const { imc, isReady } = useIMC(receiverHandlerMap, \"theme\");\r\n\r\n // Upon initial load, request theme from main app\r\n useEffect(() => {\r\n if (isReady) {\r\n imc\r\n ?.sendMessage(IMCMessageTypeEnum.EditorAppRequestWorkspace)\r\n .then((result) => {\r\n const { id }: { id: string } = result;\r\n setWorkspaceId((prev) => id);\r\n });\r\n }\r\n }, [isReady]);\r\n\r\n return {\r\n workspaceId,\r\n };\r\n}\r\n"],"names":["byteToHex","i","push","toString","slice","unsafeStringify","arr","offset","arguments","length","undefined","toLowerCase","getRandomValues","rnds8","Uint8Array","rng","crypto","Error","bind","randomUUID","_v4","options","buf","_ref","_options$random","_options$rng","_options","rnds","random","call","v4","native","MANIFEST_EXT","BROWSER_LOG_KEY","NameTransformSymbol","AT","HYPHEN","SLASH","NameTransformMap","_defineProperty","SEPARATOR","RUNTIME_001","RUNTIME_002","RUNTIME_003","RUNTIME_004","RUNTIME_005","RUNTIME_006","RUNTIME_007","RUNTIME_008","RUNTIME_009","TYPE_001","BUILD_001","BUILD_002","LOG_CATEGORY","logger","createLogger","assert","condition","msg","error","message","startsWith","concat","warn","createInstance","ModuleFederationConstructor","getGlobalFederationConstructor","ModuleFederation","instance","setGlobalFederationInstance","setGlobalFederationConstructor","c","e","u","l","a","r","o","f","v","d","m","s","g","h","x","E","current","b","window","p","TypeError","y","leading","w","trailing","O","flushOnExit","F","L","debounceOnServer","A","Math","max","maxWait","D","n","t","apply","cancelAnimationFrame","requestAnimationFrame","setTimeout","Date","now","min","S","global","document","visibilityState","flush","addEventListener","cancel","clearTimeout","isPending","removeEventListener","useDebouncedCallback"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","x_google_ignoreList":[0,1,2,3,9,10,11,12,15]}
|