@fozy-labs/rx-toolkit 0.4.18 → 0.5.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +20 -19
  2. package/dist/common/devtools/reduxDevtools.d.ts +17 -0
  3. package/dist/common/devtools/reduxDevtools.js +98 -17
  4. package/dist/common/devtools/types.d.ts +1 -0
  5. package/dist/common/options/DefaultOptions.d.ts +0 -2
  6. package/dist/common/options/DefaultOptions.js +0 -2
  7. package/dist/common/options/SharedOptions.d.ts +0 -2
  8. package/dist/common/options/SharedOptions.js +0 -1
  9. package/dist/query/api/resetAllQueriesCache.d.ts +1 -0
  10. package/dist/query/api/resetAllQueriesCache.js +4 -0
  11. package/dist/query/core/Opertation/Operation.js +10 -7
  12. package/dist/query/core/Opertation/OperationAgent.d.ts +0 -2
  13. package/dist/query/core/Opertation/OperationAgent.js +4 -21
  14. package/dist/query/core/QueriesCache.d.ts +1 -1
  15. package/dist/query/core/QueriesCache.js +2 -6
  16. package/dist/query/core/{CleanAllQueriesSignal.d.ts → ResetAllQueriesSignal.d.ts} +1 -1
  17. package/dist/query/core/ResetAllQueriesSignal.js +11 -0
  18. package/dist/query/core/Resource/Resource.js +7 -3
  19. package/dist/query/core/Resource/ResourceAgent.d.ts +2 -3
  20. package/dist/query/core/Resource/ResourceAgent.js +62 -29
  21. package/dist/query/index.d.ts +1 -1
  22. package/dist/query/index.js +1 -1
  23. package/dist/query/lib/IndirectMap.d.ts +1 -1
  24. package/dist/query/lib/IndirectMap.js +1 -1
  25. package/dist/query/lib/ReactiveCache.d.ts +1 -1
  26. package/dist/query/lib/ReactiveCache.js +2 -2
  27. package/dist/query/react/useOperationAgent.js +2 -5
  28. package/dist/query/react/useResourceAgent.js +1 -4
  29. package/dist/query/types/Operation.types.d.ts +1 -3
  30. package/dist/query/types/Resource.types.d.ts +1 -3
  31. package/dist/signals/base/Batcher.d.ts +1 -1
  32. package/dist/signals/base/Batcher.js +1 -1
  33. package/dist/signals/base/DependencyTracker.d.ts +18 -0
  34. package/dist/signals/base/DependencyTracker.js +13 -0
  35. package/dist/signals/base/Devtools.d.ts +1 -1
  36. package/dist/signals/base/Devtools.js +13 -1
  37. package/dist/signals/base/ReadonlySignal.d.ts +5 -7
  38. package/dist/signals/base/ReadonlySignal.js +20 -12
  39. package/dist/signals/base/index.d.ts +1 -2
  40. package/dist/signals/base/index.js +1 -2
  41. package/dist/signals/operators/index.d.ts +0 -2
  42. package/dist/signals/operators/index.js +0 -2
  43. package/dist/signals/operators/signalize.d.ts +2 -2
  44. package/dist/signals/operators/signalize.js +1 -1
  45. package/dist/signals/react/useSignal.d.ts +6 -2
  46. package/dist/signals/react/useSignal.js +2 -21
  47. package/dist/signals/signals/Computed.d.ts +13 -11
  48. package/dist/signals/signals/Computed.js +79 -26
  49. package/dist/signals/signals/Effect.d.ts +11 -7
  50. package/dist/signals/signals/Effect.js +60 -58
  51. package/dist/signals/signals/LocalSignal.d.ts +14 -7
  52. package/dist/signals/signals/LocalSignal.js +53 -36
  53. package/dist/signals/signals/Signal.d.ts +13 -37
  54. package/dist/signals/signals/Signal.js +44 -58
  55. package/dist/signals/types/index.d.ts +1 -0
  56. package/dist/signals/types/index.js +1 -0
  57. package/dist/signals/types/signals.types.d.ts +16 -0
  58. package/docs/CHANGELOG.md +32 -0
  59. package/docs/devtools/README.md +162 -29
  60. package/docs/migrations/0.5.0.md +73 -0
  61. package/docs/options/README.md +89 -0
  62. package/docs/query/README.md +425 -89
  63. package/docs/release/README.md +58 -6
  64. package/docs/signals/README.md +207 -34
  65. package/docs/usage/react/README.md +261 -49
  66. package/package.json +1 -1
  67. package/dist/query/api/cleanAllQueriesCache.d.ts +0 -1
  68. package/dist/query/api/cleanAllQueriesCache.js +0 -4
  69. package/dist/query/core/CleanAllQueriesSignal.js +0 -11
  70. package/dist/signals/base/Tracker.d.ts +0 -10
  71. package/dist/signals/base/Tracker.js +0 -7
  72. package/dist/signals/base/types.d.ts +0 -23
  73. package/dist/signals/operators/filterUpdates.d.ts +0 -5
  74. package/dist/signals/operators/filterUpdates.js +0 -18
  75. package/dist/signals/operators/mapSignals.d.ts +0 -3
  76. package/dist/signals/operators/mapSignals.js +0 -10
  77. /package/dist/signals/{base/types.js → types/signals.types.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  export * from './api/createResource';
2
2
  export * from './api/createOperation';
3
- export * from './api/cleanAllQueriesCache';
3
+ export * from './api/resetAllQueriesCache';
4
4
  export * from './SKIP_TOKEN';
5
5
  export * from './react/useResourceAgent';
6
6
  export * from './react/useResourceRef';
@@ -1,6 +1,6 @@
1
1
  export * from './api/createResource';
2
2
  export * from './api/createOperation';
3
- export * from './api/cleanAllQueriesCache';
3
+ export * from './api/resetAllQueriesCache';
4
4
  export * from './SKIP_TOKEN';
5
5
  export * from './react/useResourceAgent';
6
6
  export * from './react/useResourceRef';
@@ -14,6 +14,6 @@ export declare class IndirectMap<KEY, VALUE> {
14
14
  */
15
15
  delete(key: KEY): void;
16
16
  has(key: KEY): boolean;
17
- get values(): IterableIterator<VALUE>;
17
+ values(): MapIterator<VALUE>;
18
18
  }
19
19
  export {};
@@ -82,7 +82,7 @@ export class IndirectMap {
82
82
  }
83
83
  return has;
84
84
  }
