From 579055d8fbf3123f36ef44c60131b245de7bd517 Mon Sep 17 00:00:00 2001 From: K35 Date: Sat, 1 Jan 2022 15:03:43 +0000 Subject: [PATCH] Supporting void function return type --- examples/example.jrpc | 1 + examples/test.ts | 4 ++++ lib/jrpc.js | 11 ++++++----- package.json | 2 +- src/ir.ts | 2 +- src/targets/typescript.ts | 7 ++++--- templates/ts_service_base.ts | 4 ++++ 7 files changed, 21 insertions(+), 10 deletions(-) diff --git a/examples/example.jrpc b/examples/example.jrpc index f58b4e6..7989bf0 100644 --- a/examples/example.jrpc +++ b/examples/example.jrpc @@ -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); } diff --git a/examples/test.ts b/examples/test.ts index 7785ad6..7c934d8 100644 --- a/examples/test.ts +++ b/examples/test.ts @@ -32,6 +32,10 @@ class TestService extends Server.TestService { return value1 + value2; } + async ReturningVoid(param1) { + console.log("Calling Returning Void"); + } + OnEvent(param1: string, ctx: undefined): void { console.log("Received notification", param1); } diff --git a/lib/jrpc.js b/lib/jrpc.js index 4a44bfa..2ad7ef3 100755 --- a/lib/jrpc.js +++ b/lib/jrpc.js @@ -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} extends Service {`); 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, ``); } diff --git a/package.json b/package.json index edbc024..10de980 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/ir.ts b/src/ir.ts index 5c3d6ea..173004f 100644 --- a/src/ir.ts +++ b/src/ir.ts @@ -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` diff --git a/src/targets/typescript.ts b/src/targets/typescript.ts index 2f32d80..893c4d3 100644 --- a/src/targets/typescript.ts +++ b/src/targets/typescript.ts @@ -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, ``); } diff --git a/templates/ts_service_base.ts b/templates/ts_service_base.ts index b88bc42..631c968 100644 --- a/templates/ts_service_base.ts +++ b/templates/ts_service_base.ts @@ -46,3 +46,7 @@ export function verify_boolean(data: any) { return true; } + +export function verify_void(data: any) { + return true; +}