From f6a9d7d7172df6422f895dcfe6f4267ad1b472da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Fri, 3 May 2019 23:15:16 +0200 Subject: add "deno run" subcommand (#2215) --- cli/flags.rs | 371 ++++++++++++++++++++++++++++++++++++++--------------------- cli/main.rs | 1 + 2 files changed, 240 insertions(+), 132 deletions(-) (limited to 'cli') diff --git a/cli/flags.rs b/cli/flags.rs index f60c1a3fa..6e690645b 100644 --- a/cli/flags.rs +++ b/cli/flags.rs @@ -36,75 +36,41 @@ pub fn create_cli_app<'a, 'b>() -> App<'a, 'b> { App::new("deno") .bin_name("deno") .global_settings(&[AppSettings::ColorNever]) - .settings(&[ - AppSettings::AllowExternalSubcommands, - AppSettings::DisableVersion, - ]).after_help(ENV_VARIABLES_HELP) + .settings(&[AppSettings::DisableVersion]) + .after_help(ENV_VARIABLES_HELP) .arg( - Arg::with_name("allow-read") - .long("allow-read") - .help("Allow file system read access"), - ).arg( - Arg::with_name("allow-write") - .long("allow-write") - .help("Allow file system write access"), - ).arg( - Arg::with_name("allow-net") - .long("allow-net") - .help("Allow network access"), - ).arg( - Arg::with_name("allow-env") - .long("allow-env") - .help("Allow environment access"), - ).arg( - Arg::with_name("allow-run") - .long("allow-run") - .help("Allow running subprocesses"), - ).arg( - Arg::with_name("allow-high-precision") - .long("allow-high-precision") - .help("Allow high precision time measurement"), - ).arg( - Arg::with_name("allow-all") - .short("A") - .long("allow-all") - .help("Allow all permissions"), - ).arg( - Arg::with_name("no-prompt") - .long("no-prompt") - .help("Do not use prompts"), - ).arg( - Arg::with_name("no-fetch") - .long("no-fetch") - .help("Do not download remote modules"), - ).arg( Arg::with_name("log-debug") .short("D") .long("log-debug") - .help("Log debug output"), + .help("Log debug output") + .global(true), ).arg( Arg::with_name("reload") .short("r") .long("reload") - .help("Reload source code cache (recompile TypeScript)"), + .help("Reload source code cache (recompile TypeScript)") + .global(true), ).arg( Arg::with_name("config") .short("c") .long("config") .value_name("FILE") .help("Load compiler configuration file") - .takes_value(true), + .takes_value(true) + .global(true), ).arg( Arg::with_name("v8-options") .long("v8-options") - .help("Print V8 command line options"), + .help("Print V8 command line options") + .global(true), ).arg( Arg::with_name("v8-flags") .long("v8-flags") .takes_value(true) .use_delimiter(true) .require_equals(true) - .help("Set V8 command line options"), + .help("Set V8 command line options") + .global(true), ).subcommand( SubCommand::with_name("version") .setting(AppSettings::DisableVersion) @@ -196,7 +162,69 @@ Prettier dependencies on first run. .required(true), ), ).subcommand( - SubCommand::with_name("xeval") + SubCommand::with_name("run") + .settings(&[ + AppSettings::AllowExternalSubcommands, + AppSettings::DisableHelpSubcommand, + AppSettings::DisableVersion, + AppSettings::SubcommandRequired, + ]).about("Run a program given a filename or url to the source code") + .long_about( + " +Run a program given a filename or url to the source code. + +By default all programs are run in sandbox without access to disk, network or +ability to spawn subprocesses. + + deno run https://deno.land/welcome.ts + + # run program with permission to read from disk and listen to network + deno run --allow-net --allow-read https://deno.land/std/http/file_server.ts + + # run program with all permissions + deno run -A https://deno.land/std/http/file_server.ts +", + ).arg( + Arg::with_name("allow-read") + .long("allow-read") + .help("Allow file system read access"), + ).arg( + Arg::with_name("allow-write") + .long("allow-write") + .help("Allow file system write access"), + ).arg( + Arg::with_name("allow-net") + .long("allow-net") + .help("Allow network access"), + ).arg( + Arg::with_name("allow-env") + .long("allow-env") + .help("Allow environment access"), + ).arg( + Arg::with_name("allow-run") + .long("allow-run") + .help("Allow running subprocesses"), + ).arg( + Arg::with_name("allow-high-precision") + .long("allow-high-precision") + .help("Allow high precision time measurement"), + ).arg( + Arg::with_name("allow-all") + .short("A") + .long("allow-all") + .help("Allow all permissions"), + ).arg( + Arg::with_name("no-prompt") + .long("no-prompt") + .help("Do not use prompts"), + ).subcommand( + // this is a fake subcommand - it's used in conjunction with + // AppSettings:AllowExternalSubcommand to treat it as an + // entry point script + SubCommand::with_name("