GitRoot

craft your forge, build your project, grow your community freely
 1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
 2//
 3// SPDX-License-Identifier: MIT
 4
 5package gitroot
 6
 7import (
 8	"encoding/json"
 9
10	"gitroot.dev/libs/golang/plugin/model"
11)
12
13//go:wasmexport init
14func Init(repoNamePtr, repoNameSize, confHasChangedPtr, confHasChangedSize, confPtr, confSize uint32) {
15	repoName := ptrToString(repoNamePtr, repoNameSize)
16	serializedConf := ptrToString(confPtr, confSize)
17	confHasChanged := ptrToString(confHasChangedPtr, confHasChangedSize)
18	server.plugin.Init(repoName, confHasChanged == "true", serializedConf)
19}
20
21//go:wasmexport startCommit
22func StartCommit(jsonPtr, jsonSize uint32) {
23	server.plugin.StartCommit(model.CommitFromString(ptrToString(jsonPtr, jsonSize)))
24}
25
26//go:wasmexport addFile
27func AddFile(ptr, size uint32) {
28	server.plugin.AddFile(model.FileFromString(ptrToString(ptr, size)))
29}
30
31//go:wasmexport modFile
32func ModFile(ptr, size uint32) {
33	server.plugin.ModFile(model.FileFromString(ptrToString(ptr, size)))
34}
35
36//go:wasmexport delFile
37func DelFile(ptr, size uint32) {
38	server.plugin.DelFile(model.FileFromString(ptrToString(ptr, size)))
39}
40
41//go:wasmexport endCommit
42func EndCommit(jsonPtr, jsonSize uint32) {
43	server.plugin.EndCommit(model.CommitFromString(ptrToString(jsonPtr, jsonSize)))
44}
45
46//go:wasmexport finish
47func Finish() {
48	server.plugin.Finish()
49}
50
51//go:wasmexport report
52func Report(jsonPtr, jsonSize uint32) {
53	server.ReportToPlugin(model.ReportFromString(ptrToString(jsonPtr, jsonSize)))
54}
55
56//go:wasmexport call
57func Call(jsonPtr, jsonSize uint32) uint64 {
58	call := model.CallFromString(ptrToString(jsonPtr, jsonSize))
59	callRes := model.CallRes{Res: nil, Err: "method not found"}
60	if callback, ok := server.exportedFuncs[call.Name]; ok {
61		res, err := callback(call.Args)
62		callRes.Res = res
63		if err != nil {
64			callRes.Err = err.Error()
65		} else {
66			callRes.Err = ""
67		}
68	}
69	callResJson, _ := json.Marshal(callRes)
70	ptr, size := stringToLeakedPtr(string(callResJson))
71	return (uint64(ptr) << uint64(32)) | uint64(size)
72}
73
74//go:wasmexport pluginConf
75func PluginConf() uint64 {
76	ExportedFuncs := []string{}
77	for name := range server.exportedFuncs {
78		ExportedFuncs = append(ExportedFuncs, name)
79	}
80	conf := model.ConfPlugin{
81		DefaultRun:    server.run,
82		SdkVersion:    "0.4.0",
83		SdkType:       model.PluginSdkTypeTinygo,
84		Deps:          server.deps,
85		ExportedFuncs: ExportedFuncs,
86	}
87	if j, err := json.Marshal(conf); err == nil {
88		ptr, size := stringToLeakedPtr(string(j))
89		return (uint64(ptr) << uint64(32)) | uint64(size)
90	} else {
91		server.LogError("can't serialize conf", err)
92		return 0
93	}
94}