1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-23 15:49:44 -05:00

fix(compile): preserve granular unstable features (#21827)

Fix https://github.com/denoland/deno/issues/21814
This commit is contained in:
Bartek Iwańczuk 2024-01-06 15:01:09 +01:00 committed by GitHub
parent 49d8320e45
commit 13279cb0ab
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 0 deletions

View file

@ -138,6 +138,7 @@ pub enum NodeModules {
pub struct Metadata {
pub argv: Vec<String>,
pub unstable: bool,
pub unstable_features: Vec<String>,
pub seed: Option<u64>,
pub permissions: PermissionsOptions,
pub location: Option<Url>,
@ -542,6 +543,7 @@ impl<'a> DenoCompileBinaryWriter<'a> {
let metadata = Metadata {
argv: compile_flags.args.clone(),
unstable: cli_options.unstable(),
unstable_features: cli_options.unstable_features(),
seed: cli_options.seed(),
location: cli_options.location_flag().clone(),
permissions: cli_options.permissions_options(),

View file

@ -488,6 +488,11 @@ pub async fn run(
if metadata.unstable {
checker.enable_legacy_unstable();
}
for feature in metadata.unstable_features {
// `metadata` is valid for the whole lifetime of the program, so we
// can leak the string here.
checker.enable_feature(feature.leak());
}
checker
});
let worker_factory = CliMainWorkerFactory::new(

View file

@ -1123,3 +1123,29 @@ fn dynamic_imports_tmp_lit() {
let output = context.new_command().name(&exe).run();
output.assert_matches_text("a\nb\n{ data: 5 }\n{ data: 1 }\n");
}
#[test]
fn granular_unstable_features() {
let context = TestContextBuilder::new().build();
let dir = context.temp_dir();
let exe = if cfg!(windows) {
dir.path().join("app.exe")
} else {
dir.path().join("app")
};
let output = context
.new_command()
.args_vec([
"compile",
"--output",
&exe.to_string_lossy(),
"--unstable-kv",
"./compile/unstable_features.ts",
])
.run();
output.assert_exit_code(0);
output.skip_output_check();
let output = context.new_command().name(&exe).run();
output.assert_exit_code(0);
output.assert_matches_text("Kv {}\n");
}

View file

@ -0,0 +1,2 @@
const db = await Deno.openKv();
console.log(db);