1 | import { IType, IAnyType, IAnyStateTreeNode, IAnyComplexType, IMaybe, ReferenceIdentifier, IStateTreeNode } from "../../internal";
|
2 | export declare type OnReferenceInvalidatedEvent<STN extends IAnyStateTreeNode> = {
|
3 | parent: IAnyStateTreeNode;
|
4 | invalidTarget: STN | undefined;
|
5 | invalidId: ReferenceIdentifier;
|
6 | replaceRef: (newRef: STN | null | undefined) => void;
|
7 | removeRef: () => void;
|
8 | cause: "detach" | "destroy" | "invalidSnapshotReference";
|
9 | };
|
10 | export declare type OnReferenceInvalidated<STN extends IAnyStateTreeNode> = (event: OnReferenceInvalidatedEvent<STN>) => void;
|
11 |
|
12 | export declare type ReferenceT<IT extends IAnyType> = IT["TypeWithoutSTN"] & IStateTreeNode<IReferenceType<IT>>;
|
13 | export interface ReferenceOptionsGetSet<IT extends IAnyComplexType> {
|
14 | get(identifier: ReferenceIdentifier, parent: IAnyStateTreeNode | null): ReferenceT<IT>;
|
15 | set(value: ReferenceT<IT>, parent: IAnyStateTreeNode | null): ReferenceIdentifier;
|
16 | }
|
17 | export interface ReferenceOptionsOnInvalidated<IT extends IAnyComplexType> {
|
18 | onInvalidated: OnReferenceInvalidated<ReferenceT<IT>>;
|
19 | }
|
20 | export declare type ReferenceOptions<IT extends IAnyComplexType> = ReferenceOptionsGetSet<IT> | ReferenceOptionsOnInvalidated<IT> | (ReferenceOptionsGetSet<IT> & ReferenceOptionsOnInvalidated<IT>);
|
21 |
|
22 | export interface IReferenceType<IT extends IAnyComplexType> extends IType<ReferenceIdentifier, ReferenceIdentifier, IT["TypeWithoutSTN"]> {
|
23 | }
|
24 |
|
25 |
|
26 |
|
27 |
|
28 | export declare function reference<IT extends IAnyComplexType>(subType: IT, options?: ReferenceOptions<IT>): IReferenceType<IT>;
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 | export declare function isReferenceType<IT extends IReferenceType<any>>(type: IT): type is IT;
|
36 | export declare function safeReference<IT extends IAnyComplexType>(subType: IT, options: (ReferenceOptionsGetSet<IT> | {}) & {
|
37 | acceptsUndefined: false;
|
38 | onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>;
|
39 | }): IReferenceType<IT>;
|
40 | export declare function safeReference<IT extends IAnyComplexType>(subType: IT, options?: (ReferenceOptionsGetSet<IT> | {}) & {
|
41 | acceptsUndefined?: boolean;
|
42 | onInvalidated?: OnReferenceInvalidated<ReferenceT<IT>>;
|
43 | }): IMaybe<IReferenceType<IT>>;
|