summaryrefslogtreecommitdiff
path: root/cli/main.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2020-11-02 23:37:55 +0100
committerGitHub <noreply@github.com>2020-11-02 23:37:55 +0100
commitc3dd19c5d37a9c0801857669b59bd708a5bb0a71 (patch)
tree01b65494d5fada50a76a5b96609bdfddabdc5f5b /cli/main.rs
parent43d4978ceabb9d5879ab8d86bbf0f1ee551f9500 (diff)
refactor(cli): remove ProgramState::permissions (#8228)
This commit removes ProgramState::permissions field. Having permissions parsed from CLI flags stored on globally accessible state object made it easy to mistakenly use these permissions in situations which required "runtime" permissions.
Diffstat (limited to 'cli/main.rs')
-rw-r--r--cli/main.rs27
1 files changed, 20 insertions, 7 deletions
diff --git a/cli/main.rs b/cli/main.rs
index 7773f7d48..8bc2ea1b9 100644
--- a/cli/main.rs
+++ b/cli/main.rs
@@ -208,9 +208,11 @@ async fn install_command(
let mut preload_flags = flags.clone();
preload_flags.inspect = None;
preload_flags.inspect_brk = None;
+ let permissions = Permissions::from_flags(&preload_flags);
let program_state = ProgramState::new(preload_flags)?;
let main_module = ModuleSpecifier::resolve_url_or_path(&module_url)?;
- let mut worker = MainWorker::new(&program_state, main_module.clone());
+ let mut worker =
+ MainWorker::new(&program_state, main_module.clone(), permissions);
// First, fetch and compile the module; this step ensures that the module exists.
worker.preload_module(&main_module).await?;
installer::install(flags, &module_url, args, name, root, force)
@@ -271,8 +273,10 @@ async fn eval_command(
// Force TypeScript compile.
let main_module =
ModuleSpecifier::resolve_url_or_path("./$deno$eval.ts").unwrap();
+ let permissions = Permissions::from_flags(&flags);
let program_state = ProgramState::new(flags)?;
- let mut worker = MainWorker::new(&program_state, main_module.clone());
+ let mut worker =
+ MainWorker::new(&program_state, main_module.clone(), permissions);
let main_module_url = main_module.as_url().to_owned();
// Create a dummy source file.
let source_code = if print {
@@ -516,8 +520,10 @@ async fn doc_command(
async fn run_repl(flags: Flags) -> Result<(), AnyError> {
let main_module =
ModuleSpecifier::resolve_url_or_path("./$deno$repl.ts").unwrap();
+ let permissions = Permissions::from_flags(&flags);
let program_state = ProgramState::new(flags)?;
- let mut worker = MainWorker::new(&program_state, main_module.clone());
+ let mut worker =
+ MainWorker::new(&program_state, main_module.clone(), permissions);
worker.run_event_loop().await?;
repl::run(&program_state, worker).await
@@ -525,9 +531,11 @@ async fn run_repl(flags: Flags) -> Result<(), AnyError> {
async fn run_from_stdin(flags: Flags) -> Result<(), AnyError> {
let program_state = ProgramState::new(flags.clone())?;
+ let permissions = Permissions::from_flags(&flags);
let main_module =
ModuleSpecifier::resolve_url_or_path("./$deno$stdin.ts").unwrap();
- let mut worker = MainWorker::new(&program_state.clone(), main_module.clone());
+ let mut worker =
+ MainWorker::new(&program_state.clone(), main_module.clone(), permissions);
let mut source = Vec::new();
std::io::stdin().read_to_end(&mut source)?;
@@ -588,9 +596,10 @@ async fn run_with_watch(flags: Flags, script: String) -> Result<(), AnyError> {
// FIXME(bartlomieju): ProgramState must be created on each restart - otherwise file fetcher
// will use cached source files
let gs = ProgramState::new(flags.clone()).unwrap();
+ let permissions = Permissions::from_flags(&flags);
let main_module = main_module.clone();
async move {
- let mut worker = MainWorker::new(&gs, main_module.clone());
+ let mut worker = MainWorker::new(&gs, main_module.clone(), permissions);
debug!("main_module {}", main_module);
worker.execute_module(&main_module).await?;
worker.execute("window.dispatchEvent(new Event('load'))")?;
@@ -615,7 +624,9 @@ async fn run_command(flags: Flags, script: String) -> Result<(), AnyError> {
let main_module = ModuleSpecifier::resolve_url_or_path(&script)?;
let program_state = ProgramState::new(flags.clone())?;
- let mut worker = MainWorker::new(&program_state, main_module.clone());
+ let permissions = Permissions::from_flags(&flags);
+ let mut worker =
+ MainWorker::new(&program_state, main_module.clone(), permissions);
debug!("main_module {}", main_module);
worker.execute_module(&main_module).await?;
worker.execute("window.dispatchEvent(new Event('load'))")?;
@@ -633,6 +644,7 @@ async fn test_command(
filter: Option<String>,
) -> Result<(), AnyError> {
let program_state = ProgramState::new(flags.clone())?;
+ let permissions = Permissions::from_flags(&flags);
let cwd = std::env::current_dir().expect("No current directory");
let include = include.unwrap_or_else(|| vec![".".to_string()]);
let test_modules = test_runner::prepare_test_modules_urls(include, &cwd)?;
@@ -656,7 +668,8 @@ async fn test_command(
);
let main_module =
ModuleSpecifier::resolve_url(&test_file_url.to_string()).unwrap();
- let mut worker = MainWorker::new(&program_state, main_module.clone());
+ let mut worker =
+ MainWorker::new(&program_state, main_module.clone(), permissions);
// Create a dummy source file.
let source_file = SourceFile {
filename: test_file_url.to_file_path().unwrap(),