WorkerDebugConsoleClient.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * Copyright (c) 2022, Ben Abraham <ben.d.abraham@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibJS/Runtime/Completion.h>
  7. #include <LibWeb/HTML/WorkerDebugConsoleClient.h>
  8. namespace Web::HTML {
  9. WorkerDebugConsoleClient::WorkerDebugConsoleClient(JS::Console& console)
  10. : ConsoleClient(console)
  11. {
  12. }
  13. void WorkerDebugConsoleClient::clear()
  14. {
  15. dbgln("\033[3J\033[H\033[2J");
  16. m_group_stack_depth = 0;
  17. fflush(stdout);
  18. }
  19. void WorkerDebugConsoleClient::end_group()
  20. {
  21. if (m_group_stack_depth > 0)
  22. m_group_stack_depth--;
  23. }
  24. // 2.3. Printer(logLevel, args[, options]), https://console.spec.whatwg.org/#printer
  25. JS::ThrowCompletionOr<JS::Value> WorkerDebugConsoleClient::printer(JS::Console::LogLevel log_level, PrinterArguments arguments)
  26. {
  27. String indent = String::repeated(" ", m_group_stack_depth);
  28. if (log_level == JS::Console::LogLevel::Trace) {
  29. auto trace = arguments.get<JS::Console::Trace>();
  30. StringBuilder builder;
  31. if (!trace.label.is_empty())
  32. builder.appendff("{}\033[36;1m{}\033[0m\n", indent, trace.label);
  33. for (auto& function_name : trace.stack)
  34. builder.appendff("{}-> {}\n", indent, function_name);
  35. dbgln("{}", builder.string_view());
  36. return JS::js_undefined();
  37. }
  38. if (log_level == JS::Console::LogLevel::Group || log_level == JS::Console::LogLevel::GroupCollapsed) {
  39. auto group = arguments.get<JS::Console::Group>();
  40. dbgln("{}\033[36;1m{}\033[0m", indent, group.label);
  41. m_group_stack_depth++;
  42. return JS::js_undefined();
  43. }
  44. auto output = String::join(" ", arguments.get<Vector<JS::Value>>());
  45. m_console.output_debug_message(log_level, output);
  46. switch (log_level) {
  47. case JS::Console::LogLevel::Debug:
  48. dbgln("{}\033[36;1m{}\033[0m", indent, output);
  49. break;
  50. case JS::Console::LogLevel::Error:
  51. case JS::Console::LogLevel::Assert:
  52. dbgln("{}\033[31;1m{}\033[0m", indent, output);
  53. break;
  54. case JS::Console::LogLevel::Info:
  55. dbgln("{}(i) {}", indent, output);
  56. break;
  57. case JS::Console::LogLevel::Log:
  58. dbgln("{}{}", indent, output);
  59. break;
  60. case JS::Console::LogLevel::Warn:
  61. case JS::Console::LogLevel::CountReset:
  62. dbgln("{}\033[33;1m{}\033[0m", indent, output);
  63. break;
  64. default:
  65. dbgln("{}{}", indent, output);
  66. break;
  67. }
  68. return JS::js_undefined();
  69. }
  70. } // namespace Web::HTML