summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile12
-rw-r--r--deno.d.ts5
-rw-r--r--echo.go9
-rw-r--r--main.go1
-rw-r--r--runtime.ts13
-rw-r--r--testdata/009_pub_sub.ts18
-rw-r--r--testdata/009_pub_sub.ts.out3
7 files changed, 57 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index ae67b1c37..1a31e3c08 100644
--- a/Makefile
+++ b/Makefile
@@ -1,20 +1,25 @@
TS_FILES = \
- tsconfig.json \
dispatch.ts \
+ globals.ts \
main.ts \
msg.pb.d.ts \
msg.pb.js \
os.ts \
runtime.ts \
+ test.js \
timers.ts \
+ tsconfig.json \
+ types.ts \
url.js \
util.ts \
- v8_source_maps.ts
+ v8_source_maps.ts \
+ v8worker2.d.ts
GO_FILES = \
assets.go \
deno_dir.go \
deno_dir_test.go \
+ echo.go \
dispatch.go \
main.go \
msg.pb.go \
@@ -23,11 +28,12 @@ GO_FILES = \
timers.go \
util.go
-deno: $(GO_FILES)
+deno: msg.pb.go $(GO_FILES)
go build -o deno
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/
msg.pb.go: msg.proto
diff --git a/deno.d.ts b/deno.d.ts
new file mode 100644
index 000000000..cf6dcbcec
--- /dev/null
+++ b/deno.d.ts
@@ -0,0 +1,5 @@
+declare module "deno" {
+ type MessageCallback = (msg: Uint8Array) => void;
+ function sub(channel: string, cb: MessageCallback): void;
+ function pub(channel: string, payload: Uint8Array): null | ArrayBuffer;
+}
diff --git a/echo.go b/echo.go
new file mode 100644
index 000000000..b0db58471
--- /dev/null
+++ b/echo.go
@@ -0,0 +1,9 @@
+package main
+
+// For testing
+func InitEcho() {
+ Sub("echo", func(buf []byte) []byte {
+ Pub("echo", buf)
+ return nil
+ })
+}
diff --git a/main.go b/main.go
index 941f7ffdc..e4681bfbe 100644
--- a/main.go
+++ b/main.go
@@ -55,6 +55,7 @@ func main() {
createWorker()
InitOS()
+ InitEcho()
InitTimers()
main_js := stringAsset("main.js")
diff --git a/runtime.ts b/runtime.ts
index 046a1c605..9613ab117 100644
--- a/runtime.ts
+++ b/runtime.ts
@@ -10,11 +10,15 @@ import * as ts from "typescript";
import * as util from "./util";
import { log } from "./util";
import * as os from "./os";
+import { pub, sub } from "./dispatch";
import * as sourceMaps from "./v8_source_maps";
import { _global, globalEval } from "./globals";
const EOL = "\n";
+// Public deno module.
+const deno = { pub, sub };
+
// tslint:disable-next-line:no-any
type AmdFactory = (...args: any[]) => undefined | object;
type AmdDefine = (deps: string[], factory: AmdFactory) => void;
@@ -103,6 +107,8 @@ export function makeDefine(fileName: string): AmdDefine {
return localRequire;
} else if (dep === "exports") {
return localExports;
+ } else if (dep === "deno") {
+ return deno;
} else {
const resolved = resolveModuleName(dep, fileName);
const depModule = FileModule.load(resolved);
@@ -262,7 +268,12 @@ class TypeScriptHost implements ts.LanguageServiceHost {
): Array<ts.ResolvedModule | undefined> {
util.log("resolveModuleNames", { moduleNames, reusedNames });
return moduleNames.map((name: string) => {
- const resolvedFileName = resolveModuleName(name, containingFile);
+ let resolvedFileName;
+ if (name === "deno") {
+ resolvedFileName = resolveModuleName("deno.d.ts", "/$asset$/");
+ } else {
+ resolvedFileName = resolveModuleName(name, containingFile);
+ }
const isExternalLibraryImport = false;
return { resolvedFileName, isExternalLibraryImport };
});
diff --git a/testdata/009_pub_sub.ts b/testdata/009_pub_sub.ts
new file mode 100644
index 000000000..3d33c820d
--- /dev/null
+++ b/testdata/009_pub_sub.ts
@@ -0,0 +1,18 @@
+import * as deno from "deno";
+
+deno.sub("echo", (ui8: Uint8Array) => {
+ const str = String.fromCharCode.apply(null, ui8);
+ console.log("Got message", str);
+});
+
+function str2ui8(str: string): Uint8Array {
+ const ui8 = new Uint8Array(str.length);
+ for (let i = 0; i < str.length; i++) {
+ ui8[i] = str.charCodeAt(i);
+ }
+ return ui8;
+}
+
+console.log("Before deno.pub()");
+deno.pub("echo", str2ui8("hello"));
+console.log("After deno.pub()");
diff --git a/testdata/009_pub_sub.ts.out b/testdata/009_pub_sub.ts.out
new file mode 100644
index 000000000..d5581cafb
--- /dev/null
+++ b/testdata/009_pub_sub.ts.out
@@ -0,0 +1,3 @@
+Before deno.pub()
+After deno.pub()
+Got message hello