|
1 | 1 | use napi::bindgen_prelude::External;
|
2 | 2 | use napi_derive::napi;
|
3 |
| -use nodejs_resolver::{AliasMap, Resolver, ResolverOptions, ResolverUnsafeCache}; |
| 3 | +use nodejs_resolver::{AliasMap, Resolver, ResolverOptions, ResolverUnsafeCache, SideEffects}; |
4 | 4 | use serde::Deserialize;
|
5 | 5 | use std::{
|
6 | 6 | path::{Path, PathBuf},
|
@@ -116,3 +116,34 @@ pub fn resolve(
|
116 | 116 | Err(err) => Err(napi::Error::new(napi::Status::GenericFailure, err)),
|
117 | 117 | }
|
118 | 118 | }
|
| 119 | + |
| 120 | +#[napi(object)] |
| 121 | +pub struct SideEffectsStats { |
| 122 | + pub bool_val: Option<bool>, |
| 123 | + pub array_val: Option<Vec<String>>, |
| 124 | + pub pkg_file_path: String, |
| 125 | +} |
| 126 | + |
| 127 | +#[napi( |
| 128 | + ts_args_type = "resolver: ExternalObject<ResolverInternal>, path: string", |
| 129 | + ts_return_type = "{boolVal?: boolean, arrayVal?: string[], pkgFilePath: string} | undefined" |
| 130 | +)] |
| 131 | +pub fn load_side_effects( |
| 132 | + resolver: External<Resolver>, |
| 133 | + path: String, |
| 134 | +) -> Result<Option<SideEffectsStats>, napi::Error> { |
| 135 | + match (*resolver).load_sideeffects(&Path::new(&path)) { |
| 136 | + Ok(val) => Ok(val.map(|val| { |
| 137 | + let (bool_val, array_val) = val.1.map(|side_effects| match side_effects { |
| 138 | + SideEffects::Bool(bool) => (Some(bool), None), |
| 139 | + SideEffects::Array(array) => (None, Some(array)), |
| 140 | + }).unwrap_or((None, None)); |
| 141 | + SideEffectsStats { |
| 142 | + pkg_file_path: val.0.display().to_string(), |
| 143 | + bool_val, |
| 144 | + array_val, |
| 145 | + } |
| 146 | + })), |
| 147 | + Err(err) => Err(napi::Error::new(napi::Status::GenericFailure, err)), |
| 148 | + } |
| 149 | +} |
0 commit comments