nodejs_package_managers 0.3.3

Helpers for npm, pnpm, yarn, and bun package managers.
Documentation
use crate::LockfileDependency;
use rustc_hash::FxHashMap;
use yarn_lock_parser::parse_str;

pub use yarn_lock_parser::YarnLockError;

pub struct YarnLock;

impl YarnLock {
    pub fn parse<T: AsRef<str>>(content: T) -> Result<Vec<LockfileDependency>, YarnLockError> {
        let lockfile = parse_str(content.as_ref())?;

        Ok(lockfile
            .entries
            .into_iter()
            .map(|entry| LockfileDependency {
                name: entry.name.to_owned(),
                version: if entry.version.is_empty() {
                    None
                } else {
                    Some(entry.version.to_owned())
                },
                integrity: if entry.integrity.is_empty() {
                    None
                } else {
                    Some(entry.integrity.to_owned())
                },
                dependencies: FxHashMap::from_iter(
                    entry
                        .dependencies
                        .into_iter()
                        .map(|(k, v)| (k.to_owned(), v.to_owned())),
                ),
            })
            .collect())
    }
}