mirror of
https://github.com/denoland/deno.git
synced 2024-11-28 16:20:57 -05:00
fix(cli): avoid deno add
and deno vendor
errors when deno.json is empty (#23439)
This commit is contained in:
parent
c6d44dbda6
commit
3d841acf48
4 changed files with 62 additions and 2 deletions
|
@ -109,8 +109,14 @@ pub async fn add(flags: Flags, add_flags: AddFlags) -> Result<(), AnyError> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let config_file_contents =
|
let config_file_contents = {
|
||||||
tokio::fs::read_to_string(&config_file_path).await.unwrap();
|
let contents = tokio::fs::read_to_string(&config_file_path).await.unwrap();
|
||||||
|
if contents.trim().is_empty() {
|
||||||
|
"{}\n".into()
|
||||||
|
} else {
|
||||||
|
contents
|
||||||
|
}
|
||||||
|
};
|
||||||
let ast = jsonc_parser::parse_to_ast(
|
let ast = jsonc_parser::parse_to_ast(
|
||||||
&config_file_contents,
|
&config_file_contents,
|
||||||
&Default::default(),
|
&Default::default(),
|
||||||
|
|
1
cli/tools/vendor/mod.rs
vendored
1
cli/tools/vendor/mod.rs
vendored
|
@ -310,6 +310,7 @@ fn update_config_text(
|
||||||
) -> Result<ModifiedResult, AnyError> {
|
) -> Result<ModifiedResult, AnyError> {
|
||||||
use jsonc_parser::ast::ObjectProp;
|
use jsonc_parser::ast::ObjectProp;
|
||||||
use jsonc_parser::ast::Value;
|
use jsonc_parser::ast::Value;
|
||||||
|
let text = if text.trim().is_empty() { "{}\n" } else { text };
|
||||||
let ast =
|
let ast =
|
||||||
jsonc_parser::parse_to_ast(text, &Default::default(), &Default::default())?;
|
jsonc_parser::parse_to_ast(text, &Default::default(), &Default::default())?;
|
||||||
let obj = match ast.value {
|
let obj = match ast.value {
|
||||||
|
|
|
@ -49,6 +49,26 @@ fn add_basic_no_deno_json() {
|
||||||
temp_dir.join("deno.json").assert_matches_text(expected);
|
temp_dir.join("deno.json").assert_matches_text(expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn add_basic_with_empty_deno_json() {
|
||||||
|
let context = pm_context_builder().build();
|
||||||
|
let temp_dir = context.temp_dir();
|
||||||
|
temp_dir.write("deno.json", "");
|
||||||
|
|
||||||
|
let output = context.new_command().args("add @denotest/add").run();
|
||||||
|
output.assert_exit_code(0);
|
||||||
|
let output = output.combined_output();
|
||||||
|
assert_contains!(output, "Add @denotest/add");
|
||||||
|
temp_dir
|
||||||
|
.path()
|
||||||
|
.join("deno.json")
|
||||||
|
.assert_matches_json(json!({
|
||||||
|
"imports": {
|
||||||
|
"@denotest/add": "jsr:@denotest/add@^1.0.0"
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn add_version_contraint() {
|
fn add_version_contraint() {
|
||||||
let context = pm_context_builder().build();
|
let context = pm_context_builder().build();
|
||||||
|
|
|
@ -528,6 +528,39 @@ fn update_existing_config_test() {
|
||||||
assert!(output.status.success());
|
assert!(output.status.success());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn update_existing_empty_config_test() {
|
||||||
|
let _server = http_server();
|
||||||
|
let t = TempDir::new();
|
||||||
|
t.write(
|
||||||
|
"my_app.ts",
|
||||||
|
"import {Logger} from 'http://localhost:4545/vendor/logger.ts'; new Logger().log('outputted');",
|
||||||
|
);
|
||||||
|
t.write("deno.json", "");
|
||||||
|
|
||||||
|
let deno = util::deno_cmd()
|
||||||
|
.current_dir(t.path())
|
||||||
|
.arg("vendor")
|
||||||
|
.arg("my_app.ts")
|
||||||
|
.arg("--output")
|
||||||
|
.arg("vendor2")
|
||||||
|
.env("NO_COLOR", "1")
|
||||||
|
.piped_output()
|
||||||
|
.spawn()
|
||||||
|
.unwrap();
|
||||||
|
let output = deno.wait_with_output().unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
String::from_utf8_lossy(&output.stderr).trim(),
|
||||||
|
format!(
|
||||||
|
"Download http://localhost:4545/vendor/logger.ts\n{}\n\n{}",
|
||||||
|
vendored_text("1 module", "vendor2"),
|
||||||
|
success_text_updated_deno_json("vendor2",)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
assert_eq!(String::from_utf8_lossy(&output.stdout).trim(), "");
|
||||||
|
assert!(output.status.success());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn vendor_npm_node_specifiers() {
|
fn vendor_npm_node_specifiers() {
|
||||||
let context = TestContextBuilder::for_npm().use_temp_cwd().build();
|
let context = TestContextBuilder::for_npm().use_temp_cwd().build();
|
||||||
|
|
Loading…
Reference in a new issue