luabundle 1.1.2

Bundler for Luau scripts
use darklua_core::{Configuration, GeneratorParameters, Resources};
use std::{path::PathBuf, collections::HashMap, io};
use stacker;

#[derive(Eq, Hash, PartialEq, Clone, Debug)]
pub enum Macro {
    AbsPath
}

pub fn split(input: &str, to_split: &str) -> Vec<String> {
    let res: Vec<String> = input.split(to_split).map(|s| s.to_string()).collect();
    return res;
}

pub fn require_function_commented(line: String, require_function: String) -> bool {
    let comment_position = line.find("--");
    let loadmodule_position = line.find(&require_function);

    if comment_position.is_some() && loadmodule_position.is_some() {
        let comment_position = comment_position.unwrap();
        let loadmodule_position = loadmodule_position.unwrap();

        if comment_position < loadmodule_position {
            return true;
        }
    }

    return false;
}

pub fn format_file(file: &PathBuf, minify: bool, beautify: bool) {
    let resources = Resources::from_file_system();
    let mut configuration = Configuration::empty();

    if minify {
        configuration = Configuration::empty().with_generator(GeneratorParameters::default_dense());
    }
    if beautify {
        configuration = Configuration::empty().with_generator(GeneratorParameters::default_readable());
    };

    let process_options = darklua_core::Options::new(PathBuf::from(&file))
        .with_output(PathBuf::from(&file))
        .with_configuration(configuration);

    stacker::maybe_grow(1024 * 1024 * 2, 1024 * 1024 * 3, || {
        darklua_core::process(&resources, process_options);
    });
}

pub fn get_macros(lines: &Vec<String>) -> (HashMap<usize, Vec<Macro>>, Vec<String>) {
    let mut macro_lines: HashMap<usize, Vec<Macro>> = HashMap::new();
    let mut new_lines: Vec<String> = Vec::new();

    for (i, line) in lines.clone().iter().enumerate() {
        let mut macro_found = false;
        let mut macros = Vec::new();

        if line.contains("[abs_path]") {
            macros.push(Macro::AbsPath);
            macro_found = true;
        }

        if macro_found {
            macro_lines.insert(i, macros);

            let without_comment = &split(line, "--")[0];
            new_lines.push(without_comment.trim().to_string());
        } else {
            new_lines.push(line.to_string());
        }
    }
    return (macro_lines, new_lines);
}

pub fn wait_for_input() {
    io::stdin().read_line(&mut String::new()).unwrap();
}