rspack_plugin_javascript 0.100.7

rspack javascript plugin
Documentation
use rspack_util::SpanExt;
use swc_experimental_ecma_ast::{BigInt, Bool, Lit, Number, Regex, Str};

use super::BasicEvaluatedExpression;

#[inline]
pub fn eval_str<'a>(str: &'a Str<'a>) -> BasicEvaluatedExpression<'a> {
  let mut res = BasicEvaluatedExpression::with_range(str.span.real_lo(), str.span.real_hi());
  res.set_string(str.value.as_wtf8().to_string_lossy().to_string());
  res
}

#[inline]
pub fn eval_number<'a>(num: &'a Number<'a>) -> BasicEvaluatedExpression<'a> {
  let mut res = BasicEvaluatedExpression::with_range(num.span.real_lo(), num.span.real_hi());
  res.set_number(num.value);
  res
}

#[inline]
pub fn eval_bool(bool: &Bool) -> BasicEvaluatedExpression<'_> {
  let mut res = BasicEvaluatedExpression::with_range(bool.span.real_lo(), bool.span.real_hi());
  res.set_bool(bool.value);
  res
}

#[inline]
pub fn eval_bigint<'a>(bigint: &'a BigInt<'a>) -> BasicEvaluatedExpression<'a> {
  let mut res = BasicEvaluatedExpression::with_range(bigint.span.real_lo(), bigint.span.real_hi());
  res.set_bigint(bigint.to_bigint());
  res
}

#[inline]
fn eval_regex<'a>(regexp: &'a Regex<'a>) -> BasicEvaluatedExpression<'a> {
  let mut res = BasicEvaluatedExpression::with_range(regexp.span.real_lo(), regexp.span.real_hi());
  res.set_regexp(regexp.exp.to_string(), regexp.flags.to_string());
  res
}

#[inline]
pub fn eval_lit_expr<'a>(expr: &'a Lit<'a>) -> Option<BasicEvaluatedExpression<'a>> {
  match expr {
    Lit::Str(str) => Some(eval_str(str)),
    Lit::Regex(regexp) => Some(eval_regex(regexp)),
    Lit::Null(null) => {
      let mut res = BasicEvaluatedExpression::with_range(null.span.real_lo(), null.span.real_hi());
      res.set_null();
      Some(res)
    }
    Lit::Num(num) => Some(eval_number(num)),
    Lit::Bool(bool) => Some(eval_bool(bool)),
    Lit::BigInt(bigint) => Some(eval_bigint(bigint)),
  }
}