diff options
author | Jaap Aarts <JAicewizard@users.noreply.github.com> | 2020-06-11 16:58:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-11 10:58:09 -0400 |
commit | 5ee2ce1b1c37f08b11a25e6c0d190f3c397c7ec2 (patch) | |
tree | b2e78c05e61c7407363157316dd90970ed8d68f4 /cli/main.rs | |
parent | ca5b5ba530eccd1a4ed34bc475250daae489190a (diff) |
feat: allow reading the entry file from stdin (#6130)
Diffstat (limited to 'cli/main.rs')
-rw-r--r-- | cli/main.rs | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/cli/main.rs b/cli/main.rs index 73349d599..8e819927e 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -92,6 +92,7 @@ use log::Level; use log::Metadata; use log::Record; use std::env; +use std::io::Read; use std::io::Write; use std::path::PathBuf; use std::pin::Pin; @@ -563,9 +564,36 @@ async fn run_repl(flags: Flags) -> Result<(), ErrBox> { async fn run_command(flags: Flags, script: String) -> Result<(), ErrBox> { let global_state = GlobalState::new(flags.clone())?; - let main_module = ModuleSpecifier::resolve_url_or_path(&script).unwrap(); + let main_module = if script != "-" { + ModuleSpecifier::resolve_url_or_path(&script).unwrap() + } else { + ModuleSpecifier::resolve_url_or_path("./__$deno$stdin.ts").unwrap() + }; let mut worker = MainWorker::create(global_state.clone(), main_module.clone())?; + if script == "-" { + let mut source = Vec::new(); + std::io::stdin().read_to_end(&mut source)?; + let main_module_url = main_module.as_url().to_owned(); + // Create a dummy source file. + let source_file = SourceFile { + filename: main_module_url.to_file_path().unwrap(), + url: main_module_url, + types_url: None, + types_header: None, + media_type: MediaType::TypeScript, + source_code: source, + }; + // Save our fake file into file fetcher cache + // to allow module access by TS compiler (e.g. op_fetch_source_files) + worker + .state + .borrow() + .global_state + .file_fetcher + .save_source_file_in_cache(&main_module, source_file); + }; + debug!("main_module {}", main_module); worker.execute_module(&main_module).await?; write_lockfile(global_state)?; |