Files
moli/moli-module-script-tree/src/host.rs
T
ldm0 e4fe3a7ea7 fix(modules): retain parse and static request exception identity
Carry realm-owned exception tokens through the module tree, preserve V8 compile exceptions, and cache static dependency validation failures without caching direct import resolution or network errors. Keep values GC-traced and isolated across WindowProxy reuse.

Add identity, shared-dependency, realm, GC, and pending-sibling regressions. Validated with fmt, full workspace Clippy, 17647 nextest passes, and a matched 148-case CLI/CDP WPT slice. The target now passes 11/11 subtests; smoke is 42/43 with the baseline missing-node Puppeteer failure.
2026-09-24 20:00:47 +08:00

54 lines
1.8 KiB
Rust

use url::Url;
use crate::types::{
CompiledModuleSnapshot, FetchedModuleSource, ModuleAttributesKey, ModuleDependencyEdge,
ModuleDependencySnapshot, ModuleEntryId, ModuleFetchRequest, ModuleGraphHandle,
ModuleLoadError, ModuleMapKey, ResolvedModuleRequest, SingleModuleClientToken,
SingleModuleFetchDisposition,
};
pub trait ModuleScriptTreeHost {
fn resolve_module_request(
&mut self,
specifier: &str,
base_url: &Url,
attributes: &ModuleAttributesKey,
requested_phase: crate::ModuleImportPhase,
) -> Result<ResolvedModuleRequest, ModuleLoadError>;
fn start_or_join_single_module_fetch(
&mut self,
request: ModuleFetchRequest,
client: SingleModuleClientToken,
) -> SingleModuleFetchDisposition;
fn compile_module_source(
&mut self,
fetched_source: FetchedModuleSource,
phase: crate::ModuleImportPhase,
) -> Result<CompiledModuleSnapshot, ModuleLoadError>;
fn module_dependencies(
&self,
entry: ModuleEntryId,
) -> Result<ModuleDependencySnapshot, ModuleLoadError>;
fn link_module_graph(
&mut self,
root: ModuleEntryId,
entries: &[ModuleEntryId],
dependency_edges: &[ModuleDependencyEdge],
) -> Result<ModuleGraphHandle, ModuleLoadError>;
fn mark_module_failed(&mut self, key: ModuleMapKey, error: ModuleLoadError) -> ModuleEntryId;
/// Static requested-module validation errors belong to the module script,
/// unlike failures to resolve the specifier passed directly to import().
/// Retain the actual exception and cache it for subsequent graph loads.
fn cache_module_request_error(
&mut self,
key: ModuleMapKey,
error: ModuleLoadError,
) -> ModuleLoadError;
}