diff --git a/src/mol-state/transformer.ts b/src/mol-state/transformer.ts index 884c2e097844314849d88b843aba1ee9d697ea25..754e2728d61b4c799b52831af01a285a5b2edf32 100644 --- a/src/mol-state/transformer.ts +++ b/src/mol-state/transformer.ts @@ -81,6 +81,17 @@ export namespace Transformer { } const registry = new Map<Id, Transformer<any, any>>(); + const fromTypeIndex: Map<StateObject.Type, Transformer[]> = new Map(); + + function _index(tr: Transformer) { + for (const t of tr.definition.from) { + if (fromTypeIndex.has(t.type)) { + fromTypeIndex.get(t.type)!.push(tr); + } else { + fromTypeIndex.set(t.type, [tr]); + } + } + } export function get(id: string): Transformer { const t = registry.get(id as Id); @@ -90,6 +101,10 @@ export namespace Transformer { return t; } + export function fromType(type: StateObject.Type): ReadonlyArray<Transformer> { + return fromTypeIndex.get(type) || []; + } + export function create<A extends StateObject, B extends StateObject, P>(namespace: string, definition: Definition<A, B, P>) { const { name } = definition; const id = `${namespace}.${name}` as Id; @@ -105,6 +120,7 @@ export namespace Transformer { definition }; registry.set(id, t); + _index(t); return t; } diff --git a/src/mol-util/rx-event-helper.ts b/src/mol-util/rx-event-helper.ts index 4ef9d5eef0d3a4d735a643bbee2b058274f0fd4d..586d2d3e002373bee454bd514e31f58fb988ce36 100644 --- a/src/mol-util/rx-event-helper.ts +++ b/src/mol-util/rx-event-helper.ts @@ -19,6 +19,7 @@ namespace RxEventHelper { const helper = new _RxEventHelper(); const ret: RxEventHelper = (<T>() => helper.create<T>()) as RxEventHelper; ret.dispose = () => helper.dispose(); + ret.behavior = (v) => helper.behavior(v); return ret; } }