diff --git a/packages/next-swc/crates/next-core/src/lib.rs b/packages/next-swc/crates/next-core/src/lib.rs index 279d3689cfdcfa..dc7f5210b98de9 100644 --- a/packages/next-swc/crates/next-core/src/lib.rs +++ b/packages/next-swc/crates/next-core/src/lib.rs @@ -27,6 +27,7 @@ mod next_import_map; mod next_route_matcher; pub mod next_server; pub mod next_shared; +mod next_telemetry; mod page_loader; mod page_source; pub mod pages_structure; @@ -38,7 +39,6 @@ mod transform_options; pub mod url_node; mod util; mod web_entry_source; -mod next_telemetry; pub use app_source::create_app_source; pub use page_loader::create_page_loader_entry_asset; diff --git a/packages/next-swc/crates/next-core/src/next_telemetry.rs b/packages/next-swc/crates/next-core/src/next_telemetry.rs index fccc4bc58d56a8..eb56c17699c71d 100644 --- a/packages/next-swc/crates/next-core/src/next_telemetry.rs +++ b/packages/next-swc/crates/next-core/src/next_telemetry.rs @@ -1,8 +1,19 @@ use anyhow::Result; use turbo_tasks::{emit, primitives::StringVc, ValueToString, ValueToStringVc}; +use turbopack_binding::features::auto_hash_map; + +/// A list of issues captured with +/// [`NextTelemetryVc::peek_telemetries_with_path`] and +#[derive(Debug)] +#[turbo_tasks::value] +pub struct CapturedTelemetry { + pub telemetries: auto_hash_map::AutoSet, +} #[turbo_tasks::value_trait] pub trait NextTelemetry { + // [TODO]: this is likely to change to match to parity to the existing + // telemetry payload. fn event_name(&self) -> StringVc; } @@ -10,10 +21,27 @@ impl NextTelemetryVc { pub fn emit(self) { emit(self); } + + pub async fn peek_telemetries_with_path( + source: T, + ) -> Result { + Ok(CapturedTelemetryVc::cell(CapturedTelemetry { + telemetries: source.peek_collectibles().strongly_consistent().await?, + })) + } +} + +#[turbo_tasks::value_trait] +pub trait TelemetryReporter { + fn report( + &self, + telemetries: turbo_tasks::TransientInstance>, + source: turbo_tasks::TransientValue, + ) -> turbo_tasks::primitives::BoolVc; } -/// A struct represent telemetry event for feature usage, -/// referred as `importing` a certain module. +/// A struct represent telemetry event for the feature usage, +/// referred as `importing` a certain module. (i.e importing @next/image) #[turbo_tasks::value(shared)] pub struct ModuleFeatureTelemetry { pub event_name: String,