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 {
AddValuesSingleParam(request: AddValueRequest): AddValueResponse;
AddValuesMultipleParams(value1: number, value2: number): number;
ReturningVoid(param1: number): void;
notification OnEvent(param1: string);
}

View File

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

View File

@ -7341,7 +7341,7 @@ function get_ir(parsed) {
if (!depends.some((a) => a === fnc.return_type))
depends.push(fnc.return_type);
} 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`);
}
}
@ -7432,7 +7432,8 @@ function compile(ir, target) {
var conversion = {
boolean: "boolean",
number: "number",
string: "string"
string: "string",
void: "void"
};
function toJSType(type) {
return conversion[type] || type;
@ -7566,7 +7567,7 @@ var TypescriptTarget = class extends CompileTarget {
a(1, `${dep},`);
});
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, ``);
a(0, `export class ${def.name} extends Service {`);
@ -7622,7 +7623,7 @@ var TypescriptTarget = class extends CompileTarget {
});
a(0, `}`);
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, `export abstract class ${def.name}<T> extends Service<T> {`);
a(1, `public name = "${def.name}";`);
@ -7657,7 +7658,7 @@ var TypescriptTarget = class extends CompileTarget {
}
a(2, ``);
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(0, ``);
}

View File

@ -1,6 +1,6 @@
{
"name": "@hibas123/jrpcgen",
"version": "1.0.2",
"version": "1.0.3",
"main": "lib/index.js",
"license": "MIT",
"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))
depends.push(fnc.return_type);
} 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`

View File

@ -15,6 +15,7 @@ const conversion = {
boolean: "boolean",
number: "number",
string: "string",
void: "void"
};
function toJSType(type: string): string {
@ -215,7 +216,7 @@ export class TypescriptTarget extends CompileTarget {
a(
0,
this.generateImport(
"{ verify_number, verify_string, verify_boolean }",
"{ verify_number, verify_string, verify_boolean, verify_void }",
"./service_base"
)
);
@ -312,7 +313,7 @@ export class TypescriptTarget extends CompileTarget {
a(
0,
this.generateImport(
"{ verify_number, verify_string, verify_boolean }",
"{ verify_number, verify_string, verify_boolean, verify_void }",
"./service_base"
)
);
@ -360,7 +361,7 @@ export class TypescriptTarget extends CompileTarget {
a(2, ``);
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(0, ``);
}

View File

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