import type { IStyle, ISvgIcon } from "../../types/webpack/index.d.mts"; /** * Входные данные для стилей или иконок. */ type TLazyEntry = Entry | Promise | ((instance?: Core) => Entry) | ((instance?: Core) => Promise); /** * Callback, вызываемый после запуска ядра и плагинов. */ export type TCoreOnInitCallback = (params: { isDebug: boolean; plugins: Map; }) => void; /** * Параметры конструктора плагина `Core`. */ export type TCoreProps = Partial<{ utils: TCoreUtilities; plugins: TPluginMap; styles: TStylesEntry; icons: TIconsEntry; isDebug: boolean | null; clearCache: string[]; clearCacheKeys: string[]; onWindowLoad: () => void; onWindowResize: () => void; onDOMReady: () => void; onInit: TCoreOnInitCallback | null; env: string; appNameSpace: string; DispatcherPlugin: TPluginDefinition; ObserverPlugin: TPluginDefinition; globalAttr: string; }>; /** * Статистика инициализации ядра. */ export type TCoreStats = { plugins: number; styles: number; icons: number; }; /** * Набор пользовательских утилит ядра. */ export type TCoreUtilities = Record; /** * Тип утилиты ядра, выполняемой при инициализации. */ export type TCoreUtility = () => unknown; /** * Описание записи иконок для ленивой загрузки. */ export type TIconsEntry = TLazyEntry; /** * Тип плагина в виде класса. */ export type TPluginClass = { new (...args: never[]): unknown; isApp?: boolean; }; /** * Допустимый формат определения плагина. */ export type TPluginDefinition = TPluginClass | TPluginFn | null; /** * Тип плагина в виде функции. */ export type TPluginFn = { (...args: never[]): unknown | Promise; isApp?: boolean; }; /** * Карта подключаемых плагинов. */ export type TPluginMap = Record; /** * Описание записи стилей для ленивой загрузки. */ export type TStylesEntry = TLazyEntry; /** * Singleton. Главный плагин, отвечающий за выполнение JS-кода, подключение стилей (в режиме локальной разработки) и добавление иконок. Вызывается непосредственно во входной точке приложения. Плагин самостоятельно ждёт наступления события `DOMContentLoaded` и выполняет другие переданные ему плагины. * * В передаваемых плагинах (классах) могут присутствовать следующие статические поля: * * - Если `isApp` с булевым значением равен true, то плагин привязывается к глобальной зоне видимости и становится доступен через `window[appNameSpace]` — `window.App` по умолчанию. * * Ядро позволяет привязать плагины, утилиты и переменные к глобальному объекту window, создав в нем соответствующий ключ, указанный через appNameSpace. В качестве значения ключа выступает объект с глобальными параметрами, среди которых присутствуют: * * - `isDebug` — состояние режима отладки; * - `svgSpriteRevision` — временная метка актуальности изменения файла спрайта с SVG-иконками приложения, по умолчанию равная текущему времени. * * Чтобы добавить или перезаписать переменные, их следует добавить в формате JSON в атрибут тела страницы, указанный в ключе globalAttr. * * @module Core * @param utils{Object=} объект с выполняемыми утилитами * @param plugins{Object=} объект с выполняемыми плагинами * @param styles{TStylesEntry=} массив/промис/функция стилей, применяемых для страницы (только для dev-версии) * @param icons{TIconsEntry=} массив/промис/функция иконок, используемых на сайте * @param isDebug{Boolean=} включение debug-режима * @param clearCache{Array=} = очистка `localStorage` и `cookies` по указанным в массиве ключам, `*` очищает все значения * @param onWindowLoad{Function=} callback для загрузки окна * @param onWindowResize{Function=} callback для изменения размера окна * @param onDOMReady{Function=} callback для загрузки DOM * @param env{String=} значение переменной окружения (`development`, `production`, `test`) * @param appNameSpace{String=} название глобальной переменной, куда могут быть записаны плагины (по умолчанию `App`) * @param DispatcherPlugin{Function} собственный экземпляр Dispatcher * @param ObserverPlugin{Function} собственный экземпляр Observer * @param globalAttr{String=} глобальный атрибут приложения на теле документа * @param onInit{Function=} функция, вызываемая после запуска всех плагинов и инициализации фреймворка * @example * import { Core, IconSprite } from "@delement/ui/plugins" * * new Core({ * styles: async () => [], // массив стилей * icons: async () => [], // массив иконок * plugins: { * IconSprite: () => new IconSprite("/frontend/build/"), // пример вызова IconSprite с другими аргументами, * Localisation: null // пример отключения стандартного плагина * }, * onInit: ({ plugins }) => { * // plugins - экземпляры вызовов всех плагинов * } * }) */ export declare class Core { #private; today: number; utils: TCoreUtilities; plugins: TPluginMap; styles: IStyle[]; icons: ISvgIcon[]; isDebug: boolean; onWindowLoad: (() => void) | null; onWindowResize: (() => void) | null; onDOMReady: (() => void) | null; appNameSpace: string; globalAttr: string; clearCacheKeys: string[]; onInit: TCoreOnInitCallback | null; stats: TCoreStats; env: string; /** * Singleton-экземпляр ядра приложения. * @type {Core|null} */ static instance: Core | null; constructor(props?: TCoreProps); /** * Очищает кеш браузера (cookies и localStorage) по указанным ключам * @param keys{String[]=} массив ключей для очистки, "*" очищает всё */ clearCache(keys?: string[]): void; /** * Получает экземпляр вызова запущенного плагина по его имени * @param name{String} имя плагина * @returns {Object|null} экземпляр плагина или null */ getPluginInstance(name: string): unknown; } export {};