diff --git a/.gitignore b/.gitignore index 2ebbb4eac2..51eb81ca8b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ Cargo.lock yarn.lock # npm deps node_modules +.idea # RLS generated files /target/ diff --git a/js/assets.ts b/js/assets.ts index 3b5691bc70..89b3e2645d 100644 --- a/js/assets.ts +++ b/js/assets.ts @@ -10,6 +10,7 @@ import compilerDts from "gen/js/compiler.d.ts!string"; import consoleDts from "gen/js/console.d.ts!string"; import denoDts from "gen/js/deno.d.ts!string"; +import libdenoDts from "gen/js/libdeno.d.ts!string"; import globalsDts from "gen/js/globals.d.ts!string"; import osDts from "gen/js/os.d.ts!string"; import fetchDts from "gen/js/fetch.d.ts!string"; @@ -59,6 +60,7 @@ export const assetSourceCode: { [key: string]: string } = { "compiler.d.ts": compilerDts, "console.d.ts": consoleDts, "deno.d.ts": denoDts, + "libdeno.d.ts": libdenoDts, "globals.d.ts": globalsDts, "os.d.ts": osDts, "fetch.d.ts": fetchDts, diff --git a/js/compiler.ts b/js/compiler.ts index 93cfd34c19..46f8c81215 100644 --- a/js/compiler.ts +++ b/js/compiler.ts @@ -2,7 +2,9 @@ import * as ts from "typescript"; import { assetSourceCode } from "./assets"; import * as deno from "./deno"; -import { libdeno, window, globalEval } from "./globals"; +import { globalEval } from "./global-eval"; +import { libdeno } from "./libdeno"; +import { window } from "./globals"; import * as os from "./os"; import { RawSourceMap } from "./types"; import { assert, log, notImplemented } from "./util"; diff --git a/js/deno.ts b/js/deno.ts index ff9939b1b7..f7f6c521ee 100644 --- a/js/deno.ts +++ b/js/deno.ts @@ -1,4 +1,4 @@ // Copyright 2018 the Deno authors. All rights reserved. MIT license. // Public deno module. export { exit, readFileSync, writeFileSync } from "./os"; -export { libdeno } from "./globals"; +export { libdeno } from "./libdeno"; diff --git a/js/fetch.ts b/js/fetch.ts index e6981df377..1c733e0669 100644 --- a/js/fetch.ts +++ b/js/fetch.ts @@ -8,7 +8,7 @@ import { notImplemented } from "./util"; import { flatbuffers } from "flatbuffers"; -import { libdeno } from "./globals"; +import { libdeno } from "./libdeno"; import { deno as fbs } from "gen/msg_generated"; import { Headers, diff --git a/js/global-eval.ts b/js/global-eval.ts new file mode 100644 index 0000000000..ee37e6f249 --- /dev/null +++ b/js/global-eval.ts @@ -0,0 +1,6 @@ +// If you use the eval function indirectly, by invoking it via a reference +// other than eval, as of ECMAScript 5 it works in the global scope rather than +// the local scope. This means, for instance, that function declarations create +// global functions, and that the code being evaluated doesn't have access to +// local variables within the scope where it's being called. +export const globalEval = eval; diff --git a/js/globals.ts b/js/globals.ts index beecbf58db..80e00ea15f 100644 --- a/js/globals.ts +++ b/js/globals.ts @@ -2,10 +2,11 @@ import { Console } from "./console"; import { exit } from "./os"; -import { RawSourceMap } from "./types"; import * as timers from "./timers"; -import { TextEncoder, TextDecoder } from "./text_encoding"; +import { TextDecoder, TextEncoder } from "./text_encoding"; import * as fetch_ from "./fetch"; +import { libdeno } from "./libdeno"; +import { globalEval } from "./global-eval"; declare global { interface Window { @@ -36,27 +37,10 @@ declare global { // tslint:enable:variable-name } -// If you use the eval function indirectly, by invoking it via a reference -// other than eval, as of ECMAScript 5 it works in the global scope rather than -// the local scope. This means, for instance, that function declarations create -// global functions, and that the code being evaluated doesn't have access to -// local variables within the scope where it's being called. -export const globalEval = eval; - // A reference to the global object. export const window = globalEval("this"); window.window = window; -// The libdeno functions are moved so that users can't access them. -type MessageCallback = (msg: Uint8Array) => void; -interface Libdeno { - recv(cb: MessageCallback): void; - send(msg: ArrayBufferView): null | Uint8Array; - print(x: string): void; - mainSource: string; - mainSourceMap: RawSourceMap; -} -export const libdeno = window.libdeno as Libdeno; window.libdeno = null; // import "./url"; diff --git a/js/libdeno.ts b/js/libdeno.ts new file mode 100644 index 0000000000..83dc8efa09 --- /dev/null +++ b/js/libdeno.ts @@ -0,0 +1,18 @@ +import { RawSourceMap } from "./types"; +import { globalEval } from "./global-eval"; + +// The libdeno functions are moved so that users can't access them. +type MessageCallback = (msg: Uint8Array) => void; +interface Libdeno { + recv(cb: MessageCallback): void; + + send(msg: ArrayBufferView): null | Uint8Array; + + print(x: string): void; + + mainSource: string; + mainSourceMap: RawSourceMap; +} + +const window = globalEval("this"); +export const libdeno = window.libdeno as Libdeno; diff --git a/js/main.ts b/js/main.ts index 7400030496..eb90abb0e3 100644 --- a/js/main.ts +++ b/js/main.ts @@ -4,7 +4,7 @@ import { deno as fbs } from "gen/msg_generated"; import { assert, assignCmdId, log, setLogDebug } from "./util"; import * as os from "./os"; import { DenoCompiler } from "./compiler"; -import { libdeno } from "./globals"; +import { libdeno } from "./libdeno"; import * as timers from "./timers"; import { onFetchRes } from "./fetch"; diff --git a/js/os.ts b/js/os.ts index 22bbd77489..3104c5013f 100644 --- a/js/os.ts +++ b/js/os.ts @@ -5,7 +5,7 @@ import { assert } from "./util"; import * as util from "./util"; import { maybeThrowError } from "./errors"; import { flatbuffers } from "flatbuffers"; -import { libdeno } from "./globals"; +import { libdeno } from "./libdeno"; export function exit(exitCode = 0): never { const builder = new flatbuffers.Builder(); diff --git a/js/timers.ts b/js/timers.ts index 3791e079d4..43bd199b1a 100644 --- a/js/timers.ts +++ b/js/timers.ts @@ -3,7 +3,7 @@ import { assert } from "./util"; import * as util from "./util"; import { deno as fbs } from "gen/msg_generated"; import { flatbuffers } from "flatbuffers"; -import { libdeno } from "./globals"; +import { libdeno } from "./libdeno"; let nextTimerId = 1; diff --git a/tslint.json b/tslint.json index a169c3861d..78036ae388 100644 --- a/tslint.json +++ b/tslint.json @@ -63,5 +63,8 @@ "allow-leading-underscore", "allow-trailing-underscore" ] - } + }, + "extends": [ + "tslint-no-circular-imports" + ] }