MCPcopy Create free account
hub / github.com/delinoio/oss / parse

Method parse

crates/nodeup/src/command_plan.rs:424–580  ·  view source on GitHub ↗
(raw: &str, package_json_path: &Path)

Source from the content-addressed store, hash-verified

422
423impl ConfiguredPackageManager {
424 fn parse(raw: &str, package_json_path: &Path) -> Result<Self> {
425 let raw = raw.trim();
426
427 let separator_count = raw.matches('@').count();
428 if separator_count == 0 && matches!(raw, "yarn" | "pnpm") {
429 let correction = SupportedPackageManager::from_command(raw)
430 .expect("validated supported package manager")
431 .example_package_manager_value();
432 return Err(package_manager_invalid_input(
433 format!(
434 "Missing packageManager version for manager '{raw}' in {}",
435 package_json_path.display()
436 ),
437 format!("Use an exact value such as `\"packageManager\": \"{correction}\"`."),
438 package_manager_diagnostics(PackageManagerDiagnosticsInput {
439 package_json_path,
440 raw_value: Some(raw),
441 received_type: None,
442 failed_part: "version",
443 problem: "missing-version",
444 manager: Some(raw),
445 version: None,
446 correction: json!(correction),
447 }),
448 ));
449 }
450
451 if separator_count != 1 {
452 return Err(package_manager_invalid_input(
453 format!(
454 "Invalid packageManager separator in {} (value={raw})",
455 package_json_path.display()
456 ),
457 "Use exactly one `@` separator in `<manager>@<exact-semver>`, for example \
458 `yarn@4.13.0` or `pnpm@10.32.1`.",
459 package_manager_diagnostics(PackageManagerDiagnosticsInput {
460 package_json_path,
461 raw_value: Some(raw),
462 received_type: None,
463 failed_part: "separator",
464 problem: "malformed-separator",
465 manager: None,
466 version: None,
467 correction: json!(["yarn@4.13.0", "pnpm@10.32.1"]),
468 }),
469 ));
470 }
471
472 let (manager_raw, version_raw) = raw
473 .split_once('@')
474 .expect("validated exactly one packageManager separator");
475
476 if manager_raw.is_empty() {
477 return Err(package_manager_invalid_input(
478 format!(
479 "Invalid packageManager manager in {} (value={raw})",
480 package_json_path.display()
481 ),

Callers

nothing calls this directly

Calls 5

expectMethod · 0.80
is_emptyMethod · 0.80

Tested by

no test coverage detected