go lib fixes
This commit is contained in:
parent
8d0af5f95a
commit
9a7ee9f284
@ -12,6 +12,7 @@ import (
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"slices"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"syscall"
|
||||
@ -47,7 +48,7 @@ type Callable interface {
|
||||
}
|
||||
|
||||
type ipcCommon struct {
|
||||
localApi any
|
||||
localApis map[string]any
|
||||
socketPath string
|
||||
conn net.Conn
|
||||
errCh chan error
|
||||
@ -106,20 +107,26 @@ func (ipc *ipcCommon) handleCall(msg Message) {
|
||||
ipc.processingCalls.Add(1)
|
||||
defer ipc.processingCalls.Add(-1)
|
||||
|
||||
if ipc.localApi == nil {
|
||||
ipc.sendResponse(msg.Id, nil, fmt.Errorf("remote side does not accept ipc calls"))
|
||||
parts := strings.Split(msg.Method, ".")
|
||||
if len(parts) != 2 {
|
||||
ipc.sendResponse(msg.Id, nil, fmt.Errorf("invalid method: %s", msg.Method))
|
||||
return
|
||||
}
|
||||
localApi := reflect.ValueOf(ipc.localApi)
|
||||
endpointName, methodName := parts[0], parts[1]
|
||||
|
||||
method := localApi.MethodByName(msg.Method)
|
||||
localApi, ok := ipc.localApis[endpointName]
|
||||
if !ok {
|
||||
ipc.sendResponse(msg.Id, nil, fmt.Errorf("endpoint not found: %s", endpointName))
|
||||
return
|
||||
}
|
||||
|
||||
method := reflect.ValueOf(localApi).MethodByName(methodName)
|
||||
if !method.IsValid() {
|
||||
ipc.sendResponse(msg.Id, nil, fmt.Errorf("method not found: %s", msg.Method))
|
||||
return
|
||||
}
|
||||
|
||||
methodType := method.Type()
|
||||
argsCount := methodType.NumIn()
|
||||
|
||||
argsCount := method.Type().NumIn()
|
||||
if len(msg.Params) != argsCount {
|
||||
ipc.sendResponse(msg.Id, nil, fmt.Errorf("argument count mismatch: expected %d, got %d", argsCount, len(msg.Params)))
|
||||
return
|
||||
@ -132,14 +139,19 @@ func (ipc *ipcCommon) handleCall(msg Message) {
|
||||
|
||||
results := method.Call(args)
|
||||
resVals := results[0 : len(results)-1]
|
||||
resErr := results[len(results)-1]
|
||||
resErrVal := results[len(results)-1]
|
||||
|
||||
var res []any
|
||||
for _, resVal := range resVals {
|
||||
res = append(res, resVal)
|
||||
res = append(res, resVal.Interface())
|
||||
}
|
||||
|
||||
ipc.sendResponse(msg.Id, res, resErr.Interface().(error))
|
||||
var resErr error
|
||||
if !resErrVal.IsNil() {
|
||||
resErr = resErrVal.Interface().(error)
|
||||
}
|
||||
|
||||
ipc.sendResponse(msg.Id, res, resErr)
|
||||
}
|
||||
|
||||
func (ipc *ipcCommon) sendResponse(id int64, result []any, err error) {
|
||||
@ -233,10 +245,10 @@ type ParentIPC struct {
|
||||
listener net.Listener
|
||||
}
|
||||
|
||||
func NewParent(cmd *exec.Cmd, localApi any) (*ParentIPC, error) {
|
||||
func NewParent(cmd *exec.Cmd, localApis ...any) (*ParentIPC, error) {
|
||||
p := ParentIPC{
|
||||
ipcCommon: &ipcCommon{
|
||||
localApi: localApi,
|
||||
localApis: mapTypeNames(localApis),
|
||||
pendingCalls: make(map[int64]chan mo.Result[Vals]),
|
||||
errCh: make(chan error, 1),
|
||||
socketPath: filepath.Join(os.TempDir(), fmt.Sprintf("kitten-ipc-%d.sock", os.Getpid())),
|
||||
@ -353,10 +365,10 @@ type ChildIPC struct {
|
||||
*ipcCommon
|
||||
}
|
||||
|
||||
func NewChild(localApi any) (*ChildIPC, error) {
|
||||
func NewChild(localApis ...any) (*ChildIPC, error) {
|
||||
c := ChildIPC{
|
||||
ipcCommon: &ipcCommon{
|
||||
localApi: localApi,
|
||||
localApis: mapTypeNames(localApis),
|
||||
pendingCalls: make(map[int64]chan mo.Result[Vals]),
|
||||
errCh: make(chan error, 1),
|
||||
},
|
||||
@ -403,3 +415,12 @@ func mergeErr(errs ...error) (ret error) {
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func mapTypeNames(types []any) map[string]any {
|
||||
result := make(map[string]any)
|
||||
for _, t := range types {
|
||||
typeName := reflect.TypeOf(t).Elem().Name()
|
||||
result[typeName] = t
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
2
lib/ts/dist/lib.d.ts.map
vendored
2
lib/ts/dist/lib.d.ts.map
vendored
@ -1 +1 @@
|
||||
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAUhC,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,aAAa,EAAE,OAAO,CAAS;IACzC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAK;IACtC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAE/B,SAAS,aAAa,SAAS,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM;IAS7D,SAAS,CAAC,QAAQ,IAAI,IAAI;IA4B1B,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAWxC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;cAWrB,UAAU,CAAC,GAAG,EAAE,WAAW;IAmD3C,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAapD,IAAI;IAWJ,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;CAGvC;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;YAwBd,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;CAa9B"}
|
||||
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAUhC,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,aAAa,EAAE,OAAO,CAAS;IACzC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAK;IACtC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAE/B,SAAS,aAAa,SAAS,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM;IAS7D,SAAS,CAAC,QAAQ,IAAI,IAAI;IA4B1B,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAWxC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;cAWrB,UAAU,CAAC,GAAG,EAAE,WAAW;IA6C3C,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAapD,IAAI;IAWJ,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;CAGvC;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;YAwBd,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;CAa9B"}
|
||||
2
lib/ts/dist/lib.js.map
vendored
2
lib/ts/dist/lib.js.map
vendored
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user