labor

package module
v0.0.0-...-6aa4fe0 Latest Latest
Warning

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

Go to latest
Published: May 27, 2021 License: Apache-2.0 Imports: 7 Imported by: 0

README

Labor

Implementation of Web Container

Run
$ cd demo
$ yarn build
$ yarn dev
Detail
code => js runtime => rust/go wasm API

举个例子

const res = await readFile('a.js')

这一句代码中的 readFile 最终是要执行到 rust/go 中的 API 的,但到底怎么将 go 的 API 注入进去的呢?

此时就需要 go 注入到全局一个 API

js.Global().Set("readFile", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
    readFile(args[0].String()) // 相当于 eval
    return nil
}))

我们在 js 侧,只需要直接调用,不需要发接口

new Function('readFile', `const res = await readFile('a.js')`)(readFile)

大功告成,就是如此简单,在 wasm 端实现 API,然后在 js 侧注入到字符串里即可

但还没完,那么问题来了,文件系统呢?http呢?

这就得看 go 对 WASI 的支持程度了,亲测 net/http 包大部分支持良好,但不能启端口,osutil 包内存 API 是支持的

demo 只是打个比方,这个项目我会用 go 写,因为 docker 也是用 go 写的

值得一提的是,为了获得更好的性能和大小,我们接下来会使用类似 tinygo 的编译器

但是 trip worker 我还是会用 rust 实现,理由和 deno 一样,所以本质上,同一套标准库,我得写两遍了,呜呜呜

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Await

func Await(p js.Value) (js.Value, error)

func Download

func Download(url string) interface{}

func NewPromise

func NewPromise() (p js.Value, resolve func(interface{}), reject func(interface{}))

func Request

func Request(r js.Value) *http.Request

func Serve

func Serve(handler http.Handler) func()

Types

type ResponseRecorder

type ResponseRecorder struct {
	*httptest.ResponseRecorder
}

func NewResponseRecorder

func NewResponseRecorder() ResponseRecorder

func (ResponseRecorder) JSValue

func (rr ResponseRecorder) JSValue() js.Value

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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