Files
marka/playground/wasm/main.go
Max Richter ae5cd8481a wip
2025-09-26 12:42:06 +02:00

100 lines
2.7 KiB
Go

//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 {}
}