createScope.ts
Назначение файла
Модуль реализует функцию createScope(), создающую объект Scope для управления жизненным циклом destroyable-ресурсов, эффектов и атомов.
Общая информация
Scope используется как boundary для бизнес-логики. Он собирает все созданные или добавленные ресурсы и гарантирует их централизованное уничтожение через один вызов destroy(). Это критично для контроллеров, view-model и тестовых сценариев.
Концептуальная архитектура
Реализация строится на односвязном списке teardown-обработчиков:
onDestroy()регистрирует callback,unsubscribe-ресурс илиdestroy-ресурс.add()добавляет внешний ресурс под управление scope.atom(),effect(),syncEffect()иcreateScope()создают дочерние сущности и сразу регистрируют их внутри текущего scope.destroyScope()обходит зарегистрированные teardown-элементы в обратном порядке регистрации и собирает ошибки.- Если ошибки возникли, выбрасывается
ScopeDestructionError.
Такой подход делает Scope простым контейнером владения ресурсами.
Описание публичного API
createScope(): Scope
- Возвращает новый объект
Scope. - Позволяет регистрировать ресурсы через
onDestroy()иadd(). - Предоставляет удобные фабрики
atom,effect,syncEffect,createScope.
Примеры использования
ts
import { createScope } from '@nrgyjs/core';
const scope = createScope();
const counter = scope.atom(0);
scope.onDestroy(() => {
console.log('scope destroyed');
});
counter.set(1);
scope.destroy();