DEV: Allow `transformed` values to be used in all widget hbs statements (#13331)

DEV: Allow transformed values to be used in all widget hbs statements (#13331)

Previously, the transformed.blah shortcut could only be used in top-level hbs statements like {{transformed.blah}}. When attempting to use it in a sub-expression like {{concat "hello" transformed.world}}, it would raise a “transformed is not defined” error.

This commit updates the shortcut logic to make transformed.blah and attrs.blah work consistently in all hbs expressions.

Co-authored-by: Jordan Vidrine jordan@jordanvidrine.com

diff --git a/app/assets/javascripts/discourse/tests/integration/widgets/widget-test.js b/app/assets/javascripts/discourse/tests/integration/widgets/widget-test.js
index 6df1ef6..aa1a27b 100644
--- a/app/assets/javascripts/discourse/tests/integration/widgets/widget-test.js
+++ b/app/assets/javascripts/discourse/tests/integration/widgets/widget-test.js
@@ -262,6 +262,30 @@ discourseModule("Integration | Component | Widget | base", function (hooks) {
     },
   });
 
+  componentTest("using transformed values in a subexpression", {
+    template: hbs`{{mount-widget widget="attach-test"}}`,
+
+    beforeEach() {
+      createWidget("testing", {
+        tagName: "span.value",
+        template: widgetHbs`{{attrs.value}}`,
+      });
+
+      createWidget("attach-test", {
+        transform() {
+          return { someValue: "world" };
+        },
+        tagName: "div.container",
+        template: widgetHbs`{{testing value=(concat "hello" " " transformed.someValue)}}`,
+      });
+    },
+
+    test(assert) {
+      assert.ok(queryAll(".container").length, "renders container");
+      assert.equal(queryAll(".container .value").text(), "hello world");
+    },
+  });
+
   componentTest("handlebars d-icon", {
     template: hbs`{{mount-widget widget="hbs-icon-test" args=args}}`,
 
diff --git a/lib/javascripts/widget-hbs-compiler.js b/lib/javascripts/widget-hbs-compiler.js
index e36aa35..63b12cd 100644
--- a/lib/javascripts/widget-hbs-compiler.js
+++ b/lib/javascripts/widget-hbs-compiler.js
@@ -16,7 +16,7 @@ function sexpValue(value) {
   } else if (value.type === "SubExpression") {
     return sexp(value);
   }
-  return pValue;
+  return resolve(pValue);
 }
 
 function pairsToObj(pairs) {

GitHub sha: 9811a1c5d9bc50cc65c5bd81234f603d1d7bd4ef

This commit appears in #13331 which was approved by eviltrout. It was merged by davidtaylorhq.