/** */ interface type_output extends lib_plankton.call.type_coproduct { /** */ render_element( element : type_element ) : type_result ; } /** */ let output_kind_pool : Record< string, ( ( data : any, make : ((raw : any) => type_output) ) => type_output ) > = {}; /** */ function output_kind_register( name : string, factory : ( (data : any, make : ((raw : any) => type_output)) => type_output ) ) : void { if (name in output_kind_pool) { throw (new Error("kind '" + name + "' already registered")); } else { output_kind_pool[name] = factory; } } /** */ function output_make( raw : any ) : type_output { if (! (raw["kind"] in output_kind_pool)) { throw (new Error("kind '" + raw["kind"] + "' not registered")); } else { return output_kind_pool[raw["kind"]](raw["data"], output_make); } }