diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/factory.rs | 18 | ||||
-rw-r--r-- | cli/main.rs | 13 | ||||
-rw-r--r-- | cli/standalone/mod.rs | 13 | ||||
-rw-r--r-- | cli/tsc/mod.rs | 2 | ||||
-rw-r--r-- | cli/worker.rs | 6 |
5 files changed, 51 insertions, 1 deletions
diff --git a/cli/factory.rs b/cli/factory.rs index 14f448b19..e4f9b60fe 100644 --- a/cli/factory.rs +++ b/cli/factory.rs @@ -47,6 +47,7 @@ use crate::worker::CliMainWorkerOptions; use deno_core::error::AnyError; use deno_core::parking_lot::Mutex; +use deno_core::FeatureChecker; use deno_graph::GraphKind; use deno_runtime::deno_fs; @@ -161,6 +162,7 @@ struct CliFactoryServices { type_checker: Deferred<Arc<TypeChecker>>, cjs_resolutions: Deferred<Arc<CjsResolutionStore>>, cli_node_resolver: Deferred<Arc<CliNodeResolver>>, + feature_checker: Deferred<Arc<FeatureChecker>>, } pub struct CliFactory { @@ -558,6 +560,21 @@ impl CliFactory { .await } + pub fn feature_checker(&self) -> &Arc<FeatureChecker> { + self.services.feature_checker.get_or_init(|| { + let mut checker = FeatureChecker::default(); + checker.set_exit_cb(Box::new(crate::unstable_exit_cb)); + // TODO(bartlomieju): enable, once we deprecate `--unstable` in favor + // of granular --unstable-* flags. + // feature_checker.set_warn_cb(Box::new(crate::unstable_warn_cb)); + if self.options.unstable() { + checker.enable_legacy_unstable(); + } + + Arc::new(checker) + }) + } + pub async fn create_compile_binary_writer( &self, ) -> Result<DenoCompileBinaryWriter, AnyError> { @@ -602,6 +619,7 @@ impl CliFactory { self.fs().clone(), self.maybe_inspector_server().clone(), self.maybe_lockfile().clone(), + self.feature_checker().clone(), self.create_cli_main_worker_options()?, )) } diff --git a/cli/main.rs b/cli/main.rs index 1ccd694ee..0817c0984 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -256,6 +256,19 @@ fn unwrap_or_exit<T>(result: Result<T, AnyError>) -> T { } } +pub(crate) fn unstable_exit_cb(_feature: &str, api_name: &str) { + // TODO(bartlomieju): change to "The `--unstable-{feature}` flag must be provided.". + eprintln!("Unstable API '{api_name}'. The --unstable flag must be provided."); + std::process::exit(70); +} + +#[allow(dead_code)] +pub(crate) fn unstable_warn_cb(feature: &str) { + eprintln!( + "The `--unstable` flag is deprecated, use --unstable-{feature} instead." + ); +} + pub fn main() { setup_panic_hook(); diff --git a/cli/standalone/mod.rs b/cli/standalone/mod.rs index e537f9e0c..612ae9eed 100644 --- a/cli/standalone/mod.rs +++ b/cli/standalone/mod.rs @@ -35,6 +35,7 @@ use deno_core::error::type_error; use deno_core::error::AnyError; use deno_core::futures::FutureExt; use deno_core::v8_set_flags; +use deno_core::FeatureChecker; use deno_core::ModuleLoader; use deno_core::ModuleSpecifier; use deno_core::ModuleType; @@ -424,6 +425,17 @@ pub async fn run( PermissionsContainer::new(Permissions::from_options(&permissions)?) }; + let feature_checker = Arc::new({ + let mut checker = FeatureChecker::default(); + checker.set_exit_cb(Box::new(crate::unstable_exit_cb)); + // TODO(bartlomieju): enable, once we deprecate `--unstable` in favor + // of granular --unstable-* flags. + // feature_checker.set_warn_cb(Box::new(crate::unstable_warn_cb)); + if metadata.unstable { + checker.enable_legacy_unstable(); + } + checker + }); let worker_factory = CliMainWorkerFactory::new( StorageKeyResolver::empty(), npm_resolver, @@ -434,6 +446,7 @@ pub async fn run( fs, None, None, + feature_checker, CliMainWorkerOptions { argv: metadata.argv, log_level: WorkerLogLevel::Info, diff --git a/cli/tsc/mod.rs b/cli/tsc/mod.rs index 5f4f7ddf1..524719755 100644 --- a/cli/tsc/mod.rs +++ b/cli/tsc/mod.rs @@ -948,7 +948,7 @@ mod tests { .context("Unable to get CWD") .unwrap(), ); - let mut op_state = OpState::new(1); + let mut op_state = OpState::new(1, None); op_state.put(state); op_state } diff --git a/cli/worker.rs b/cli/worker.rs index de8cb2018..d8738d492 100644 --- a/cli/worker.rs +++ b/cli/worker.rs @@ -16,6 +16,7 @@ use deno_core::url::Url; use deno_core::v8; use deno_core::CompiledWasmModuleStore; use deno_core::Extension; +use deno_core::FeatureChecker; use deno_core::ModuleId; use deno_core::ModuleLoader; use deno_core::SharedArrayBufferStore; @@ -109,6 +110,7 @@ struct SharedWorkerState { fs: Arc<dyn deno_fs::FileSystem>, maybe_inspector_server: Option<Arc<InspectorServer>>, maybe_lockfile: Option<Arc<Mutex<Lockfile>>>, + feature_checker: Arc<FeatureChecker>, } impl SharedWorkerState { @@ -313,6 +315,7 @@ impl CliMainWorkerFactory { fs: Arc<dyn deno_fs::FileSystem>, maybe_inspector_server: Option<Arc<InspectorServer>>, maybe_lockfile: Option<Arc<Mutex<Lockfile>>>, + feature_checker: Arc<FeatureChecker>, options: CliMainWorkerOptions, ) -> Self { Self { @@ -330,6 +333,7 @@ impl CliMainWorkerFactory { fs, maybe_inspector_server, maybe_lockfile, + feature_checker, }), } } @@ -510,6 +514,7 @@ impl CliMainWorkerFactory { shared.compiled_wasm_module_store.clone(), ), stdio, + feature_checker: shared.feature_checker.clone(), }; let worker = MainWorker::bootstrap_from_options( @@ -681,6 +686,7 @@ fn create_web_worker_callback( ), stdio: stdio.clone(), cache_storage_dir, + feature_checker: shared.feature_checker.clone(), }; WebWorker::bootstrap_from_options( |