summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
Diffstat (limited to 'js')
-rw-r--r--js/console.ts8
-rw-r--r--js/console_test.ts5
-rw-r--r--js/globals.ts1
3 files changed, 14 insertions, 0 deletions
diff --git a/js/console.ts b/js/console.ts
index 10be30ace..c16ea0302 100644
--- a/js/console.ts
+++ b/js/console.ts
@@ -483,14 +483,18 @@ type PrintFunc = (x: string, isErr?: boolean) => void;
const countMap = new Map<string, number>();
const timerMap = new Map<string, number>();
+export const isConsoleInstance = Symbol("isConsoleInstance");
export class Console {
indentLevel: number;
collapsedAt: number | null;
+ [isConsoleInstance]: boolean = false;
+
/** @internal */
constructor(private printFunc: PrintFunc) {
this.indentLevel = 0;
this.collapsedAt = null;
+ this[isConsoleInstance] = true;
}
/** Writes the arguments to stdout */
@@ -730,6 +734,10 @@ export class Console {
cursorTo(stdout, 0, 0);
clearScreenDown(stdout);
};
+
+ static [Symbol.hasInstance](instance: Console): boolean {
+ return instance[isConsoleInstance];
+ }
}
/**
diff --git a/js/console_test.ts b/js/console_test.ts
index 7bedcf973..a4ff8a4da 100644
--- a/js/console_test.ts
+++ b/js/console_test.ts
@@ -20,6 +20,11 @@ test(function consoleShouldBeANamespace() {
assertEquals(prototype2, Object.prototype);
});
+test(function consoleHasRightInstance() {
+ assert(console instanceof Console);
+ assertEquals({} instanceof Console, false);
+});
+
test(function consoleTestAssertShouldNotThrowError() {
console.assert(true);
diff --git a/js/globals.ts b/js/globals.ts
index 93fe6dbe7..4bb40fdb5 100644
--- a/js/globals.ts
+++ b/js/globals.ts
@@ -52,6 +52,7 @@ Object.freeze(window.Deno);
// by ObjectCreate(%ObjectPrototype%), instead of %ObjectPrototype%.
let console = Object.create({}) as consoleTypes.Console;
Object.assign(console, new consoleTypes.Console(core.print));
+console[consoleTypes.isConsoleInstance] = true;
// Globally available functions and object instances.
window.atob = textEncoding.atob;