Skip to content

syumai/denoio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

denoio

  • denoio is a Go package to bind Deno and Go(Wasm)'s I/O interfaces.

Usage

  • In Go, denoio.NewReader(v) converts JS's Deno.Reader into Go's io.Reader.
  • Similarly, in Go, denoio.NewJSReader(r) converts Go's io.Reader into JS's Deno.Reader.
  • In the same way, this package can convert io.Writer, io.Seeker and io.Closer.

Example

gzip compressing example. (see example/compress for detail)

Go side

// register function as "compressFile"
js.Global().Set("compressFile",
  js.FuncOf(func(_ js.Value, args []js.Value) interface{} {
    var buf bytes.Buffer
    zw := gzip.NewWriter(&buf)

    // 1. Convert Deno (JS) side's Deno.File to Go(Wasm)'s io.Reader interface
    f := denoio.NewReader(args[0])
    if _, err := io.Copy(zw, f); err != nil {
        panic(err)
    }
    if err := zw.Flush(); err != nil {
        panic(err)
    }
    if err := zw.Close(); err != nil {
        panic(err)
    }

    // 2. Convert Go side's io.Reader to Deno (JS) side's Deno.Reader interface.
    return denoio.NewJSReader(&buf)
  }))

Deno (JS) side

// 1. open target file in Deno
const file = await Deno.open(Deno.args[0]);
// 2. call Go side's function and pass Deno side's file
const compressed = compressFile(file);
// 3. copy compressed file to Stdout
Deno.copy(compressed, Deno.stdout);

Notice

  • io.Reader / io.Writer / io.Seeker converted from Deno must be used in Promise.
    • Deno.SyncReader / Deno.SyncWriter / Deno.SyncSeeker do not have this restriction.

Status

Converting JS (Deno) to Go (Wasm)

  • JS reader to Go reader
  • JS syncReader to Go reader
  • JS writer to Go writer
  • JS syncWriter to Go writer
  • JS seeker to Go seeker
  • JS syncSeeker to Go seeker
  • JS closer to Go closer

Converting Go (Wasm) to JS (Deno)

  • Go reader to JS reader
  • Go reader to JS syncReader
  • Go writer to JS writer
  • Go writer to JS syncWriter
  • Go seeker to JS seeker
  • Go seeker to JS syncSeeker
  • Go closer to JS closer

Author

syumai

License

MIT

About

denoio is a Go package to bind Deno and Go(Wasm)'s I/O interfaces.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages