package_json/lib.rs
1//!
2//! Use the `package-json` crate to manage your `package.json` file.
3//!
4//! ## How to locate the closest `package.json` file
5//!
6//! ```no_run
7//! use package_json::PackageJsonManager;
8//! use std::path::Path;
9//!
10//! # use anyhow::Result;
11//! # fn main() -> Result<()> {
12//! let mut manager = PackageJsonManager::new();
13//! // based on the current working directory
14//! manager.locate_closest()?;
15//! // based on the given path
16//! manager.locate_closest_from(&Path::new("/path/to/working_dir"))?;
17//! # Ok(())
18//! # }
19//! ```
20//!
21//! Use [`with_file_path`][PackageJsonManager::with_file_path] to create a [`PackageJsonManager`][PackageJsonManager] instance with the give file path.
22//!
23//! ```
24//! use std::path::Path;
25//! use package_json::PackageJsonManager;
26//! let mut manager = PackageJsonManager::with_file_path(&Path::new("/path/to/package.json"));
27//! ```
28//!
29//! Use [`set_file_path`][PackageJsonManager::set_file_path] to change file path.
30//!
31//! ## How to read or write the current `package.json` file
32//!
33//! We can use [`read_mut`][PackageJsonManager::read_mut] or [`read_ref`][PackageJsonManager::read_ref] to read the current `package.json` file after file located.
34//!
35//! ```
36//! use package_json::PackageJsonManager;
37//! let mut manager = PackageJsonManager::new();
38//! if manager.locate_closest().is_ok() {
39//! assert!(manager.read_mut().is_ok());
40//! assert!(manager.read_ref().is_ok());
41//! }
42//! ```
43//!
44//! On the other hand, we should use [`as_mut`][PackageJsonManager::as_mut] and [`as_ref`][PackageJsonManager::as_ref] to get a mutable reference or a immutable reference if we have read it before.
45//! ```
46//! # use package_json::PackageJsonManager;
47//! # let mut manager = PackageJsonManager::new();
48//! # if manager.locate_closest().is_ok() {
49//! manager.as_mut(); // or manager.as_ref();
50//! # }
51//! ```
52//! Use [`write`][PackageJsonManager::write] to write the current `package.json` file to the disk. If we want to change the output path, eg. create a new `package.json`, we should use [`write_to`][PackageJsonManager::write_to] instead.
53//! ```no_run
54//! use package_json::PackageJsonManager;
55//! use std::path::Path;
56//!
57//! # fn main() {
58//! let mut manager = PackageJsonManager::new();
59//! assert!(manager.write().is_ok());
60//! assert!(manager.write_to(&Path::new("/path/to/package.json")).is_ok());
61//! # }
62//! ```
63//!
64
65mod fs;
66mod manager;
67mod schema;
68
69pub use crate::fs::write_options::{WriteOptions, WriteOptionsBuilder};
70pub use crate::manager::{PackageJsonManager, PACKAGE_JSON_FILENAME};
71pub use crate::schema::*;