[mod] namespaces verwenden
This commit is contained in:
parent
94864eaeec
commit
fc4c1c4c27
|
|
@ -7,7 +7,7 @@ async function main(
|
||||||
const outputs : Record<string, type_output> = {
|
const outputs : Record<string, type_output> = {
|
||||||
"sqlite": output_sqlite,
|
"sqlite": output_sqlite,
|
||||||
"mysql": output_mysql,
|
"mysql": output_mysql,
|
||||||
"typescript": output_typescript,
|
"backend-typescript": output_typescript,
|
||||||
"jsonschema": output_jsonschema,
|
"jsonschema": output_jsonschema,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,34 +1,44 @@
|
||||||
function mysql_value_encode(
|
namespace _sindri.outputs.mysql
|
||||||
value : any
|
|
||||||
) : string
|
|
||||||
{
|
{
|
||||||
if (value === null) {
|
|
||||||
return "NULL";
|
/**
|
||||||
}
|
*/
|
||||||
else {
|
function value_encode(
|
||||||
switch (typeof(value)) {
|
value : any
|
||||||
case "boolean": {
|
) : string
|
||||||
return (value ? "TRUE" : "FALSE");
|
{
|
||||||
break;
|
if (value === null) {
|
||||||
}
|
return "NULL";
|
||||||
case "number": {
|
}
|
||||||
return value.toString();
|
else {
|
||||||
break;
|
switch (typeof(value)) {
|
||||||
}
|
case "boolean": {
|
||||||
case "string": {
|
return (value ? "TRUE" : "FALSE");
|
||||||
return ("'" + value + "'");
|
break;
|
||||||
break;
|
}
|
||||||
}
|
case "number": {
|
||||||
default: {
|
return value.toString();
|
||||||
throw (new Error("unhandled"));
|
break;
|
||||||
break;
|
}
|
||||||
|
case "string": {
|
||||||
|
return ("'" + value + "'");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
throw (new Error("unhandled"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const output_mysql : type_output = {
|
/**
|
||||||
"render": function (input_data) {
|
*/
|
||||||
|
export function render(
|
||||||
|
input_data
|
||||||
|
) : string
|
||||||
|
{
|
||||||
return (
|
return (
|
||||||
input_data.domains
|
input_data.domains
|
||||||
.map(
|
.map(
|
||||||
|
|
@ -114,7 +124,7 @@ const output_mysql : type_output = {
|
||||||
lib_plankton.string.coin(
|
lib_plankton.string.coin(
|
||||||
"DEFAULT {{value}}",
|
"DEFAULT {{value}}",
|
||||||
{
|
{
|
||||||
"value": mysql_value_encode(data_field.default),
|
"value": value_encode(data_field.default),
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
@ -195,5 +205,13 @@ const output_mysql : type_output = {
|
||||||
.map(x => (x + "\n"))
|
.map(x => (x + "\n"))
|
||||||
.join("\n")
|
.join("\n")
|
||||||
);
|
);
|
||||||
},
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
const output_mysql : type_output = {
|
||||||
|
"render": _sindri.outputs.mysql.render,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,34 +1,44 @@
|
||||||
function sqlite_value_encode(
|
namespace _sindri.outputs.sqlite
|
||||||
value : any
|
|
||||||
) : string
|
|
||||||
{
|
{
|
||||||
if (value === null) {
|
|
||||||
return "NULL";
|
/**
|
||||||
}
|
*/
|
||||||
else {
|
function value_encode(
|
||||||
switch (typeof(value)) {
|
value : any
|
||||||
case "boolean": {
|
) : string
|
||||||
return (value ? "TRUE" : "FALSE");
|
{
|
||||||
break;
|
if (value === null) {
|
||||||
}
|
return "NULL";
|
||||||
case "number": {
|
}
|
||||||
return value.toString();
|
else {
|
||||||
break;
|
switch (typeof(value)) {
|
||||||
}
|
case "boolean": {
|
||||||
case "string": {
|
return (value ? "TRUE" : "FALSE");
|
||||||
return ("'" + value + "'");
|
break;
|
||||||
break;
|
}
|
||||||
}
|
case "number": {
|
||||||
default: {
|
return value.toString();
|
||||||
throw (new Error("unhandled"));
|
break;
|
||||||
break;
|
}
|
||||||
|
case "string": {
|
||||||
|
return ("'" + value + "'");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
throw (new Error("unhandled"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const output_sqlite : type_output = {
|
/**
|
||||||
"render": function (input_data) {
|
*/
|
||||||
|
export function render(
|
||||||
|
input_data
|
||||||
|
) : string
|
||||||
|
{
|
||||||
return (
|
return (
|
||||||
input_data["domains"]
|
input_data["domains"]
|
||||||
.map(
|
.map(
|
||||||
|
|
@ -92,7 +102,7 @@ const output_sqlite : type_output = {
|
||||||
lib_plankton.string.coin(
|
lib_plankton.string.coin(
|
||||||
"DEFAULT {{value}}",
|
"DEFAULT {{value}}",
|
||||||
{
|
{
|
||||||
"value": sqlite_value_encode(data_field.default),
|
"value": value_encode(data_field.default),
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
@ -160,5 +170,10 @@ const output_sqlite : type_output = {
|
||||||
.map(x => (x + "\n"))
|
.map(x => (x + "\n"))
|
||||||
.join("\n")
|
.join("\n")
|
||||||
);
|
);
|
||||||
},
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const output_sqlite : type_output = {
|
||||||
|
"render": _sindri.outputs.sqlite.render,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,73 +1,173 @@
|
||||||
const output_typescript : type_output = {
|
namespace _sindri.outputs.typescript
|
||||||
"render": function (input_data) {
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
function render_entity_type(
|
||||||
|
domain
|
||||||
|
) : string
|
||||||
|
{
|
||||||
|
return lib_plankton.string.coin(
|
||||||
|
"type type_{{name}} = {\n{{fields}}\n};\n",
|
||||||
|
{
|
||||||
|
"name": domain.name,
|
||||||
|
"fields": (
|
||||||
|
domain.data_fields
|
||||||
|
.map(
|
||||||
|
(data_field) => lib_plankton.string.coin(
|
||||||
|
"\t{{name}} : {{type}};{{macro_comment}}",
|
||||||
|
{
|
||||||
|
"name": data_field.name,
|
||||||
|
"type": lib_plankton.string.coin(
|
||||||
|
(data_field.nullable ? "(null | {{core}})" : "{{core}}"),
|
||||||
|
{
|
||||||
|
"core": {
|
||||||
|
"boolean": "boolean",
|
||||||
|
"integer": "number",
|
||||||
|
"float": "number",
|
||||||
|
"string_short": "string",
|
||||||
|
"string_medium": "string",
|
||||||
|
"string_long": "string",
|
||||||
|
}[data_field["type"]],
|
||||||
|
}
|
||||||
|
),
|
||||||
|
"macro_comment": (
|
||||||
|
(data_field.description !== null)
|
||||||
|
? lib_plankton.string.coin(
|
||||||
|
" // {{comment}}",
|
||||||
|
{
|
||||||
|
"comment": data_field.description,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
: ""
|
||||||
|
),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
// .map(x => ("\t" + x))
|
||||||
|
.join("\n")
|
||||||
|
),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
function render_entity_collection(
|
||||||
|
domain
|
||||||
|
) : string
|
||||||
|
{
|
||||||
|
return lib_plankton.string.coin(
|
||||||
|
"let collection_{{name}} : {{collection_type}} = {{collection_value}};\n",
|
||||||
|
{
|
||||||
|
"name": domain.name,
|
||||||
|
"collection_type": (
|
||||||
|
(domain.key_field === null)
|
||||||
|
? lib_plankton.string.coin(
|
||||||
|
"Array<type_{{name}}>",
|
||||||
|
{
|
||||||
|
"name": domain.name,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
: lib_plankton.string.coin(
|
||||||
|
"Record<number, type_{{name}}>",
|
||||||
|
{
|
||||||
|
"name": domain.name,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
),
|
||||||
|
"collection_value": (
|
||||||
|
(domain.key_field === null)
|
||||||
|
? "[]"
|
||||||
|
: "{}"
|
||||||
|
),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
function render_entity(
|
||||||
|
domain
|
||||||
|
) : string
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
render_entity_type(domain)
|
||||||
|
+
|
||||||
|
render_entity_collection(domain)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
function render_functions(
|
||||||
|
domain
|
||||||
|
) : string
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
[
|
||||||
|
// list
|
||||||
|
"function {{name}}_list() : Promise<type_{{name}}> {return sql_query_get(\"SELECT * FROM {{name}};\");}",
|
||||||
|
// read
|
||||||
|
"",
|
||||||
|
// create
|
||||||
|
"",
|
||||||
|
// update
|
||||||
|
"",
|
||||||
|
// delete
|
||||||
|
"",
|
||||||
|
]
|
||||||
|
.join("\n\n")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
function render_api_actions(
|
||||||
|
domain
|
||||||
|
) : string
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
[
|
||||||
|
// list
|
||||||
|
"",
|
||||||
|
// read
|
||||||
|
"",
|
||||||
|
// create
|
||||||
|
"",
|
||||||
|
// update
|
||||||
|
"",
|
||||||
|
// delete
|
||||||
|
"",
|
||||||
|
]
|
||||||
|
.join("\n\n")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
export function render(
|
||||||
|
input_data
|
||||||
|
) : string
|
||||||
|
{
|
||||||
return (
|
return (
|
||||||
input_data["domains"]
|
input_data["domains"]
|
||||||
.map(
|
.map(
|
||||||
(domain) => lib_plankton.string.coin(
|
(domain) => render_entity(domain)
|
||||||
"type type_{{name}} = {\n{{fields}}\n};\nlet collection_{{name}} : {{collection_type}} = {{collection_value}};\n",
|
|
||||||
{
|
|
||||||
"name": domain.name,
|
|
||||||
"fields": (
|
|
||||||
domain.data_fields
|
|
||||||
.map(
|
|
||||||
(data_field) => lib_plankton.string.coin(
|
|
||||||
"\t{{name}} : {{type}};{{macro_comment}}",
|
|
||||||
{
|
|
||||||
"name": data_field.name,
|
|
||||||
"type": lib_plankton.string.coin(
|
|
||||||
(data_field.nullable ? "(null | {{core}})" : "{{core}}"),
|
|
||||||
{
|
|
||||||
"core": {
|
|
||||||
"boolean": "boolean",
|
|
||||||
"integer": "number",
|
|
||||||
"float": "number",
|
|
||||||
"string_short": "string",
|
|
||||||
"string_medium": "string",
|
|
||||||
"string_long": "string",
|
|
||||||
}[data_field["type"]],
|
|
||||||
}
|
|
||||||
),
|
|
||||||
"macro_comment": (
|
|
||||||
(data_field.description !== null)
|
|
||||||
? lib_plankton.string.coin(
|
|
||||||
" // {{comment}}",
|
|
||||||
{
|
|
||||||
"comment": data_field.description,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
: ""
|
|
||||||
),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
// .map(x => ("\t" + x))
|
|
||||||
.join("\n")
|
|
||||||
),
|
|
||||||
"collection_type": (
|
|
||||||
(domain.key_field === null)
|
|
||||||
? lib_plankton.string.coin(
|
|
||||||
"Array<type_{{name}}>",
|
|
||||||
{
|
|
||||||
"name": domain.name,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
: lib_plankton.string.coin(
|
|
||||||
"Record<number, type_{{name}}>",
|
|
||||||
{
|
|
||||||
"name": domain.name,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
"collection_value": (
|
|
||||||
(domain.key_field === null)
|
|
||||||
? "[]"
|
|
||||||
: "{}"
|
|
||||||
),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
.map(x => (x + "\n"))
|
.map(x => (x + "\n"))
|
||||||
.join("\n")
|
.join("\n")
|
||||||
);
|
);
|
||||||
},
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const output_typescript : type_output = {
|
||||||
|
"render": _sindri.outputs.typescript.render,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@ lib/plankton/plankton.d.ts \
|
||||||
source/types.ts \
|
source/types.ts \
|
||||||
source/outputs/sqlite.ts \
|
source/outputs/sqlite.ts \
|
||||||
source/outputs/mysql.ts \
|
source/outputs/mysql.ts \
|
||||||
source/outputs/typescript.ts \
|
|
||||||
source/outputs/jsonschema.ts \
|
source/outputs/jsonschema.ts \
|
||||||
|
source/outputs/typescript.ts \
|
||||||
source/conf.ts \
|
source/conf.ts \
|
||||||
source/main.ts
|
source/main.ts
|
||||||
@ ${cmd_log} "compiling …"
|
@ ${cmd_log} "compiling …"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue