1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-25 16:49:18 -05:00

Prevent circular imports in ts code (#576)

This commit is contained in:
Francesco Borzì 2018-08-25 21:42:49 +02:00 committed by Ryan Dahl
parent 3bcf7e271f
commit 84c38f34ee
12 changed files with 42 additions and 26 deletions

1
.gitignore vendored
View file

@ -6,6 +6,7 @@ Cargo.lock
yarn.lock
# npm deps
node_modules
.idea
# RLS generated files
/target/

View file

@ -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,

View file

@ -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";

View file

@ -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";

View file

@ -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,

6
js/global-eval.ts Normal file
View file

@ -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;

View file

@ -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";

18
js/libdeno.ts Normal file
View file

@ -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;

View file

@ -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";

View file

@ -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();

View file

@ -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;

View file

@ -63,5 +63,8 @@
"allow-leading-underscore",
"allow-trailing-underscore"
]
}
},
"extends": [
"tslint-no-circular-imports"
]
}