discourse/lib/plugin/js_compiler.rb
David Taylor 93a624d681
DEV: Increase plugin_manager timout, and improve error message (#38874)
Plugin code is trusted. If it takes a long time to build on low-resource
machines, so be it.
2026-03-25 15:43:07 +00:00

45 lines
1.1 KiB
Ruby

# frozen_string_literal: true
class Plugin::JsCompiler
def initialize(
plugin_name,
minify: true,
tree: {},
entrypoints: {},
filename_prefix: nil,
filename_suffix: nil
)
@plugin_name = plugin_name
@tree = tree
@entrypoints = entrypoints
@minify = minify
@filename_prefix = filename_prefix
@filename_suffix = filename_suffix
end
def compile!
AssetProcessor.new.rollup(
@tree,
{
pluginName: @plugin_name,
minify: @minify,
entrypoints: @entrypoints,
filenamePrefix: @filename_prefix,
filenameSuffix: @filename_suffix,
},
)
rescue AssetProcessor::TimeoutError => e
raise AssetProcessor::TimeoutError, "[PLUGIN #{@plugin_name}] #{e.message}"
rescue AssetProcessor::TranspileError => e
message = "[PLUGIN #{@plugin_name}] Compile error: #{e.message}"
{
"#{@filename_prefix}main#{@filename_suffix}.js" => {
"name" => "main",
"imports" => [],
"isEntry" => true,
"code" => "throw new Error(#{message.to_json});\n",
"map" => nil,
},
}
end
end