fix(cli,napi-derive): re-export types from shared crate ()

* fix(cli,napi-derive): re-export types from shared crate

* chore: publish

 - @napi-rs/cli@2.15.1-alpha.0

* Clippy fix

* Fix memory testing
This commit is contained in:
LongYinan 2023-03-21 18:12:52 +08:00 committed by GitHub
parent 3b831f42f5
commit 3d48d4464b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 109 additions and 7 deletions
crates
backend/src
macro/src

View file

@ -92,6 +92,7 @@ fn escape_json(src: &str) -> String {
impl ToString for TypeDef {
fn to_string(&self) -> String {
let pkg_name = std::env::var("CARGO_PKG_NAME").expect("CARGO_PKG_NAME is not set");
let js_mod = if let Some(js_mod) = &self.js_mod {
format!(", \"js_mod\": \"{}\"", js_mod)
} else {
@ -103,7 +104,8 @@ impl ToString for TypeDef {
"".to_owned()
};
format!(
r#"{{"kind": "{}", "name": "{}", "js_doc": "{}", "def": "{}"{}{}}}"#,
r#"{}:{{"kind": "{}", "name": "{}", "js_doc": "{}", "def": "{}"{}{}}}"#,
pkg_name,
self.kind,
self.name,
escape_json(&self.js_doc),

View file

@ -67,8 +67,8 @@ pub fn napi(attr: RawStream, input: RawStream) -> RawStream {
{
// logic on first macro expansion
#[cfg(feature = "type-def")]
if let Ok(type_def_file) = env::var("TYPE_DEF_TMP_PATH") {
if let Err(_e) = fs::remove_file(type_def_file) {
if let Ok(ref type_def_file) = env::var("TYPE_DEF_TMP_PATH") {
if let Err(_e) = remove_existed_type_def(type_def_file) {
#[cfg(debug_assertions)]
{
println!("Failed to manipulate type def file: {:?}", _e);
@ -432,3 +432,38 @@ fn replace_napi_attr_in_mod(
None
}
}
#[cfg(all(feature = "type-def", not(feature = "noop")))]
fn remove_existed_type_def(type_def_file: &str) -> std::io::Result<()> {
use std::io::{BufRead, BufReader};
let pkg_name = std::env::var("CARGO_PKG_NAME").expect("CARGO_PKG_NAME is not set");
if let Ok(content) = std::fs::File::open(type_def_file) {
let reader = BufReader::new(content);
let cleaned_content = reader
.lines()
.filter_map(|line| {
if let Ok(line) = line {
if let Some((package_name, _)) = line.split_once(':') {
if pkg_name == package_name {
return None;
}
}
Some(line)
} else {
None
}
})
.collect::<Vec<String>>()
.join("\n");
let mut content = std::fs::OpenOptions::new()
.read(true)
.write(true)
.truncate(true)
.open(type_def_file)?;
content.write_all(cleaned_content.as_bytes())?;
content.write_all(b"\n")?;
}
Ok(())
}