85
- get values() {
85
+ values() {
86
86
  return this._map.values();
87
87
  }
88
88
  }
@@ -1,5 +1,5 @@
1
1
  import { Observable, Subject } from "rxjs";
2
- import { ReadableSignalLike } from "../../signals";
2
+ import { ReadableSignalLike } from "../../signals/types";
3
3
  type Options<VALUE> = {
4
4
  /**
5
5
  * Начальное состояние кэша
@@ -56,7 +56,7 @@ export class ReactiveCache {
56
56
  };
57
57
  }
58
58
  get value() {
59
- return this._state$.value;
59
+ return this._state$.getValue();
60
60
  }
61
61
  /**
62
62
  * Устанавливает новое значение в кэш и обновляет поток состояния.
@@ -74,7 +74,7 @@ export class ReactiveCache {
74
74
  return;
75
75
  this.closed = true;
76
76
  this._state$.complete();
77
- this.onClean$.next(this._state$.value);
77
+ this.onClean$.next(this._state$.getValue());
78
78
  this.onClean$.complete();
79
79
  }
80
80
  }
@@ -1,4 +1,4 @@
1
- import { useConstant, useEventHandler, useUnmount } from "../../common/react";
1
+ import { useConstant, useEventHandler } from "../../common/react";
2
2
  import { useSignal } from "../../signals/react";
3
3
  export function useOperationAgent(op) {
4
4
  const agent = useConstant(() => op.createAgent());
@@ -6,7 +6,7 @@ export function useOperationAgent(op) {
6
6
  const trigger = useEventHandler((args) => {
7
7
  agent.initiate(args);
8
8
  return new Promise((resolve, reject) => {
9
- const sub = agent.state$.subscribe((s) => {
9
+ const sub = agent.state$.obs.subscribe((s) => {
10
10
  if (s.isDone && !s.isLoading) {
11
11
  sub.unsubscribe();
12
12
  if (s.isSuccess) {
@@ -19,8 +19,5 @@ export function useOperationAgent(op) {
19
19
  });
20
20
  });
21
21
  });
22
- useUnmount(() => {
23
- agent.complete();
24
- }, [agent]);
25
22
  return [trigger, state];
26
23
  }
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { useConstant, useUnmount } from "../../common/react";
2
+ import { useConstant } from "../../common/react";
3
3
  import { useSignal } from "../../signals/react";
4
4
  import { SKIP } from "../../query/SKIP_TOKEN";
5
5
  export function useResourceAgent(res, ...argss) {
@@ -16,8 +16,5 @@ export function useResourceAgent(res, ...argss) {
16
16
  prevArgsRef.current = args;
17
17
  agent.initiate(args);
18
18
  }
19
- useUnmount(() => {
20
- agent.complete();
21
- });
22
19
  return useSignal(agent.state$);
23
20
  }
@@ -1,4 +1,4 @@
1
- import { ReadableSignalLike } from "../../signals";
1
+ import { ReadableSignalLike } from "../../signals/types";
2
2
  import { FallbackOnNever, OnCacheEntryAdded, OnQueryStarted } from "./shared.types";
3
3
  import { ResourceDefinition, ResourceInstance } from "./Resource.types";
4
4
  /**
@@ -132,8 +132,6 @@ export type OperationAgentInstanse<D extends OperationDefinition> = {
132
132
  initiate(args: D["Args"]): void;
133
133
  /** Создает новый агент операции */
134
134
  createAgent(): OperationAgentInstanse<D>;
135
- /** Завершает все текущие выполнения операции и очищает ресурсы */
136
- complete(): void;
137
135
  };
