docdef/source/elements/base.ts

81 lines
973 B
TypeScript
Raw Normal View History

2024-02-07 15:14:30 +01:00
/*
type type_element_text = {
content : string;
};
type type_element_group = {
members : Array<type_element>;
};
type type_element = (
type_element_text
|
type_element_group
);
*/
/**
*/
interface type_element
{
render_html(
) : string
;
}
/**
*/
let element_kind_pool : Record<
string,
(
(
data : any,
make : ((raw : any) => type_element)
)
=>
type_element
)
> = {};
/**
*/
function element_kind_register(
name : string,
factory : (
(data : any, make : ((raw : any) => type_element))
=>
type_element
)
) : void
{
if (name in element_kind_pool)
{
throw (new Error("kind '" + name + "' already registered"));
}
else
{
element_kind_pool[name] = factory;
}
}
/**
*/
function element_make(
raw : any
) : type_element
{
if (! (raw["kind"] in element_kind_pool))
{
throw (new Error("kind '" + raw["kind"] + "' not registered"));
}
else
{
return element_kind_pool[raw["kind"]](raw["data"], element_make);
}
}