denoio

package module
v0.0.0-...-99abe35 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 15, 2022 License: MIT Imports: 3 Imported by: 0

README

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

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrUnimplemented = fmt.Errorf("unimplemented")
)

Functions

func NewJSCloser

func NewJSCloser(v io.Closer) js.Value

func NewJSFile

func NewJSFile(v readWriteSeekCloser) js.Value

func NewJSReadCloser

func NewJSReadCloser(v io.ReadCloser) js.Value

func NewJSReadSeeker

func NewJSReadSeeker(v io.ReadSeeker) js.Value

func NewJSReadWriteCloser

func NewJSReadWriteCloser(v io.ReadWriteCloser) js.Value

func NewJSReadWriteSeeker

func NewJSReadWriteSeeker(v io.ReadWriteSeeker) js.Value

func NewJSReadWriter

func NewJSReadWriter(v io.ReadWriter) js.Value

func NewJSReader

func NewJSReader(v io.Reader) js.Value

func NewJSSeeker

func NewJSSeeker(v io.Seeker) js.Value

func NewJSWriteCloser

func NewJSWriteCloser(v io.WriteCloser) js.Value

func NewJSWriteSeeker

func NewJSWriteSeeker(v io.WriteSeeker) js.Value

func NewJSWriter

func NewJSWriter(v io.Writer) js.Value

Types

type Closer

type Closer struct {
	// contains filtered or unexported fields
}

func NewCloser

func NewCloser(v js.Value) *Closer

func (*Closer) Close

func (f *Closer) Close() error

Close closes Deno.Closer.

type File

type File struct {
	*Reader
	*Writer
	*Seeker
	*Closer
}

func NewFile

func NewFile(v js.Value) *File

type ReadCloser

type ReadCloser struct {
	*Reader
	*Closer
}

func NewReadCloser

func NewReadCloser(v js.Value) *ReadCloser

type ReadSeeker

type ReadSeeker struct {
	*Reader
	*Seeker
}

func NewReadSeeker

func NewReadSeeker(v js.Value) *ReadSeeker

type ReadWriteCloser

type ReadWriteCloser struct {
	*Reader
	*Writer
	*Closer
}

func NewReadWriteCloser

func NewReadWriteCloser(v js.Value) *ReadWriteCloser

type ReadWriteSeeker

type ReadWriteSeeker struct {
	*Reader
	*Writer
	*Seeker
}

func NewReadWriteSeeker

func NewReadWriteSeeker(v js.Value) *ReadWriteSeeker

type ReadWriter

type ReadWriter struct {
	*Reader
	*Writer
}

func NewReadWriter

func NewReadWriter(v js.Value) *ReadWriter

type Reader

type Reader struct {
	// contains filtered or unexported fields
}

func NewReader

func NewReader(v js.Value) *Reader

func (*Reader) Read

func (f *Reader) Read(p []byte) (int, error)

Read reads data from Deno.SyncReader or Deno.Reader. Notice: reading data from Deno.Reader must be called in Promise. Deno.SyncReader does not have this restriction.

type Seeker

type Seeker struct {
	// contains filtered or unexported fields
}

func NewSeeker

func NewSeeker(v js.Value) *Seeker

func (*Seeker) Seek

func (f *Seeker) Seek(offset int64, whence int) (int64, error)

Seek seeks Deno.SyncSeeker or Deno.Seeker. `whence` parameter corresponds to: SeekStart = 0, SeekCurrent = 1, SeekEnd = 2. Notice: seeking Deno.Seeker must be called in Promise. Deno.SyncSeeker does not have this restriction.

type WriteCloser

type WriteCloser struct {
	*Writer
	*Closer
}

func NewWriteCloser

func NewWriteCloser(v js.Value) *WriteCloser

type WriteSeeker

type WriteSeeker struct {
	*Writer
	*Seeker
}

func NewWriteSeeker

func NewWriteSeeker(v js.Value) *WriteSeeker

type Writer

type Writer struct {
	// contains filtered or unexported fields
}

func NewWriter

func NewWriter(v js.Value) *Writer

func (*Writer) Write

func (f *Writer) Write(p []byte) (int, error)

Write write data to Deno.SyncWriter or Deno.Writer. Notice: writing data to Deno.Writer must be called in Promise. Deno.SyncWriter does not have this restriction.

Directories

Path Synopsis
example

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL