[mod] output:typescript

This commit is contained in:
Christian Fraß 2023-07-11 20:40:12 +02:00
parent e25cb5915b
commit ed4c81def0

View file

@ -1,73 +1,77 @@
const output_typescript : type_output = { const output_typescript : type_output = {
"render": function (input_data) { "render": function (input_data) {
return ( const map_primitive_type = function (typename : string) : lib_plankton.prog.struct_type {
input_data["domains"] const mymap : Record<string, lib_plankton.prog.struct_type> = {
.map( "boolean": new lib_plankton.prog.struct_type_boolean(),
(domain) => lib_plankton.string.coin( "integer": new lib_plankton.prog.struct_type_integer(),
"type type_{{name}} = {\n{{fields}}\n};\nlet collection_{{name}} : {{collection_type}} = {{collection_value}};\n", // "float": new lib_plankton.prog.struct_type_integer(),
{ "string_short": new lib_plankton.prog.struct_type_string(),
"name": domain.name, "string_medium": new lib_plankton.prog.struct_type_string(),
"fields": ( "string_long": new lib_plankton.prog.struct_type_string(),
domain.data_fields };
.map( return mymap[typename];
(data_field) => lib_plankton.string.coin( };
"\t{{name}} : {{type}};{{macro_comment}}", const name_type : string = ("type_" + domain.name);
{ const name_collection : string = ("collection_" + domain.name);
const prog_output : lib_plankton.prog.type_output = lib_plankton.prog.output_typescript();
return prog_output.render_program(
new lib_plankton.prog.struct_program(
input_data["domains"]
.map(
(domain) => ([
new lib_plankton.prog.struct_statement_type_definition(
name_type,
new lib_plankton.prog.struct_type_record(
domain.data_fields
.map(
(data_field) => ({
"name": data_field.name, "name": data_field.name,
"type": lib_plankton.string.coin( "type": (
(data_field.nullable ? "(null | {{core}})" : "{{core}}"), data_field.nullable
{ ? new lib_plankton.prog.struct_type_union(
"core": { new lib_plankton.prog.struct_type_literal(
"boolean": "boolean", new lib_plankton.prog.struct_expression_literal(
"integer": "number", null
"float": "number", )
"string_short": "string", ),
"string_medium": "string", map_primitive_type(data_field["type"])
"string_long": "string",
}[data_field["type"]],
}
),
"macro_comment": (
(data_field.description !== null)
? lib_plankton.string.coin(
" // {{comment}}",
{
"comment": data_field.description,
}
) )
: "" : map_primitive_type(data_field["type"])
), ),
} "mandatory": true,
})
) )
) )
// .map(x => ("\t" + x))
.join("\n")
), ),
"collection_type": ( new lib_plankton.prog.struct_statement_declaration(
(domain.key_field === null) false,
? lib_plankton.string.coin( name_collection,
"Array<type_{{name}}>", (
{ (domain.key_field === null)
"name": domain.name, ? new lib_plankton.prog.struct_type_list(
} new lib_plankton.prog.struct_type_construction(
name_type,
null
)
)
: new lib_plankton.prog.struct_type_map(
new lib_plankton.prog.struct_type_integer(),
new lib_plankton.prog.struct_type_construction(
name_type,
null
)
)
),
(
(domain.key_field === null)
? new lib_plankton.prog.struct_expression_literal([])
: new lib_plankton.prog.struct_expression_literal({})
) )
: lib_plankton.string.coin( )
"Record<number, type_{{name}}>", ])
{
"name": domain.name,
}
)
),
"collection_value": (
(domain.key_field === null)
? "[]"
: "{}"
),
}
) )
.reduce((x, y) => x.concat(y), [])
) )
.map(x => (x + "\n"))
.join("\n")
); );
}, },
}; };