# @alfalab/scripts-modules

## 1.13.0

### Minor Changes

-   [#596](https://github.com/core-ds/arui-scripts/pull/596) [`c7ccbcf7`](https://github.com/core-ds/arui-scripts/commit/c7ccbcf729defb987e189a5ac772495cdd283998) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - **Что изменилось**
    В `createServerStateModuleFetcher` добавлена опция `allowLocalOverride`, которая включает чтение из `localStorage` переопределения базового адреса приложения-источника для запрашиваемого `moduleId`. Запрос ресурсов отправляется на переопределённый адрес в том же формате, который уже поддерживает `createModuleFetcher`.

    **Что делать потребителю**
    Обязательных действий не требуется: опция по умолчанию выключена. Для отладки server-state модуля на тестовом стенде включите `allowLocalOverride: true` и укажите адрес локального dev-сервера в `localStorage` под ключом `arui-scripts-module-overrides`.

## 1.12.0

### Minor Changes

-   [#594](https://github.com/core-ds/arui-scripts/pull/594) [`504e279b`](https://github.com/core-ds/arui-scripts/commit/504e279b7578234e0aa6eaeba0d557ee882f2d5b) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - **Что изменилось**
    В `createModuleFetcher` добавлена опция `allowLocalOverride`, которая включает чтение из `localStorage` переопределений базового адреса приложения-источника модуля (ключ `arui-scripts-module-overrides`, формат `{ moduleId: url }`). При включённой опции манифест и ресурсы модуля загружаются с переопределённого адреса; константа ключа доступна как `LOCAL_OVERRIDE_STORAGE_KEY`.

    **Что делать потребителю**
    Обязательных действий не требуется: опция по умолчанию выключена. Для отладки модуля на тестовом стенде можно включить `allowLocalOverride: true` и указать адрес локального dev-сервера в `localStorage`.

## 1.11.0

### Minor Changes

-   [#532](https://github.com/core-ds/arui-scripts/pull/532) [`b82a10c`](https://github.com/core-ds/arui-scripts/commit/b82a10c4e90e625ff538f47528de0869f798d6d4) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - Добавлены API для монтирования модулей в React Suspense и SSR:

    -   `createLazyMounter` для клиентского монтирования модулей через `React.Suspense`;
    -   `createSsrMounter` из подпути `@alfalab/scripts-modules/ssr` для серверного рендеринга
        mountable-модулей, передачи ресурсов через встроенный payload и последующей клиентской
        гидрации без повторного запроса ресурсов;
    -   опциональные методы модулей `hydrate` и `update`, а также настройка доставки SSR-стилей:
        inline по умолчанию или `<link>` через `stylesMode: 'link'`.

    Стили module-federation модулей, отрисованные на сервере, переиспользуются на клиенте без
    повторной загрузки и мигания интерфейса.

    `AruiAppManifest.css` и `createModuleFetcher` теперь принимают `string | string[]`.

    `createServerStateModuleFetcher` теперь использует стандартный `fetch` вместо
    `XMLHttpRequest`, поэтому рантаймам без глобального `fetch` потребуется полифил.

    Подробнее: [документация `@alfalab/scripts-modules`](../packages/arui-scripts-modules/README.md#createssrmounter)
    и [SSR-спецификация](../docs/specs/ssr-spec.md).

-   [#532](https://github.com/core-ds/arui-scripts/pull/532) [`4fa8be2`](https://github.com/core-ds/arui-scripts/commit/4fa8be235a824df207b4209201d9ff792f925860) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - Серверный кэш ресурсов в `createSsrMounter` стал per-request: теперь он передаётся через
    React-контекст провайдером `ModuleSsrRequestProvider` (`@alfalab/scripts-modules/ssr`), который
    хост должен обернуть вокруг дерева на сервере с уникальным `requestId` на каждый HTTP-запрос.
    Это исключает случайное переиспользование `moduleState` между одновременными запросами и утечку
    записей кэша от прерванных рендеров. На клиенте провайдер не требуется.

## 1.10.3

### Patch Changes

-   [#561](https://github.com/core-ds/arui-scripts/pull/561) [`8ab5238`](https://github.com/core-ds/arui-scripts/commit/8ab5238e9fa1aee92b3db787c3dd95badf5a36ed) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - Убрана зависимость от `uuid`. Пакет публикуется в том числе как CommonJS, а `uuid` начиная с 13 версии
    поставляется только в формате ESM — из-за этого падали тесты в приложениях-потребителях, использующих jest.
    `useId` теперь генерирует запасной id (для React < 18) через счётчик; значение используется только как
    DOM-атрибут `data-module-mount-id`, поэтому формат `arui-module-N` вместо uuid ни на что не влияет.

## 1.10.2

### Patch Changes

-   [#554](https://github.com/core-ds/arui-scripts/pull/554) [`4aab565`](https://github.com/core-ds/arui-scripts/commit/4aab565af93e0e633229287e082fee1d167db812) Thanks [@dmitrbrvsk](https://github.com/dmitrbrvsk)! - Информативные сообщения об ошибках загрузки модулей: в текст ошибки попадают адрес запроса и код статуса. Невалидный JSON в ответе больше не подвешивает промис навсегда, а отклоняет его с понятной ошибкой. Ошибка загрузки script и link тегов теперь тоже `Error` с адресом ресурса

## 1.10.1

### Patch Changes

-   [#534](https://github.com/core-ds/arui-scripts/pull/534) [`37f3c82`](https://github.com/core-ds/arui-scripts/commit/37f3c82c4bdfe7e758f4734b3b05b0e722ede58b) Thanks [@TheDiamondDoge](https://github.com/TheDiamondDoge)! - Добавлен экспорт типа LoadingState

## 1.10.0

### Minor Changes

-   [#529](https://github.com/core-ds/arui-scripts/pull/529) [`b571769`](https://github.com/core-ds/arui-scripts/commit/b571769407c6fcebdd9a7d0ce505947ad6f5ffcb) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - Добавлена поддержка абсолютных адресов ресурсов модулей. Если адрес ресурса содержит абсолютный URL он больше не будет префиксироваться адресом из baseUrl

## 1.9.2

### Patch Changes

-   [#502](https://github.com/core-ds/arui-scripts/pull/502) [`60a8287`](https://github.com/core-ds/arui-scripts/commit/60a82876e74a82fce1f03a9526d4f7a4c577c2de) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - Исправлен баг, который мог ломать default модули, если они не используют default экспорт

## 1.9.1

### Patch Changes

-   [`36f7cc0`](https://github.com/core-ds/arui-scripts/commit/36f7cc0c3167d02c840997333c734010869ca0da) Thanks [@Heymdall](https://github.com/Heymdall)! - В хуки onBeforeMountableModuleMount и onAfterMountableModuleMount дополнительно передается параметр targetNode

## 1.9.0

### Minor Changes

-   [#473](https://github.com/core-ds/arui-scripts/pull/473) [`3ec659f`](https://github.com/core-ds/arui-scripts/commit/3ec659f5a76bb3a6dc9cd3e5fe471ce383612ea8) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - 1. Новый формат передачи хуков в `createModuleLoader`: объект `hooks` вместо отдельных методов 2. Новые хуки для лучшего отслеживания поведения модулей 3. Убраны устаревшие предупреждения об использовании webpack

    Прямая передача хуков `on*` в `createModuleLoader` объявлена как deprecated. Передавайте их в отдельный параметр hooks:

    ```js
    // Было:
    const loader = createModuleLoader({
        // ...
        onBeforeModuleUnmount: () => {},
    });

    // Стало:
    const loader = createModuleLoader({
        // ...
        hooks: {
            onBeforeModuleUnmount: () => {},
        },
    });
    ```

    Добавлены новые хуки:

    -   `onStart(moduleId: string)` - будет вызван перед тем, как запустится процесс загрузки модуля;
    -   `onBeforeMountableModuleMount(moduleId: string)` - специальных хук для монтируемых модулей, будет вызван перед запуском функции `mount` модуля;
    -   `onAfterMountableModuleMount(moudleId: string)` - специальный хук для монтируемых модулей, будет вызван после выполнения функции `mount` модуля.
    -   `onError(moduleId: string, stage: 'fetch-manifest' | 'fetch-resources' | 'mount', error: unknown)` - будет вызван при возникновении ошибки во время загрузки модуля

    Благодаря этим хукам вы сможете собирать метрики загрузки с ваших модулей и отслеживать все этапы загрузки.

## 1.8.3

### Patch Changes

-   [#449](https://github.com/core-ds/arui-scripts/pull/449) [`63a7336`](https://github.com/core-ds/arui-scripts/commit/63a7336cc279d6eeab3bc8ba24246a036e683d72) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - Сборка переведена на typescript@6. Изменений для внешних потребителей нет

## 1.8.2

### Patch Changes

-   [#344](https://github.com/core-ds/arui-scripts/pull/344) [`6960d70`](https://github.com/core-ds/arui-scripts/commit/6960d70b49ee49ec8ff399156976bf7595fca044) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - Хуки для использования модулей больше не нарушают правила хуков

## 1.8.1

### Patch Changes

-   [#338](https://github.com/core-ds/arui-scripts/pull/338) [`e30266f`](https://github.com/core-ds/arui-scripts/commit/e30266f8848c834c8b59be3f6cfb64e4a0da7db2) Thanks [@qrik116](https://github.com/qrik116)! - Исправление ошибки "ReferenceError: DOMException is not defined"

## 1.8.0

### Minor Changes

-   [#336](https://github.com/core-ds/arui-scripts/pull/336) [`8245ff4`](https://github.com/core-ds/arui-scripts/commit/8245ff45110494e5b2353802a2b46d3c810ee1a9) Thanks [@qrik116](https://github.com/qrik116)! - Изменена логика добавления стилей для Safari, теперь вместо встраивания через тэг `link` будет происходить встраивание через `inline` стили тэгом `style`.
    Чтобы отключить это поведение можно передать `disableInlineStyleSafari: true` в `createModuleLoader`

## 1.7.1

### Patch Changes

-   [#330](https://github.com/core-ds/arui-scripts/pull/330) [`e3c998d`](https://github.com/core-ds/arui-scripts/commit/e3c998d4cd5cdae9b9565f7599847e0d547194aa) Thanks [@jorjif](https://github.com/jorjif)! - Добавлена поддержка свойства shareScope для использования в модулях

## 1.7.0

### Minor Changes

-   [#311](https://github.com/core-ds/arui-scripts/pull/311) [`9e33c1d`](https://github.com/core-ds/arui-scripts/commit/9e33c1d5bb675d7356eb8b5ebcfb0fe38050a630) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - В `createModuleLoader` добавлен параметр `resourceCache`, который позволяет настроить кеширование ресурсов модуля

## 1.6.2

### Patch Changes

-   [#205](https://github.com/core-ds/arui-scripts/pull/205) [`be214e9`](https://github.com/core-ds/arui-scripts/commit/be214e916ad537ecc57971d24f544c62b5b2f86d) Thanks [@Dan28396](https://github.com/Dan28396)! - Исправлены типы лоадера, чтобы можно было использовать его вне хуков и запускать без параметров. BaseModuleState дополнен полем preloadedState, который приходит для модулей, перешедших на вторую версию серверной ручки getModuleResources

## 1.6.1

### Patch Changes

-   [#203](https://github.com/core-ds/arui-scripts/pull/203) [`32c89e8`](https://github.com/core-ds/arui-scripts/commit/32c89e8e077270c951348e54ce9303b07d8e3ff6) Thanks [@Dan28396](https://github.com/Dan28396)! - Добавлена возможность работы с модулями-фабриками, созданными внутренними бибилотеками

## 1.6.0

### Minor Changes

-   [#142](https://github.com/core-ds/arui-scripts/pull/142) [`473ab9f`](https://github.com/core-ds/arui-scripts/commit/473ab9f0482c740741c7ed7ae6e926d5ae06feca) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - Добавлена возможность загружать монтируемые модули в shadow-DOM

### Patch Changes

-   [#146](https://github.com/core-ds/arui-scripts/pull/146) [`92cb660`](https://github.com/core-ds/arui-scripts/commit/92cb6606518f9226d0e61f3af755f3b1531946f5) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - Исправлено удаление модулей и их ресурсов со страници при отмонтировании хука до загрузки модуля

## 1.5.0

### Minor Changes

-   [#135](https://github.com/core-ds/arui-scripts/pull/135) [`7b897ed`](https://github.com/core-ds/arui-scripts/commit/7b897ed5ce4485d42c7d7ab7516038e802de9396) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - Добавлен экспорт функции executeModuleFactory для использования модулей фабрик вне react-хуков

## 1.4.1

### Patch Changes

-   [#129](https://github.com/core-ds/arui-scripts/pull/129) [`ca6dd72`](https://github.com/core-ds/arui-scripts/commit/ca6dd722843a82b550d78012a279f7ed59316809) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - Исправлена типизация для хуков загрузчика модулей

## 1.4.0

### Minor Changes

-   [#98](https://github.com/core-ds/arui-scripts/pull/98) [`ed40587`](https://github.com/core-ds/arui-scripts/commit/ed4058763981be72124be3f29269563df748b627) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - - Добавлено описание типов для Factory-модулей, доступно как `FactoryModule`.

    -   Factory-модули теперь могут принимать `runParams` - отдельный параметр, который не будет передаваться на сервер, а
        сразу будет попадать из клиента в клиент.
        **Важно:** `runParams` теперь является первым аргументом для `run` функции.

    -   Mountable модули теперь могут использовать запись вида `export default mountableModule;` вместо отдельных экспортов
        `mount` и `unmount` функций.

## 1.3.0

### Minor Changes

-   [#94](https://github.com/core-ds/arui-scripts/pull/94) [`ad23eb0`](https://github.com/core-ds/arui-scripts/commit/ad23eb09e75080a3828f04c9a30a72ea19ddde59) Thanks [@sanityFair](https://github.com/sanityFair)! - ## В данном PR исправлены:

    -   Prototype pollution in webpack loader-utils Critical
    -   Improper Neutralization of Special Elements used in a Command in Shell-quote Critical
    -   json-schema is vulnerable to Prototype Pollution Critical
    -   Prototype Pollution in immer Critical (
    -   Для обновления пришлось вынести в плагины WatchMissingNodeModulesPlugin из react-dev-utils, так как в последней версии его убрали.)
    -   Prototype Pollution in handlebars Critical

## 1.2.1

### Patch Changes

-   [#71](https://github.com/core-ds/arui-scripts/pull/71) [`1f1fa45`](https://github.com/core-ds/arui-scripts/commit/1f1fa45d9d634d59e92169e4931b38e4945f2f92) Thanks [@chermashentsau](https://github.com/chermashentsau)! - Fix modules factory hook

## 1.2.0

### Minor Changes

-   [#67](https://github.com/core-ds/arui-scripts/pull/67) [`5f0b9bb`](https://github.com/core-ds/arui-scripts/commit/5f0b9bbb2ed995a8888492b389a5ad340e783d0a) Thanks [@chermashentsau](https://github.com/chermashentsau)! - Add factory modules support

## 1.1.0

### Minor Changes

-   [#56](https://github.com/core-ds/arui-scripts/pull/56) [`1c64198`](https://github.com/core-ds/arui-scripts/commit/1c641989791c4ff1e7a20d05c115f8a1d7817e30) Thanks [@heymdall-legal](https://github.com/heymdall-legal)! - Add modules support and various tools to work with them correctly.

    Modules provides a way to define reusable piece of code to consume from different applications.
    Additional tooling provides a convenient way to consume this modules in applications.
    Full documentation is available in [separate doc](https://github.com/core-ds/arui-scripts/blob/master/packages/arui-scripts/docs/modules.md).
