diff options
Diffstat (limited to 'cli/rt/99_main.js')
-rw-r--r-- | cli/rt/99_main.js | 47 |
1 files changed, 42 insertions, 5 deletions
diff --git a/cli/rt/99_main.js b/cli/rt/99_main.js index d8462ce66..d8c34bcb3 100644 --- a/cli/rt/99_main.js +++ b/cli/rt/99_main.js @@ -7,6 +7,7 @@ delete Object.prototype.__proto__; ((window) => { const core = Deno.core; const util = window.__bootstrap.util; + const { illegalConstructorKey } = window.__bootstrap.webUtil; const eventTarget = window.__bootstrap.eventTarget; const dispatchMinimal = window.__bootstrap.dispatchMinimal; const build = window.__bootstrap.build; @@ -190,6 +191,42 @@ delete Object.prototype.__proto__; core.registerErrorClass("URIError", URIError); } + class Window extends EventTarget { + constructor(key) { + if (key !== illegalConstructorKey) { + throw new TypeError("Illegal constructor."); + } + } + + get [Symbol.toStringTag]() { + return "Window"; + } + } + + class WorkerGlobalScope extends EventTarget { + constructor(key) { + if (key != illegalConstructorKey) { + throw new TypeError("Illegal constructor."); + } + } + + get [Symbol.toStringTag]() { + return "WorkerGlobalScope"; + } + } + + class DedicatedWorkerGlobalScope extends WorkerGlobalScope { + constructor(key) { + if (key != illegalConstructorKey) { + throw new TypeError("Illegal constructor."); + } + } + + get [Symbol.toStringTag]() { + return "DedicatedWorkerGlobalScope"; + } + } + // https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope const windowOrWorkerGlobalScope = { Blob: util.nonEnumerable(fetch.Blob), @@ -226,24 +263,20 @@ delete Object.prototype.__proto__; WebSocket: util.nonEnumerable(webSocket.WebSocket), Worker: util.nonEnumerable(worker.Worker), WritableStream: util.nonEnumerable(streams.WritableStream), - addEventListener: util.readOnly(EventTarget.prototype.addEventListener), atob: util.writable(atob), btoa: util.writable(btoa), clearInterval: util.writable(timers.clearInterval), clearTimeout: util.writable(timers.clearTimeout), console: util.writable(new Console(core.print)), crypto: util.readOnly(crypto), - dispatchEvent: util.readOnly(EventTarget.prototype.dispatchEvent), fetch: util.writable(fetch.fetch), performance: util.writable(performance.performance), - removeEventListener: util.readOnly( - EventTarget.prototype.removeEventListener, - ), setInterval: util.writable(timers.setInterval), setTimeout: util.writable(timers.setTimeout), }; const mainRuntimeGlobalProperties = { + Window: util.nonEnumerable(Window), window: util.readOnly(globalThis), self: util.readOnly(globalThis), // TODO(bartlomieju): from MDN docs (https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope) @@ -255,6 +288,8 @@ delete Object.prototype.__proto__; }; const workerRuntimeGlobalProperties = { + WorkerGlobalScope: util.nonEnumerable(WorkerGlobalScope), + DedicatedWorkerGlobalScope: util.nonEnumerable(DedicatedWorkerGlobalScope), self: util.readOnly(globalThis), onmessage: util.writable(onmessage), onerror: util.writable(onerror), @@ -277,6 +312,7 @@ delete Object.prototype.__proto__; hasBootstrapped = true; Object.defineProperties(globalThis, windowOrWorkerGlobalScope); Object.defineProperties(globalThis, mainRuntimeGlobalProperties); + Object.setPrototypeOf(globalThis, Window.prototype); eventTarget.setEventTargetData(globalThis); // Registers the handler for window.onload function. globalThis.addEventListener("load", (e) => { @@ -341,6 +377,7 @@ delete Object.prototype.__proto__; Object.defineProperties(globalThis, windowOrWorkerGlobalScope); Object.defineProperties(globalThis, workerRuntimeGlobalProperties); Object.defineProperties(globalThis, { name: util.readOnly(name) }); + Object.setPrototypeOf(globalThis, DedicatedWorkerGlobalScope.prototype); eventTarget.setEventTargetData(globalThis); const { unstableFlag, pid, noColor, args } = runtimeStart( internalName ?? name, |