diff options
Diffstat (limited to 'runtime/js')
-rw-r--r-- | runtime/js/11_workers.js | 12 | ||||
-rw-r--r-- | runtime/js/99_main.js | 22 | ||||
-rw-r--r-- | runtime/js/README.md | 2 |
3 files changed, 34 insertions, 2 deletions
diff --git a/runtime/js/11_workers.js b/runtime/js/11_workers.js index 4989cd4b5..57f420728 100644 --- a/runtime/js/11_workers.js +++ b/runtime/js/11_workers.js @@ -3,6 +3,7 @@ ((window) => { const core = window.Deno.core; const { Window } = window.__bootstrap.globalInterfaces; + const { getLocationHref } = window.__bootstrap.location; const { log, pathFromURL } = window.__bootstrap.util; const { defineEventHandler } = window.__bootstrap.webUtil; const build = window.__bootstrap.build.build; @@ -127,6 +128,7 @@ constructor(specifier, options = {}) { super(); + specifier = String(specifier); const { deno = {}, name = "unknown", @@ -177,6 +179,16 @@ const hasSourceCode = false; const sourceCode = decoder.decode(new Uint8Array()); + if ( + specifier.startsWith("./") || specifier.startsWith("../") || + specifier.startsWith("/") || type == "classic" + ) { + const baseUrl = getLocationHref(); + if (baseUrl != null) { + specifier = new URL(specifier, baseUrl).href; + } + } + const { id } = createWorker( specifier, hasSourceCode, diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index f38d51936..284bef48c 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -9,6 +9,7 @@ delete Object.prototype.__proto__; const util = window.__bootstrap.util; const eventTarget = window.__bootstrap.eventTarget; const globalInterfaces = window.__bootstrap.globalInterfaces; + const location = window.__bootstrap.location; const dispatchMinimal = window.__bootstrap.dispatchMinimal; const build = window.__bootstrap.build; const version = window.__bootstrap.version; @@ -196,6 +197,8 @@ delete Object.prototype.__proto__; // https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope const windowOrWorkerGlobalScope = { + Location: location.locationConstructorDescriptor, + location: location.locationDescriptor, Blob: util.nonEnumerable(fetch.Blob), ByteLengthQueuingStrategy: util.nonEnumerable( streams.ByteLengthQueuingStrategy, @@ -290,7 +293,19 @@ delete Object.prototype.__proto__; defineEventHandler(window, "unload", null); runtimeStart(runtimeOptions); - const { args, noColor, pid, ppid, unstableFlag } = runtimeOptions; + const { + args, + location: locationHref, + noColor, + pid, + ppid, + unstableFlag, + } = runtimeOptions; + + if (locationHref != null) { + location.setLocationHref(locationHref); + fetch.setBaseUrl(locationHref); + } registerErrors(); @@ -349,8 +364,11 @@ delete Object.prototype.__proto__; runtimeOptions, internalName ?? name, ); - const { unstableFlag, pid, noColor, args } = runtimeOptions; + const { unstableFlag, pid, noColor, args, location: locationHref } = + runtimeOptions; + location.setLocationHref(locationHref); + fetch.setBaseUrl(locationHref); registerErrors(); const finalDenoNs = { diff --git a/runtime/js/README.md b/runtime/js/README.md index b17fa22e5..7e3fe4345 100644 --- a/runtime/js/README.md +++ b/runtime/js/README.md @@ -38,6 +38,8 @@ Some Web APIs are using ops under the hood, eg. `console`, `performance`. [Body](https://developer.mozilla.org/en-US/docs/Web/API/Body) and [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers): modern Promise-based HTTP Request API. +- [location](https://developer.mozilla.org/en-US/docs/Web/API/Window/location) + and [Location](https://developer.mozilla.org/en-US/docs/Web/API/Location). - [FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData): access to a `multipart/form-data` serialization. - [Performance](https://developer.mozilla.org/en-US/docs/Web/API/Performance): |