summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/factory.rs18
-rw-r--r--cli/main.rs13
-rw-r--r--cli/standalone/mod.rs13
-rw-r--r--cli/tsc/mod.rs2
-rw-r--r--cli/worker.rs6
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(