summaryrefslogtreecommitdiff
path: root/runtime/js
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/js')
-rw-r--r--runtime/js/11_workers.js12
-rw-r--r--runtime/js/99_main.js22
-rw-r--r--runtime/js/README.md2
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):