diff --git a/apps/api/sharedLibs/go-html-to-md/html-to-markdown.go b/apps/api/sharedLibs/go-html-to-md/html-to-markdown.go index 11776fd67..ca6d82046 100644 --- a/apps/api/sharedLibs/go-html-to-md/html-to-markdown.go +++ b/apps/api/sharedLibs/go-html-to-md/html-to-markdown.go @@ -1,7 +1,11 @@ package main +/* +#include +*/ +import "C" import ( - "C" + "unsafe" // "log" md "github.com/tomkosm/html-to-markdown" @@ -20,6 +24,11 @@ func ConvertHTMLToMarkdown(html *C.char) *C.char { return C.CString(markdown) } +//export FreeCString +func FreeCString(s *C.char) { + C.free(unsafe.Pointer(s)) +} + func main() { // This function is required for the main package } diff --git a/apps/api/src/lib/html-to-markdown.ts b/apps/api/src/lib/html-to-markdown.ts index f7a2b9445..aa63a6b39 100644 --- a/apps/api/src/lib/html-to-markdown.ts +++ b/apps/api/src/lib/html-to-markdown.ts @@ -18,10 +18,14 @@ const goExecutablePath = join( class GoMarkdownConverter { private convert: any; - + private free: any; + private constructor() { const lib = koffi.load(goExecutablePath); - this.convert = lib.func("ConvertHTMLToMarkdown", "string", ["string"]); + this.free = lib.func("FreeCString", "void", ["string"]); + const cstn = "CString:" + crypto.randomUUID(); + const freedResultString = koffi.disposable(cstn, "string", this.free); + this.convert = lib.func("ConvertHTMLToMarkdown", freedResultString, ["string"]); } public static async getInstance(): Promise {