summaryrefslogtreecommitdiff
path: root/globals.ts
diff options
context:
space:
mode:
Diffstat (limited to 'globals.ts')
-rw-r--r--globals.ts44
1 files changed, 44 insertions, 0 deletions
diff --git a/globals.ts b/globals.ts
new file mode 100644
index 000000000..f25cc710b
--- /dev/null
+++ b/globals.ts
@@ -0,0 +1,44 @@
+import { setTimeout } from "./timers";
+
+// 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.
+// TODO The underscore is because it's conflicting with @types/node.
+export const _global = globalEval("this");
+
+_global["window"] = _global; // Create a window object.
+import "./url";
+
+_global["setTimeout"] = setTimeout;
+
+const print = V8Worker2.print;
+
+_global["console"] = {
+ // tslint:disable-next-line:no-any
+ log(...args: any[]): void {
+ print(stringifyArgs(args));
+ },
+
+ // tslint:disable-next-line:no-any
+ error(...args: any[]): void {
+ print("ERROR: " + stringifyArgs(args));
+ }
+};
+
+// tslint:disable-next-line:no-any
+function stringifyArgs(args: any[]): string {
+ const out: string[] = [];
+ for (const a of args) {
+ if (typeof a === "string") {
+ out.push(a);
+ } else {
+ out.push(JSON.stringify(a));
+ }
+ }
+ return out.join(" ");
+}