From 0fa92529ed461ff7e0ed81a803d924dbbb37ca89 Mon Sep 17 00:00:00 2001 From: Godfrey Chan Date: Thu, 15 Jun 2023 10:57:41 -0700 Subject: [PATCH] DEV: enable plain functions as helpers in Ember (#22023) * Enable "plain function as helpers" polyfill This feature landed in Ember 4.5+, but this polyfill would allow it to work on 3.25+ References RFC: https://github.com/emberjs/rfcs/pull/756 Update: https://github.com/emberjs/rfcs/pull/788 Guides: https://github.com/ember-learn/guides-source/pull/1924 * Convert truth-helpers to use plain functions Mainly to test that the polyfill is working, but it's a good refactor anyway. --- app/assets/javascripts/discourse/package.json | 1 + .../truth-helpers/addon/helpers/and.js | 16 ++++++++-------- .../truth-helpers/addon/helpers/eq.js | 8 ++------ .../truth-helpers/addon/helpers/gt.js | 8 ++------ .../truth-helpers/addon/helpers/gte.js | 8 ++------ .../truth-helpers/addon/helpers/includes.js | 8 ++------ .../truth-helpers/addon/helpers/lt.js | 8 ++------ .../truth-helpers/addon/helpers/lte.js | 8 ++------ .../truth-helpers/addon/helpers/not-eq.js | 8 ++------ .../truth-helpers/addon/helpers/not.js | 10 ++++------ .../truth-helpers/addon/helpers/or.js | 16 ++++++++-------- app/assets/javascripts/yarn.lock | 9 +++++++++ 12 files changed, 44 insertions(+), 64 deletions(-) diff --git a/app/assets/javascripts/discourse/package.json b/app/assets/javascripts/discourse/package.json index 7d20eb40931..ef101a8f61d 100644 --- a/app/assets/javascripts/discourse/package.json +++ b/app/assets/javascripts/discourse/package.json @@ -100,6 +100,7 @@ "ember-cli-progress-ci": "1.0.0", "ember-cli-sri": "^2.1.1", "ember-cli-terser": "^4.0.2", + "ember-functions-as-helper-polyfill": "^2.1.1", "ember-qunit": "^6.2.0", "ember-exam": "^8.0.0", "eslint": "^8.42.0", diff --git a/app/assets/javascripts/truth-helpers/addon/helpers/and.js b/app/assets/javascripts/truth-helpers/addon/helpers/and.js index 07db1927c47..95dfae90b00 100644 --- a/app/assets/javascripts/truth-helpers/addon/helpers/and.js +++ b/app/assets/javascripts/truth-helpers/addon/helpers/and.js @@ -1,13 +1,13 @@ -import Helper from "@ember/component/helper"; import truthConvert from "../utils/truth-convert"; -export function and(params) { - for (let i = 0, len = params.length; i < len; i++) { - if (truthConvert(params[i]) === false) { - return params[i]; +export default function and(...args) { + let arg = false; + + for (arg of args) { + if (truthConvert(arg) === false) { + return arg; } } - return params[params.length - 1]; -} -export default Helper.helper(and); + return arg; +} diff --git a/app/assets/javascripts/truth-helpers/addon/helpers/eq.js b/app/assets/javascripts/truth-helpers/addon/helpers/eq.js index 45d03595b12..61ec613e8e4 100644 --- a/app/assets/javascripts/truth-helpers/addon/helpers/eq.js +++ b/app/assets/javascripts/truth-helpers/addon/helpers/eq.js @@ -1,7 +1,3 @@ -import Helper from "@ember/component/helper"; - -export function eq(params) { - return params[0] === params[1]; +export default function eq(left, right) { + return left === right; } - -export default Helper.helper(eq); diff --git a/app/assets/javascripts/truth-helpers/addon/helpers/gt.js b/app/assets/javascripts/truth-helpers/addon/helpers/gt.js index c90fc983640..928b665c5c7 100644 --- a/app/assets/javascripts/truth-helpers/addon/helpers/gt.js +++ b/app/assets/javascripts/truth-helpers/addon/helpers/gt.js @@ -1,7 +1,5 @@ -import Helper from "@ember/component/helper"; - -export function gt([left, right], hash) { - if (hash.forceNumber) { +export default function gt(left, right, { forceNumber = false } = {}) { + if (forceNumber) { if (typeof left !== "number") { left = Number(left); } @@ -11,5 +9,3 @@ export function gt([left, right], hash) { } return left > right; } - -export default Helper.helper(gt); diff --git a/app/assets/javascripts/truth-helpers/addon/helpers/gte.js b/app/assets/javascripts/truth-helpers/addon/helpers/gte.js index e364dc39cd0..a0eaa7d1031 100644 --- a/app/assets/javascripts/truth-helpers/addon/helpers/gte.js +++ b/app/assets/javascripts/truth-helpers/addon/helpers/gte.js @@ -1,7 +1,5 @@ -import Helper from "@ember/component/helper"; - -export function gte([left, right], hash) { - if (hash.forceNumber) { +export default function gte(left, right, { forceNumber = false } = {}) { + if (forceNumber) { if (typeof left !== "number") { left = Number(left); } @@ -11,5 +9,3 @@ export function gte([left, right], hash) { } return left >= right; } - -export default Helper.helper(gte); diff --git a/app/assets/javascripts/truth-helpers/addon/helpers/includes.js b/app/assets/javascripts/truth-helpers/addon/helpers/includes.js index d2b0a057c7c..2bc9df8eb86 100644 --- a/app/assets/javascripts/truth-helpers/addon/helpers/includes.js +++ b/app/assets/javascripts/truth-helpers/addon/helpers/includes.js @@ -1,7 +1,3 @@ -import Helper from "@ember/component/helper"; - -export function includes(params) { - return params[0].includes(params[1]); +export default function includes(array, item) { + return array.includes(item); } - -export default Helper.helper(includes); diff --git a/app/assets/javascripts/truth-helpers/addon/helpers/lt.js b/app/assets/javascripts/truth-helpers/addon/helpers/lt.js index 0546f796e4e..838a5b6d0df 100644 --- a/app/assets/javascripts/truth-helpers/addon/helpers/lt.js +++ b/app/assets/javascripts/truth-helpers/addon/helpers/lt.js @@ -1,7 +1,5 @@ -import Helper from "@ember/component/helper"; - -export function lt([left, right], hash) { - if (hash.forceNumber) { +export default function lt(left, right, { forceNumber = false } = {}) { + if (forceNumber) { if (typeof left !== "number") { left = Number(left); } @@ -11,5 +9,3 @@ export function lt([left, right], hash) { } return left < right; } - -export default Helper.helper(lt); diff --git a/app/assets/javascripts/truth-helpers/addon/helpers/lte.js b/app/assets/javascripts/truth-helpers/addon/helpers/lte.js index 375a15e839d..4848325376e 100644 --- a/app/assets/javascripts/truth-helpers/addon/helpers/lte.js +++ b/app/assets/javascripts/truth-helpers/addon/helpers/lte.js @@ -1,7 +1,5 @@ -import Helper from "@ember/component/helper"; - -export function lte([left, right], hash) { - if (hash.forceNumber) { +export default function lte(left, right, { forceNumber = false } = {}) { + if (forceNumber) { if (typeof left !== "number") { left = Number(left); } @@ -11,5 +9,3 @@ export function lte([left, right], hash) { } return left <= right; } - -export default Helper.helper(lte); diff --git a/app/assets/javascripts/truth-helpers/addon/helpers/not-eq.js b/app/assets/javascripts/truth-helpers/addon/helpers/not-eq.js index 8971d1bcd04..dba451edcaa 100644 --- a/app/assets/javascripts/truth-helpers/addon/helpers/not-eq.js +++ b/app/assets/javascripts/truth-helpers/addon/helpers/not-eq.js @@ -1,7 +1,3 @@ -import Helper from "@ember/component/helper"; - -export function notEqualHelper(params) { - return params[0] !== params[1]; +export default function notEq(left, right) { + return left !== right; } - -export default Helper.helper(notEqualHelper); diff --git a/app/assets/javascripts/truth-helpers/addon/helpers/not.js b/app/assets/javascripts/truth-helpers/addon/helpers/not.js index 8b7942e76d2..a2bcfebd1f5 100644 --- a/app/assets/javascripts/truth-helpers/addon/helpers/not.js +++ b/app/assets/javascripts/truth-helpers/addon/helpers/not.js @@ -1,13 +1,11 @@ -import Helper from "@ember/component/helper"; import truthConvert from "../utils/truth-convert"; -export function not(params) { - for (let i = 0, len = params.length; i < len; i++) { - if (truthConvert(params[i]) === true) { +export default function not(...args) { + for (let arg of args) { + if (truthConvert(arg) === true) { return false; } } + return true; } - -export default Helper.helper(not); diff --git a/app/assets/javascripts/truth-helpers/addon/helpers/or.js b/app/assets/javascripts/truth-helpers/addon/helpers/or.js index f0e95747bd9..11234f450d8 100644 --- a/app/assets/javascripts/truth-helpers/addon/helpers/or.js +++ b/app/assets/javascripts/truth-helpers/addon/helpers/or.js @@ -1,13 +1,13 @@ -import Helper from "@ember/component/helper"; import truthConvert from "../utils/truth-convert"; -export function or(params) { - for (let i = 0, len = params.length; i < len; i++) { - if (truthConvert(params[i]) === true) { - return params[i]; +export default function or(...args) { + let arg = false; + + for (arg of args) { + if (truthConvert(arg) === true) { + return arg; } } - return params[params.length - 1]; -} -export default Helper.helper(or); + return arg; +} diff --git a/app/assets/javascripts/yarn.lock b/app/assets/javascripts/yarn.lock index a1bafc9295d..7d1651d7553 100644 --- a/app/assets/javascripts/yarn.lock +++ b/app/assets/javascripts/yarn.lock @@ -4284,6 +4284,15 @@ ember-export-application-global@^2.0.1: resolved "https://registry.yarnpkg.com/ember-export-application-global/-/ember-export-application-global-2.0.1.tgz#b120a70e322ab208defc9e2daebe8d0dfc2dcd46" integrity sha512-B7wiurPgsxsSGzJuPFkpBWnaeuCu2PGpG2BjyrfA1VcL7//o+5RSnZqiCEY326y7qmxb2GoCgo0ft03KBU0rRw== +ember-functions-as-helper-polyfill@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ember-functions-as-helper-polyfill/-/ember-functions-as-helper-polyfill-2.1.1.tgz#25240db29b4cd0366a2d2954d2ea26ce0872ff8f" + integrity sha512-vZ2w9G/foohwtPm99Jos1m6bhlXyyyiJ4vhLbxyjWB4wh7bcpRzXPgCewDRrwefZQ2BwtHg3c9zvVMlI0g+o2Q== + dependencies: + ember-cli-babel "^7.26.11" + ember-cli-typescript "^5.0.0" + ember-cli-version-checker "^5.1.2" + ember-load-initializers@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ember-load-initializers/-/ember-load-initializers-2.1.2.tgz#8a47a656c1f64f9b10cecdb4e22a9d52ad9c7efa"