1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-22 07:14:47 -05:00

Support using deno as a library

This commit is contained in:
Ryan Dahl 2018-05-29 04:28:32 -04:00
parent b6c0ad15fa
commit 0ea603d96e
16 changed files with 58 additions and 39 deletions

View file

@ -18,6 +18,7 @@ TS_FILES = \
v8worker2.d.ts
GO_FILES = \
cmd/main.go \
assets.go \
deno_dir.go \
deno_dir_test.go \
@ -31,13 +32,14 @@ GO_FILES = \
timers.go \
util.go
deno: msg.pb.go $(GO_FILES)
go build -o deno
go build -o deno ./cmd
assets.go: dist/main.js
cp node_modules/typescript/lib/lib.*d.ts dist/
cp deno.d.ts dist/
go-bindata -pkg main -o assets.go dist/
go-bindata -pkg deno -o assets.go dist/
msg.pb.go: msg.proto
protoc --go_out=. msg.proto

View file

@ -40,6 +40,9 @@ A JavaScript runtime using V8 6.8 and Go.
* Aims to be browser compatible.
* Can be used as a library to easily build your own JavaScript runtime.
https://github.com/ry/deno/blob/master/cmd/main.go
## Status

13
cmd/main.go Normal file
View file

@ -0,0 +1,13 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
package main
import (
"github.com/ry/deno"
)
func main() {
deno.Init()
deno.Eval("deno_main.js", "denoMain()")
deno.Loop()
}

View file

@ -1,6 +1,6 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
package main
package deno
import (
"crypto/md5"

View file

@ -1,6 +1,6 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
package main
package deno
import (
"io/ioutil"

View file

@ -1,10 +1,9 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
package main
package deno
import (
"github.com/golang/protobuf/proto"
"github.com/ry/v8worker2"
"sync"
)
@ -20,19 +19,10 @@ var stats struct {
v8workerBytesRecv int
}
// There is a single global worker for this process.
// This file should be the only part of deno that directly access it, so that
// all interaction with V8 can go through a single point.
var worker *v8worker2.Worker
var channels = make(map[string][]Subscriber)
type Subscriber func(payload []byte) []byte
func createWorker() {
worker = v8worker2.New(recv)
}
func recv(buf []byte) (response []byte) {
stats.v8workerRecv++
stats.v8workerBytesRecv += len(buf)

View file

@ -1,6 +1,6 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
package main
package deno
// For testing
func InitEcho() {

View file

@ -1,6 +1,6 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
package main
package deno
import (
"github.com/golang/protobuf/proto"

View file

@ -1,6 +1,6 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
package main
package deno
import (
"bytes"

41
main.go
View file

@ -1,6 +1,6 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
package main
package deno
import (
"flag"
@ -34,8 +34,16 @@ func FlagsParse() []string {
return args
}
func main() {
args := FlagsParse()
// There is a single global worker for this process.
// This file should be the only part of deno that directly access it, so that
// all interaction with V8 can go through a single point.
var worker *v8worker2.Worker
var workerArgs []string
var main_js string
var main_map string
func Init() {
workerArgs = FlagsParse()
// Maybe start Golang CPU profiler.
// Use --prof for profiling JS.
@ -49,33 +57,36 @@ func main() {
}
createDirs()
createWorker()
InitOS()
InitEcho()
InitTimers()
InitFetch()
main_js := stringAsset("main.js")
worker = v8worker2.New(recv)
main_js = stringAsset("main.js")
err := worker.Load("/main.js", main_js)
exitOnError(err)
main_map := stringAsset("main.map")
main_map = stringAsset("main.map")
}
// It's up to library users to call
// deno.Eval("deno_main.js", "denoMain()")
func Eval(filename string, code string) {
err := worker.Load(filename, code)
exitOnError(err)
}
func Loop() {
cwd, err := os.Getwd()
check(err)
err = worker.Load("deno_main.js", "denoMain()")
exitOnError(err)
var command = Msg_START // TODO use proto3
PubMsg("start", &Msg{
Command: command,
Command: Msg_START,
StartCwd: cwd,
StartArgv: args,
StartArgv: workerArgs,
StartDebugFlag: *flagDebug,
StartMainJs: main_js,
StartMainMap: main_map,
})
DispatchLoop()
}

View file

@ -47,5 +47,4 @@ let startCalled = false;
const mod = runtime.resolveModule(inputFn, `${cwd}/`);
mod.compileAndRun();
});
}
};

View file

@ -2,6 +2,7 @@
// All rights reserved. MIT License.
syntax = "proto3";
package main;
option go_package = "deno";
message BaseMsg {
string channel = 1;

2
os.go
View file

@ -1,6 +1,6 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
package main
package deno
import (
"github.com/golang/protobuf/proto"

View file

@ -1,6 +1,6 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
package main
package deno
import (
"path"

View file

@ -1,6 +1,6 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
package main
package deno
import (
"github.com/golang/protobuf/proto"

View file

@ -1,6 +1,6 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
package main
package deno
import (
"fmt"