115 lines
2.5 KiB
Go
115 lines
2.5 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"
|
|
"git.max-richter.dev/max/marka/template"
|
|
)
|
|
|
|
func wrapError(err error) string {
|
|
errMap := map[string]any{"error": err.Error()}
|
|
errJSON, _ := json.Marshal(errMap)
|
|
return string(errJSON)
|
|
}
|
|
|
|
func MatchBlocks(this js.Value, args []js.Value) any {
|
|
s := args[0].String()
|
|
t := args[1].String()
|
|
matched, err := p.MatchBlocks(s, t)
|
|
if err != nil {
|
|
return wrapError(err)
|
|
}
|
|
jsonString, _ := json.Marshal(matched)
|
|
return string(jsonString)
|
|
}
|
|
|
|
func DetectType(this js.Value, args []js.Value) any {
|
|
markdown := args[0].String()
|
|
t, err := p.DetectType(markdown)
|
|
if err != nil {
|
|
return wrapError(err)
|
|
}
|
|
return t
|
|
}
|
|
|
|
func ParseFile(this js.Value, args []js.Value) any {
|
|
markdown := args[0].String()
|
|
res, err := p.ParseFile(markdown)
|
|
if err != nil {
|
|
return wrapError(err)
|
|
}
|
|
b, err := json.Marshal(res)
|
|
if err != nil {
|
|
return wrapError(err)
|
|
}
|
|
return string(b)
|
|
}
|
|
|
|
func ParseFileWithTemplate(this js.Value, args []js.Value) any {
|
|
markdown := args[0].String()
|
|
template := args[1].String()
|
|
res, err := p.ParseFileWithTemplate(markdown, template)
|
|
if err != nil {
|
|
return wrapError(err)
|
|
}
|
|
b, err := json.Marshal(res)
|
|
if err != nil {
|
|
return wrapError(err)
|
|
}
|
|
return string(b)
|
|
}
|
|
|
|
func ListTemplates(this js.Value, args []js.Value) any {
|
|
templates, err := registry.ListTemplates()
|
|
if err != nil {
|
|
return wrapError(err)
|
|
}
|
|
b, err := json.Marshal(templates)
|
|
if err != nil {
|
|
return wrapError(err)
|
|
}
|
|
return string(b)
|
|
}
|
|
|
|
func GetTemplate(this js.Value, args []js.Value) any {
|
|
name := args[0].String()
|
|
template, err := registry.GetTemplate(name)
|
|
if err != nil {
|
|
return wrapError(err)
|
|
}
|
|
return template
|
|
}
|
|
|
|
func CompileTemplate(this js.Value, args []js.Value) any {
|
|
source := args[0].String()
|
|
template, err := template.CompileTemplate(source)
|
|
if err != nil {
|
|
return wrapError(err)
|
|
}
|
|
b, err := json.Marshal(template)
|
|
if err != nil {
|
|
return wrapError(err)
|
|
}
|
|
return string(b)
|
|
}
|
|
|
|
func main() {
|
|
marka := js.Global().Get("Object").New()
|
|
|
|
marka.Set("matchBlocks", js.FuncOf(MatchBlocks))
|
|
marka.Set("detectType", js.FuncOf(DetectType))
|
|
marka.Set("parseFile", js.FuncOf(ParseFile))
|
|
marka.Set("parseFileWithTemplate", js.FuncOf(ParseFileWithTemplate))
|
|
marka.Set("listTemplates", js.FuncOf(ListTemplates))
|
|
marka.Set("getTemplate", js.FuncOf(GetTemplate))
|
|
marka.Set("compileTemplate", js.FuncOf(CompileTemplate))
|
|
|
|
js.Global().Set("marka", marka)
|
|
|
|
select {}
|
|
} |