_build.rs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. use dioxus_interpreter_js::binary_protocol::SLEDGEHAMMER_JS;
  2. use minify_js::*;
  3. use std::io::Write;
  4. fn main() {
  5. let serialize_file_uploads = r#"if (
  6. target.tagName === "INPUT" &&
  7. (event.type === "change" || event.type === "input")
  8. ) {
  9. const type = target.getAttribute("type");
  10. if (type === "file") {
  11. async function read_files() {
  12. const files = target.files;
  13. const file_contents = {};
  14. for (let i = 0; i < files.length; i++) {
  15. const file = files[i];
  16. file_contents[file.name] = Array.from(
  17. new Uint8Array(await file.arrayBuffer())
  18. );
  19. }
  20. let file_engine = {
  21. files: file_contents,
  22. };
  23. contents.files = file_engine;
  24. if (realId === null) {
  25. return;
  26. }
  27. const message = window.interpreter.serializeIpcMessage("user_event", {
  28. name: name,
  29. element: parseInt(realId),
  30. data: contents,
  31. bubbles,
  32. });
  33. window.ipc.postMessage(message);
  34. }
  35. read_files();
  36. return;
  37. }
  38. }"#;
  39. let mut interpreter = SLEDGEHAMMER_JS
  40. .replace("/*POST_EVENT_SERIALIZATION*/", serialize_file_uploads)
  41. .replace("export", "");
  42. while let Some(import_start) = interpreter.find("import") {
  43. let import_end = interpreter[import_start..]
  44. .find(|c| c == ';' || c == '\n')
  45. .map(|i| i + import_start)
  46. .unwrap_or_else(|| interpreter.len());
  47. interpreter.replace_range(import_start..import_end, "");
  48. }
  49. let main_js = std::fs::read_to_string("src/main.js").unwrap();
  50. let js = format!("{interpreter}\n{main_js}");
  51. let session = Session::new();
  52. let mut out = Vec::new();
  53. minify(&session, TopLevelMode::Module, js.as_bytes(), &mut out).unwrap();
  54. let minified = String::from_utf8(out).unwrap();
  55. let mut file = std::fs::File::create("src/minified.js").unwrap();
  56. file.write_all(minified.as_bytes()).unwrap();
  57. }