//go:build js && wasm package main import ( "encoding/json" "syscall/js" p "git.max-richter.dev/max/marka/parser" "git.max-richter.dev/max/marka/registry" ) func matchBlocks(_ js.Value, args []js.Value) any { if len(args) == 0 { return js.ValueOf(map[string]any{"error": "missing markdown"}) } t, err := p.MatchBlocks(args[0].String(), args[1].String()) if err != nil { return js.ValueOf(map[string]any{"error": err.Error()}) } jsonString, _ := json.Marshal(t) return js.ValueOf(string(jsonString)) // plain string } func detectType(_ js.Value, args []js.Value) any { if len(args) == 0 { return js.ValueOf(map[string]any{"error": "missing markdown"}) } t, err := p.DetectType(args[0].String()) if err != nil { return js.ValueOf(map[string]any{"error": err.Error()}) } return js.ValueOf(t) // plain string } func parseFile(_ js.Value, args []js.Value) any { if len(args) == 0 { return js.ValueOf(map[string]any{"error": "missing markdown"}) } res, err := p.ParseFile(args[0].String()) if err != nil { return js.ValueOf(map[string]any{"error": err.Error()}) } b, err := json.Marshal(res) if err != nil { return js.ValueOf(map[string]any{"error": err.Error()}) } return js.ValueOf(string(b)) } func parseFileWithTemplate(_ js.Value, args []js.Value) any { if len(args) < 2 { return js.ValueOf(map[string]any{"error": "missing markdown or template"}) } res, err := p.ParseFileWithTemplate(args[0].String(), args[1].String()) if err != nil { return js.ValueOf(map[string]any{"error": err.Error()}) } b, err := json.Marshal(res) if err != nil { return js.ValueOf(map[string]any{"error": err.Error()}) } return js.ValueOf(string(b)) } func listTemplates(_ js.Value, args []js.Value) any { templates, err := registry.ListTemplates() if err != nil { return js.ValueOf(map[string]any{"error": err.Error()}) } b, err := json.Marshal(templates) if err != nil { return js.ValueOf(map[string]any{"error": err.Error()}) } return js.ValueOf(string(b)) } func getTemplate(_ js.Value, args []js.Value) any { if len(args) == 0 { return js.ValueOf(map[string]any{"error": "missing template name"}) } template, err := registry.GetTemplate(args[0].String()) if err != nil { return js.ValueOf(map[string]any{"error": err.Error()}) } return js.ValueOf(template) } func main() { js.Global().Set("markaDetectType", js.FuncOf(detectType)) js.Global().Set("markaParseFile", js.FuncOf(parseFile)) js.Global().Set("markaParseFileWithTemplate", js.FuncOf(parseFileWithTemplate)) js.Global().Set("markaMatchBlocks", js.FuncOf(matchBlocks)) js.Global().Set("markaListTemplates", js.FuncOf(listTemplates)) js.Global().Set("markaGetTemplate", js.FuncOf(getTemplate)) select {} }