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: EUPL-1.2
 4
 5package main
 6
 7import (
 8	"encoding/json"
 9	"fmt"
10
11	gitroot "gitroot.dev/libs/golang/plugin"
12	"gitroot.dev/libs/golang/plugin/model"
13)
14
15const PLUGIN_CODE = "pkg:gitroot/gitroot/apex_code"
16const PLUGIN_CODE_FUNC = "renderCode"
17const PLUGIN_MERMAID = "pkg:gitroot/gitroot/apex_mermaid"
18const PLUGIN_MERMAID_FUNC = "renderCode"
19
20var defaultRun = []model.PluginRun{{
21	Func: []model.PluginFunc{{FuncName: "renderMd", Args: []string{"fp", "md", "extraMedata"}, Res: []string{"html", "metas"}}},
22	Write: model.PluginWrite{
23		CallFunc: []model.PluginCallFuncRight{
24			{PluginPURL: PLUGIN_CODE, FuncName: PLUGIN_CODE_FUNC, Configuration: map[string]any{}},
25			{PluginPURL: PLUGIN_MERMAID, FuncName: PLUGIN_MERMAID_FUNC, Configuration: map[string]any{}},
26		},
27	},
28}}
29
30type Plugin struct {
31	server               model.Server
32	canCallCodePlugin    bool
33	canCallMermaidPlugin bool
34}
35
36func (p *Plugin) Init(repoName string, initKind model.InitKind, serializedConf string) error {
37	return nil
38}
39func (p *Plugin) StartCommit(commit model.Commit) error { return nil }
40func (p *Plugin) AddFile(file model.File) error         { return nil }
41func (p *Plugin) ModFile(file model.File) error         { return nil }
42func (p *Plugin) DelFile(file model.File) error         { return nil }
43func (p *Plugin) EndCommit(commit model.Commit) error   { return nil }
44func (p *Plugin) Finish() error                         { return nil }
45
46func Build(server model.Server) model.Plugin {
47	p := &Plugin{
48		server: server,
49	}
50	server.ExportFunc("renderMd", func(args map[string]string) (map[string]string, error) {
51		p.canCallCodePlugin = server.CanCallFunc(PLUGIN_CODE, PLUGIN_CODE_FUNC, map[string]string{"code": "", "lang": ""})
52		p.canCallMermaidPlugin = server.CanCallFunc(PLUGIN_MERMAID, PLUGIN_MERMAID_FUNC, map[string]string{"code": ""})
53		fp := args["fp"]
54		md := args["md"]
55		extraMetadataJson := args["extraMetadata"]
56		extraMetadata := map[string]string{}
57		if extraMetadataJson != "" {
58			err := json.Unmarshal([]byte(extraMetadataJson), &extraMetadata)
59			if err != nil {
60				return nil, err
61			}
62		}
63		html, metas := p.mdToHTML(fp, []byte(md), extraMetadata)
64		metasJson, err := json.Marshal(metas)
65		if err != nil {
66			return nil, err
67		}
68		server.Log(fmt.Sprintf("fp=%s for renderred html=%s", fp, html))
69		return map[string]string{
70			"html":  html,
71			"metas": string(metasJson),
72		}, nil
73	})
74	return p
75}
76
77//go:wasmexport install
78func main() {
79	gitroot.Register(defaultRun, Build)
80}