From 3171ba4c3ff4046aaca0d70321f1dfec4c0728bb Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Wed, 23 May 2018 16:45:01 -0400 Subject: [PATCH] Add special deno module to public api --- Makefile | 12 +++++++++--- deno.d.ts | 5 +++++ echo.go | 9 +++++++++ main.go | 1 + runtime.ts | 13 ++++++++++++- testdata/009_pub_sub.ts | 18 ++++++++++++++++++ testdata/009_pub_sub.ts.out | 3 +++ 7 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 deno.d.ts create mode 100644 echo.go create mode 100644 testdata/009_pub_sub.ts create mode 100644 testdata/009_pub_sub.ts.out diff --git a/Makefile b/Makefile index ae67b1c375..1a31e3c083 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 0000000000..cf6dcbcec6 --- /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 0000000000..b0db584711 --- /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 941f7ffdc6..e4681bfbed 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 046a1c6057..9613ab117f 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 { 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 0000000000..3d33c820d2 --- /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 0000000000..d5581cafbe --- /dev/null +++ b/testdata/009_pub_sub.ts.out @@ -0,0 +1,3 @@ +Before deno.pub() +After deno.pub() +Got message hello