/** * То, как подключать модуль на страницу. * compat - режим подключения без использования module-federation. В этом случае мы сами подключаем все скрипты и стили. * default - module-federation режим, загрузкой скриптов и стилей занимается wepack. */ export type MountMode = 'compat' | 'default'; /** * Запрос, который будет отправлен на сервер для получения ресурсов модуля */ export type GetResourcesRequest = { /** id загружаемого модуля */ moduleId: string; /** id приложения-хоста */ hostAppId: string; /** параметры, которые передаются в функцию получения ресурсов модуля */ params: GetResourcesParams; /** * Присутствует, если хост запрашивает серверный рендеринг модуля. */ ssr?: { /** * Сериализуемое подмножество runParams, с которым нужно отрендерить HTML. * Должно быть JSON-сериализуемым: клиентские значения (колбэки, ref-ы) * передаются позже, на этапе `hydrate`. */ runParams?: unknown; }; }; /** * Клиентский манифест приложения. Генерируется во время сборки. */ export type AruiAppManifest = { [moduleId: string]: { js?: string | string[]; css?: string | string[]; mode?: MountMode; }; } & { __metadata__: { version: string; name: string; }; }; /** * "состояние" модуля полученное от сервера */ export type GetModuleStateResult = { baseUrl: string; }; /** * ожидаемое "состояние" модуля */ export type BaseModuleState = { baseUrl: string; hostAppId: string; preloadedState?: T; }; /** * Ресурсы, которые нужны модулю для запуска */ export type ModuleResources = { /** пути до js скриптов модуля */ scripts: string[]; /** пути до css стилей модуля */ styles: string[]; /** версия модуля */ moduleVersion: string; /** название приложения, которое предоставляет модуль */ appName: string; /** то, как подключать модуль на страницу. */ mountMode: MountMode; /** предподготовленное "состояние" модуля, которое он получит при монтировании на страницу */ moduleState: ModuleState; /** * HTML модуля, отрендеренный на сервере модуля. * Присутствует только в ответ на запрос с полем `ssr`. */ html?: string; }; export type LoaderResult = { unmount: () => void; module: ModuleExportType; moduleResources: ModuleResources; }; export type LoaderParams = { /** * Параметры, которые будут переданы в функцию получения ресурсов модуля */ getResourcesParams?: GetResourcesParams; /** * Опциональный параметр, который используется для поиска элемента, в который нужно вставить css ресурсы модуля. */ cssTargetSelector?: string; /** * Опциональный параметр, который используется для отмены запроса на получение ресурсов модуля. */ abortSignal?: AbortSignal; /** * Флаг о том, что при подключении модуль хочет использовать shadowDom */ useShadowDom?: boolean; }; /** * Функция, которая загружает модуль и подключает его на страницу. * Может принимать дополнительные параметры, которые будут переданы в функцию получения ресурсов модуля. * Возвращает промис, содержащий сам модуль и функцию, которая удаляет ресурсы модуля со страницы. */ export type Loader = (params?: LoaderParams) => Promise>; export type ModuleFederationContainer = { init: (...args: unknown[]) => Promise; get(id: string): Promise<() => T>; };