138
136
  /**
139
137
  * Состояние выполнения операции
@@ -1,5 +1,5 @@
1
1
  import { Patch as ImmerPatch } from "immer";
2
- import { ReadableSignalLike } from "../../signals";
2
+ import { ReadableSignalLike } from "../../signals/types";
3
3
  import { FallbackOnNever, OnCacheEntryAdded, OnQueryStarted } from "./shared.types";
4
4
  /**
5
5
  * Функция создания ресурса
@@ -71,8 +71,6 @@ export type ResourceAgentInstance<D extends ResourceDefinition> = {
71
71
  state$: ReadableSignalLike<ResourceQueryState<D>>;
72
72
  /** Инициирует запрос с указанными аргументами */
73
73
  initiate(args: D["Args"], force?: boolean): void;
74
- /** Завершает работу агента, позволяя освободить ресурсы */
75
- complete(): void;
76
74
  /** Сравнивает аргументы между собой */
77
75
  compareArgs(args1: D["Args"], args2: D["Args"]): unknown;
78
76
  };
@@ -2,5 +2,5 @@ export declare const Batcher: {
2
2
  scheduler(rang: number): {
3
3
  schedule: (fn: () => void) => void;
4
4
  };
5
- batch<T>(fn: () => T): T;
5
+ run<T>(fn: () => T): T;
6
6
  };
@@ -43,7 +43,7 @@ export const Batcher = {
43
43
  }
44
44
  };
45
45
  },
