Skip to content

createScope.ts

Назначение файла

Модуль реализует функцию createScope(), создающую объект Scope для управления жизненным циклом destroyable-ресурсов, эффектов и атомов.

Общая информация

Scope используется как boundary для бизнес-логики. Он собирает все созданные или добавленные ресурсы и гарантирует их централизованное уничтожение через один вызов destroy(). Это критично для контроллеров, view-model и тестовых сценариев.

Концептуальная архитектура

Реализация строится на односвязном списке teardown-обработчиков:

  1. onDestroy() регистрирует callback, unsubscribe-ресурс или destroy-ресурс.
  2. add() добавляет внешний ресурс под управление scope.
  3. atom(), effect(), syncEffect() и createScope() создают дочерние сущности и сразу регистрируют их внутри текущего scope.
  4. destroyScope() обходит зарегистрированные teardown-элементы в обратном порядке регистрации и собирает ошибки.
  5. Если ошибки возникли, выбрасывается 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();