Supporting void function return type

This commit is contained in:
K35 2022-01-01 15:03:43 +00:00
parent 478094f2c3
commit 579055d8fb
7 changed files with 21 additions and 10 deletions

View File

@ -28,6 +28,7 @@ type AddValueResponse {
service TestService { service TestService {
AddValuesSingleParam(request: AddValueRequest): AddValueResponse; AddValuesSingleParam(request: AddValueRequest): AddValueResponse;
AddValuesMultipleParams(value1: number, value2: number): number; AddValuesMultipleParams(value1: number, value2: number): number;
ReturningVoid(param1: number): void;
notification OnEvent(param1: string); notification OnEvent(param1: string);
} }

View File

@ -32,6 +32,10 @@ class TestService extends Server.TestService<undefined> {
return value1 + value2; return value1 + value2;
} }
async ReturningVoid(param1) {
console.log("Calling Returning Void");
}
OnEvent(param1: string, ctx: undefined): void { OnEvent(param1: string, ctx: undefined): void {
console.log("Received notification", param1); console.log("Received notification", param1);
} }

View File

@ -7341,7 +7341,7 @@ function get_ir(parsed) {
if (!depends.some((a) => a === fnc.return_type)) if (!depends.some((a) => a === fnc.return_type))
depends.push(fnc.return_type); depends.push(fnc.return_type);
} else { } else {
if (builtin.indexOf(fnc.return_type) < 0) { if (fnc.return_type !== "void" && builtin.indexOf(fnc.return_type) < 0) {
throw new IRError(fnc, `Type ${fnc.return_type} is not defined`); throw new IRError(fnc, `Type ${fnc.return_type} is not defined`);
} }
} }
@ -7432,7 +7432,8 @@ function compile(ir, target) {
var conversion = { var conversion = {
boolean: "boolean", boolean: "boolean",
number: "number", number: "number",
string: "string" string: "string",
void: "void"
}; };
function toJSType(type) { function toJSType(type) {
return conversion[type] || type; return conversion[type] || type;
@ -7566,7 +7567,7 @@ var TypescriptTarget = class extends CompileTarget {
a(1, `${dep},`); a(1, `${dep},`);
}); });
a(0, `}`); a(0, `}`);
a(0, this.generateImport("{ verify_number, verify_string, verify_boolean }", "./service_base")); a(0, this.generateImport("{ verify_number, verify_string, verify_boolean, verify_void }", "./service_base"));
a(0, this.generateImport("{ Service, ServiceProvider, getRandomID }", "./service_client")); a(0, this.generateImport("{ Service, ServiceProvider, getRandomID }", "./service_client"));
a(0, ``); a(0, ``);
a(0, `export class ${def.name} extends Service {`); a(0, `export class ${def.name} extends Service {`);
@ -7622,7 +7623,7 @@ var TypescriptTarget = class extends CompileTarget {
}); });
a(0, `}`); a(0, `}`);
a(0, this.generateImport("{ Service }", "./service_server")); a(0, this.generateImport("{ Service }", "./service_server"));
a(0, this.generateImport("{ verify_number, verify_string, verify_boolean }", "./service_base")); a(0, this.generateImport("{ verify_number, verify_string, verify_boolean, verify_void }", "./service_base"));
a(0, ``); a(0, ``);
a(0, `export abstract class ${def.name}<T> extends Service<T> {`); a(0, `export abstract class ${def.name}<T> extends Service<T> {`);
a(1, `public name = "${def.name}";`); a(1, `public name = "${def.name}";`);
@ -7657,7 +7658,7 @@ var TypescriptTarget = class extends CompileTarget {
} }
a(2, ``); a(2, ``);
a(2, `p.push(ctx);`); a(2, `p.push(ctx);`);
a(2, `return this.${fnc.name}.call(this, ...p);`); a(2, `return this.${fnc.name}.call(this, ...p)${fnc.return == "void" ? ".then(res => undefined)" : ""};`);
a(1, `}`); a(1, `}`);
a(0, ``); a(0, ``);
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@hibas123/jrpcgen", "name": "@hibas123/jrpcgen",
"version": "1.0.2", "version": "1.0.3",
"main": "lib/index.js", "main": "lib/index.js",
"license": "MIT", "license": "MIT",
"packageManager": "yarn@3.1.1", "packageManager": "yarn@3.1.1",

View File

@ -185,7 +185,7 @@ export default function get_ir(parsed: Parsed): IR {
if (!depends.some((a) => a === fnc.return_type)) if (!depends.some((a) => a === fnc.return_type))
depends.push(fnc.return_type); depends.push(fnc.return_type);
} else { } else {
if (builtin.indexOf(fnc.return_type) < 0) { if (fnc.return_type !== "void" && builtin.indexOf(fnc.return_type) < 0) {
throw new IRError( throw new IRError(
fnc, fnc,
`Type ${fnc.return_type} is not defined` `Type ${fnc.return_type} is not defined`

View File

@ -15,6 +15,7 @@ const conversion = {
boolean: "boolean", boolean: "boolean",
number: "number", number: "number",
string: "string", string: "string",
void: "void"
}; };
function toJSType(type: string): string { function toJSType(type: string): string {
@ -215,7 +216,7 @@ export class TypescriptTarget extends CompileTarget {
a( a(
0, 0,
this.generateImport( this.generateImport(
"{ verify_number, verify_string, verify_boolean }", "{ verify_number, verify_string, verify_boolean, verify_void }",
"./service_base" "./service_base"
) )
); );
@ -312,7 +313,7 @@ export class TypescriptTarget extends CompileTarget {
a( a(
0, 0,
this.generateImport( this.generateImport(
"{ verify_number, verify_string, verify_boolean }", "{ verify_number, verify_string, verify_boolean, verify_void }",
"./service_base" "./service_base"
) )
); );
@ -360,7 +361,7 @@ export class TypescriptTarget extends CompileTarget {
a(2, ``); a(2, ``);
a(2, `p.push(ctx);`); a(2, `p.push(ctx);`);
a(2, `return this.${fnc.name}.call(this, ...p);`); a(2, `return this.${fnc.name}.call(this, ...p)${fnc.return == "void" ? ".then(res => undefined)" : ""};`);
a(1, `}`); a(1, `}`);
a(0, ``); a(0, ``);
} }

View File

@ -46,3 +46,7 @@ export function verify_boolean(data: any) {
return true; return true;
} }
export function verify_void(data: any) {
return true;
}