declare var Map: { new(): Map }; interface Map { get(index:IndexType): ValueType, set(index:IndexType, value:ValueType) } declare var MappingSystem: MappingSystemConstructor; interface MappingSystemConstructor { new(): MappingSystem NodeMappingSystem: NodeMappingSystemConstructor Pointer: MappingSystemPointerConstructor } interface MappingSystem { data: DataType[], p2oMap: Map, o2pMap: Map> addToMaps(index: IndexType, meta: MetaType, value: LiveType) } interface NodeMappingSystemConstructor { new(document?: Document): NodeMappingSystem initFromDocument(): NodeMappingSystem initFromData(data: DehydratedNode[]): NodeMappingSystem } interface DehydratedNode { nodeName: string, nodeValue: string, outerHTML: string } interface NodeMappingSystem extends MappingSystem { addNodeAndChildren(node: Node) importData(data: DehydratedNode[]) getPointerListFor(nodes: {length:number,[i:number]:Node}): MappingSystemPointer[] getPointerFor(node: Node): MappingSystemPointer getObjectListFor(pointers: MappingSystemPointer[]): Node[] getObjectFor(pointer: MappingSystemPointer): Node } interface MappingSystemPointer { index: IndexType, meta: MetaType } interface MappingSystemPointerConstructor { new(index:IndexType, meta?:MetaType): MappingSystemPointer }