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: [PATCH] add "deno run" subcommand (#2215) --- cli/flags.rs | 371 +++++++++++++------- cli/main.rs | 1 + tests/001_hello.test | 2 +- tests/002_hello.test | 2 +- tests/003_relative_import.test | 2 +- tests/004_set_timeout.test | 2 +- tests/005_more_imports.test | 2 +- tests/006_url_imports.test | 2 +- tests/012_async.test | 2 +- tests/016_double_await.test | 2 +- tests/017_import_redirect.test | 2 +- tests/018_async_catch.test | 2 +- tests/019_media_types.test | 2 +- tests/020_json_modules.test | 2 +- tests/021_mjs_modules.test | 2 +- tests/023_no_ext_with_headers.test | 2 +- tests/024_import_no_ext_with_headers.test | 2 +- tests/025_high_precision.test | 2 +- tests/025_reload_js_type_error.test | 2 +- tests/026_redirect_javascript.js.test | 2 +- tests/026_workers.test | 2 +- tests/027_redirect_typescript.ts.test | 2 +- tests/028_args.test | 2 +- tests/async_error.test | 2 +- tests/circular1.test | 2 +- tests/config.test | 2 +- tests/error_001.test | 2 +- tests/error_002.test | 2 +- tests/error_003_typescript.test | 2 +- tests/error_004_missing_module.test | 2 +- tests/error_005_missing_dynamic_import.test | 2 +- tests/error_006_import_ext_failure.test | 2 +- tests/error_007_any.test | 2 +- tests/error_008_checkjs.test | 2 +- tests/error_syntax.test | 2 +- tests/exit_error42.test | 2 +- tests/https_import.test | 2 +- tests/if_main.test | 2 +- tests/import_meta.test | 2 +- tests/unbuffered_stderr.test | 2 +- tests/unbuffered_stdout.test | 2 +- tests/v8_flags.test | 2 +- tests/wasm.test | 4 +- tools/benchmark.py | 7 +- tools/deno_dir_test.py | 2 +- tools/http_benchmark.py | 4 +- tools/is_tty_test.py | 2 +- tools/permission_prompt_test.py | 3 +- tools/repl_test.py | 2 +- tools/test.py | 6 +- tools/throughput_benchmark.py | 5 +- tools/unit_tests.py | 2 +- website/index.html | 2 +- website/manual.md | 33 +- 54 files changed, 314 insertions(+), 210 deletions(-) diff --git a/cli/flags.rs b/cli/flags.rs index f60c1a3f..6e690645 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("