2020-07-03 06:37:52 -04:00
|
|
|
use lazy_static::lazy_static;
|
|
|
|
use regex::bytes::Regex;
|
2020-01-10 02:30:49 -05:00
|
|
|
use crate::err::ProcessingResult;
|
2020-01-25 02:04:02 -05:00
|
|
|
use crate::proc::MatchAction::*;
|
|
|
|
use crate::proc::MatchMode::*;
|
2020-01-25 02:07:52 -05:00
|
|
|
use crate::proc::Processor;
|
2020-07-10 11:15:56 -04:00
|
|
|
use esbuild_rs::esbuild;
|
|
|
|
use crate::cfg::Cfg;
|
|
|
|
use std::string::String;
|
2020-07-03 06:37:52 -04:00
|
|
|
|
|
|
|
static SCRIPT_END_STR: &'static str = "</script";
|
|
|
|
|
|
|
|
lazy_static! {
|
|
|
|
static ref SCRIPT_END: Regex = Regex::new(SCRIPT_END_STR).unwrap();
|
|
|
|
}
|
2020-01-10 02:30:49 -05:00
|
|
|
|
2020-07-10 11:15:56 -04:00
|
|
|
pub fn process_script(proc: &mut Processor, cfg: &Cfg) -> ProcessingResult<()> {
|
2020-01-12 01:39:23 -05:00
|
|
|
// `process_tag` will require closing tag.
|
2020-07-10 11:15:56 -04:00
|
|
|
let code = proc.m(WhileNotPat(&SCRIPT_END, SCRIPT_END_STR.len()), Discard);
|
|
|
|
if cfg.minify_js {
|
|
|
|
let code_str = unsafe { String::from_utf8_unchecked(proc[code].to_vec()) };
|
|
|
|
let min = esbuild(&code_str).trim().as_bytes();
|
|
|
|
if min.len() < code.len() {
|
|
|
|
proc.write_slice(min);
|
|
|
|
return Ok(());
|
|
|
|
};
|
|
|
|
};
|
|
|
|
proc.write_range(code);
|
2020-01-10 02:30:49 -05:00
|
|
|
Ok(())
|
|
|
|
}
|