Skip to content

Commit f1930ab

Browse files
committed
refactor(rust/binding): rename BindingError to NativeError (#6387)
- `NativeError` is a more accurate name. - `BindingError` concept would be used for covering `NativeError` and `JsError` in concept. Context: - I'm developing exposing error from dev engine and found it's a little chaotic to understand how the rust error are passed to js side.
1 parent d8f1692 commit f1930ab

File tree

9 files changed

+39
-33
lines changed

9 files changed

+39
-33
lines changed

crates/rolldown_binding/src/options/plugin/binding_plugin_options.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ use std::fmt::Debug;
66
use crate::types::{
77
binding_module_info::BindingModuleInfo,
88
binding_normalized_options::BindingNormalizedOptions,
9-
binding_outputs::{BindingError, BindingOutputs, JsChangedOutputs},
9+
binding_outputs::{BindingOutputs, JsChangedOutputs},
1010
binding_rendered_chunk::BindingRenderedChunk,
11+
error::native_error::NativeError,
1112
js_callback::MaybeAsyncJsCallback,
1213
};
1314

@@ -96,11 +97,11 @@ pub struct BindingPluginOptions {
9697
pub module_parsed_meta: Option<BindingPluginHookMeta>,
9798

9899
#[napi(
99-
ts_type = "(ctx: BindingPluginContext, error?: (Error | BindingError)[]) => MaybePromise<VoidNullable>"
100+
ts_type = "(ctx: BindingPluginContext, error?: (Error | NativeError)[]) => MaybePromise<VoidNullable>"
100101
)]
101102
pub build_end: Option<
102103
MaybeAsyncJsCallback<
103-
FnArgs<(BindingPluginContext, Option<Vec<napi::Either<napi::JsError, BindingError>>>)>,
104+
FnArgs<(BindingPluginContext, Option<Vec<napi::Either<napi::JsError, NativeError>>>)>,
104105
>,
105106
>,
106107
pub build_end_meta: Option<BindingPluginHookMeta>,
@@ -136,10 +137,10 @@ pub struct BindingPluginOptions {
136137
Option<MaybeAsyncJsCallback<FnArgs<(BindingPluginContext, BindingNormalizedOptions)>>>,
137138
pub render_start_meta: Option<BindingPluginHookMeta>,
138139

139-
#[napi(ts_type = "(ctx: BindingPluginContext, error: (Error | BindingError)[]) => void")]
140+
#[napi(ts_type = "(ctx: BindingPluginContext, error: (Error | NativeError)[]) => void")]
140141
pub render_error: Option<
141142
MaybeAsyncJsCallback<
142-
FnArgs<(BindingPluginContext, Vec<napi::Either<napi::JsError, BindingError>>)>,
143+
FnArgs<(BindingPluginContext, Vec<napi::Either<napi::JsError, NativeError>>)>,
143144
>,
144145
>,
145146
pub render_error_meta: Option<BindingPluginHookMeta>,

crates/rolldown_binding/src/types/binding_hmr_output.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use napi_derive::napi;
22
use rolldown_error::BuildDiagnostic;
33

4-
use crate::types::binding_outputs::{BindingError, to_js_diagnostic};
4+
use crate::types::{binding_outputs::to_js_diagnostic, error::native_error::NativeError};
55

66
#[napi]
77
#[derive(Debug)]
@@ -25,7 +25,7 @@ impl BindingHmrOutput {
2525
}
2626

2727
#[napi(getter)]
28-
pub fn errors(&mut self) -> Vec<napi::Either<napi::JsError, BindingError>> {
28+
pub fn errors(&mut self) -> Vec<napi::Either<napi::JsError, NativeError>> {
2929
if let Some(rolldown_common::OutputsDiagnostics { diagnostics, cwd }) = self.errors.as_ref() {
3030
return diagnostics
3131
.iter()
@@ -121,7 +121,7 @@ impl From<rolldown_common::ClientHmrUpdate> for BindingClientHmrUpdate {
121121
#[napi(discriminant = "type", object_from_js = false)]
122122
pub enum BindingGenerateHmrPatchReturn {
123123
Ok(Vec<BindingHmrUpdate>),
124-
Error(Vec<napi::Either<napi::JsError, BindingError>>),
124+
Error(Vec<napi::Either<napi::JsError, NativeError>>),
125125
}
126126

127127
impl BindingGenerateHmrPatchReturn {

crates/rolldown_binding/src/types/binding_outputs.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use std::{
66
use super::{
77
binding_output_asset::{BindingOutputAsset, JsOutputAsset},
88
binding_output_chunk::{BindingOutputChunk, JsOutputChunk, update_output_chunk},
9+
error::native_error::NativeError,
910
};
1011
use napi::Either;
1112
use napi_derive::napi;
@@ -37,7 +38,7 @@ impl BindingOutputs {
3738
}
3839

3940
#[napi(getter)]
40-
pub fn errors(&mut self) -> Vec<napi::Either<napi::JsError, BindingError>> {
41+
pub fn errors(&mut self) -> Vec<napi::Either<napi::JsError, NativeError>> {
4142
if let Some(rolldown_common::OutputsDiagnostics { diagnostics, cwd }) = self.error.as_ref() {
4243
return diagnostics
4344
.iter()
@@ -110,16 +111,10 @@ impl JsChangedOutputs {
110111
}
111112
}
112113

113-
#[napi(object)]
114-
pub struct BindingError {
115-
pub kind: String,
116-
pub message: String,
117-
}
118-
119114
pub fn to_js_diagnostic(
120115
diagnostic: &BuildDiagnostic,
121116
cwd: std::path::PathBuf,
122-
) -> napi::Either<napi::JsError, BindingError> {
117+
) -> napi::Either<napi::JsError, NativeError> {
123118
match diagnostic.downcast_napi_error() {
124119
Ok(napi_error) => {
125120
// Note: In WASM workers, napi::Error objects with maybe_raw/maybe_env references cannot be
@@ -138,7 +133,7 @@ pub fn to_js_diagnostic(
138133
napi::Either::A(napi::JsError::from(error))
139134
}
140135
}
141-
Err(error) => napi::Either::B(BindingError {
136+
Err(error) => napi::Either::B(NativeError {
142137
kind: error.kind().to_string(),
143138
message: error.to_diagnostic_with(&DiagnosticOptions { cwd }).to_color_string(),
144139
}),

crates/rolldown_binding/src/types/binding_watcher_event.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::sync::Arc;
33
use napi::tokio::sync::Mutex;
44
use napi_derive::napi;
55

6-
use super::binding_outputs::{BindingError, to_js_diagnostic};
6+
use super::{binding_outputs::to_js_diagnostic, error::native_error::NativeError};
77
use rolldown::{BundleEvent, Bundler, WatcherEvent};
88

99
#[napi]
@@ -100,7 +100,7 @@ impl BindingBundleEndEventData {
100100

101101
#[napi]
102102
pub struct BindingBundleErrorEventData {
103-
error: Vec<napi::Either<napi::JsError, BindingError>>,
103+
error: Vec<napi::Either<napi::JsError, NativeError>>,
104104
result: Arc<Mutex<Bundler>>,
105105
}
106106

@@ -112,7 +112,7 @@ impl BindingBundleErrorEventData {
112112
}
113113

114114
#[napi(getter)]
115-
pub fn error(&mut self) -> Vec<napi::Either<napi::JsError, BindingError>> {
115+
pub fn error(&mut self) -> Vec<napi::Either<napi::JsError, NativeError>> {
116116
std::mem::take(&mut self.error)
117117
}
118118
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod native_error;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/// Error emitted from native side, it only contains kind and message, no stack trace.
2+
// TODO: hyf0 do we want to rust stack trace?
3+
#[napi_derive::napi(object)]
4+
pub struct NativeError {
5+
pub kind: String,
6+
pub message: String,
7+
}

crates/rolldown_binding/src/types/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ pub mod binding_sourcemap;
1515
pub mod binding_string_or_regex;
1616
pub mod binding_watcher_event;
1717
pub mod defer_sync_scan_data;
18+
pub mod error;
1819
pub mod js_callback;
1920
pub mod js_regex;
2021
pub mod preserve_entry_signatures;

packages/rolldown/src/binding.d.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,7 +1269,7 @@ export declare class BindingBundleEndEventData {
12691269

12701270
export declare class BindingBundleErrorEventData {
12711271
get result(): BindingBundlerImpl
1272-
get error(): Array<Error | BindingError>
1272+
get error(): Array<Error | NativeError>
12731273
}
12741274

12751275
export declare class BindingBundler {
@@ -1317,7 +1317,7 @@ export declare class BindingDevEngine {
13171317

13181318
export declare class BindingHmrOutput {
13191319
get patch(): BindingHmrUpdate | null
1320-
get errors(): Array<Error | BindingError>
1320+
get errors(): Array<Error | NativeError>
13211321
}
13221322

13231323
export declare class BindingMagicString {
@@ -1416,7 +1416,7 @@ export declare class BindingOutputChunk {
14161416
export declare class BindingOutputs {
14171417
get chunks(): Array<BindingOutputChunk>
14181418
get assets(): Array<BindingOutputAsset>
1419-
get errors(): Array<Error | BindingError>
1419+
get errors(): Array<Error | NativeError>
14201420
}
14211421

14221422
export declare class BindingPluginContext {
@@ -1651,11 +1651,6 @@ export interface BindingEmittedChunk {
16511651
preserveEntrySignatures?: BindingPreserveEntrySignatures
16521652
}
16531653

1654-
export interface BindingError {
1655-
kind: string
1656-
message: string
1657-
}
1658-
16591654
export interface BindingEsmExternalRequirePluginConfig {
16601655
external: Array<BindingStringOrRegex>
16611656
skipDuplicateCheck?: boolean
@@ -1693,7 +1688,7 @@ export interface BindingGeneratedCodeOptions {
16931688

16941689
export type BindingGenerateHmrPatchReturn =
16951690
| { type: 'Ok', field0: Array<BindingHmrUpdate> }
1696-
| { type: 'Error', field0: Array<Error | BindingError> }
1691+
| { type: 'Error', field0: Array<Error | NativeError> }
16971692

16981693
export interface BindingHmrBoundaryOutput {
16991694
boundary: string
@@ -2019,7 +2014,7 @@ export interface BindingPluginOptions {
20192014
transformFilter?: BindingHookFilter
20202015
moduleParsed?: (ctx: BindingPluginContext, module: BindingModuleInfo) => MaybePromise<VoidNullable>
20212016
moduleParsedMeta?: BindingPluginHookMeta
2022-
buildEnd?: (ctx: BindingPluginContext, error?: (Error | BindingError)[]) => MaybePromise<VoidNullable>
2017+
buildEnd?: (ctx: BindingPluginContext, error?: (Error | NativeError)[]) => MaybePromise<VoidNullable>
20232018
buildEndMeta?: BindingPluginHookMeta
20242019
renderChunk?: (ctx: BindingPluginContext, code: string, chunk: BindingRenderedChunk, opts: BindingNormalizedOptions, meta: BindingRenderedChunkMeta) => MaybePromise<VoidNullable<BindingHookRenderChunkOutput>>
20252020
renderChunkMeta?: BindingPluginHookMeta
@@ -2028,7 +2023,7 @@ export interface BindingPluginOptions {
20282023
augmentChunkHashMeta?: BindingPluginHookMeta
20292024
renderStart?: (ctx: BindingPluginContext, opts: BindingNormalizedOptions) => void
20302025
renderStartMeta?: BindingPluginHookMeta
2031-
renderError?: (ctx: BindingPluginContext, error: (Error | BindingError)[]) => void
2026+
renderError?: (ctx: BindingPluginContext, error: (Error | NativeError)[]) => void
20322027
renderErrorMeta?: BindingPluginHookMeta
20332028
generateBundle?: (ctx: BindingPluginContext, bundle: BindingOutputs, isWrite: boolean, opts: BindingNormalizedOptions) => MaybePromise<VoidNullable<JsChangedOutputs>>
20342029
generateBundleMeta?: BindingPluginHookMeta
@@ -2262,6 +2257,12 @@ export interface JsOutputChunk {
22622257
preliminaryFilename: string
22632258
}
22642259

2260+
/** Error emitted from native side, it only contains kind and message, no stack trace. */
2261+
export interface NativeError {
2262+
kind: string
2263+
message: string
2264+
}
2265+
22652266
export interface PreRenderedChunk {
22662267
name: string
22672268
isEntry: boolean

packages/rolldown/src/utils/error.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { type BindingError } from '../binding';
1+
import { type NativeError } from '../binding';
22
import type { RollupError } from '../log/logging';
33

4-
export function normalizeErrors(rawErrors: (BindingError | Error)[]): Error {
4+
export function normalizeErrors(rawErrors: (NativeError | Error)[]): Error {
55
const errors = rawErrors.map((e) =>
66
e instanceof Error
77
? e

0 commit comments

Comments
 (0)