From 7e14087045cf3a1d38fda757c561662b53638b61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Fra=C3=9F?= Date: Tue, 25 Jul 2023 17:36:35 +0200 Subject: [PATCH] [mod] output:backend-typescript --- source/outputs/backend_typescript.ts | 1445 +++++++++++++------------- 1 file changed, 732 insertions(+), 713 deletions(-) diff --git a/source/outputs/backend_typescript.ts b/source/outputs/backend_typescript.ts index 46f96de..f47464a 100644 --- a/source/outputs/backend_typescript.ts +++ b/source/outputs/backend_typescript.ts @@ -527,7 +527,7 @@ namespace _sindri.outputs.backend.typescript "{{key}} = {{value}}", { "key": field.name, - "value": (":" + field.name), + "value": (":" + ("value_" + field.name)), } ) ) @@ -553,7 +553,7 @@ namespace _sindri.outputs.backend.typescript domain.data_fields .map( field => ({ - "key": field.name, + "key": ("value_" + field.name), "value": new lib_plankton.prog.struct_expression_fieldaccess( new lib_plankton.prog.struct_expression_variable("value"), field.name, @@ -666,87 +666,18 @@ namespace _sindri.outputs.backend.typescript [] ) ) - // misc + // main .concat( [ - // lib_plankton.log.conf_push([new lib_plankton.log.class_channel_stdout()]); - new lib_plankton.prog.struct_statement_procedure_call( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "log" - ), - "conf_push" - ), + new lib_plankton.prog.struct_statement_function_definition( + "main", [ - new lib_plankton.prog.struct_expression_list( - [ - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "new lib_plankton" // TODO: HACK! - ), - "log" - ), - "class_channel_stdout" - ), - [ - ] - ), - ] - ) - ] - ), - ] - ) - // api - .concat( - [ - new lib_plankton.prog.struct_statement_comment( - false, - [ - "define api", - ] - ), - new lib_plankton.prog.struct_statement_declaration( - true, - "rest", - new lib_plankton.prog.struct_type_construction( - "lib_plankton.rest.type_rest", - null - ), - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable("lib_plankton"), - "rest" - ), - "make" - ), - [ - new lib_plankton.prog.struct_expression_dict( - [ - { - "key": "set_access_control_headers", - "value": new lib_plankton.prog.struct_expression_literal(true), - }, - ] - ), - ] - ), - ), - new lib_plankton.prog.struct_statement_block( - [ - new lib_plankton.prog.struct_statement_comment( - false, - [ - "meta", - ] - ), - new lib_plankton.prog.struct_statement_block( + ], + new lib_plankton.prog.struct_type_void(), + ( + [] + // misc + .concat( [ new lib_plankton.prog.struct_statement_procedure_call( new lib_plankton.prog.struct_expression_fieldaccess( @@ -754,661 +685,749 @@ namespace _sindri.outputs.backend.typescript new lib_plankton.prog.struct_expression_variable( "lib_plankton" ), - "rest" + "log" ), - "register" + "conf_push" ), [ - new lib_plankton.prog.struct_expression_variable("rest"), - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "http" - ), - "enum_method" - ), - "get" - ), - new lib_plankton.prog.struct_expression_literal( - "/_spec" - ), - new lib_plankton.prog.struct_expression_dict( + new lib_plankton.prog.struct_expression_list( [ - { - "key": "execution", - "value": new lib_plankton.prog.struct_expression_abstraction( - [ - { - "name": "stuff", - "type": null, - } - ], - null, - [ - new lib_plankton.prog.struct_statement_return( - new lib_plankton.prog.struct_expression_dict( - [ - { - "key": "status_code", - "value": new lib_plankton.prog.struct_expression_literal(200), - }, - { - "key": "data", - "value": new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "rest" - ), - "to_oas" - ), - [ - new lib_plankton.prog.struct_expression_variable( - "rest" - ), - ] - ), - } - ] - ) + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "new lib_plankton" // TODO: HACK! ), - ], - { - "async": true, - } + "log" + ), + "class_channel_stdout" ), - }, + [ + ] + ), ] - ), + ) ] ), ] - ), - ] - .concat( - input_data["domains"] - .map( - domain => new lib_plankton.prog.struct_statement_block( - [ - new lib_plankton.prog.struct_statement_comment( - false, - [ - ("domain:" + domain.name), - ] - ), - // list - new lib_plankton.prog.struct_statement_procedure_call( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "rest" - ), - "register" - ), - [ - new lib_plankton.prog.struct_expression_variable("rest"), - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "http" - ), - "enum_method" - ), - "get" - ), - new lib_plankton.prog.struct_expression_literal( - lib_plankton.string.coin( - "/{{name}}", - { - "name": domain.name, - } - ) - ), - new lib_plankton.prog.struct_expression_dict( - [ - { - "key": "execution", - "value": new lib_plankton.prog.struct_expression_abstraction( - [ - { - "name": "stuff", - "type": null, - } - ], - null, - [ - new lib_plankton.prog.struct_statement_return( - new lib_plankton.prog.struct_expression_dict( - [ - { - "key": "status_code", - "value": new lib_plankton.prog.struct_expression_literal(200), - }, - { - "key": "data", - "value": new lib_plankton.prog.struct_expression_await( - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_variable(name_repository_function_list(domain)), - [ - ] - ) - ), - } - ] - ) - ), - ], - { - "async": true, - } - ), - } - // TODO - ] - ), - ] - ), - // get - new lib_plankton.prog.struct_statement_procedure_call( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "rest" - ), - "register" - ), - [ - new lib_plankton.prog.struct_expression_variable("rest"), - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "http" - ), - "enum_method" - ), - "get" - ), - new lib_plankton.prog.struct_expression_literal( - lib_plankton.string.coin( - "/{{name}}/:id", - { - "name": domain.name, - } - ) - ), - new lib_plankton.prog.struct_expression_dict( - [ - { - "key": "execution", - "value": new lib_plankton.prog.struct_expression_abstraction( - [ - { - "name": "stuff", - "type": null, - } - ], - null, - [ - new lib_plankton.prog.struct_statement_return( - new lib_plankton.prog.struct_expression_dict( - [ - { - "key": "status_code", - "value": new lib_plankton.prog.struct_expression_literal(200), - }, - { - "key": "data", - "value": new lib_plankton.prog.struct_expression_await( - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_variable(name_repository_function_read(domain)), - [ - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_variable("parseInt"), - [ - new lib_plankton.prog.struct_expression_projection( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable("stuff"), - "path_parameters" - ), - new lib_plankton.prog.struct_expression_literal("id") - ), - ] - ), - ] - ) - ), - } - ] - ) - ), - ], - { - "async": true, - } - ), - } - ] - ), - ] - ), - // add - new lib_plankton.prog.struct_statement_procedure_call( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "rest" - ), - "register" - ), - [ - new lib_plankton.prog.struct_expression_variable("rest"), - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "http" - ), - "enum_method" - ), - "post" - ), - new lib_plankton.prog.struct_expression_literal( - lib_plankton.string.coin( - "/{{name}}", - { - "name": domain.name, - } - ) - ), - new lib_plankton.prog.struct_expression_dict( - [ - { - "key": "execution", - "value": new lib_plankton.prog.struct_expression_abstraction( - [ - { - "name": "stuff", - "type": null, - } - ], - null, - [ - new lib_plankton.prog.struct_statement_declaration( - true, - "id", - null, - new lib_plankton.prog.struct_expression_await( - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_variable(name_repository_function_create(domain)), - [ - new lib_plankton.prog.struct_expression_cast( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable("stuff"), - "input" - ), - new lib_plankton.prog.struct_type_construction( - name_type(domain), - null - ), - ), - ] - ) - ) - ), - new lib_plankton.prog.struct_statement_return( - new lib_plankton.prog.struct_expression_dict( - [ - { - "key": "status_code", - "value": new lib_plankton.prog.struct_expression_literal(201), - }, - { - "key": "data", - "value": new lib_plankton.prog.struct_expression_variable("id"), - } - ] - ) - ), - ], - { - "async": true, - } - ), - } - ] - ), - ] - ), - // change - new lib_plankton.prog.struct_statement_procedure_call( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "rest" - ), - "register" - ), - [ - new lib_plankton.prog.struct_expression_variable("rest"), - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "http" - ), - "enum_method" - ), - "patch" - ), - new lib_plankton.prog.struct_expression_literal( - lib_plankton.string.coin( - "/{{name}}/:id", - { - "name": domain.name, - } - ) - ), - new lib_plankton.prog.struct_expression_dict( - [ - { - "key": "execution", - "value": new lib_plankton.prog.struct_expression_abstraction( - [ - { - "name": "stuff", - "type": null, - } - ], - null, - [ - new lib_plankton.prog.struct_statement_declaration( - true, - "dummy", - null, - new lib_plankton.prog.struct_expression_await( - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_variable(name_repository_function_update(domain)), - [ - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_variable("parseInt"), - [ - new lib_plankton.prog.struct_expression_projection( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable("stuff"), - "path_parameters" - ), - new lib_plankton.prog.struct_expression_literal("id") - ), - ] - ), - new lib_plankton.prog.struct_expression_cast( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable("stuff"), - "input" - ), - new lib_plankton.prog.struct_type_construction( - name_type(domain), - null - ), - ), - ] - ) - ) - ), - new lib_plankton.prog.struct_statement_return( - new lib_plankton.prog.struct_expression_dict( - [ - { - "key": "status_code", - "value": new lib_plankton.prog.struct_expression_literal(200), - }, - { - "key": "data", - "value": new lib_plankton.prog.struct_expression_literal(null), - } - ] - ) - ), - ], - { - "async": true, - } - ), - } - ] - ), - ] - ), - // remove - new lib_plankton.prog.struct_statement_procedure_call( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "rest" - ), - "register" - ), - [ - new lib_plankton.prog.struct_expression_variable("rest"), - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable( - "lib_plankton" - ), - "http" - ), - "enum_method" - ), - "delete" - ), - new lib_plankton.prog.struct_expression_literal( - lib_plankton.string.coin( - "/{{name}}/:id", - { - "name": domain.name, - } - ) - ), - new lib_plankton.prog.struct_expression_dict( - [ - { - "key": "execution", - "value": new lib_plankton.prog.struct_expression_abstraction( - [ - { - "name": "stuff", - "type": null, - } - ], - null, - [ - new lib_plankton.prog.struct_statement_return( - new lib_plankton.prog.struct_expression_dict( - [ - { - "key": "status_code", - "value": new lib_plankton.prog.struct_expression_literal(200), - }, - { - "key": "data", - "value": new lib_plankton.prog.struct_expression_await( - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_variable(name_repository_function_delete(domain)), - [ - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_variable("parseInt"), - [ - new lib_plankton.prog.struct_expression_projection( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable("stuff"), - "path_parameters" - ), - new lib_plankton.prog.struct_expression_literal("id") - ), - ] - ), - ] - ) - ), - } - ] - ) - ), - ], - { - "async": true, - } - ), - } - ] - ), - ] - ), - ] - ) ) - ) - ) - ] - ) - // server - .concat( - [ - new lib_plankton.prog.struct_statement_comment( - false, - [ - "setup server", - ] - ), - new lib_plankton.prog.struct_statement_declaration( - true, - "server", - null, // TODO - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable("lib_plankton"), - "server" - ), - "make" - ), - [ - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable("conf"), - "server_port" - ), - new lib_plankton.prog.struct_expression_abstraction( - [ - { - "name": "input", - "type": null, - }, - ], - null, - [ - new lib_plankton.prog.struct_statement_declaration( - true, - "http_request", - new lib_plankton.prog.struct_type_construction( - "lib_plankton.http.type_request", - null - ), - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable("lib_plankton"), - "http" - ), - "decode_request" - ), - [ - new lib_plankton.prog.struct_expression_variable("input"), - ] - ) + // api + .concat( + [ + new lib_plankton.prog.struct_statement_comment( + false, + [ + "define api", + ] + ), + new lib_plankton.prog.struct_statement_declaration( + true, + "rest", + new lib_plankton.prog.struct_type_construction( + "lib_plankton.rest.type_rest", + null ), - new lib_plankton.prog.struct_statement_declaration( - true, - "http_response", - new lib_plankton.prog.struct_type_construction( - "lib_plankton.http.type_response", - null + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable("lib_plankton"), + "rest" + ), + "make" ), - new lib_plankton.prog.struct_expression_await( - new lib_plankton.prog.struct_expression_function_application( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable("lib_plankton"), - "rest" - ), - "call" - ), + [ + new lib_plankton.prog.struct_expression_dict( [ - new lib_plankton.prog.struct_expression_variable("rest"), - new lib_plankton.prog.struct_expression_variable("http_request"), + { + "key": "set_access_control_headers", + "value": new lib_plankton.prog.struct_expression_literal(true), + }, + ] + ), + ] + ), + ), + new lib_plankton.prog.struct_statement_block( + [ + new lib_plankton.prog.struct_statement_comment( + false, + [ + "meta", + ] + ), + new lib_plankton.prog.struct_statement_block( + [ + new lib_plankton.prog.struct_statement_procedure_call( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "rest" + ), + "register" + ), + [ + new lib_plankton.prog.struct_expression_variable("rest"), + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "http" + ), + "enum_method" + ), + "get" + ), + new lib_plankton.prog.struct_expression_literal( + "/_spec" + ), + new lib_plankton.prog.struct_expression_dict( + [ + { + "key": "execution", + "value": new lib_plankton.prog.struct_expression_abstraction( + [ + { + "name": "stuff", + "type": null, + } + ], + null, + [ + new lib_plankton.prog.struct_statement_return( + new lib_plankton.prog.struct_expression_dict( + [ + { + "key": "status_code", + "value": new lib_plankton.prog.struct_expression_literal(200), + }, + { + "key": "data", + "value": new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "rest" + ), + "to_oas" + ), + [ + new lib_plankton.prog.struct_expression_variable( + "rest" + ), + ] + ), + } + ] + ) + ), + ], + { + "async": true, + } + ), + }, + ] + ), + ] + ), + ] + ), + ] + .concat( + input_data["domains"] + .map( + domain => new lib_plankton.prog.struct_statement_block( + [ + new lib_plankton.prog.struct_statement_comment( + false, + [ + ("domain:" + domain.name), + ] + ), + // list + new lib_plankton.prog.struct_statement_procedure_call( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "rest" + ), + "register" + ), + [ + new lib_plankton.prog.struct_expression_variable("rest"), + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "http" + ), + "enum_method" + ), + "get" + ), + new lib_plankton.prog.struct_expression_literal( + lib_plankton.string.coin( + "/{{name}}", + { + "name": domain.name, + } + ) + ), + new lib_plankton.prog.struct_expression_dict( + [ + { + "key": "execution", + "value": new lib_plankton.prog.struct_expression_abstraction( + [ + { + "name": "stuff", + "type": null, + } + ], + null, + [ + new lib_plankton.prog.struct_statement_return( + new lib_plankton.prog.struct_expression_dict( + [ + { + "key": "status_code", + "value": new lib_plankton.prog.struct_expression_literal(200), + }, + { + "key": "data", + "value": new lib_plankton.prog.struct_expression_await( + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_variable(name_repository_function_list(domain)), + [ + ] + ) + ), + } + ] + ) + ), + ], + { + "async": true, + } + ), + } + // TODO + ] + ), + ] + ), + // get + new lib_plankton.prog.struct_statement_procedure_call( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "rest" + ), + "register" + ), + [ + new lib_plankton.prog.struct_expression_variable("rest"), + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "http" + ), + "enum_method" + ), + "get" + ), + new lib_plankton.prog.struct_expression_literal( + lib_plankton.string.coin( + "/{{name}}/:id", + { + "name": domain.name, + } + ) + ), + new lib_plankton.prog.struct_expression_dict( + [ + { + "key": "execution", + "value": new lib_plankton.prog.struct_expression_abstraction( + [ + { + "name": "stuff", + "type": null, + } + ], + null, + [ + new lib_plankton.prog.struct_statement_return( + new lib_plankton.prog.struct_expression_dict( + [ + { + "key": "status_code", + "value": new lib_plankton.prog.struct_expression_literal(200), + }, + { + "key": "data", + "value": new lib_plankton.prog.struct_expression_await( + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_variable(name_repository_function_read(domain)), + [ + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_variable("parseInt"), + [ + new lib_plankton.prog.struct_expression_projection( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable("stuff"), + "path_parameters" + ), + new lib_plankton.prog.struct_expression_literal("id") + ), + ] + ), + ] + ) + ), + } + ] + ) + ), + ], + { + "async": true, + } + ), + } + ] + ), + ] + ), + // add + new lib_plankton.prog.struct_statement_procedure_call( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "rest" + ), + "register" + ), + [ + new lib_plankton.prog.struct_expression_variable("rest"), + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "http" + ), + "enum_method" + ), + "post" + ), + new lib_plankton.prog.struct_expression_literal( + lib_plankton.string.coin( + "/{{name}}", + { + "name": domain.name, + } + ) + ), + new lib_plankton.prog.struct_expression_dict( + [ + { + "key": "execution", + "value": new lib_plankton.prog.struct_expression_abstraction( + [ + { + "name": "stuff", + "type": null, + } + ], + null, + [ + new lib_plankton.prog.struct_statement_declaration( + true, + "id", + null, + new lib_plankton.prog.struct_expression_await( + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_variable(name_repository_function_create(domain)), + [ + new lib_plankton.prog.struct_expression_cast( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable("stuff"), + "input" + ), + new lib_plankton.prog.struct_type_construction( + name_type(domain), + null + ), + ), + ] + ) + ) + ), + new lib_plankton.prog.struct_statement_return( + new lib_plankton.prog.struct_expression_dict( + [ + { + "key": "status_code", + "value": new lib_plankton.prog.struct_expression_literal(201), + }, + { + "key": "data", + "value": new lib_plankton.prog.struct_expression_variable("id"), + } + ] + ) + ), + ], + { + "async": true, + } + ), + } + ] + ), + ] + ), + // change + new lib_plankton.prog.struct_statement_procedure_call( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "rest" + ), + "register" + ), + [ + new lib_plankton.prog.struct_expression_variable("rest"), + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "http" + ), + "enum_method" + ), + "patch" + ), + new lib_plankton.prog.struct_expression_literal( + lib_plankton.string.coin( + "/{{name}}/:id", + { + "name": domain.name, + } + ) + ), + new lib_plankton.prog.struct_expression_dict( + [ + { + "key": "execution", + "value": new lib_plankton.prog.struct_expression_abstraction( + [ + { + "name": "stuff", + "type": null, + } + ], + null, + [ + new lib_plankton.prog.struct_statement_declaration( + true, + "dummy", + null, + new lib_plankton.prog.struct_expression_await( + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_variable(name_repository_function_update(domain)), + [ + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_variable("parseInt"), + [ + new lib_plankton.prog.struct_expression_projection( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable("stuff"), + "path_parameters" + ), + new lib_plankton.prog.struct_expression_literal("id") + ), + ] + ), + new lib_plankton.prog.struct_expression_cast( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable("stuff"), + "input" + ), + new lib_plankton.prog.struct_type_construction( + name_type(domain), + null + ), + ), + ] + ) + ) + ), + new lib_plankton.prog.struct_statement_return( + new lib_plankton.prog.struct_expression_dict( + [ + { + "key": "status_code", + "value": new lib_plankton.prog.struct_expression_literal(200), + }, + { + "key": "data", + "value": new lib_plankton.prog.struct_expression_literal(null), + } + ] + ) + ), + ], + { + "async": true, + } + ), + } + ] + ), + ] + ), + // remove + new lib_plankton.prog.struct_statement_procedure_call( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "rest" + ), + "register" + ), + [ + new lib_plankton.prog.struct_expression_variable("rest"), + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable( + "lib_plankton" + ), + "http" + ), + "enum_method" + ), + "delete" + ), + new lib_plankton.prog.struct_expression_literal( + lib_plankton.string.coin( + "/{{name}}/:id", + { + "name": domain.name, + } + ) + ), + new lib_plankton.prog.struct_expression_dict( + [ + { + "key": "execution", + "value": new lib_plankton.prog.struct_expression_abstraction( + [ + { + "name": "stuff", + "type": null, + } + ], + null, + [ + new lib_plankton.prog.struct_statement_declaration( + true, + "dummy", + null, + new lib_plankton.prog.struct_expression_await( + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_variable(name_repository_function_delete(domain)), + [ + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_variable("parseInt"), + [ + new lib_plankton.prog.struct_expression_projection( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable("stuff"), + "path_parameters" + ), + new lib_plankton.prog.struct_expression_literal("id") + ), + ] + ), + ] + ) + ) + ), + new lib_plankton.prog.struct_statement_return( + new lib_plankton.prog.struct_expression_dict( + [ + { + "key": "status_code", + "value": new lib_plankton.prog.struct_expression_literal(200), + }, + { + "key": "data", + "value": new lib_plankton.prog.struct_expression_literal(null), + }, + ] + ) + ), + ], + { + "async": true, + } + ), + } + ] + ), + ] + ), ] ) ) - ), - new lib_plankton.prog.struct_statement_return( - new lib_plankton.prog.struct_expression_function_application( + ) + ) + ] + ) + // server + .concat( + [ + new lib_plankton.prog.struct_statement_comment( + false, + [ + "setup server", + ] + ), + new lib_plankton.prog.struct_statement_declaration( + true, + "server", + null, // TODO + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_fieldaccess( new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable("lib_plankton"), - "http" - ), - "encode_response" + new lib_plankton.prog.struct_expression_variable("lib_plankton"), + "server" ), - [ - new lib_plankton.prog.struct_expression_variable("http_response"), - ] - ) + "make" + ), + [ + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable("conf"), + "server_port" + ), + new lib_plankton.prog.struct_expression_abstraction( + [ + { + "name": "input", + "type": null, + }, + ], + null, + [ + new lib_plankton.prog.struct_statement_declaration( + true, + "http_request", + new lib_plankton.prog.struct_type_construction( + "lib_plankton.http.type_request", + null + ), + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable("lib_plankton"), + "http" + ), + "decode_request" + ), + [ + new lib_plankton.prog.struct_expression_variable("input"), + ] + ) + ), + new lib_plankton.prog.struct_statement_declaration( + true, + "http_response", + new lib_plankton.prog.struct_type_construction( + "lib_plankton.http.type_response", + null + ), + new lib_plankton.prog.struct_expression_await( + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable("lib_plankton"), + "rest" + ), + "call" + ), + [ + new lib_plankton.prog.struct_expression_variable("rest"), + new lib_plankton.prog.struct_expression_variable("http_request"), + ] + ) + ) + ), + new lib_plankton.prog.struct_statement_return( + new lib_plankton.prog.struct_expression_function_application( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable("lib_plankton"), + "http" + ), + "encode_response" + ), + [ + new lib_plankton.prog.struct_expression_variable("http_response"), + ] + ) + ), + ], + { + "async": true, + } + ), + ] + ) + ), + new lib_plankton.prog.struct_statement_procedure_call( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_fieldaccess( + new lib_plankton.prog.struct_expression_variable("lib_plankton"), + "server" + ), + "start" ), - ], - { - "async": true, - } - ), - ] + [ + new lib_plankton.prog.struct_expression_variable("server") + ] + ), + ] + ) ) ), - new lib_plankton.prog.struct_statement_procedure_call( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_fieldaccess( - new lib_plankton.prog.struct_expression_variable("lib_plankton"), - "server" - ), - "start" - ), - [ - new lib_plankton.prog.struct_expression_variable("server") - ] - ), ] ) )