molstar
Version:
A comprehensive macromolecular library.
138 lines (137 loc) • 5.93 kB
TypeScript
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { UUID } from '../mol-util';
import { StateTransform } from './transform';
import { ParamDefinition } from '../mol-util/param-definition';
import { State } from './state';
import { StateSelection, StateTransformer } from '../mol-state';
import { StateBuilder } from './state/builder';
export { StateObject, StateObjectCell };
interface StateObject<D = any, T extends StateObject.Type = StateObject.Type<any>> {
readonly id: UUID;
readonly type: T;
readonly data: D;
readonly label: string;
readonly description?: string;
readonly tags?: string[];
}
declare namespace StateObject {
function factory<T extends Type>(): <D = {}>(type: T) => {
new (data: D, props?: {
label: string;
description?: string | undefined;
} | undefined): {
id: UUID;
type: T;
label: string;
description?: string | undefined;
data: D;
};
type: T;
is(obj?: StateObject<any, Type<any>> | undefined): obj is {
id: UUID;
type: T;
label: string;
description?: string | undefined;
data: D;
};
};
type Type<Cls extends string = string> = {
name: string;
typeClass: Cls;
};
type Ctor<T extends StateObject = StateObject> = {
new (...args: any[]): T;
is(obj?: StateObject): boolean;
type: any;
};
type From<C extends Ctor> = C extends Ctor<infer T> ? T : never;
function create<Data, T extends Type>(type: T): {
new (data: Data, props?: {
label: string;
description?: string | undefined;
} | undefined): {
id: UUID;
type: T;
label: string;
description?: string | undefined;
data: Data;
};
type: T;
is(obj?: StateObject<any, Type<any>> | undefined): obj is {
id: UUID;
type: T;
label: string;
description?: string | undefined;
data: Data;
};
};
function hasTag(o: StateObject, t: string): boolean;
/** A special object indicating a transformer result has no value. */
const Null: StateObject<any, any>;
}
interface StateObjectCell<T extends StateObject = StateObject, F extends StateTransform = StateTransform> {
parent?: State;
transform: F;
sourceRef: StateTransform.Ref | undefined;
status: StateObjectCell.Status;
state: StateTransform.State;
params: {
definition: ParamDefinition.Params;
values: any;
} | undefined;
paramsNormalizedVersion: string;
dependencies: {
dependentBy: StateObjectCell[];
dependsOn: StateObjectCell[];
};
errorText?: string;
obj?: T;
cache: unknown | undefined;
}
declare namespace StateObjectCell {
type Status = 'ok' | 'error' | 'pending' | 'processing';
type Obj<C extends StateObjectCell> = C extends StateObjectCell<infer T> ? T : never;
type Transform<C extends StateObjectCell> = C extends StateObjectCell<any, infer T> ? T : never;
type Transformer<C extends StateObjectCell> = C extends StateObjectCell<any, StateTransform<infer T>> ? T : never;
function is(o: any): o is StateObjectCell;
type Ref = StateTransform.Ref | StateObjectCell | StateObjectSelector;
function resolve(state: State, refOrCellOrSelector: StateTransform.Ref | StateObjectCell | StateObjectSelector): StateObjectCell<StateObject<any, StateObject.Type<any>>, StateTransform<StateTransformer<StateObject<any, StateObject.Type<any>>, StateObject<any, StateObject.Type<any>>, any>>> | undefined;
}
export declare class StateObjectTracker<T extends StateObject> {
private state;
private query;
private version;
cell: StateObjectCell | undefined;
data: T['data'] | undefined;
setQuery(sel: StateSelection.Selector): void;
update(): boolean;
constructor(state: State);
}
export declare class StateObjectSelector<S extends StateObject = StateObject, T extends StateTransformer = StateTransformer> {
ref: StateTransform.Ref;
state?: State | undefined;
get cell(): StateObjectCell<S, StateTransform<T>> | undefined;
get obj(): S | undefined;
get data(): S['data'] | undefined;
/** Create a new build and apply update or use the provided one. */
update(params: StateTransformer.Params<T>, builder?: StateBuilder.Root | StateBuilder.To<any>): StateBuilder;
update(params: (old: StateTransformer.Params<T>) => StateTransformer.Params<T> | void, builder?: StateBuilder.Root | StateBuilder.To<any>): StateBuilder;
/** Checks if the object exists. If not throw an error. */
checkValid(): boolean;
get isOk(): boolean | undefined;
constructor(ref: StateTransform.Ref, state?: State | undefined);
}
export declare namespace StateObjectSelector {
type Obj<S extends StateObjectSelector> = S extends StateObjectSelector<infer A> ? A : never;
type Transformer<S extends StateObjectSelector> = S extends StateObjectSelector<any, infer T> ? T : never;
}
export declare type StateObjectRef<S extends StateObject = StateObject> = StateObjectSelector<S> | StateObjectCell<S> | StateTransform.Ref;
export declare namespace StateObjectRef {
function resolveRef<S extends StateObject>(ref?: StateObjectRef<S>): StateTransform.Ref | undefined;
function resolve<S extends StateObject>(state: State, ref?: StateObjectRef<S>): StateObjectCell<S> | undefined;
function resolveAndCheck<S extends StateObject>(state: State, ref?: StateObjectRef<S>): StateObjectCell<S> | undefined;
}