formgen/source/logic/ioc/wrapper.ts

91 lines
1.6 KiB
TypeScript
Raw Normal View History

2026-09-30 08:38:52 +02:00
namespace formgen.ioc
2026-04-22 22:24:32 +02:00
{
/**
*/
2026-09-30 08:38:52 +02:00
export class class_ioc_wrapper<type_value_inner, type_value_outer> implements interface_ioc<type_value_outer>
2026-04-22 22:24:32 +02:00
{
/**
*/
2026-09-30 08:38:52 +02:00
private core : interface_ioc<type_value_inner>;
2026-04-22 22:24:32 +02:00
/**
*/
private wrap : ((type_value_inner) => type_value_outer);
/**
*/
private unwrap : ((type_value_outer) => type_value_inner);
/**
*/
public constructor(
2026-09-30 08:38:52 +02:00
core : interface_ioc<type_value_inner>,
2026-04-22 22:24:32 +02:00
wrap : ((type_value_inner) => type_value_outer),
unwrap : ((type_value_outer) => type_value_inner)
)
{
this.core = core;
this.wrap = wrap;
this.unwrap = unwrap;
}
/**
* [implementation]
*/
public async setup(
element_target : Element
) : Promise<void>
{
return this.core.setup(element_target);
}
/**
* [implementation]
*/
public async read(
) : Promise<type_value_outer>
{
const value_inner : type_value_inner = await this.core.read();
const value : type_value_outer = this.wrap(value_inner);
return Promise.resolve<type_value_outer>(value);
}
/**
* [implementation]
*/
public async write(
value : type_value_outer
) : Promise<void>
{
const value_inner : type_value_inner = this.unwrap(value);
await this.core.write(value_inner);
return Promise.resolve<void>(undefined);
}
2026-09-30 08:38:52 +02:00
/**
* [implementation]
*/
public listen(
handler : type_handler<type_value_outer>
) : void
{
this.core.listen(
async (value_inner) => {
const value_outer : type_value_outer = this.wrap(value_inner);
await handler(value_outer);
}
)
}
2026-04-22 22:24:32 +02:00
}
}