farmfe_core 2.1.0

Core types and data structures for farm.
use farmfe_macro_cache_item::cache_item;
use swc_ecma_ast::Module as SwcModule;

use crate::{
  module::{meta_data::script::CommentsMetaData, CustomMetaDataMap, ModuleId},
  HashSet,
};

#[cache_item]
#[derive(Clone)]
pub struct RenderModuleResult {
  pub module_id: ModuleId,
  pub rendered_ast: SwcModule,
  pub hoisted_module_ids: Vec<ModuleId>,
  pub comments: CommentsMetaData,
  pub external_modules: Vec<ModuleId>,
}

#[cache_item]
#[derive(Clone, Default)]
pub struct JsResourcePotMetaData {
  pub ast: SwcModule,
  pub external_modules: HashSet<String>,
  pub rendered_modules: Vec<ModuleId>,
  pub comments: CommentsMetaData,
  pub top_level_mark: u32,
  pub unresolved_mark: u32,
  pub custom: CustomMetaDataMap,
}

impl JsResourcePotMetaData {
  pub fn new() -> Self {
    Self::default()
  }

  pub fn take_comments(&mut self) -> CommentsMetaData {
    std::mem::take(&mut self.comments)
  }

  pub fn set_comments(&mut self, comments: CommentsMetaData) {
    self.comments = comments;
  }

  pub fn take_ast(&mut self) -> SwcModule {
    std::mem::take(&mut self.ast)
  }

  pub fn set_ast(&mut self, ast: SwcModule) {
    self.ast = ast;
  }
}