discourse/script/build_jsconfig.rb
David Taylor 5cc531ed75
Some checks are pending
Licenses / run (push) Waiting to run
Linting / run (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (annotations, core) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (backend, core) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (backend, plugins) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (frontend, plugins) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (frontend, themes) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (system, chat) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (system, core) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (system, plugins) (push) Waiting to run
Tests / ${{ matrix.target }} ${{ matrix.build_type }} (system, themes) (push) Waiting to run
Tests / core frontend (${{ matrix.browser }}) (Chrome) (push) Waiting to run
Tests / core frontend (${{ matrix.browser }}) (Firefox ESR) (push) Waiting to run
Tests / core frontend (${{ matrix.browser }}) (Firefox Evergreen) (push) Waiting to run
DEV: Update jsconfig, add glint config, add basic check in CI (#28667)
This switches us back to the 'unstable' version of Glint, which is 'Volar' under the covers. While it's still a work-in-progress, it already works much better for us than the 'stable' version of Glint.

The CI check makes sure that we don't re-introduce any ts/glint-incompatible changes in future (e.g. object literal property decorators).
2024-10-29 16:55:31 +00:00

72 lines
2.4 KiB
Ruby

# frozen_string_literal: true
require "pathname"
require "json"
Dir.chdir("#{__dir__}/..") # rubocop:disable Discourse/NoChdir because this is not part of the app
CORE_NAMESPACES = {
"discourse/*" => ["app/assets/javascripts/discourse/app"],
"discourse/tests/*" => ["app/assets/javascripts/discourse/tests"],
"discourse-common/*" => ["app/assets/javascripts/discourse-common/addon"],
"admin/*" => ["app/assets/javascripts/admin/addon"],
"pretty-text/*" => ["app/assets/javascripts/pretty-text/addon"],
"select-kit/*" => ["app/assets/javascripts/select-kit/addon"],
"float-kit/*" => ["app/assets/javascripts/float-kit/addon"],
"truth-helpers/*" => ["app/assets/javascripts/truth-helpers/addon"],
"dialog-holder/*" => ["app/assets/javascripts/dialog-holder/addon"],
}
def relative(from, to)
relative_path = Pathname.new(to).relative_path_from(from).to_s
relative_path = "./#{relative_path}" if !relative_path.start_with?(".")
relative_path
end
def write_config(package_dir, extras: {})
package_dir = Pathname.new(package_dir)
namespaces = { **CORE_NAMESPACES, **extras }
config = {
"compilerOptions" => {
"target" => "es2021",
"module" => "esnext",
"moduleResolution" => "bundler",
"experimentalDecorators" => true,
"paths" => {
**namespaces
.map { |ns, paths| [ns, paths.map { |p| "#{relative(package_dir, p)}/*" }] }
.to_h,
},
},
"include" => namespaces.flat_map { |ns, paths| paths.map { |p| relative(package_dir, p) } },
"exclude" => [
"**/*.hbs",
"app/assets/javascripts/discourse/tests/unit/utils/decorators-test.js", # Native class decorators - unsupported by ts/glint
"app/assets/javascripts/discourse/tests/integration/component-templates-test.gjs", # hbs`` tagged templates - https://github.com/typed-ember/glint/issues/705
],
"glint" => {
"environment" => %w[ember-loose ember-template-imports],
},
}
output = <<~JSON
// This file was generated by scripts/build_jsconfig.rb
#{JSON.pretty_generate(config)}
JSON
File.write("#{package_dir}/jsconfig.json", output)
end
core_plugins = `git ls-files plugins/*/plugin.rb`.lines.map { |path| path.split("/")[1] }
plugin_configs =
core_plugins
.map do |name|
[
"discourse/plugins/#{name}/*",
["plugins/#{name}/assets/javascripts", "plugins/#{name}/test/javascripts"],
]
end
.to_h
write_config ".", extras: { **plugin_configs }