mirror of
https://github.com/discourse/discourse.git
synced 2025-05-23 07:55:44 +08:00
DEV: Compile theme migrations javascript files when running theme qunit (#25219)
Why this change? Currently, is it hard to iteratively write a theme settings migrations because our theme migrations system does not rollback. Therefore, we want to allow theme developers to be able to write QUnit tests for their theme migrations files enabling them to iteratively write their theme migrations. What does this change do? 1. Update `Theme#baked_js_tests_with_digest` to include all `ThemeField` records of `ThemeField#target` equal to `migrations`. Note that we do not include the `settings` and `themePrefix` variables for migration files. 2. Don't minify JavaScript test files becasue it makes debugging in development hard.
This commit is contained in:

committed by
GitHub

parent
fd7c6f1ca8
commit
22614ca85b
@ -18,24 +18,27 @@ class ThemeJavascriptCompiler
|
||||
@@terser_disabled = false
|
||||
end
|
||||
|
||||
def initialize(theme_id, theme_name)
|
||||
def initialize(theme_id, theme_name, minify: true)
|
||||
@theme_id = theme_id
|
||||
@output_tree = []
|
||||
@theme_name = theme_name
|
||||
@minify = minify
|
||||
end
|
||||
|
||||
def compile!
|
||||
if !@compiled
|
||||
@compiled = true
|
||||
@output_tree.freeze
|
||||
|
||||
output =
|
||||
if !has_content?
|
||||
{ "code" => "" }
|
||||
elsif @@terser_disabled
|
||||
elsif @@terser_disabled || !@minify
|
||||
{ "code" => raw_content }
|
||||
else
|
||||
DiscourseJsProcessor::Transpiler.new.terser(@output_tree.to_h, terser_config)
|
||||
end
|
||||
|
||||
@content = output["code"]
|
||||
@source_map = output["map"]
|
||||
end
|
||||
@ -92,7 +95,7 @@ class ThemeJavascriptCompiler
|
||||
JS
|
||||
end
|
||||
|
||||
def append_tree(tree, for_tests: false)
|
||||
def append_tree(tree, include_variables: true)
|
||||
# Replace legacy extensions
|
||||
tree.transform_keys! do |filename|
|
||||
if filename.ends_with? ".js.es6"
|
||||
@ -168,9 +171,9 @@ class ThemeJavascriptCompiler
|
||||
# Transpile and write to output
|
||||
tree.each_pair do |filename, content|
|
||||
module_name, extension = filename.split(".", 2)
|
||||
module_name = "test/#{module_name}" if for_tests
|
||||
|
||||
if extension == "js" || extension == "gjs"
|
||||
append_module(content, module_name, extension)
|
||||
append_module(content, module_name, extension, include_variables:)
|
||||
elsif extension == "hbs"
|
||||
append_ember_template(module_name, content)
|
||||
elsif extension == "hbr"
|
||||
@ -238,6 +241,7 @@ class ThemeJavascriptCompiler
|
||||
|
||||
script = "#{theme_settings}#{script}" if include_variables
|
||||
transpiler = DiscourseJsProcessor::Transpiler.new
|
||||
|
||||
@output_tree << ["#{original_filename}.#{extension}", <<~JS]
|
||||
if ('define' in window) {
|
||||
#{transpiler.perform(script, "", name, theme_id: @theme_id, extension: extension).strip}
|
||||
|
Reference in New Issue
Block a user