From 41f3bb8b5092eef6f6d8c6a97bb74623ec97310d Mon Sep 17 00:00:00 2001 From: David Taylor Date: Mon, 16 Jan 2023 18:06:46 +0000 Subject: [PATCH] FIX: Restore class-property babel transform for themes (#19883) This seems to be required for decorators to work on class properties. Followup to 624f4a7de92d8a464c91a334bf9fad510af7e4ef --- app/models/theme.rb | 2 +- lib/discourse_js_processor.rb | 2 ++ spec/lib/discourse_js_processor_spec.rb | 25 ++++++++++++++++++------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/app/models/theme.rb b/app/models/theme.rb index 6b3b2ee7508..808a01a1aa4 100644 --- a/app/models/theme.rb +++ b/app/models/theme.rb @@ -6,7 +6,7 @@ require "json_schemer" class Theme < ActiveRecord::Base include GlobalPath - BASE_COMPILER_VERSION = 70 + BASE_COMPILER_VERSION = 71 attr_accessor :child_components diff --git a/lib/discourse_js_processor.rb b/lib/discourse_js_processor.rb index 74167a7ec4b..f0452f0f1b1 100644 --- a/lib/discourse_js_processor.rb +++ b/lib/discourse_js_processor.rb @@ -10,6 +10,8 @@ class DiscourseJsProcessor # babel: { debug: true } in ember-cli-build.js, then run `yarn ember build -prod` DISCOURSE_COMMON_BABEL_PLUGINS = [ ["proposal-decorators", { legacy: true }], + "proposal-class-properties", + "proposal-private-methods", "proposal-class-static-block", "transform-parameters", "proposal-export-namespace-from", diff --git a/spec/lib/discourse_js_processor_spec.rb b/spec/lib/discourse_js_processor_spec.rb index b23dc86536c..90748d3aae4 100644 --- a/spec/lib/discourse_js_processor_spec.rb +++ b/spec/lib/discourse_js_processor_spec.rb @@ -41,13 +41,6 @@ RSpec.describe DiscourseJsProcessor do script = <<~JS.chomp optional?.chaining; const template = func`test`; - class MyClass { - classProperty = 1; - #privateProperty = 1; - #privateMethod() { - console.log("hello world"); - } - } let numericSeparator = 100_000_000; logicalAssignment ||= 2; nullishCoalescing ?? 'works'; @@ -76,6 +69,24 @@ RSpec.describe DiscourseJsProcessor do JS end + it "supports decorators and class properties without error" do + script = <<~JS.chomp + class MyClass { + classProperty = 1; + #privateProperty = 1; + #privateMethod() { + console.log("hello world"); + } + @decorated + myMethod(){ + } + } + JS + + result = DiscourseJsProcessor.transpile(script, "blah", "blah/mymodule") + expect(result).to include("_applyDecoratedDescriptor") + end + it "correctly transpiles widget hbs" do result = DiscourseJsProcessor.transpile(<<~JS, "blah", "blah/mymodule") import hbs from "discourse/widgets/hbs-compiler";