Skip to content

Commit 59ed066

Browse files
authored
Split parcel_core crate (#9698)
* Split parcel_core crate * Reorganise project slightly * Fix rust node-bindings imports * Fix hash include in the module tree * Fix doctests
1 parent a007691 commit 59ed066

File tree

16 files changed

+98
-38
lines changed

16 files changed

+98
-38
lines changed

Cargo.lock

+23-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/node-bindings/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ napi-derive = "2.16.3"
1818
parcel-js-swc-core = { path = "../../packages/transformers/js/core" }
1919
parcel-resolver = { path = "../../packages/utils/node-resolver-rs" }
2020
parcel_filesystem = { path = "../parcel_filesystem" }
21+
parcel_core = { path = "../parcel_core" }
2122
parcel_napi_helpers = { path = "../parcel_napi_helpers" }
2223
dashmap = "5.4.0"
2324
xxhash-rust = { version = "0.8.2", features = ["xxh3"] }

crates/node-bindings/src/core/js_requests/config_request/mod.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@ use napi::Env;
44
use napi::JsObject;
55
use napi_derive::napi;
66

7+
use parcel_core::requests::config_request::run_config_request;
8+
use parcel_core::requests::config_request::ConfigRequest;
9+
use parcel_core::requests::request_api::js_request_api::JSRequestApi;
10+
711
use crate::core::js_requests::request_options::input_fs_from_options;
812
use crate::core::js_requests::request_options::project_root_from_options;
9-
use crate::core::requests::config_request::run_config_request;
10-
use crate::core::requests::config_request::ConfigRequest;
11-
use crate::core::requests::request_api::js_request_api::JSRequestApi;
1213

1314
/// JavaScript API for running a config request.
1415
/// At the moment the request fields themselves will be copied on call.

crates/node-bindings/src/core/js_requests/entry_request/mod.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ use std::rc::Rc;
33
use napi::Env;
44
use napi::JsObject;
55
use napi_derive::napi;
6+
7+
use parcel_core::requests::entry_request::run_entry_request;
8+
use parcel_core::requests::entry_request::EntryRequestInput;
9+
use parcel_core::requests::entry_request::EntryResult;
10+
use parcel_core::requests::entry_request::RunEntryRequestParams;
11+
use parcel_core::requests::request_api::js_request_api::JSRequestApi;
612
use parcel_napi_helpers::anyhow_napi;
713

814
use crate::core::js_requests::request_options::input_fs_from_options;
9-
use crate::core::requests::entry_request::run_entry_request;
10-
use crate::core::requests::entry_request::EntryRequestInput;
11-
use crate::core::requests::entry_request::EntryResult;
12-
use crate::core::requests::entry_request::RunEntryRequestParams;
13-
use crate::core::requests::request_api::js_request_api::JSRequestApi;
1415

1516
/// napi entry-point for `run_entry_request`.
1617
#[napi]
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
pub mod config_request;
22
pub mod entry_request;
3-
mod request_options;
3+
pub mod request_options;

crates/node-bindings/src/core/mod.rs

+2-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,2 @@
1-
//! Core re-implementation in Rust
2-
3-
/// napi versions of `crate::core::requests`
4-
mod js_requests;
5-
/// New-type for paths relative to a project-root
6-
mod project_path;
7-
/// Request types and run functions
8-
mod requests;
1+
//! JavaScript API for `parcel_core::requests`
2+
pub mod js_requests;

crates/node-bindings/src/lib.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
#![allow(dead_code)]
22

3-
mod init_sentry;
4-
53
#[cfg(target_arch = "wasm32")]
64
use std::alloc::alloc;
75
#[cfg(target_arch = "wasm32")]
86
use std::alloc::Layout;
97

8+
mod init_sentry;
9+
1010
#[cfg(target_os = "macos")]
1111
#[global_allocator]
1212
static GLOBAL: jemallocator::Jemalloc = jemallocator::Jemalloc;
@@ -15,7 +15,8 @@ static GLOBAL: jemallocator::Jemalloc = jemallocator::Jemalloc;
1515
#[global_allocator]
1616
static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc;
1717

18-
mod core;
18+
/// napi versions of `crate::core::requests`
19+
pub mod core;
1920
#[cfg(not(target_arch = "wasm32"))]
2021
mod fs_search;
2122
mod hash;

crates/parcel_core/Cargo.toml

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
[package]
2+
name = "parcel_core"
3+
version = "0.1.0"
4+
edition = "2021"
5+
description = "Core logic for the parcel bundler"
6+
7+
[features]
8+
default = []
9+
napi_noop = ["napi-derive/noop"]
10+
11+
[dependencies]
12+
parcel_filesystem = { path = "../parcel_filesystem" }
13+
parcel_napi_helpers = { path = "../parcel_napi_helpers" }
14+
parcel-resolver = { path = "../../packages/utils/node-resolver-rs" }
15+
16+
anyhow = "1.0.82"
17+
glob = "0.3.1"
18+
mockall = "0.12.1"
19+
napi = "2.16.4"
20+
napi-derive = { version = "2.16.3" }
21+
serde = "1.0.200"
22+
serde_json = "1.0.116"
23+
toml = "0.8.12"
24+
xxhash-rust = { version = "0.8.2", features = ["xxh3"] }

crates/parcel_core/src/hash.rs

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
use xxhash_rust::xxh3::xxh3_64;
2+
3+
/// Copy of one of the `node-bindings/src/hash.rs` functions.
4+
pub fn hash_string(s: String) -> String {
5+
let s = s.as_bytes();
6+
let res = xxh3_64(s);
7+
format!("{:016x}", res)
8+
}

crates/parcel_core/src/lib.rs

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
//! Core re-implementation in Rust
2+
3+
pub mod hash;
4+
/// New-type for paths relative to a project-root
5+
pub mod project_path;
6+
/// Request types and run functions
7+
pub mod requests;

crates/node-bindings/src/core/project_path.rs crates/parcel_core/src/project_path.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ use napi::sys::napi_value;
1717
///
1818
/// Use `ProjectPath` on your input type:
1919
///
20-
/// ```
20+
/// ```skip
21+
/// use napi_derive::napi;
22+
///
2123
/// #[napi(object)]
2224
/// struct MyRequestInput {
23-
/// path: ProjectPath,
25+
/// pub path: parcel_core::project_path::ProjectPath,
2426
/// }
2527
///
2628
/// #[napi]

crates/node-bindings/src/core/requests/config_request/mod.rs crates/parcel_core/src/requests/config_request/mod.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
//! file.
55
use std::path::Path;
66

7-
use crate::core::project_path::ProjectPath;
87
use napi_derive::napi;
98
use parcel_resolver::FileSystem;
109

11-
use crate::core::requests::request_api::RequestApi;
10+
use crate::project_path::ProjectPath;
11+
use crate::requests::request_api::RequestApi;
1212

1313
pub type InternalGlob = String;
1414

@@ -154,12 +154,13 @@ struct RequestOptions {}
154154

155155
#[cfg(test)]
156156
mod test {
157-
use super::*;
158-
use crate::core::requests::config_request::run_config_request;
159-
use crate::core::requests::request_api::MockRequestApi;
160157
use parcel_filesystem::in_memory_file_system::InMemoryFileSystem;
161158
use parcel_filesystem::os_file_system::OsFileSystem;
162159

160+
use super::*;
161+
use crate::requests::config_request::run_config_request;
162+
use crate::requests::request_api::MockRequestApi;
163+
163164
#[test]
164165
fn test_run_empty_config_request_does_nothing() {
165166
let config_request = ConfigRequest {

crates/node-bindings/src/core/requests/entry_request/mod.rs crates/parcel_core/src/requests/entry_request/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ use anyhow::anyhow;
88
use napi_derive::napi;
99
use parcel_resolver::FileSystem;
1010

11-
use crate::core::project_path::ProjectPath;
12-
use crate::core::requests::config_request::InternalFileCreateInvalidation;
13-
use crate::core::requests::request_api::RequestApi;
11+
use crate::project_path::ProjectPath;
12+
use crate::requests::config_request::InternalFileCreateInvalidation;
13+
use crate::requests::request_api::RequestApi;
1414

1515
#[napi(object)]
1616
#[derive(Debug, Clone, PartialEq)]

crates/node-bindings/src/core/requests/request_api/js_request_api.rs crates/parcel_core/src/requests/request_api/js_request_api.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ use napi::JsObject;
66
use napi::JsUnknown;
77
use parcel_napi_helpers::call_method;
88

9-
use crate::core::requests::config_request::InternalFileCreateInvalidation;
10-
use crate::core::requests::request_api::RequestApi;
11-
use crate::core::requests::request_api::RequestApiResult;
9+
use crate::requests::config_request::InternalFileCreateInvalidation;
10+
use crate::requests::request_api::RequestApi;
11+
use crate::requests::request_api::RequestApiResult;
1212

1313
/// This is a "delegate" implementation of `RequestApi` that delegates calls to a
1414
/// JavaScript object.

crates/node-bindings/src/core/requests/request_api/mod.rs crates/parcel_core/src/requests/request_api/mod.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ use std::path::Path;
22

33
use mockall::automock;
44

5-
use crate::core::requests::config_request::InternalFileCreateInvalidation;
5+
use crate::requests::config_request::InternalFileCreateInvalidation;
66

7+
#[cfg(not(feature = "napi_noop"))]
78
pub mod js_request_api;
89

910
// TODO: Move this into an associated type of the struct

0 commit comments

Comments
 (0)