1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-21 15:04:11 -05:00

fix: allow setting globalThis.location when no --location is provided (#15448)

This commit is contained in:
Kayla Washburn 2022-08-10 12:57:30 -06:00 committed by GitHub
parent f16fe44303
commit 08061b60d9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 47 additions and 14 deletions

View file

@ -1,6 +1,14 @@
// deno-lint-ignore-file no-global-assign
console.log(Location);
console.log(Location.prototype);
console.log(location);
try {
location = {};
} catch (error) {
if (error instanceof Error) {
console.log(error.toString());
}
}
try {
location.hostname = "bar";
} catch (error) {

View file

@ -11,5 +11,6 @@ Location {
protocol: "https:",
search: "?baz"
}
NotSupportedError: Cannot set "location".
NotSupportedError: Cannot set "location.hostname".
[WILDCARD]

View file

@ -1,3 +1,16 @@
console.log(Location);
console.log(Location.prototype);
console.log(location);
globalThis.location = {
hash: "#bat",
host: "foo",
hostname: "foo",
href: "https://foo/bar?baz#bat",
origin: "https://foo",
pathname: "/bar",
port: "",
protocol: "https:",
search: "?baz",
};
console.log(location.pathname);

View file

@ -1,4 +1,5 @@
[WILDCARD][Function: Location]
Location {}
undefined
/bar
[WILDCARD]

View file

@ -639,6 +639,18 @@ delete Intl.v8BreakIterator;
throw new Error("Worker runtime already bootstrapped");
}
const {
args,
location: locationHref,
noColor,
isTty,
pid,
ppid,
unstableFlag,
cpuCount,
userAgent: userAgentInfo,
} = runtimeOptions;
performance.setTimeOrigin(DateNow());
const consoleFromV8 = window.console;
const wrapConsole = window.__bootstrap.console.wrapConsole;
@ -648,6 +660,18 @@ delete Intl.v8BreakIterator;
delete globalThis.bootstrap;
util.log("bootstrapMainRuntime");
hasBootstrapped = true;
// If the `--location` flag isn't set, make `globalThis.location` `undefined` and
// writable, so that they can mock it themselves if they like. If the flag was
// set, define `globalThis.location`, using the provided value.
if (locationHref == null) {
mainRuntimeGlobalProperties.location = {
writable: true,
};
} else {
location.setLocationHref(locationHref);
}
ObjectDefineProperties(globalThis, windowOrWorkerGlobalScope);
if (runtimeOptions.unstableFlag) {
ObjectDefineProperties(globalThis, unstableWindowOrWorkerGlobalScope);
@ -678,22 +702,8 @@ delete Intl.v8BreakIterator;
});
runtimeStart(runtimeOptions);
const {
args,
location: locationHref,
noColor,
isTty,
pid,
ppid,
unstableFlag,
cpuCount,
userAgent: userAgentInfo,
} = runtimeOptions;
colors.setNoColor(noColor || !isTty);
if (locationHref != null) {
location.setLocationHref(locationHref);
}
numCpus = cpuCount;
userAgent = userAgentInfo;
registerErrors();