diff --git a/kitcom/golang/go_gen.tmpl b/kitcom/golang/go_gen.tmpl index 9483b36..b83ba5e 100644 --- a/kitcom/golang/go_gen.tmpl +++ b/kitcom/golang/go_gen.tmpl @@ -10,14 +10,10 @@ import ( kittenipc "efprojects.com/kitten-ipc" ) -type callable interface { - Call(method string, params ...any) (kittenipc.Vals, error) -} - {{range $e := .Api.Endpoints}} type {{.Name}} struct { - Ipc callable + Ipc kittenipc.Callable } {{range $mtd := $e.Methods}} @@ -26,10 +22,11 @@ func ({{$e.Name | receiver}} *{{$e.Name}}) {{$mtd.Name}}( ) ( {{range $mtd.Ret}}{{.Type | typedef}}, {{end}}error, ) { - results, err := {{$e.Name | receiver}}.Ipc.Call("{{$e.Name}}", "{{$mtd.Name}}"{{range $mtd.Params}}, {{.Name}}{{end}}) + results, err := {{$e.Name | receiver}}.Ipc.Call("{{$e.Name}}.{{$mtd.Name}}"{{range $mtd.Params}}, {{.Name}}{{end}}) if err != nil { return {{range $mtd.Ret}}{{.Type | zerovalue}}, {{end}} fmt.Errorf("call to {{$e.Name}}.{{$mtd.Name}} failed: %w", err) } + _ = results return {{range $idx, $ret := $mtd.Ret}}results[{{$idx}}].({{$ret.Type | typedef}}), {{end}}nil } {{end}} diff --git a/kitcom/golang/gogen.go b/kitcom/golang/gogen.go index d762743..89c9181 100644 --- a/kitcom/golang/gogen.go +++ b/kitcom/golang/gogen.go @@ -74,7 +74,7 @@ func (g *GoApiGenerator) Generate(apis *api.Api, destFile string) error { } func (g *GoApiGenerator) writeDest(destFile string, bytes []byte) error { - f, err := os.OpenFile(destFile, os.O_WRONLY|os.O_CREATE, 0644) + f, err := os.OpenFile(destFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) if err != nil { return fmt.Errorf("open destination file: %w", err) } diff --git a/kitcom/ts/tsgen.go b/kitcom/ts/tsgen.go index 29c22e3..c154dae 100644 --- a/kitcom/ts/tsgen.go +++ b/kitcom/ts/tsgen.go @@ -57,7 +57,7 @@ func (g *TypescriptApiGenerator) Generate(apis *api.Api, destFile string) error } func (g *TypescriptApiGenerator) writeDest(destFile string, bytes []byte) error { - f, err := os.OpenFile(destFile, os.O_WRONLY|os.O_CREATE, 0644) + f, err := os.OpenFile(destFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) if err != nil { return fmt.Errorf("open destination file: %w", err) } diff --git a/kitcom/ts/tsparser.go b/kitcom/ts/tsparser.go index 06e6db4..444dc14 100644 --- a/kitcom/ts/tsparser.go +++ b/kitcom/ts/tsparser.go @@ -104,19 +104,21 @@ func (t *TypescriptApiParser) Parse(sourceFilePath string) (*api.Api, error) { } apiMethod.Params = append(apiMethod.Params, apiPar) } - var apiRet api.Val - switch method.Type.Kind { - case ast.KindNumberKeyword: - apiRet.Type = api.TInt - case ast.KindStringKeyword: - apiRet.Type = api.TString - case ast.KindBooleanKeyword: - apiRet.Type = api.TBool - default: - err = fmt.Errorf("return type %s is not supported yet", method.Type.Kind) - return false + if method.Type != nil { + var apiRet api.Val + switch method.Type.Kind { + case ast.KindNumberKeyword: + apiRet.Type = api.TInt + case ast.KindStringKeyword: + apiRet.Type = api.TString + case ast.KindBooleanKeyword: + apiRet.Type = api.TBool + default: + err = fmt.Errorf("return type %s is not supported yet", method.Type.Kind) + return false + } + apiMethod.Ret = []api.Val{apiRet} } - apiMethod.Ret = []api.Val{apiRet} endpoint.Methods = append(endpoint.Methods, apiMethod) } diff --git a/lib/golang/lib.go b/lib/golang/lib.go index e6a0b93..3e66020 100644 --- a/lib/golang/lib.go +++ b/lib/golang/lib.go @@ -39,6 +39,10 @@ type Message struct { Error string `json:"error"` } +type Callable interface { + Call(method string, params ...any) (Vals, error) +} + type ipcCommon struct { localApi any socketPath string @@ -279,7 +283,7 @@ func (p *ParentIPC) acceptConn() error { return fmt.Errorf("accept: %w", res.Error()) } p.conn = res.MustGet() - p.readConn() + go p.readConn() } return nil } diff --git a/lib/ts/dist/lib.d.ts b/lib/ts/dist/lib.d.ts index 21e4108..3119a98 100644 --- a/lib/ts/dist/lib.d.ts +++ b/lib/ts/dist/lib.d.ts @@ -23,13 +23,13 @@ interface CallResult { error: Error | null; } declare abstract class IPCCommon { - protected localApi: any; + protected localApis: Record; protected socketPath: string; protected conn: net.Socket | null; protected nextId: number; protected pendingCalls: Record void>; protected errors: QueuedEvent; - protected constructor(localApi: any, socketPath: string); + protected constructor(localApis: object[], socketPath: string); protected readConn(): void; protected processMsg(msg: Message): void; protected handleCall(msg: CallMessage): void; @@ -43,13 +43,13 @@ export declare class ParentIPC extends IPCCommon { private readonly cmdArgs; private cmd; private readonly listener; - constructor(cmdPath: string, cmdArgs: string[], localApi: any); + constructor(cmdPath: string, cmdArgs: string[], ...localApis: object[]); start(): Promise; private acceptConn; wait(): Promise; } export declare class ChildIPC extends IPCCommon { - constructor(localApi: any); + constructor(...localApis: object[]); start(): Promise; wait(): Promise; } diff --git a/lib/ts/dist/lib.d.ts.map b/lib/ts/dist/lib.d.ts.map index afa6645..073dd83 100644 --- a/lib/ts/dist/lib.d.ts.map +++ b/lib/ts/dist/lib.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAOhC,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAItC,aAAK,OAAO;IACR,IAAI,IAAI;IACR,QAAQ,IAAI;CACf;AAED,KAAK,IAAI,GAAG,GAAG,EAAE,CAAC;AAElB,UAAU,WAAW;IACjB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;CAChB;AAED,UAAU,eAAe;IACrB,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,OAAO,GAAG,WAAW,GAAG,eAAe,CAAC;AAE7C,UAAU,UAAU;IAChB,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACvB;AAED,uBAAe,SAAS;IACpB,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC;IACxB,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAQ;IACzC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAK;IAC7B,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC,CAAM;IAC1E,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IAErC,SAAS,aAAa,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM;IAMvD,SAAS,CAAC,QAAQ,IAAI,IAAI;IA0B1B,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAWxC,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAyC5C,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAWrC,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAapD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAIpC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBvD;AAGD,qBAAa,SAAU,SAAQ,SAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG;IAavD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAuBd,UAAU;IAmBlB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB9B;AAGD,qBAAa,QAAS,SAAQ,SAAS;gBACvB,QAAQ,EAAE,GAAG;IAInB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAUtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"} \ No newline at end of file +{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAOhC,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAItC,aAAK,OAAO;IACR,IAAI,IAAI;IACR,QAAQ,IAAI;CACf;AAED,KAAK,IAAI,GAAG,GAAG,EAAE,CAAC;AAElB,UAAU,WAAW;IACjB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;CAChB;AAED,UAAU,eAAe;IACrB,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,OAAO,GAAG,WAAW,GAAG,eAAe,CAAC;AAE7C,UAAU,UAAU;IAChB,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACvB;AAED,uBAAe,SAAS;IACpB,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAQ;IACzC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAK;IAC7B,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC,CAAM;IAC1E,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IAErC,SAAS,aAAa,SAAS,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM;IAW7D,SAAS,CAAC,QAAQ,IAAI,IAAI;IA0B1B,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAWxC,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IA8C5C,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAWrC,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAapD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;IAIpC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBvD;AAGD,qBAAa,SAAU,SAAQ,SAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE;IAahE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAuBd,UAAU;IAmBlB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB9B;AAGD,qBAAa,QAAS,SAAQ,SAAS;gBACvB,GAAG,SAAS,EAAE,MAAM,EAAE;IAI5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAUtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"} \ No newline at end of file diff --git a/lib/ts/dist/lib.js.map b/lib/ts/dist/lib.js.map index 46c928a..3b08511 100644 --- a/lib/ts/dist/lib.js.map +++ b/lib/ts/dist/lib.js.map @@ -1 +1 @@ -{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAoB,KAAK,EAAC,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAEtC,MAAM,cAAc,GAAG,YAAY,CAAC;AAEpC,IAAK,OAGJ;AAHD,WAAK,OAAO;IACR,qCAAQ,CAAA;IACR,6CAAY,CAAA;AAChB,CAAC,EAHI,OAAO,KAAP,OAAO,QAGX;AAyBD,MAAe,SAAS;IACV,SAAS,CAAsB;IAC/B,UAAU,CAAS;IACnB,IAAI,GAAsB,IAAI,CAAC;IAC/B,MAAM,GAAW,CAAC,CAAC;IACnB,YAAY,GAAiD,EAAE,CAAC;IAChE,MAAM,CAAqB;IAErC,YAAsB,SAAmB,EAAE,UAAkB;QACzD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAEhC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAI,QAA2B,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;QACzC,CAAC;IACL,CAAC;IAES,QAAQ;QACd,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QAEjD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAChC,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,SAAS,EAAE,QAAQ;SACtB,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACnB,IAAI,CAAC;gBACD,MAAM,GAAG,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACP,CAAC;IAES,UAAU,CAAC,GAAY;QAC7B,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,OAAO,CAAC,IAAI;gBACb,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACrB,MAAM;YACV,KAAK,OAAO,CAAC,QAAQ;gBACjB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBACzB,MAAM;QACd,CAAC;IACL,CAAC;IAES,UAAU,CAAC,GAAgB;QACjC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzD,IAAG,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,mBAAmB,GAAG,CAAC,MAAM,EAAE,EAAC,CAAC,CAAC;YAC3F,OAAO;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAG,CAAC,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,uBAAuB,YAAY,EAAE,EAAC,CAAC,CAAC;YACjG,OAAO;QACX,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,qBAAqB,GAAG,CAAC,MAAM,EAAE,EAAC,CAAC,CAAC;YAC7F,OAAO;QACX,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;QAChC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC;gBACT,IAAI,EAAE,OAAO,CAAC,QAAQ;gBACtB,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,KAAK,EAAE,qCAAqC,SAAS,SAAS,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;aACpF,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAExD,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;gBAC5B,MAAM;qBACD,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;oBACV,IAAI,CAAC,OAAO,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;gBACtE,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACX,IAAI,CAAC,OAAO,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,EAAC,CAAC,CAAC;gBACxE,CAAC,CAAC,CAAC;YACX,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,OAAO,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC;YACzE,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,EAAC,CAAC,CAAC;QACxE,CAAC;IACL,CAAC;IAES,OAAO,CAAC,GAAY;QAC1B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QAEjD,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IAES,cAAc,CAAC,GAAoB;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,wCAAwC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC3E,OAAO;QACX,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEjC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAES,QAAQ,CAAC,GAAU;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,GAAG,MAAY;QAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAEzB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,MAAkB,EAAE,EAAE;gBAC3C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3B,CAAC;YACL,CAAC,CAAC;YACF,IAAI,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAC7B,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAGD,MAAM,OAAO,SAAU,SAAQ,SAAS;IACnB,OAAO,CAAS;IAChB,OAAO,CAAW;IAC3B,GAAG,GAAwB,IAAI,CAAC;IACvB,QAAQ,CAAa;IAEtC,YAAY,OAAe,EAAE,OAAiB,EAAE,GAAG,SAAmB;QAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,cAAc,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5E,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAE7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,cAAc,EAAE,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,yBAAyB,cAAc,4BAA4B,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,KAAK;QACP,IAAI,CAAC;YACD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAGV,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;gBACvC,OAAO,EAAE,CAAC;YACd,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,cAAc,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,CAAC;QAE5D,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,UAAU;QACpB,MAAM,aAAa,GAAG,KAAK,CAAC;QAE5B,MAAM,aAAa,GAAG,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;gBACtC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACD,IAAI,CAAC,IAAI,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,GAAG;gBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,CAAU,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACN,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAG,CAAC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5D,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBAC3C,IAAG,MAAM,IAAI,IAAI,EAAE,CAAC;oBAChB,IAAG,MAAM;wBAAE,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC,CAAC;;wBAChE,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC/D,CAAC;qBAAM,CAAC;oBACJ,OAAO,EAAE,CAAC;gBACd,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBACrB,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACN,CAAC;CACJ;AAGD,MAAM,OAAO,QAAS,SAAQ,SAAS;IACnC,YAAY,GAAG,SAAmB;QAC9B,KAAK,CAAC,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,KAAK;QACP,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;gBACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,OAAO,EAAE,CAAC;YACd,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,IAAI;QACN,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAEvC,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAGD,SAAS,kBAAkB;IACvB,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5B,OAAO,EAAE;YACL,CAAC,cAAc,CAAC,EAAE;gBACd,IAAI,EAAE,QAAQ;aACjB;SACJ;KACJ,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC;AAClC,CAAC;AAGD,SAAS,KAAK,CAAC,EAAU;IACrB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAGD,oBAAoB;AACpB,SAAS,OAAO,CAAI,IAAgB,EAAE,EAAU;IAC5C,OAAO,OAAO,CAAC,IAAI,CACf,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CACjD,CAAC;AACpB,CAAC"} \ No newline at end of file diff --git a/lib/ts/src/lib.ts b/lib/ts/src/lib.ts index d5d11db..c047e3b 100644 --- a/lib/ts/src/lib.ts +++ b/lib/ts/src/lib.ts @@ -7,7 +7,7 @@ import * as fs from 'node:fs'; import * as util from 'node:util'; import {QueuedEvent} from 'ts-events'; -const IPC_SOCKET_ARG = '--ipc-socket'; +const IPC_SOCKET_ARG = 'ipc-socket'; enum MsgType { Call = 1, @@ -38,17 +38,22 @@ interface CallResult { } abstract class IPCCommon { - protected localApi: any; + protected localApis: Record; protected socketPath: string; protected conn: net.Socket | null = null; protected nextId: number = 0; protected pendingCalls: Record void> = {}; protected errors: QueuedEvent; - protected constructor(localApi: any, socketPath: string) { - this.localApi = localApi; + protected constructor(localApis: object[], socketPath: string) { this.socketPath = socketPath; this.errors = new QueuedEvent(); + + this.localApis = {}; + for (const localApi of localApis) { + const className = (localApi as {name: string})['name']; + this.localApis[className] = localApi; + } } protected readConn(): void { @@ -89,12 +94,17 @@ abstract class IPCCommon { } protected handleCall(msg: CallMessage): void { - if (!this.localApi) { - this.sendMsg({type: MsgType.Response, id: msg.id, error: 'remote side does not accept ipc calls'}); + const [endpointName, methodName] = msg.method.split('.'); + if(!endpointName || !methodName) { + this.sendMsg({type: MsgType.Response, id: msg.id, error: `call malformed: ${msg.method}`}); return; } - - const method = this.localApi[msg.method]; + const endpoint = this.localApis[endpointName]; + if(!endpoint) { + this.sendMsg({type: MsgType.Response, id: msg.id, error: `endpoint not found: ${endpointName}`}); + return; + } + const method = endpoint[methodName]; if (!method || typeof method !== 'function') { this.sendMsg({type: MsgType.Response, id: msg.id, error: `method not found: ${msg.method}`}); return; @@ -111,7 +121,7 @@ abstract class IPCCommon { } try { - const result = method.apply(this.localApi, msg.params); + const result = method.apply(this.localApis, msg.params); if (result instanceof Promise) { result @@ -185,13 +195,13 @@ export class ParentIPC extends IPCCommon { private cmd: ChildProcess | null = null; private readonly listener: net.Server; - constructor(cmdPath: string, cmdArgs: string[], localApi: any) { + constructor(cmdPath: string, cmdArgs: string[], ...localApis: object[]) { const socketPath = path.join(os.tmpdir(), `kitten-ipc-${process.pid}.sock`); - super(localApi, socketPath); + super(localApis, socketPath); this.cmdPath = cmdPath; - if (cmdArgs.includes(IPC_SOCKET_ARG)) { - throw new Error(`you should not use '${IPC_SOCKET_ARG}' argument in your command`); + if (cmdArgs.includes(`--${IPC_SOCKET_ARG}`)) { + throw new Error(`you should not use '--${IPC_SOCKET_ARG}' argument in your command`); } this.cmdArgs = cmdArgs; @@ -211,7 +221,7 @@ export class ParentIPC extends IPCCommon { this.listener.on('error', reject); }); - const cmdArgs = [...this.cmdArgs, IPC_SOCKET_ARG, this.socketPath]; + const cmdArgs = [...this.cmdArgs, `--${IPC_SOCKET_ARG}`, this.socketPath]; this.cmd = spawn(this.cmdPath, cmdArgs, {stdio: 'inherit'}); this.cmd.on('error', (err) => { @@ -260,8 +270,8 @@ export class ParentIPC extends IPCCommon { export class ChildIPC extends IPCCommon { - constructor(localApi: any) { - super(localApi, socketPathFromArgs()); + constructor(...localApis: object[]) { + super(localApis, socketPathFromArgs()); } async start(): Promise { @@ -283,17 +293,19 @@ export class ChildIPC extends IPCCommon { function socketPathFromArgs(): string { - const {values} = util.parseArgs({options: { - IPC_SOCKET_ARG: { + const {values} = util.parseArgs({ + options: { + [IPC_SOCKET_ARG]: { type: 'string', } - }}); + } + }); - if(!values.IPC_SOCKET_ARG) { + if (!values[IPC_SOCKET_ARG]) { throw new Error('ipc socket path is missing'); } - return values.IPC_SOCKET_ARG; + return values[IPC_SOCKET_ARG]; }