summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/factory.rs5
-rw-r--r--cli/standalone/mod.rs9
-rw-r--r--cli/worker.rs12
-rw-r--r--ext/node/polyfills/process.ts15
-rw-r--r--runtime/js/99_main.js8
-rw-r--r--runtime/worker_bootstrap.rs8
-rw-r--r--tests/unit_node/process_test.ts12
7 files changed, 32 insertions, 37 deletions
diff --git a/cli/factory.rs b/cli/factory.rs
index 9f3719510..22bc6cdaf 100644
--- a/cli/factory.rs
+++ b/cli/factory.rs
@@ -855,9 +855,10 @@ impl CliFactory {
location: self.options.location_flag().clone(),
// if the user ran a binary command, we'll need to set process.argv[0]
// to be the name of the binary command instead of deno
- maybe_binary_npm_command_name: self
+ argv0: self
.options
- .take_binary_npm_command_name(),
+ .take_binary_npm_command_name()
+ .or(std::env::args().next()),
origin_data_folder_path: Some(self.deno_dir()?.origin_data_folder_path()),
seed: self.options.seed(),
unsafely_ignore_certificate_errors: self
diff --git a/cli/standalone/mod.rs b/cli/standalone/mod.rs
index d1b90ecee..312a1841d 100644
--- a/cli/standalone/mod.rs
+++ b/cli/standalone/mod.rs
@@ -536,11 +536,10 @@ pub async fn run(
is_npm_main: main_module.scheme() == "npm",
skip_op_registration: true,
location: metadata.location,
- maybe_binary_npm_command_name: NpmPackageReqReference::from_specifier(
- main_module,
- )
- .ok()
- .map(|req_ref| npm_pkg_req_ref_to_binary_command(&req_ref)),
+ argv0: NpmPackageReqReference::from_specifier(main_module)
+ .ok()
+ .map(|req_ref| npm_pkg_req_ref_to_binary_command(&req_ref))
+ .or(std::env::args().next()),
origin_data_folder_path: None,
seed: metadata.seed,
unsafely_ignore_certificate_errors: metadata
diff --git a/cli/worker.rs b/cli/worker.rs
index 5c252e92c..302303f28 100644
--- a/cli/worker.rs
+++ b/cli/worker.rs
@@ -115,7 +115,7 @@ pub struct CliMainWorkerOptions {
pub is_inspecting: bool,
pub is_npm_main: bool,
pub location: Option<Url>,
- pub maybe_binary_npm_command_name: Option<String>,
+ pub argv0: Option<String>,
pub origin_data_folder_path: Option<PathBuf>,
pub seed: Option<u64>,
pub unsafely_ignore_certificate_errors: Option<Vec<String>>,
@@ -608,10 +608,7 @@ impl CliMainWorkerFactory {
user_agent: version::get_user_agent().to_string(),
inspect: shared.options.is_inspecting,
has_node_modules_dir: shared.options.has_node_modules_dir,
- maybe_binary_npm_command_name: shared
- .options
- .maybe_binary_npm_command_name
- .clone(),
+ argv0: shared.options.argv0.clone(),
node_ipc_fd: shared.node_ipc,
disable_deprecated_api_warning: shared.disable_deprecated_api_warning,
verbose_deprecated_api_warning: shared.verbose_deprecated_api_warning,
@@ -815,10 +812,7 @@ fn create_web_worker_callback(
user_agent: version::get_user_agent().to_string(),
inspect: shared.options.is_inspecting,
has_node_modules_dir: shared.options.has_node_modules_dir,
- maybe_binary_npm_command_name: shared
- .options
- .maybe_binary_npm_command_name
- .clone(),
+ argv0: shared.options.argv0.clone(),
node_ipc_fd: None,
disable_deprecated_api_warning: shared.disable_deprecated_api_warning,
verbose_deprecated_api_warning: shared.verbose_deprecated_api_warning,
diff --git a/ext/node/polyfills/process.ts b/ext/node/polyfills/process.ts
index 518718470..c6dfe6c62 100644
--- a/ext/node/polyfills/process.ts
+++ b/ext/node/polyfills/process.ts
@@ -45,8 +45,7 @@ import { isWindows } from "ext:deno_node/_util/os.ts";
import * as io from "ext:deno_io/12_io.js";
import { Command } from "ext:runtime/40_process.js";
-let argv0Getter = () => "";
-export let argv0 = "deno";
+export let argv0 = "";
export let arch = "";
@@ -389,9 +388,6 @@ class Process extends EventEmitter {
argv = argv;
get argv0() {
- if (!argv0) {
- argv0 = argv0Getter();
- }
return argv0;
}
@@ -875,19 +871,14 @@ internals.__bootstrapNodeProcess = function (
) {
// Overwrites the 1st item with getter.
if (typeof argv0Val === "string") {
+ argv0 = argv0Val;
Object.defineProperty(argv, "0", {
get: () => {
return argv0Val;
},
});
- argv0Getter = () => argv0Val;
} else {
- Object.defineProperty(argv, "0", {
- get: () => {
- return Deno.execPath();
- },
- });
- argv0Getter = () => Deno.execPath();
+ Object.defineProperty(argv, "0", { get: () => argv0 });
}
// Overwrites the 2st item with getter.
diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js
index 11c26798b..21c74aeff 100644
--- a/runtime/js/99_main.js
+++ b/runtime/js/99_main.js
@@ -644,7 +644,7 @@ function bootstrapMainRuntime(runtimeOptions) {
2: unstableFeatures,
3: inspectFlag,
5: hasNodeModulesDir,
- 6: maybeBinaryNpmCommandName,
+ 6: argv0,
7: shouldDisableDeprecatedApiWarning,
8: shouldUseVerboseDeprecatedApiWarning,
9: future,
@@ -768,7 +768,7 @@ function bootstrapMainRuntime(runtimeOptions) {
ObjectDefineProperty(globalThis, "Deno", core.propReadOnly(finalDenoNs));
if (nodeBootstrap) {
- nodeBootstrap(hasNodeModulesDir, maybeBinaryNpmCommandName);
+ nodeBootstrap(hasNodeModulesDir, argv0);
}
if (future) {
@@ -793,7 +793,7 @@ function bootstrapWorkerRuntime(
2: unstableFeatures,
4: enableTestingFeaturesFlag,
5: hasNodeModulesDir,
- 6: maybeBinaryNpmCommandName,
+ 6: argv0,
7: shouldDisableDeprecatedApiWarning,
8: shouldUseVerboseDeprecatedApiWarning,
} = runtimeOptions;
@@ -897,7 +897,7 @@ function bootstrapWorkerRuntime(
ObjectDefineProperty(globalThis, "Deno", core.propReadOnly(finalDenoNs));
if (nodeBootstrap) {
- nodeBootstrap(hasNodeModulesDir, maybeBinaryNpmCommandName);
+ nodeBootstrap(hasNodeModulesDir, argv0);
}
}
diff --git a/runtime/worker_bootstrap.rs b/runtime/worker_bootstrap.rs
index 300829630..c019dae1a 100644
--- a/runtime/worker_bootstrap.rs
+++ b/runtime/worker_bootstrap.rs
@@ -58,7 +58,7 @@ pub struct BootstrapOptions {
pub user_agent: String,
pub inspect: bool,
pub has_node_modules_dir: bool,
- pub maybe_binary_npm_command_name: Option<String>,
+ pub argv0: Option<String>,
pub node_ipc_fd: Option<i64>,
pub disable_deprecated_api_warning: bool,
pub verbose_deprecated_api_warning: bool,
@@ -89,7 +89,7 @@ impl Default for BootstrapOptions {
inspect: Default::default(),
args: Default::default(),
has_node_modules_dir: Default::default(),
- maybe_binary_npm_command_name: None,
+ argv0: None,
node_ipc_fd: None,
disable_deprecated_api_warning: false,
verbose_deprecated_api_warning: false,
@@ -121,7 +121,7 @@ struct BootstrapV8<'a>(
bool,
// has_node_modules_dir
bool,
- // maybe_binary_npm_command_name
+ // argv0
Option<&'a str>,
// disable_deprecated_api_warning,
bool,
@@ -147,7 +147,7 @@ impl BootstrapOptions {
self.inspect,
self.enable_testing_features,
self.has_node_modules_dir,
- self.maybe_binary_npm_command_name.as_deref(),
+ self.argv0.as_deref(),
self.disable_deprecated_api_warning,
self.verbose_deprecated_api_warning,
self.future,
diff --git a/tests/unit_node/process_test.ts b/tests/unit_node/process_test.ts
index 24ef6a316..0bbc9981f 100644
--- a/tests/unit_node/process_test.ts
+++ b/tests/unit_node/process_test.ts
@@ -287,7 +287,17 @@ Deno.test({
Deno.test({
name: "process.argv0",
- fn() {
+ async fn() {
+ const { stdout } = await new Deno.Command(Deno.execPath(), {
+ args: [
+ "eval",
+ `import process from "node:process";console.log(process.argv0);`,
+ ],
+ stdout: "piped",
+ stderr: "null",
+ }).output();
+ assertEquals(new TextDecoder().decode(stdout).trim(), Deno.execPath());
+
assertEquals(typeof process.argv0, "string");
assert(
process.argv0.match(/[^/\\]*deno[^/\\]*$/),