46
- batch(fn) {
46
+ run(fn) {
47
47
  if (Scheduled.isLocked)
48
48
  return fn();
49
49
  Scheduled.isLocked = true;
@@ -0,0 +1,18 @@
1
+ import { Observable } from "rxjs";
2
+ export type DependencyRecord = {
3
+ /**
4
+ * Правило: getRang() должен вызываться только ПОСЛЕ подписки на obs,
5
+ * чтобы гарантировать корректный порядок рангов при ленивой инициализации.
6
+ */
7
+ getRang(): number;
8
+ obs: Observable<unknown>;
9
+ /**
10
+ * Зарезервировано для отладки и логирования.
11
+ */
12
+ meta?: any;
13
+ };
14
+ export declare class DependencyTracker {
15
+ private static _currentHandler;
16
+ static track(dep: DependencyRecord): void;
17
+ static start(handler: (arg: DependencyRecord) => void): () => void;
18
+ }
@@ -0,0 +1,13 @@
1
+ export class DependencyTracker {
2
+ static _currentHandler = null;
3
+ static track(dep) {
4
+ this._currentHandler?.(dep);
5
+ }
6
+ static start(handler) {
7
+ let prevHandler = this._currentHandler;
8
+ this._currentHandler = handler;
9
+ return () => {
10
+ this._currentHandler = prevHandler;
11
+ };
12
+ }
13
+ }
@@ -1,5 +1,5 @@
1
1
  import { StateDevtoolsOptions } from "../../common/devtools";
2
2
  export declare const Devtools: {
3
- createState<T>(initialValue: T, optionsDry?: StateDevtoolsOptions): import("../../common/devtools").DevtoolsStateLike<T> | null;
3
+ createState<T>(initialValue: T, optionsDry?: StateDevtoolsOptions): ((newState: T) => void) | null;
4
4
  readonly hasDevtools: boolean;
5
5
  };
@@ -11,7 +11,19 @@ export const Devtools = {
11
11
  if (!createStateDevtools)
12
12
  return null;
13
13
  const key = createKey(options.name, options.base);
14
- return createStateDevtools(key, initialValue);
14
+ let stateDevtools = options._skipValues?.includes(initialValue)
15
+ ? null
16
+ : createStateDevtools(key, initialValue);
17
+ return (newState) => {
18
+ if (options._skipValues?.includes(newState)) {
19
+ return;
20
+ }
21
+ if (!stateDevtools) {
22
+ stateDevtools = createStateDevtools(key, newState);
23
+ return;
24
+ }
25
+ stateDevtools(newState);
26
+ };
15
27
  },
16
28
  get hasDevtools() {
17
29
  return !!SharedOptions.DEVTOOLS?.state;
@@ -1,13 +1,11 @@
1
1
  import { Observable, Subscriber, TeardownLogic } from "rxjs";
2
- import type { ReadableSignalLike } from "./types";
2
+ import { ReadableSignalFnLike, ReadableSignalLike } from "../../signals/types";
3
3
  import { SyncObservable } from "./SyncObservable";
4
- export declare class ReadonlySignal<T> extends SyncObservable<T> implements ReadableSignalLike<T> {
4
+ export declare class ReadonlySignal<T> implements ReadableSignalLike<T> {
5
5
  protected rang: number;
6
+ readonly obs: SyncObservable<T>;
6
7
  constructor(subscribe?: (this: Observable<T>, subscriber: Subscriber<T>) => TeardownLogic);
7
- get value(): T;
8
- peek(): T;
9
- /**
10
- * @deprecated
11
- */
12
8
  get(): T;
9
+ peek(): T;
10
+ static create<T>(subscribe?: (this: Observable<T>, subscriber: Subscriber<T>) => TeardownLogic): ReadableSignalFnLike<T>;
13
11
  }
@@ -1,21 +1,29 @@
1
1
  import { SyncObservable } from "./SyncObservable";
2
- import { Tracker } from "./Tracker";
3
- export class ReadonlySignal extends SyncObservable {
2
+ import { DependencyTracker } from "./DependencyTracker";
3
+ export class ReadonlySignal {
4
4
  rang = 0;
5
+ obs;
5
6
  constructor(subscribe) {
6
- super(subscribe);
7
+ this.obs = new SyncObservable(subscribe);
7
8
  }
8
- get value() {
9
- Tracker.next(this.rang, this);
10
- return super.value;
9
+ get() {
10
+ DependencyTracker.track({
11
+ getRang: () => this.rang,
12
+ obs: this.obs,
13
+ });
14
+ return this.obs.value;
11
15
  }
12
16
  peek() {
13
- return super.value;
17
+ return this.obs.value;
14
18
  }
15
- /**
16
- * @deprecated
17
- */
18
- get() {
19
- return this.value;
19
+ static create(subscribe) {
20
+ const signal = new ReadonlySignal(subscribe);
21
+ function readonlySignalFn() {
22
+ return signal.get();
23
+ }
24
+ readonlySignalFn.obs = signal.obs;
25
+ readonlySignalFn.peek = () => signal.peek();
26
+ readonlySignalFn.get = () => signal.get();
27
+ return readonlySignalFn;
20
28
  }
21
29
  }
@@ -1,6 +1,5 @@
1
1
  export * from './Batcher';
2
+ export * from './DependencyTracker';
2
3
  export * from './Devtools';
3
4
  export * from './ReadonlySignal';
4
5
  export * from './SyncObservable';
5
- export * from './Tracker';
6
- export * from './types';
@@ -1,6 +1,5 @@
1
1
  export * from './Batcher';
2
+ export * from './DependencyTracker';
2
3
  export * from './Devtools';
3
4
  export * from './ReadonlySignal';
4
5
  export * from './SyncObservable';
5
- export * from './Tracker';
6
- export * from './types';
@@ -1,3 +1 @@
1
- export * from './filterUpdates';
2
- export * from './mapSignals';
3
1
  export * from './signalize';
@@ -1,3 +1 @@
1
- export * from './filterUpdates';
2
- export * from './mapSignals';
3
1
  export * from './signalize';
@@ -1,3 +1,3 @@
1
1
  import { Observable } from "rxjs";
2
- import { ReadonlySignal } from "../base";
3
- export declare function signalize<T>(observable: Observable<T>): ReadonlySignal<T>;
2
+ import { ReadableSignalFnLike } from "../../signals/types";
3
+ export declare function signalize<T>(observable: Observable<T>): ReadableSignalFnLike<T>;
@@ -1,6 +1,6 @@
1
1
  import { ReadonlySignal } from "../base";
2
2
  export function signalize(observable) {
3
- return new ReadonlySignal((destination) => {
3
+ return ReadonlySignal.create((destination) => {
4
4
  return observable.subscribe(destination);
5
5
  });
6
6
  }
@@ -1,2 +1,6 @@
1
- import { ReadableSignalLike } from "../../signals";
2
- export declare function useSignal<T>(signal$: ReadableSignalLike<T>): T;
1
+ import { Observable } from "rxjs";
2
+ type SignalLike<T> = {
3
+ obs: Observable<T>;
4
+ };
5
+ export declare function useSignal<T>(signal$: SignalLike<T>): T;
6
+ export {};
@@ -1,23 +1,4 @@
1
- import React from "react";
2
- import { useEventHandler } from "../../common/react";
1
+ import { useSyncObservable } from "../../common/react";
3
2
  export function useSignal(signal$) {
4
- const doUpdateRef = React.useRef(false);
5
- const subscribe = React.useCallback((update) => {
6
- const subscription = signal$.subscribe(() => {
7
- doUpdateRef.current = true;
8
- queueMicrotask(() => {
9
- if (!doUpdateRef.current)
10
- return;
11
- update();
12
- });
13
- });
14
- return () => {
15
- subscription.unsubscribe();
16
- };
17
- }, [signal$]);
18
- const getSnapshot = useEventHandler(() => {
19
- doUpdateRef.current = false;
20
- return signal$.peek();
21
- });
22
- return React.useSyncExternalStore(subscribe, getSnapshot);
3
+ return useSyncObservable(signal$.obs);
23
4
  }
@@ -1,14 +1,16 @@
1
- import { SubscriptionLike } from "rxjs";
2
- import { ReadableSignalLike } from "../base";
3
- import { Signal } from "./Signal";
4
1
  import { StateDevtoolsOptions } from "../../common/devtools";
5
- export declare class Computed<T> extends Signal<T> implements SubscriptionLike, ReadableSignalLike<T> {
6
- private static _EMPTY;
2
+ import { ComputeFn } from "../../signals/types";
3
+ export declare class Computed<T> {
4
+ private _computeFn;
5
+ private options?;
6
+ private _ls;
7
+ readonly obs: import("rxjs").Observable<T>;
7
8
  private _effect;
8
- constructor(computeFn: () => T, options?: StateDevtoolsOptions);
9
- complete(): void;
10
- /**
11
- * @deprecated use 'complete()' instead
12
- */
13
- unsubscribe(): void;
9
+ constructor(_computeFn: () => T, options?: StateDevtoolsOptions | undefined);
10
+ get(): T;
11
+ peek(): T;
12
+ private _start;
13
+ private _stop;
14
+ private static _EMPTY;
15
+ static create<T>(computeFn: () => T, options?: StateDevtoolsOptions): ComputeFn<T>;
14
16
  }
@@ -1,36 +1,89 @@
1
- import { Signal } from "./Signal";
1
+ import { distinctUntilChanged, ReplaySubject, share, map, finalize } from "rxjs";
2
+ import { DependencyTracker, Signal } from "../../signals";
2
3
  import { Effect } from "./Effect";
3
- export class Computed extends Signal {
4
- static _EMPTY = Symbol('empty');
5
- _effect;
6
- constructor(computeFn, options) {
4
+ export class Computed {
5
+ _computeFn;
6
+ options;
7
+ _ls;
8
+ obs;
9
+ _effect = null;
10
+ constructor(_computeFn, options) {
11
+ this._computeFn = _computeFn;
12
+ this.options = options;
13
+ const lsOptions = {
14
+ base: Computed.name,
15
+ ...(typeof options === 'string' ? { name: options } : options),
16
+ _skipValues: [Computed._EMPTY],
17
+ };
18
+ this._ls = new Signal(Computed._EMPTY, lsOptions);
19
+ this.obs = this._ls.obs.pipe(map((value) => {
20
+ if (value === Computed._EMPTY) {
21
+ return this._start();
22
+ }
23
+ return value;
24
+ }), distinctUntilChanged(), finalize(() => {
25
+ this._stop();
26
+ }), share({
27
+ connector: () => new ReplaySubject(1),
28
+ resetOnRefCountZero: true,
29
+ resetOnComplete: true,
30
+ }));
31
+ }
32
+ get() {
33
+ DependencyTracker.track({
34
+ getRang: () => {
35
+ if (!this._effect) {
36
+ throw new Error('Effect in not started. Possibly maximum call stack size exceeded.');
37
+ }
38
+ return this._effect._getRang();
39
+ },
40
+ obs: this.obs,
41
+ });
42
+ const v = this._ls.peek();
43
+ if (v === Computed._EMPTY) {
44
+ return this._computeFn();
45
+ }
46
+ return v;
47
+ }
48
+ peek() {
49
+ const v = this._ls.peek();
50
+ if (v === Computed._EMPTY) {
51
+ return this._computeFn();
52
+ }
53
+ return v;
54
+ }
55
+ _start() {
7
56
  let initialValue = Computed._EMPTY;
8
- const effect = new Effect(() => {
57
+ this._effect = new Effect(() => {
9
58
  if (initialValue === Computed._EMPTY) {
10
- initialValue = computeFn();
59
+ initialValue = this._computeFn();
60
+ this._ls.set(initialValue);
11
61
  return;
12
62
  }
13
- this._rang = effect._rang;
14
- this.value = computeFn();
15
- }, () => {
16
- this.complete();
63
+ this._ls.set(this._computeFn());
17
64
  });
18
- super(initialValue, {
19
- base: 'Computed',
20
- ...(typeof options === 'string' ? { name: options } : options)
21
- });
22
- this._effect = effect;
65
+ if (initialValue === Computed._EMPTY) {
66
+ throw new Error('Computed value is not initialized');
67
+ }
68
+ return initialValue;
23
69
  }
24
- complete() {
25
- if (this.closed)
26
- return;
27
- this._effect.complete();
28
- super.complete();
70
+ _stop() {
71
+ if (this._effect) {
72
+ this._effect.unsubscribe();
73
+ this._effect = null;
74
+ }
75
+ this._ls.set(Computed._EMPTY);
29
76
  }
30
- /**
31
- * @deprecated use 'complete()' instead
32
- */
33
- unsubscribe() {
34
- this.complete();
77
+ // === static ===
78
+ static _EMPTY = Symbol('empty');
79
+ static create(computeFn, options) {
80
+ const lc = new Computed(computeFn, options);
81
+ function computedFn() {
82
+ return lc.get();
83
+ }
84
+ computedFn.peek = () => lc.peek();
85
+ computedFn.get = () => lc.get();
86
+ computedFn.obs = lc.obs;
87
+ return computedFn;
35
88
  }
36
89
  }
@@ -1,19 +1,23 @@
1
1
  import { SubscriptionLike } from "rxjs";
2
+ type Teardown = () => void;
3
+ type EffectFn = () => void | Teardown;
2
4
  export declare class Effect implements SubscriptionLike {
3
- private _onComplete?;
4
5
  private _subscriptions;
5
6
  private _teardown?;
6
- protected readonly _scopeDestroyedSub: import("rxjs").Subscription | undefined;
7
7
  closed: boolean;
8
- _rang: number;
9
- constructor(effectFn: (ctx: (fn: () => void) => void) => void | (() => void), _onComplete?: (() => void) | undefined);
8
+ private _rang;
9
+ constructor(effectFn: EffectFn);
10
10
  /**
11
11
  * Выполняет функцию в tracked-контексте, подписываясь на Tracker.
12
12
  */
13
13
  private _runInTrackedContext;
14
- complete(): void;
14
+ unsubscribe(): void;
15
+ _getRang(): number;
15
16
  /**
16
- * @deprecated Use `complete()` method instead.
17
+ * @deprecated Use `unsubscribe()` method instead.
17
18
  */
18
- unsubscribe(): void;
19
+ complete(): void;
20
+ private _callTeardown;
21
+ static create(effectFn: EffectFn): Effect;
19
22
  }
23
+ export {};