From fa8bfea3dece3f29a18741f1a2d1f15b4bb55526 Mon Sep 17 00:00:00 2001
From: Robbie Wagner <rwwagner90@gmail.com>
Date: Thu, 2 Nov 2023 10:47:56 -0400
Subject: [PATCH] Add full TS/glint support

---
 ember-math-helpers/.eslintrc.cjs              |   51 +-
 ember-math-helpers/babel.config.json          |   18 +-
 .../declarations/helpers/abs.d.ts             |   26 +
 .../declarations/helpers/abs.d.ts.map         |    1 +
 .../declarations/helpers/acos.d.ts            |   26 +
 .../declarations/helpers/acos.d.ts.map        |    1 +
 .../declarations/helpers/acosh.d.ts           |   26 +
 .../declarations/helpers/acosh.d.ts.map       |    1 +
 .../declarations/helpers/add.d.ts             |   26 +
 .../declarations/helpers/add.d.ts.map         |    1 +
 .../declarations/helpers/asin.d.ts            |   26 +
 .../declarations/helpers/asin.d.ts.map        |    1 +
 .../declarations/helpers/asinh.d.ts           |   26 +
 .../declarations/helpers/asinh.d.ts.map       |    1 +
 .../declarations/helpers/atan.d.ts            |   26 +
 .../declarations/helpers/atan.d.ts.map        |    1 +
 .../declarations/helpers/atan2.d.ts           |   27 +
 .../declarations/helpers/atan2.d.ts.map       |    1 +
 .../declarations/helpers/atanh.d.ts           |   26 +
 .../declarations/helpers/atanh.d.ts.map       |    1 +
 .../declarations/helpers/cbrt.d.ts            |   26 +
 .../declarations/helpers/cbrt.d.ts.map        |    1 +
 .../declarations/helpers/ceil.d.ts            |   26 +
 .../declarations/helpers/ceil.d.ts.map        |    1 +
 .../declarations/helpers/clz32.d.ts           |   26 +
 .../declarations/helpers/clz32.d.ts.map       |    1 +
 .../declarations/helpers/cos.d.ts             |   26 +
 .../declarations/helpers/cos.d.ts.map         |    1 +
 .../declarations/helpers/cosh.d.ts            |   26 +
 .../declarations/helpers/cosh.d.ts.map        |    1 +
 .../declarations/helpers/div.d.ts             |   26 +
 .../declarations/helpers/div.d.ts.map         |    1 +
 .../declarations/helpers/exp.d.ts             |   26 +
 .../declarations/helpers/exp.d.ts.map         |    1 +
 .../declarations/helpers/expm1.d.ts           |   26 +
 .../declarations/helpers/expm1.d.ts.map       |    1 +
 .../declarations/helpers/floor.d.ts           |   26 +
 .../declarations/helpers/floor.d.ts.map       |    1 +
 .../declarations/helpers/fround.d.ts          |   26 +
 .../declarations/helpers/fround.d.ts.map      |    1 +
 .../declarations/helpers/gcd.d.ts             |   27 +
 .../declarations/helpers/gcd.d.ts.map         |    1 +
 .../declarations/helpers/hypot.d.ts           |   26 +
 .../declarations/helpers/hypot.d.ts.map       |    1 +
 .../declarations/helpers/imul.d.ts            |   27 +
 .../declarations/helpers/imul.d.ts.map        |    1 +
 .../declarations/helpers/lcm.d.ts             |   27 +
 .../declarations/helpers/lcm.d.ts.map         |    1 +
 .../declarations/helpers/log-e.d.ts           |   26 +
 .../declarations/helpers/log-e.d.ts.map       |    1 +
 .../declarations/helpers/log10.d.ts           |   26 +
 .../declarations/helpers/log10.d.ts.map       |    1 +
 .../declarations/helpers/log1p.d.ts           |   26 +
 .../declarations/helpers/log1p.d.ts.map       |    1 +
 .../declarations/helpers/log2.d.ts            |   26 +
 .../declarations/helpers/log2.d.ts.map        |    1 +
 .../declarations/helpers/max.d.ts             |   26 +
 .../declarations/helpers/max.d.ts.map         |    1 +
 .../declarations/helpers/min.d.ts             |   26 +
 .../declarations/helpers/min.d.ts.map         |    1 +
 .../declarations/helpers/mod.d.ts             |   26 +
 .../declarations/helpers/mod.d.ts.map         |    1 +
 .../declarations/helpers/mult.d.ts            |   26 +
 .../declarations/helpers/mult.d.ts.map        |    1 +
 .../declarations/helpers/pow.d.ts             |   27 +
 .../declarations/helpers/pow.d.ts.map         |    1 +
 .../declarations/helpers/random.d.ts          |   42 +
 .../declarations/helpers/random.d.ts.map      |    1 +
 .../declarations/helpers/round.d.ts           |   23 +
 .../declarations/helpers/round.d.ts.map       |    1 +
 .../declarations/helpers/sign.d.ts            |   26 +
 .../declarations/helpers/sign.d.ts.map        |    1 +
 .../declarations/helpers/sin.d.ts             |   26 +
 .../declarations/helpers/sin.d.ts.map         |    1 +
 .../declarations/helpers/sqrt.d.ts            |   26 +
 .../declarations/helpers/sqrt.d.ts.map        |    1 +
 .../declarations/helpers/sub.d.ts             |   26 +
 .../declarations/helpers/sub.d.ts.map         |    1 +
 .../declarations/helpers/sum.d.ts             |   20 +
 .../declarations/helpers/sum.d.ts.map         |    1 +
 .../declarations/helpers/tan.d.ts             |   26 +
 .../declarations/helpers/tan.d.ts.map         |    1 +
 .../declarations/helpers/tanh.d.ts            |   26 +
 .../declarations/helpers/tanh.d.ts.map        |    1 +
 .../declarations/helpers/trunc.d.ts           |   26 +
 .../declarations/helpers/trunc.d.ts.map       |    1 +
 .../declarations/template-registry.d.ts       |   87 ++
 .../declarations/template-registry.d.ts.map   |    1 +
 ember-math-helpers/package.json               |   97 +-
 ember-math-helpers/rollup.config.mjs          |   17 +-
 ember-math-helpers/src/helpers/abs.js         |   17 -
 ember-math-helpers/src/helpers/abs.ts         |   24 +
 ember-math-helpers/src/helpers/acos.js        |   17 -
 ember-math-helpers/src/helpers/acos.ts        |   24 +
 ember-math-helpers/src/helpers/acosh.js       |   17 -
 ember-math-helpers/src/helpers/acosh.ts       |   24 +
 ember-math-helpers/src/helpers/add.js         |   17 -
 ember-math-helpers/src/helpers/add.ts         |   24 +
 ember-math-helpers/src/helpers/asin.js        |   17 -
 ember-math-helpers/src/helpers/asin.ts        |   24 +
 ember-math-helpers/src/helpers/asinh.js       |   17 -
 ember-math-helpers/src/helpers/asinh.ts       |   24 +
 ember-math-helpers/src/helpers/atan.js        |   17 -
 ember-math-helpers/src/helpers/atan.ts        |   24 +
 ember-math-helpers/src/helpers/atan2.js       |   18 -
 ember-math-helpers/src/helpers/atan2.ts       |   25 +
 ember-math-helpers/src/helpers/atanh.js       |   17 -
 ember-math-helpers/src/helpers/atanh.ts       |   24 +
 ember-math-helpers/src/helpers/cbrt.js        |   17 -
 ember-math-helpers/src/helpers/cbrt.ts        |   24 +
 ember-math-helpers/src/helpers/ceil.js        |   17 -
 ember-math-helpers/src/helpers/ceil.ts        |   24 +
 ember-math-helpers/src/helpers/clz32.js       |   17 -
 ember-math-helpers/src/helpers/clz32.ts       |   24 +
 ember-math-helpers/src/helpers/cos.js         |   17 -
 ember-math-helpers/src/helpers/cos.ts         |   24 +
 ember-math-helpers/src/helpers/cosh.js        |   17 -
 ember-math-helpers/src/helpers/cosh.ts        |   24 +
 ember-math-helpers/src/helpers/div.js         |   17 -
 ember-math-helpers/src/helpers/div.ts         |   24 +
 ember-math-helpers/src/helpers/exp.js         |   17 -
 ember-math-helpers/src/helpers/exp.ts         |   24 +
 ember-math-helpers/src/helpers/expm1.js       |   17 -
 ember-math-helpers/src/helpers/expm1.ts       |   24 +
 .../src/helpers/{floor.js => floor.ts}        |   11 +-
 ember-math-helpers/src/helpers/fround.js      |   17 -
 ember-math-helpers/src/helpers/fround.ts      |   24 +
 .../src/helpers/{gcd.js => gcd.ts}            |   15 +-
 ember-math-helpers/src/helpers/hypot.js       |   17 -
 ember-math-helpers/src/helpers/hypot.ts       |   24 +
 ember-math-helpers/src/helpers/imul.js        |   18 -
 ember-math-helpers/src/helpers/imul.ts        |   25 +
 .../src/helpers/{lcm.js => lcm.ts}            |   17 +-
 ember-math-helpers/src/helpers/log-e.js       |   17 -
 ember-math-helpers/src/helpers/log-e.ts       |   24 +
 ember-math-helpers/src/helpers/log10.js       |   17 -
 ember-math-helpers/src/helpers/log10.ts       |   24 +
 ember-math-helpers/src/helpers/log1p.js       |   17 -
 ember-math-helpers/src/helpers/log1p.ts       |   24 +
 ember-math-helpers/src/helpers/log2.js        |   17 -
 ember-math-helpers/src/helpers/log2.ts        |   24 +
 ember-math-helpers/src/helpers/max.js         |   17 -
 ember-math-helpers/src/helpers/max.ts         |   24 +
 ember-math-helpers/src/helpers/min.js         |   17 -
 ember-math-helpers/src/helpers/min.ts         |   24 +
 ember-math-helpers/src/helpers/mod.js         |   17 -
 ember-math-helpers/src/helpers/mod.ts         |   24 +
 ember-math-helpers/src/helpers/mult.js        |   17 -
 ember-math-helpers/src/helpers/mult.ts        |   24 +
 .../src/helpers/{pow.js => pow.ts}            |   15 +-
 .../src/helpers/{random.js => random.ts}      |   56 +-
 ember-math-helpers/src/helpers/round.js       |   58 -
 ember-math-helpers/src/helpers/round.ts       |   69 +
 ember-math-helpers/src/helpers/sign.js        |   17 -
 ember-math-helpers/src/helpers/sign.ts        |   24 +
 ember-math-helpers/src/helpers/sin.js         |   17 -
 ember-math-helpers/src/helpers/sin.ts         |   24 +
 ember-math-helpers/src/helpers/sqrt.js        |   17 -
 ember-math-helpers/src/helpers/sqrt.ts        |   24 +
 ember-math-helpers/src/helpers/sub.js         |   17 -
 ember-math-helpers/src/helpers/sub.ts         |   24 +
 ember-math-helpers/src/helpers/sum.js         |   19 -
 ember-math-helpers/src/helpers/sum.ts         |   19 +
 ember-math-helpers/src/helpers/tan.js         |   17 -
 ember-math-helpers/src/helpers/tan.ts         |   24 +
 ember-math-helpers/src/helpers/tanh.js        |   17 -
 ember-math-helpers/src/helpers/tanh.ts        |   24 +
 ember-math-helpers/src/helpers/trunc.js       |   17 -
 ember-math-helpers/src/helpers/trunc.ts       |   24 +
 ember-math-helpers/src/template-registry.ts   |   87 ++
 ember-math-helpers/tsconfig.json              |   23 +
 ember-math-helpers/types/helpers/abs.d.ts     |   11 -
 ember-math-helpers/types/helpers/acos.d.ts    |   11 -
 ember-math-helpers/types/helpers/acosh.d.ts   |   11 -
 ember-math-helpers/types/helpers/add.d.ts     |   11 -
 ember-math-helpers/types/helpers/asin.d.ts    |   11 -
 ember-math-helpers/types/helpers/asinh.d.ts   |   11 -
 ember-math-helpers/types/helpers/atan.d.ts    |   11 -
 ember-math-helpers/types/helpers/atan2.d.ts   |   11 -
 ember-math-helpers/types/helpers/atanh.d.ts   |   11 -
 ember-math-helpers/types/helpers/cbrt.d.ts    |   11 -
 ember-math-helpers/types/helpers/ceil.d.ts    |   11 -
 ember-math-helpers/types/helpers/clz32.d.ts   |   11 -
 ember-math-helpers/types/helpers/cos.d.ts     |   11 -
 ember-math-helpers/types/helpers/cosh.d.ts    |   11 -
 ember-math-helpers/types/helpers/div.d.ts     |   11 -
 ember-math-helpers/types/helpers/exp.d.ts     |   11 -
 ember-math-helpers/types/helpers/expm1.d.ts   |   11 -
 ember-math-helpers/types/helpers/floor.d.ts   |   11 -
 ember-math-helpers/types/helpers/fround.d.ts  |   11 -
 ember-math-helpers/types/helpers/gcd.d.ts     |   11 -
 ember-math-helpers/types/helpers/hypot.d.ts   |   11 -
 ember-math-helpers/types/helpers/imul.d.ts    |   11 -
 ember-math-helpers/types/helpers/lcm.d.ts     |   11 -
 ember-math-helpers/types/helpers/log-e.d.ts   |   11 -
 ember-math-helpers/types/helpers/log10.d.ts   |   11 -
 ember-math-helpers/types/helpers/log1p.d.ts   |   11 -
 ember-math-helpers/types/helpers/log2.d.ts    |   11 -
 ember-math-helpers/types/helpers/max.d.ts     |   11 -
 ember-math-helpers/types/helpers/min.d.ts     |   11 -
 ember-math-helpers/types/helpers/mod.d.ts     |   11 -
 ember-math-helpers/types/helpers/mult.d.ts    |   11 -
 ember-math-helpers/types/helpers/pow.d.ts     |   11 -
 ember-math-helpers/types/helpers/random.d.ts  |   15 -
 ember-math-helpers/types/helpers/round.d.ts   |   16 -
 ember-math-helpers/types/helpers/sign.d.ts    |   11 -
 ember-math-helpers/types/helpers/sin.d.ts     |   11 -
 ember-math-helpers/types/helpers/sqrt.d.ts    |   11 -
 ember-math-helpers/types/helpers/sub.d.ts     |   13 -
 ember-math-helpers/types/helpers/sum.d.ts     |   12 -
 ember-math-helpers/types/helpers/tan.d.ts     |   11 -
 ember-math-helpers/types/helpers/tanh.d.ts    |   11 -
 ember-math-helpers/types/helpers/trunc.d.ts   |   11 -
 .../types/template-registry.d.ts              |   87 --
 pnpm-lock.yaml                                | 1157 +++++++++++------
 test-app/ember-cli-build.js                   |    5 +-
 216 files changed, 3242 insertions(+), 1726 deletions(-)
 create mode 100644 ember-math-helpers/declarations/helpers/abs.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/abs.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/acos.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/acos.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/acosh.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/acosh.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/add.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/add.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/asin.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/asin.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/asinh.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/asinh.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/atan.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/atan.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/atan2.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/atan2.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/atanh.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/atanh.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/cbrt.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/cbrt.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/ceil.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/ceil.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/clz32.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/clz32.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/cos.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/cos.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/cosh.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/cosh.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/div.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/div.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/exp.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/exp.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/expm1.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/expm1.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/floor.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/floor.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/fround.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/fround.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/gcd.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/gcd.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/hypot.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/hypot.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/imul.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/imul.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/lcm.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/lcm.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/log-e.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/log-e.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/log10.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/log10.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/log1p.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/log1p.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/log2.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/log2.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/max.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/max.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/min.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/min.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/mod.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/mod.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/mult.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/mult.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/pow.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/pow.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/random.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/random.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/round.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/round.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/sign.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/sign.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/sin.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/sin.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/sqrt.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/sqrt.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/sub.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/sub.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/sum.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/sum.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/tan.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/tan.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/tanh.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/tanh.d.ts.map
 create mode 100644 ember-math-helpers/declarations/helpers/trunc.d.ts
 create mode 100644 ember-math-helpers/declarations/helpers/trunc.d.ts.map
 create mode 100644 ember-math-helpers/declarations/template-registry.d.ts
 create mode 100644 ember-math-helpers/declarations/template-registry.d.ts.map
 delete mode 100644 ember-math-helpers/src/helpers/abs.js
 create mode 100644 ember-math-helpers/src/helpers/abs.ts
 delete mode 100644 ember-math-helpers/src/helpers/acos.js
 create mode 100644 ember-math-helpers/src/helpers/acos.ts
 delete mode 100644 ember-math-helpers/src/helpers/acosh.js
 create mode 100644 ember-math-helpers/src/helpers/acosh.ts
 delete mode 100644 ember-math-helpers/src/helpers/add.js
 create mode 100644 ember-math-helpers/src/helpers/add.ts
 delete mode 100644 ember-math-helpers/src/helpers/asin.js
 create mode 100644 ember-math-helpers/src/helpers/asin.ts
 delete mode 100644 ember-math-helpers/src/helpers/asinh.js
 create mode 100644 ember-math-helpers/src/helpers/asinh.ts
 delete mode 100644 ember-math-helpers/src/helpers/atan.js
 create mode 100644 ember-math-helpers/src/helpers/atan.ts
 delete mode 100644 ember-math-helpers/src/helpers/atan2.js
 create mode 100644 ember-math-helpers/src/helpers/atan2.ts
 delete mode 100644 ember-math-helpers/src/helpers/atanh.js
 create mode 100644 ember-math-helpers/src/helpers/atanh.ts
 delete mode 100644 ember-math-helpers/src/helpers/cbrt.js
 create mode 100644 ember-math-helpers/src/helpers/cbrt.ts
 delete mode 100644 ember-math-helpers/src/helpers/ceil.js
 create mode 100644 ember-math-helpers/src/helpers/ceil.ts
 delete mode 100644 ember-math-helpers/src/helpers/clz32.js
 create mode 100644 ember-math-helpers/src/helpers/clz32.ts
 delete mode 100644 ember-math-helpers/src/helpers/cos.js
 create mode 100644 ember-math-helpers/src/helpers/cos.ts
 delete mode 100644 ember-math-helpers/src/helpers/cosh.js
 create mode 100644 ember-math-helpers/src/helpers/cosh.ts
 delete mode 100644 ember-math-helpers/src/helpers/div.js
 create mode 100644 ember-math-helpers/src/helpers/div.ts
 delete mode 100644 ember-math-helpers/src/helpers/exp.js
 create mode 100644 ember-math-helpers/src/helpers/exp.ts
 delete mode 100644 ember-math-helpers/src/helpers/expm1.js
 create mode 100644 ember-math-helpers/src/helpers/expm1.ts
 rename ember-math-helpers/src/helpers/{floor.js => floor.ts} (61%)
 delete mode 100644 ember-math-helpers/src/helpers/fround.js
 create mode 100644 ember-math-helpers/src/helpers/fround.ts
 rename ember-math-helpers/src/helpers/{gcd.js => gcd.ts} (59%)
 delete mode 100644 ember-math-helpers/src/helpers/hypot.js
 create mode 100644 ember-math-helpers/src/helpers/hypot.ts
 delete mode 100644 ember-math-helpers/src/helpers/imul.js
 create mode 100644 ember-math-helpers/src/helpers/imul.ts
 rename ember-math-helpers/src/helpers/{lcm.js => lcm.ts} (54%)
 delete mode 100644 ember-math-helpers/src/helpers/log-e.js
 create mode 100644 ember-math-helpers/src/helpers/log-e.ts
 delete mode 100644 ember-math-helpers/src/helpers/log10.js
 create mode 100644 ember-math-helpers/src/helpers/log10.ts
 delete mode 100644 ember-math-helpers/src/helpers/log1p.js
 create mode 100644 ember-math-helpers/src/helpers/log1p.ts
 delete mode 100644 ember-math-helpers/src/helpers/log2.js
 create mode 100644 ember-math-helpers/src/helpers/log2.ts
 delete mode 100644 ember-math-helpers/src/helpers/max.js
 create mode 100644 ember-math-helpers/src/helpers/max.ts
 delete mode 100644 ember-math-helpers/src/helpers/min.js
 create mode 100644 ember-math-helpers/src/helpers/min.ts
 delete mode 100644 ember-math-helpers/src/helpers/mod.js
 create mode 100644 ember-math-helpers/src/helpers/mod.ts
 delete mode 100644 ember-math-helpers/src/helpers/mult.js
 create mode 100644 ember-math-helpers/src/helpers/mult.ts
 rename ember-math-helpers/src/helpers/{pow.js => pow.ts} (51%)
 rename ember-math-helpers/src/helpers/{random.js => random.ts} (54%)
 delete mode 100644 ember-math-helpers/src/helpers/round.js
 create mode 100644 ember-math-helpers/src/helpers/round.ts
 delete mode 100644 ember-math-helpers/src/helpers/sign.js
 create mode 100644 ember-math-helpers/src/helpers/sign.ts
 delete mode 100644 ember-math-helpers/src/helpers/sin.js
 create mode 100644 ember-math-helpers/src/helpers/sin.ts
 delete mode 100644 ember-math-helpers/src/helpers/sqrt.js
 create mode 100644 ember-math-helpers/src/helpers/sqrt.ts
 delete mode 100644 ember-math-helpers/src/helpers/sub.js
 create mode 100644 ember-math-helpers/src/helpers/sub.ts
 delete mode 100644 ember-math-helpers/src/helpers/sum.js
 create mode 100644 ember-math-helpers/src/helpers/sum.ts
 delete mode 100644 ember-math-helpers/src/helpers/tan.js
 create mode 100644 ember-math-helpers/src/helpers/tan.ts
 delete mode 100644 ember-math-helpers/src/helpers/tanh.js
 create mode 100644 ember-math-helpers/src/helpers/tanh.ts
 delete mode 100644 ember-math-helpers/src/helpers/trunc.js
 create mode 100644 ember-math-helpers/src/helpers/trunc.ts
 create mode 100644 ember-math-helpers/src/template-registry.ts
 create mode 100644 ember-math-helpers/tsconfig.json
 delete mode 100644 ember-math-helpers/types/helpers/abs.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/acos.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/acosh.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/add.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/asin.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/asinh.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/atan.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/atan2.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/atanh.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/cbrt.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/ceil.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/clz32.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/cos.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/cosh.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/div.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/exp.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/expm1.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/floor.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/fround.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/gcd.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/hypot.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/imul.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/lcm.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/log-e.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/log10.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/log1p.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/log2.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/max.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/min.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/mod.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/mult.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/pow.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/random.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/round.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/sign.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/sin.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/sqrt.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/sub.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/sum.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/tan.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/tanh.d.ts
 delete mode 100644 ember-math-helpers/types/helpers/trunc.d.ts
 delete mode 100644 ember-math-helpers/types/template-registry.d.ts

diff --git a/ember-math-helpers/.eslintrc.cjs b/ember-math-helpers/.eslintrc.cjs
index 8b4819d8..3ceee093 100644
--- a/ember-math-helpers/.eslintrc.cjs
+++ b/ember-math-helpers/.eslintrc.cjs
@@ -1,5 +1,50 @@
 'use strict';
 
-const { configs } = require('@nullvoxpopuli/eslint-configs');
-
-module.exports = configs.ember({ prettierIntegration: true });
+module.exports = {
+  root: true,
+  parser: '@typescript-eslint/parser',
+  parserOptions: {
+    ecmaVersion: 'latest',
+  },
+  plugins: ['ember'],
+  extends: [
+    'eslint:recommended',
+    'plugin:ember/recommended',
+    'plugin:prettier/recommended',
+  ],
+  env: {
+    browser: true,
+  },
+  rules: {},
+  overrides: [
+    // ts files
+    {
+      files: ['**/*.ts', '**/*.gts'],
+      extends: [
+        'plugin:@typescript-eslint/eslint-recommended',
+        'plugin:@typescript-eslint/recommended',
+      ],
+      rules: {
+        // Add any custom rules here
+      },
+    },
+    // node files
+    {
+      files: [
+        './.eslintrc.cjs',
+        './.prettierrc.cjs',
+        './.template-lintrc.cjs',
+        './addon-main.cjs',
+      ],
+      parserOptions: {
+        sourceType: 'script',
+      },
+      env: {
+        browser: false,
+        node: true,
+      },
+      plugins: ['n'],
+      extends: ['plugin:n/recommended'],
+    },
+  ],
+};
diff --git a/ember-math-helpers/babel.config.json b/ember-math-helpers/babel.config.json
index cfcf8a3c..42d2ec8d 100644
--- a/ember-math-helpers/babel.config.json
+++ b/ember-math-helpers/babel.config.json
@@ -1,7 +1,23 @@
 {
   "plugins": [
+    [
+      "@babel/plugin-transform-typescript",
+      {
+        "allExtensions": true,
+        "onlyRemoveTypeImports": true,
+        "allowDeclareFields": true
+      }
+    ],
     "@embroider/addon-dev/template-colocation-plugin",
-    ["@babel/plugin-proposal-decorators", { "legacy": true }],
+    "@babel/plugin-transform-class-static-block",
+    [
+      "babel-plugin-ember-template-compilation",
+      {
+        "targetFormat": "hbs",
+        "transforms": []
+      }
+    ],
+    ["@babel/plugin-proposal-decorators", { "version": "legacy" }],
     "@babel/plugin-proposal-class-properties"
   ]
 }
diff --git a/ember-math-helpers/declarations/helpers/abs.d.ts b/ember-math-helpers/declarations/helpers/abs.d.ts
new file mode 100644
index 00000000..af1f0c94
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/abs.d.ts
@@ -0,0 +1,26 @@
+export interface AbsSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Uses `Math.abs` to take the absolute value of the number passed to the helper.
+ *
+ * ```hbs
+ * {{abs a}}
+ * ```
+ *
+ * @param number The number to take the absolute value of
+ * @return The absolute value of the passed number
+ */
+export declare function abs([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=abs.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/abs.d.ts.map b/ember-math-helpers/declarations/helpers/abs.d.ts.map
new file mode 100644
index 00000000..49fbf842
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/abs.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"abs.d.ts","sourceRoot":"","sources":["../../src/helpers/abs.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAErC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/acos.d.ts b/ember-math-helpers/declarations/helpers/acos.d.ts
new file mode 100644
index 00000000..2aee5c81
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/acos.d.ts
@@ -0,0 +1,26 @@
+export interface AcosSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.acos` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{acos a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.acos`
+ * @return The acos of the passed number
+ */
+export declare function acos([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=acos.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/acos.d.ts.map b/ember-math-helpers/declarations/helpers/acos.d.ts.map
new file mode 100644
index 00000000..4fab8bd6
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/acos.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"acos.d.ts","sourceRoot":"","sources":["../../src/helpers/acos.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEtC;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/acosh.d.ts b/ember-math-helpers/declarations/helpers/acosh.d.ts
new file mode 100644
index 00000000..63bb43d9
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/acosh.d.ts
@@ -0,0 +1,26 @@
+export interface AcoshSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.acosh` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{acosh a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.acosh`
+ * @return The acosh of the passed number
+ */
+export declare function acosh([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=acosh.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/acosh.d.ts.map b/ember-math-helpers/declarations/helpers/acosh.d.ts.map
new file mode 100644
index 00000000..7cfcb0d7
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/acosh.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"acosh.d.ts","sourceRoot":"","sources":["../../src/helpers/acosh.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEvC;;;;;;;;AAED,wBAA6C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/add.d.ts b/ember-math-helpers/declarations/helpers/add.d.ts
new file mode 100644
index 00000000..3a86fb78
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/add.d.ts
@@ -0,0 +1,26 @@
+export interface AddSignature {
+    Args: {
+        Positional: Array<number>;
+    };
+    Return: number;
+}
+/**
+ * Sums two or more numbers
+ *
+ * ```hbs
+ * {{add a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to sum
+ * @return The sum of all the passed numbers
+ */
+export declare function add(numbers: Array<number>): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: number[];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=add.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/add.d.ts.map b/ember-math-helpers/declarations/helpers/add.d.ts.map
new file mode 100644
index 00000000..3d90834c
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/add.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/helpers/add.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAEzC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/asin.d.ts b/ember-math-helpers/declarations/helpers/asin.d.ts
new file mode 100644
index 00000000..e883b08b
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/asin.d.ts
@@ -0,0 +1,26 @@
+export interface AsinSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.asin` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{asin a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.asin`
+ * @return The asin of the passed number
+ */
+export declare function asin([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=asin.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/asin.d.ts.map b/ember-math-helpers/declarations/helpers/asin.d.ts.map
new file mode 100644
index 00000000..13e70cd1
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/asin.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"asin.d.ts","sourceRoot":"","sources":["../../src/helpers/asin.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEtC;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/asinh.d.ts b/ember-math-helpers/declarations/helpers/asinh.d.ts
new file mode 100644
index 00000000..5f03bb3d
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/asinh.d.ts
@@ -0,0 +1,26 @@
+export interface AsinhSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.asinh` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{asinh a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.asinh`
+ * @return The asinh of the passed number
+ */
+export declare function asinh([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=asinh.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/asinh.d.ts.map b/ember-math-helpers/declarations/helpers/asinh.d.ts.map
new file mode 100644
index 00000000..2d92bad5
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/asinh.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"asinh.d.ts","sourceRoot":"","sources":["../../src/helpers/asinh.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEvC;;;;;;;;AAED,wBAA6C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/atan.d.ts b/ember-math-helpers/declarations/helpers/atan.d.ts
new file mode 100644
index 00000000..5747199b
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/atan.d.ts
@@ -0,0 +1,26 @@
+export interface AtanSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.atan` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{atan a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.atan`
+ * @return The atan of the passed number
+ */
+export declare function atan([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=atan.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/atan.d.ts.map b/ember-math-helpers/declarations/helpers/atan.d.ts.map
new file mode 100644
index 00000000..57afe6b3
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/atan.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"atan.d.ts","sourceRoot":"","sources":["../../src/helpers/atan.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEtC;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/atan2.d.ts b/ember-math-helpers/declarations/helpers/atan2.d.ts
new file mode 100644
index 00000000..90d3f2d3
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/atan2.d.ts
@@ -0,0 +1,27 @@
+export interface Atan2Signature {
+    Args: {
+        Positional: [number, number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.atan2` on the numbers passed to the helper.
+ *
+ * ```hbs
+ * {{atan2 a b}}
+ * ```
+ *
+ * @param number1 The first number to pass to `Math.atan2`
+ * @param number2 The second number to pass to `Math.atan2`
+ * @return The atan2 of the passed numbers
+ */
+export declare function atan2([number1, number2]: [number, number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number, number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=atan2.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/atan2.d.ts.map b/ember-math-helpers/declarations/helpers/atan2.d.ts.map
new file mode 100644
index 00000000..84560704
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/atan2.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"atan2.d.ts","sourceRoot":"","sources":["../../src/helpers/atan2.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,UAEzD;;;;;;;;AAED,wBAA6C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/atanh.d.ts b/ember-math-helpers/declarations/helpers/atanh.d.ts
new file mode 100644
index 00000000..0d735716
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/atanh.d.ts
@@ -0,0 +1,26 @@
+export interface AtanhSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.atanh` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{atanh a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.atanh`
+ * @return The atanh of the passed number
+ */
+export declare function atanh([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=atanh.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/atanh.d.ts.map b/ember-math-helpers/declarations/helpers/atanh.d.ts.map
new file mode 100644
index 00000000..dd6241a3
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/atanh.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"atanh.d.ts","sourceRoot":"","sources":["../../src/helpers/atanh.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEvC;;;;;;;;AAED,wBAA6C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/cbrt.d.ts b/ember-math-helpers/declarations/helpers/cbrt.d.ts
new file mode 100644
index 00000000..9ecc573f
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/cbrt.d.ts
@@ -0,0 +1,26 @@
+export interface CbrtSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.cbrt` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{cbrt a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.cbrt`
+ * @return The cbrt of the passed number
+ */
+export declare function cbrt([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=cbrt.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/cbrt.d.ts.map b/ember-math-helpers/declarations/helpers/cbrt.d.ts.map
new file mode 100644
index 00000000..eb291e39
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/cbrt.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"cbrt.d.ts","sourceRoot":"","sources":["../../src/helpers/cbrt.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEtC;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/ceil.d.ts b/ember-math-helpers/declarations/helpers/ceil.d.ts
new file mode 100644
index 00000000..70e87eea
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/ceil.d.ts
@@ -0,0 +1,26 @@
+export interface CeilSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.ceil` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{ceil a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.ceil`
+ * @return The ceil of the passed number
+ */
+export declare function ceil([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=ceil.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/ceil.d.ts.map b/ember-math-helpers/declarations/helpers/ceil.d.ts.map
new file mode 100644
index 00000000..fb15306f
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/ceil.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"ceil.d.ts","sourceRoot":"","sources":["../../src/helpers/ceil.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEtC;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/clz32.d.ts b/ember-math-helpers/declarations/helpers/clz32.d.ts
new file mode 100644
index 00000000..e2f7bac7
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/clz32.d.ts
@@ -0,0 +1,26 @@
+export interface Clz32Signature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.clz32` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{clz32 a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.clz32`
+ * @return The clz32 of the passed number
+ */
+export declare function clz32([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=clz32.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/clz32.d.ts.map b/ember-math-helpers/declarations/helpers/clz32.d.ts.map
new file mode 100644
index 00000000..962bcb63
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/clz32.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"clz32.d.ts","sourceRoot":"","sources":["../../src/helpers/clz32.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEvC;;;;;;;;AAED,wBAA6C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/cos.d.ts b/ember-math-helpers/declarations/helpers/cos.d.ts
new file mode 100644
index 00000000..484987a7
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/cos.d.ts
@@ -0,0 +1,26 @@
+export interface CosSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.cos` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{cos a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.cos`
+ * @return The cos of the passed number
+ */
+export declare function cos([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=cos.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/cos.d.ts.map b/ember-math-helpers/declarations/helpers/cos.d.ts.map
new file mode 100644
index 00000000..a0552b50
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/cos.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"cos.d.ts","sourceRoot":"","sources":["../../src/helpers/cos.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAErC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/cosh.d.ts b/ember-math-helpers/declarations/helpers/cosh.d.ts
new file mode 100644
index 00000000..876c4c1c
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/cosh.d.ts
@@ -0,0 +1,26 @@
+export interface CoshSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.cosh` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{cosh a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.cosh`
+ * @return The cosh of the passed number
+ */
+export declare function cosh([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=cosh.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/cosh.d.ts.map b/ember-math-helpers/declarations/helpers/cosh.d.ts.map
new file mode 100644
index 00000000..81bc8faa
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/cosh.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"cosh.d.ts","sourceRoot":"","sources":["../../src/helpers/cosh.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEtC;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/div.d.ts b/ember-math-helpers/declarations/helpers/div.d.ts
new file mode 100644
index 00000000..6bee7542
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/div.d.ts
@@ -0,0 +1,26 @@
+export interface DivSignature {
+    Args: {
+        Positional: Array<number>;
+    };
+    Return: number;
+}
+/**
+ * Divides two or more numbers
+ *
+ * ```hbs
+ * {{div a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to divide
+ * @return The result of dividing all the passed numbers
+ */
+export declare function div(numbers: Array<number>): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: number[];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=div.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/div.d.ts.map b/ember-math-helpers/declarations/helpers/div.d.ts.map
new file mode 100644
index 00000000..1781ae65
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/div.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"div.d.ts","sourceRoot":"","sources":["../../src/helpers/div.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAEzC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/exp.d.ts b/ember-math-helpers/declarations/helpers/exp.d.ts
new file mode 100644
index 00000000..84aa28de
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/exp.d.ts
@@ -0,0 +1,26 @@
+export interface ExpSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.exp` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{exp a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.exp`
+ * @return The exp of the passed number
+ */
+export declare function exp([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=exp.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/exp.d.ts.map b/ember-math-helpers/declarations/helpers/exp.d.ts.map
new file mode 100644
index 00000000..2494bddf
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/exp.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"exp.d.ts","sourceRoot":"","sources":["../../src/helpers/exp.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAErC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/expm1.d.ts b/ember-math-helpers/declarations/helpers/expm1.d.ts
new file mode 100644
index 00000000..02cac519
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/expm1.d.ts
@@ -0,0 +1,26 @@
+export interface Expm1Signature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.expm1` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{expm1 a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.expm1`
+ * @return The expm1 of the passed number
+ */
+export declare function expm1([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=expm1.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/expm1.d.ts.map b/ember-math-helpers/declarations/helpers/expm1.d.ts.map
new file mode 100644
index 00000000..17181281
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/expm1.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"expm1.d.ts","sourceRoot":"","sources":["../../src/helpers/expm1.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEvC;;;;;;;;AAED,wBAA6C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/floor.d.ts b/ember-math-helpers/declarations/helpers/floor.d.ts
new file mode 100644
index 00000000..314b30c9
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/floor.d.ts
@@ -0,0 +1,26 @@
+export interface FloorSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.floor` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{floor a}}
+ * ```
+ *
+ * @param {number} number The number to pass to `Math.floor`
+ * @return {number} The floor of the passed number
+ */
+export declare function floor([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=floor.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/floor.d.ts.map b/ember-math-helpers/declarations/helpers/floor.d.ts.map
new file mode 100644
index 00000000..b73b2ae9
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/floor.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"floor.d.ts","sourceRoot":"","sources":["../../src/helpers/floor.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEvC;;;;;;;;AAED,wBAA6C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/fround.d.ts b/ember-math-helpers/declarations/helpers/fround.d.ts
new file mode 100644
index 00000000..43b4df0b
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/fround.d.ts
@@ -0,0 +1,26 @@
+export interface FroundSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.fround` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{fround a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.fround`
+ * @return The fround of the passed number
+ */
+export declare function fround([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=fround.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/fround.d.ts.map b/ember-math-helpers/declarations/helpers/fround.d.ts.map
new file mode 100644
index 00000000..d867c6fa
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/fround.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"fround.d.ts","sourceRoot":"","sources":["../../src/helpers/fround.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAExC;;;;;;;;AAED,wBAA+C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/gcd.d.ts b/ember-math-helpers/declarations/helpers/gcd.d.ts
new file mode 100644
index 00000000..92c01aa0
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/gcd.d.ts
@@ -0,0 +1,27 @@
+export interface GcdSignature {
+    Args: {
+        Positional: [number, number];
+    };
+    Return: number;
+}
+/**
+ * Returns the greatest positive integer that divides each of two integers
+ *
+ * ```hbs
+ * {{gcd a b}}
+ * ```
+ *
+ * @param number1 The first number
+ * @param number2 The second number
+ * @return The GCD of the two numbers passed
+ */
+export declare function gcd([number1, number2]: [(number | undefined)?, (number | undefined)?]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number, number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=gcd.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/gcd.d.ts.map b/ember-math-helpers/declarations/helpers/gcd.d.ts.map
new file mode 100644
index 00000000..b6afb53a
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/gcd.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"gcd.d.ts","sourceRoot":"","sources":["../../src/helpers/gcd.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,CAAC,OAAW,EAAE,OAAW,CAAC,gDAAA,UAa7C;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/hypot.d.ts b/ember-math-helpers/declarations/helpers/hypot.d.ts
new file mode 100644
index 00000000..21f19d28
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/hypot.d.ts
@@ -0,0 +1,26 @@
+export interface HypotSignature {
+    Args: {
+        Positional: Array<number>;
+    };
+    Return: number;
+}
+/**
+ * Takes two or more numbers, and returns the square root of the sum of squares of them using `Math.hypot`
+ *
+ * ```hbs
+ * {{max a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to pass to `Math.hypot`
+ * @return The hypot of the set of numbers
+ */
+export declare function hypot(numbers: Array<number>): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: number[];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=hypot.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/hypot.d.ts.map b/ember-math-helpers/declarations/helpers/hypot.d.ts.map
new file mode 100644
index 00000000..63fa72cb
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/hypot.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"hypot.d.ts","sourceRoot":"","sources":["../../src/helpers/hypot.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAE3C;;;;;;;;AAED,wBAA6C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/imul.d.ts b/ember-math-helpers/declarations/helpers/imul.d.ts
new file mode 100644
index 00000000..bc8d4506
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/imul.d.ts
@@ -0,0 +1,27 @@
+export interface ImulSignature {
+    Args: {
+        Positional: [number, number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.imul` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{imul a}}
+ * ```
+ *
+ * @param number1 The first number to pass to `Math.imul`
+ * @param number2 The second number to pass to `Math.imul`
+ * @return The imul of the passed numbers
+ */
+export declare function imul([number1, number2]: [number, number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number, number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=imul.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/imul.d.ts.map b/ember-math-helpers/declarations/helpers/imul.d.ts.map
new file mode 100644
index 00000000..17743744
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/imul.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"imul.d.ts","sourceRoot":"","sources":["../../src/helpers/imul.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,UAExD;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/lcm.d.ts b/ember-math-helpers/declarations/helpers/lcm.d.ts
new file mode 100644
index 00000000..b6d3b886
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/lcm.d.ts
@@ -0,0 +1,27 @@
+export interface LcmSignature {
+    Args: {
+        Positional: [number, number];
+    };
+    Return: number;
+}
+/**
+ * Returns the smallest positive integer that is divisible by both number1 and number2
+ *
+ * ```hbs
+ * {{lcm a b}}
+ * ```
+ *
+ * @param number1 The first number
+ * @param number2 The second number
+ * @return The LCM of the two numbers passed
+ */
+export declare function lcm([number1, number2]: [(number | undefined)?, (number | undefined)?]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number, number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=lcm.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/lcm.d.ts.map b/ember-math-helpers/declarations/helpers/lcm.d.ts.map
new file mode 100644
index 00000000..4b80b64c
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/lcm.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"lcm.d.ts","sourceRoot":"","sources":["../../src/helpers/lcm.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,CAAC,OAAW,EAAE,OAAW,CAAC,gDAAA,UAI7C;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/log-e.d.ts b/ember-math-helpers/declarations/helpers/log-e.d.ts
new file mode 100644
index 00000000..d330ff32
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/log-e.d.ts
@@ -0,0 +1,26 @@
+export interface LogESignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.log` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{log-e a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.log`
+ * @return The log of the passed number
+ */
+export declare function logE([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=log-e.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/log-e.d.ts.map b/ember-math-helpers/declarations/helpers/log-e.d.ts.map
new file mode 100644
index 00000000..f433ff4f
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/log-e.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"log-e.d.ts","sourceRoot":"","sources":["../../src/helpers/log-e.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEtC;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/log10.d.ts b/ember-math-helpers/declarations/helpers/log10.d.ts
new file mode 100644
index 00000000..7faef5c8
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/log10.d.ts
@@ -0,0 +1,26 @@
+export interface Log10Signature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.log10` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{log10 a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.log10`
+ * @return The log10 of the passed number
+ */
+export declare function log10([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=log10.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/log10.d.ts.map b/ember-math-helpers/declarations/helpers/log10.d.ts.map
new file mode 100644
index 00000000..0a8b36ac
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/log10.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"log10.d.ts","sourceRoot":"","sources":["../../src/helpers/log10.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEvC;;;;;;;;AAED,wBAA6C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/log1p.d.ts b/ember-math-helpers/declarations/helpers/log1p.d.ts
new file mode 100644
index 00000000..785cde82
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/log1p.d.ts
@@ -0,0 +1,26 @@
+export interface Log1pSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.log1p` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{log1p a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.log1p`
+ * @return The log1p of the passed number
+ */
+export declare function log1p([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=log1p.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/log1p.d.ts.map b/ember-math-helpers/declarations/helpers/log1p.d.ts.map
new file mode 100644
index 00000000..bf23d655
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/log1p.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"log1p.d.ts","sourceRoot":"","sources":["../../src/helpers/log1p.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEvC;;;;;;;;AAED,wBAA6C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/log2.d.ts b/ember-math-helpers/declarations/helpers/log2.d.ts
new file mode 100644
index 00000000..553abdcb
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/log2.d.ts
@@ -0,0 +1,26 @@
+export interface Log2Signature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.log2` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{log2 a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.log2`
+ * @return The log2 of the passed number
+ */
+export declare function log2([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=log2.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/log2.d.ts.map b/ember-math-helpers/declarations/helpers/log2.d.ts.map
new file mode 100644
index 00000000..78662fb7
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/log2.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"log2.d.ts","sourceRoot":"","sources":["../../src/helpers/log2.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEtC;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/max.d.ts b/ember-math-helpers/declarations/helpers/max.d.ts
new file mode 100644
index 00000000..5f754eea
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/max.d.ts
@@ -0,0 +1,26 @@
+export interface MaxSignature {
+    Args: {
+        Positional: Array<number>;
+    };
+    Return: number;
+}
+/**
+ * Takes two or more numbers, and finds the max of the set using `Math.max`
+ *
+ * ```hbs
+ * {{max a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to pass to `Math.max`
+ * @return The max of the set of numbers
+ */
+export declare function max(numbers: Array<number>): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: number[];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=max.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/max.d.ts.map b/ember-math-helpers/declarations/helpers/max.d.ts.map
new file mode 100644
index 00000000..768e8577
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/max.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"max.d.ts","sourceRoot":"","sources":["../../src/helpers/max.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAEzC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/min.d.ts b/ember-math-helpers/declarations/helpers/min.d.ts
new file mode 100644
index 00000000..9392eaf6
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/min.d.ts
@@ -0,0 +1,26 @@
+export interface MinSignature {
+    Args: {
+        Positional: Array<number>;
+    };
+    Return: number;
+}
+/**
+ * Takes two or more numbers, and finds the min of the set using `Math.min`
+ *
+ * ```hbs
+ * {{min a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to pass to `Math.min`
+ * @return The min of the set of numbers
+ */
+export declare function min(numbers: Array<number>): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: number[];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=min.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/min.d.ts.map b/ember-math-helpers/declarations/helpers/min.d.ts.map
new file mode 100644
index 00000000..9fac660d
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/min.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"min.d.ts","sourceRoot":"","sources":["../../src/helpers/min.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAEzC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/mod.d.ts b/ember-math-helpers/declarations/helpers/mod.d.ts
new file mode 100644
index 00000000..58ba46c2
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/mod.d.ts
@@ -0,0 +1,26 @@
+export interface ModSignature {
+    Args: {
+        Positional: Array<number>;
+    };
+    Return: number;
+}
+/**
+ * Takes the modulus of two or more numbers
+ *
+ * ```hbs
+ * {{mod a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to modulus
+ * @return The modulus of all the passed numbers
+ */
+export declare function mod(numbers: Array<number>): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: number[];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=mod.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/mod.d.ts.map b/ember-math-helpers/declarations/helpers/mod.d.ts.map
new file mode 100644
index 00000000..befccb53
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/mod.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/helpers/mod.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAEzC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/mult.d.ts b/ember-math-helpers/declarations/helpers/mult.d.ts
new file mode 100644
index 00000000..d334adc7
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/mult.d.ts
@@ -0,0 +1,26 @@
+export interface MultSignature {
+    Args: {
+        Positional: Array<number>;
+    };
+    Return: number;
+}
+/**
+ * Multiplies two or more numbers
+ *
+ * ```hbs
+ * {{mult a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to multiply
+ * @return The product of all the passed numbers
+ */
+export declare function mult(numbers: Array<number>): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: number[];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=mult.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/mult.d.ts.map b/ember-math-helpers/declarations/helpers/mult.d.ts.map
new file mode 100644
index 00000000..23ba8696
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/mult.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"mult.d.ts","sourceRoot":"","sources":["../../src/helpers/mult.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAE1C;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/pow.d.ts b/ember-math-helpers/declarations/helpers/pow.d.ts
new file mode 100644
index 00000000..06e8a167
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/pow.d.ts
@@ -0,0 +1,27 @@
+export interface PowSignature {
+    Args: {
+        Positional: Array<number>;
+    };
+    Return: number;
+}
+/**
+ * Takes two or more numbers, using the first as the base number,
+ * then using each subsequent number as an exponent to the previous value
+ *
+ * ```hbs
+ * {{pow a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to pass to `Math.pow`
+ * @return The base raised to all exponents
+ */
+export declare function pow(numbers: Array<number>): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: number[];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=pow.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/pow.d.ts.map b/ember-math-helpers/declarations/helpers/pow.d.ts.map
new file mode 100644
index 00000000..eab19977
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/pow.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"pow.d.ts","sourceRoot":"","sources":["../../src/helpers/pow.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAEzC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/random.d.ts b/ember-math-helpers/declarations/helpers/random.d.ts
new file mode 100644
index 00000000..33670a80
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/random.d.ts
@@ -0,0 +1,42 @@
+export interface RandomSignature {
+    Args: {
+        Named: {
+            decimals?: number;
+        };
+        Positional: [upperBound?: number, lowerBound?: number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.random` with the provided upper-bounded randoms, lower- and upper-bounded randoms,
+ * and the option to configure decimal precision.
+ *
+ * ```hbs
+ * {{random}} or {{random decimals=4}}
+ * ```
+ *
+ * ```hbs
+ * {{random 42}} or {{random 42 decimals=4}}
+ * ```
+ *
+ * ```hbs
+ * {{random 21 1797}} or {{random 21 1797 decimals=4}}
+ * ```
+ *
+ * @param upperBound
+ * @param lowerBound
+ * @param {object} { decimals } decimal precision value
+ * @return The random generated number
+ */
+export declare function random([upperBound, lowerBound]: RandomSignature['Args']['Positional'], { decimals }: RandomSignature['Args']['Named']): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [upperBound?: number | undefined, lowerBound?: number | undefined];
+        Named: {
+            decimals?: number | undefined;
+        };
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=random.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/random.d.ts.map b/ember-math-helpers/declarations/helpers/random.d.ts.map
new file mode 100644
index 00000000..e3a58adf
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/random.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../../src/helpers/random.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE;QACJ,KAAK,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7B,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;KACxD,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CACpB,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EAC/D,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAkC/C;;;;;;;;;;AAED,wBAA+C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/round.d.ts b/ember-math-helpers/declarations/helpers/round.d.ts
new file mode 100644
index 00000000..9f25bbb0
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/round.d.ts
@@ -0,0 +1,23 @@
+export interface RoundSignature {
+    Args: {
+        Named: {
+            decimals?: number;
+            exp?: number;
+        };
+        Positional: [number];
+    };
+    Return: number;
+}
+export declare function round([number]: [number], namedArgs: RoundSignature['Args']['Named']): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: {
+            decimals?: number | undefined;
+            exp?: number | undefined;
+        };
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=round.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/round.d.ts.map b/ember-math-helpers/declarations/helpers/round.d.ts.map
new file mode 100644
index 00000000..8d9adbae
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/round.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"round.d.ts","sourceRoot":"","sources":["../../src/helpers/round.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,KAAK,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3C,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AA2CD,wBAAgB,KAAK,CACnB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAClB,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAa3C;;;;;;;;;;;AAED,wBAA6C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/sign.d.ts b/ember-math-helpers/declarations/helpers/sign.d.ts
new file mode 100644
index 00000000..87fdea90
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/sign.d.ts
@@ -0,0 +1,26 @@
+export interface SignSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.sign` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{sign a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.sign`
+ * @return The sign of the passed number
+ */
+export declare function sign([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=sign.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/sign.d.ts.map b/ember-math-helpers/declarations/helpers/sign.d.ts.map
new file mode 100644
index 00000000..f4d77f6a
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/sign.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/helpers/sign.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEtC;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/sin.d.ts b/ember-math-helpers/declarations/helpers/sin.d.ts
new file mode 100644
index 00000000..9d77ceee
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/sin.d.ts
@@ -0,0 +1,26 @@
+export interface SinSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.sin` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{sin a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.sin`
+ * @return The sin of the passed number
+ */
+export declare function sin([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=sin.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/sin.d.ts.map b/ember-math-helpers/declarations/helpers/sin.d.ts.map
new file mode 100644
index 00000000..26a2740e
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/sin.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"sin.d.ts","sourceRoot":"","sources":["../../src/helpers/sin.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAErC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/sqrt.d.ts b/ember-math-helpers/declarations/helpers/sqrt.d.ts
new file mode 100644
index 00000000..96b83f91
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/sqrt.d.ts
@@ -0,0 +1,26 @@
+export interface SqrtSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.sqrt` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{sqrt a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.sqrt`
+ * @return The sqrt of the passed number
+ */
+export declare function sqrt([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=sqrt.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/sqrt.d.ts.map b/ember-math-helpers/declarations/helpers/sqrt.d.ts.map
new file mode 100644
index 00000000..b0d13302
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/sqrt.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"sqrt.d.ts","sourceRoot":"","sources":["../../src/helpers/sqrt.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEtC;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/sub.d.ts b/ember-math-helpers/declarations/helpers/sub.d.ts
new file mode 100644
index 00000000..a033f0c7
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/sub.d.ts
@@ -0,0 +1,26 @@
+export interface SubSignature {
+    Args: {
+        Positional: Array<number>;
+    };
+    Return: number;
+}
+/**
+ * Subtracts two or more numbers
+ *
+ * ```hbs
+ * {{sub a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to subtract
+ * @return The difference of all the passed numbers
+ */
+export declare function sub(numbers: Array<number>): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: number[];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=sub.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/sub.d.ts.map b/ember-math-helpers/declarations/helpers/sub.d.ts.map
new file mode 100644
index 00000000..500bd601
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/sub.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"sub.d.ts","sourceRoot":"","sources":["../../src/helpers/sub.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAEzC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/sum.d.ts b/ember-math-helpers/declarations/helpers/sum.d.ts
new file mode 100644
index 00000000..466cd98d
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/sum.d.ts
@@ -0,0 +1,20 @@
+/**
+ * Alias for {{add}} helper
+ *
+ * ```hbs
+ * {{sum a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to sum
+ * @return The sum of all the passed numbers
+ */
+export declare function sum(numbers: Array<number>): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: number[];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=sum.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/sum.d.ts.map b/ember-math-helpers/declarations/helpers/sum.d.ts.map
new file mode 100644
index 00000000..f96d10d5
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/sum.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"sum.d.ts","sourceRoot":"","sources":["../../src/helpers/sum.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAEzC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/tan.d.ts b/ember-math-helpers/declarations/helpers/tan.d.ts
new file mode 100644
index 00000000..33d4e445
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/tan.d.ts
@@ -0,0 +1,26 @@
+export interface TanSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.tan` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{tan a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.tan`
+ * @return The tan of the passed number
+ */
+export declare function tan([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=tan.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/tan.d.ts.map b/ember-math-helpers/declarations/helpers/tan.d.ts.map
new file mode 100644
index 00000000..0c682c7c
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/tan.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"tan.d.ts","sourceRoot":"","sources":["../../src/helpers/tan.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAErC;;;;;;;;AAED,wBAAyC"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/tanh.d.ts b/ember-math-helpers/declarations/helpers/tanh.d.ts
new file mode 100644
index 00000000..d2e417c1
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/tanh.d.ts
@@ -0,0 +1,26 @@
+export interface TanhSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.tanh` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{tanh a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.tanh`
+ * @return The tanh of the passed number
+ */
+export declare function tanh([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=tanh.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/tanh.d.ts.map b/ember-math-helpers/declarations/helpers/tanh.d.ts.map
new file mode 100644
index 00000000..019a693a
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/tanh.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"tanh.d.ts","sourceRoot":"","sources":["../../src/helpers/tanh.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEtC;;;;;;;;AAED,wBAA2C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/trunc.d.ts b/ember-math-helpers/declarations/helpers/trunc.d.ts
new file mode 100644
index 00000000..dbc6682d
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/trunc.d.ts
@@ -0,0 +1,26 @@
+export interface TruncSignature {
+    Args: {
+        Positional: [number];
+    };
+    Return: number;
+}
+/**
+ * Executes `Math.trunc` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{trunc a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.trunc`
+ * @return The trunc of the passed number
+ */
+export declare function trunc([number]: [number]): number;
+declare const _default: import("@ember/component/helper").FunctionBasedHelper<{
+    Args: {
+        Positional: [number];
+        Named: import("@ember/component/helper").EmptyObject;
+    };
+    Return: number;
+}>;
+export default _default;
+//# sourceMappingURL=trunc.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/helpers/trunc.d.ts.map b/ember-math-helpers/declarations/helpers/trunc.d.ts.map
new file mode 100644
index 00000000..25b8cb58
--- /dev/null
+++ b/ember-math-helpers/declarations/helpers/trunc.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"trunc.d.ts","sourceRoot":"","sources":["../../src/helpers/trunc.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAEvC;;;;;;;;AAED,wBAA6C"}
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/template-registry.d.ts b/ember-math-helpers/declarations/template-registry.d.ts
new file mode 100644
index 00000000..0e3d8997
--- /dev/null
+++ b/ember-math-helpers/declarations/template-registry.d.ts
@@ -0,0 +1,87 @@
+import type AbsHelper from './helpers/abs';
+import type AcosHelper from './helpers/acos';
+import type AcoshHelper from './helpers/acosh';
+import type AddHelper from './helpers/add';
+import type AsinHelper from './helpers/asin';
+import type AsinhHelper from './helpers/asinh';
+import type AtanHelper from './helpers/atan';
+import type Atan2Helper from './helpers/atan2';
+import type AtanhHelper from './helpers/atanh';
+import type CbrtHelper from './helpers/cbrt';
+import type CeilHelper from './helpers/ceil';
+import type Clz32Helper from './helpers/clz32';
+import type CosHelper from './helpers/cos';
+import type CoshHelper from './helpers/cosh';
+import type DivHelper from './helpers/div';
+import type ExpHelper from './helpers/exp';
+import type Expm1Helper from './helpers/expm1';
+import type FloorHelper from './helpers/floor';
+import type FroundHelper from './helpers/fround';
+import type GcdHelper from './helpers/gcd';
+import type HypotHelper from './helpers/hypot';
+import type ImulHelper from './helpers/imul';
+import type LcmHelper from './helpers/lcm';
+import type LogEHelper from './helpers/log-e';
+import type Log10Helper from './helpers/log10';
+import type Log1PHelper from './helpers/log1p';
+import type Log2Helper from './helpers/log2';
+import type MaxHelper from './helpers/max';
+import type MinHelper from './helpers/min';
+import type ModHelper from './helpers/mod';
+import type MultHelper from './helpers/mult';
+import type PowHelper from './helpers/pow';
+import type RandomHelper from './helpers/random';
+import type RoundHelper from './helpers/round';
+import type SignHelper from './helpers/sign';
+import type SinHelper from './helpers/sin';
+import type SqrtHelper from './helpers/sqrt';
+import type SubHelper from './helpers/sub';
+import type SumHelper from './helpers/sum';
+import type TanHelper from './helpers/tan';
+import type TanhHelper from './helpers/tanh';
+import type TruncHelper from './helpers/trunc';
+export default interface Registry {
+    abs: typeof AbsHelper;
+    acos: typeof AcosHelper;
+    acosh: typeof AcoshHelper;
+    add: typeof AddHelper;
+    asin: typeof AsinHelper;
+    asinh: typeof AsinhHelper;
+    atan: typeof AtanHelper;
+    atan2: typeof Atan2Helper;
+    atanh: typeof AtanhHelper;
+    cbrt: typeof CbrtHelper;
+    ceil: typeof CeilHelper;
+    clz32: typeof Clz32Helper;
+    cos: typeof CosHelper;
+    cosh: typeof CoshHelper;
+    div: typeof DivHelper;
+    exp: typeof ExpHelper;
+    expm1: typeof Expm1Helper;
+    floor: typeof FloorHelper;
+    fround: typeof FroundHelper;
+    gcd: typeof GcdHelper;
+    hypot: typeof HypotHelper;
+    imul: typeof ImulHelper;
+    lcm: typeof LcmHelper;
+    'log-e': typeof LogEHelper;
+    log10: typeof Log10Helper;
+    log1p: typeof Log1PHelper;
+    log2: typeof Log2Helper;
+    max: typeof MaxHelper;
+    min: typeof MinHelper;
+    mod: typeof ModHelper;
+    mult: typeof MultHelper;
+    pow: typeof PowHelper;
+    random: typeof RandomHelper;
+    round: typeof RoundHelper;
+    sign: typeof SignHelper;
+    sin: typeof SinHelper;
+    sqrt: typeof SqrtHelper;
+    sub: typeof SubHelper;
+    sum: typeof SumHelper;
+    tan: typeof TanHelper;
+    tanh: typeof TanhHelper;
+    trunc: typeof TruncHelper;
+}
+//# sourceMappingURL=template-registry.d.ts.map
\ No newline at end of file
diff --git a/ember-math-helpers/declarations/template-registry.d.ts.map b/ember-math-helpers/declarations/template-registry.d.ts.map
new file mode 100644
index 00000000..e87cce83
--- /dev/null
+++ b/ember-math-helpers/declarations/template-registry.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"template-registry.d.ts","sourceRoot":"","sources":["../src/template-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,YAAY,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,YAAY,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,OAAO,WAAW,QAAQ;IAC/B,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,IAAI,EAAE,OAAO,UAAU,CAAC;IACxB,KAAK,EAAE,OAAO,WAAW,CAAC;IAC1B,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,IAAI,EAAE,OAAO,UAAU,CAAC;IACxB,KAAK,EAAE,OAAO,WAAW,CAAC;IAC1B,IAAI,EAAE,OAAO,UAAU,CAAC;IACxB,KAAK,EAAE,OAAO,WAAW,CAAC;IAC1B,KAAK,EAAE,OAAO,WAAW,CAAC;IAC1B,IAAI,EAAE,OAAO,UAAU,CAAC;IACxB,IAAI,EAAE,OAAO,UAAU,CAAC;IACxB,KAAK,EAAE,OAAO,WAAW,CAAC;IAC1B,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,IAAI,EAAE,OAAO,UAAU,CAAC;IACxB,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,KAAK,EAAE,OAAO,WAAW,CAAC;IAC1B,KAAK,EAAE,OAAO,WAAW,CAAC;IAC1B,MAAM,EAAE,OAAO,YAAY,CAAC;IAC5B,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,KAAK,EAAE,OAAO,WAAW,CAAC;IAC1B,IAAI,EAAE,OAAO,UAAU,CAAC;IACxB,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,OAAO,EAAE,OAAO,UAAU,CAAC;IAC3B,KAAK,EAAE,OAAO,WAAW,CAAC;IAC1B,KAAK,EAAE,OAAO,WAAW,CAAC;IAC1B,IAAI,EAAE,OAAO,UAAU,CAAC;IACxB,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,IAAI,EAAE,OAAO,UAAU,CAAC;IACxB,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,MAAM,EAAE,OAAO,YAAY,CAAC;IAC5B,KAAK,EAAE,OAAO,WAAW,CAAC;IAC1B,IAAI,EAAE,OAAO,UAAU,CAAC;IACxB,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,IAAI,EAAE,OAAO,UAAU,CAAC;IACxB,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,IAAI,EAAE,OAAO,UAAU,CAAC;IACxB,KAAK,EAAE,OAAO,WAAW,CAAC;CAC3B"}
\ No newline at end of file
diff --git a/ember-math-helpers/package.json b/ember-math-helpers/package.json
index dc04e58c..d60327cd 100644
--- a/ember-math-helpers/package.json
+++ b/ember-math-helpers/package.json
@@ -12,37 +12,20 @@
     "email": "rwwagner90@gmail.com",
     "url": "https://github.com/RobbieTheWagner"
   },
-  "exports": {
-    "./*": {
-      "types": "./types/*.d.ts",
-      "default": "./dist/*.js"
-    }
-  },
-  "typesVersions": {
-    "*": {
-      "*": [
-        "types/*"
-      ]
-    }
-  },
-  "files": [
-    "dist",
-    "types",
-    "addon-main.cjs",
-    "CHANGELOG.md",
-    "README.md"
-  ],
   "scripts": {
-    "start": "concurrently 'npm:watch:*'",
     "build": "concurrently 'npm:build:*'",
     "build:docs": "cp ../README.md ./README.md",
-    "build:js": "rollup -c ./rollup.config.mjs",
-    "watch:js": "rollup -c --watch --no-watch.clearScreen",
+    "build:js": "rollup --config",
+    "build:types": "glint --declaration",
+    "watch:js": "rollup --config --watch --no-watch.clearScreen",
     "lint": "concurrently 'npm:lint:js'",
     "lint:fix": "concurrently 'npm:lint:js:fix'",
     "lint:js": "eslint . --cache",
     "lint:js:fix": "eslint . --fix",
-    "test": "echo 'Addon does not have tests, run tests in test-app'",
+    "lint:types": "glint",
+    "start": "concurrently 'npm:watch:*'",
+    "test": "echo 'A v2 addon does not have tests, run tests in test-app'",
+    "prepack": "rollup --config",
     "prepare": "pnpm build",
     "prepublishOnly": "pnpm build"
   },
@@ -50,14 +33,42 @@
     "@embroider/addon-shim": "^1.8.6"
   },
   "devDependencies": {
-    "@babel/core": "7.23.2",
-    "@babel/plugin-proposal-class-properties": "7.18.6",
-    "@babel/plugin-proposal-decorators": "7.23.2",
-    "@babel/plugin-syntax-decorators": "7.22.10",
+    "@babel/core": "^7.23.2",
+    "@babel/plugin-transform-typescript": "^7.22.15",
+    "@babel/plugin-proposal-class-properties": "^7.16.7",
+    "@babel/plugin-proposal-decorators": "^7.20.13",
+    "@babel/plugin-transform-class-static-block": "^7.20.0",
+    "@babel/runtime": "^7.17.0",
     "@embroider/addon-dev": "^4.1.1",
-    "@glint/template": "^1.2.1",
+    "@glint/core": "^1.2.0",
+    "@glint/environment-ember-loose": "^1.2.0",
+    "@glint/environment-ember-template-imports": "^1.2.0",
+    "@glint/template": "^1.2.0",
     "@nullvoxpopuli/eslint-configs": "3.2.2",
     "@rollup/plugin-babel": "6.0.4",
+    "@tsconfig/ember": "^2.0.0",
+    "@types/ember": "^4.0.4",
+    "@types/ember__object": "^4.0.6",
+    "@types/ember__owner": "^4.0.4",
+    "@types/ember__service": "^4.0.3",
+    "@types/ember__controller": "^4.0.5",
+    "@types/ember__string": "^3.16.3",
+    "@types/ember__template": "^4.0.2",
+    "@types/ember__polyfills": "^4.0.2",
+    "@types/ember__utils": "^4.0.3",
+    "@types/ember__runloop": "^4.0.3",
+    "@types/ember__debug": "^4.0.4",
+    "@types/ember__engine": "^4.0.5",
+    "@types/ember__application": "^4.0.6",
+    "@types/ember__test": "^4.0.2",
+    "@types/ember__array": "^4.0.4",
+    "@types/ember__error": "^4.0.3",
+    "@types/ember__component": "^4.0.14",
+    "@types/ember__modifier": "^4.0.6",
+    "@types/ember__helper": "^4.0.3",
+    "@types/ember__routing": "^4.0.13",
+    "@typescript-eslint/eslint-plugin": "^6.7.2",
+    "@typescript-eslint/parser": "^6.7.2",
     "concurrently": "8.2.2",
     "eslint": "^8.52.0",
     "eslint-config-prettier": "9.0.0",
@@ -65,14 +76,13 @@
     "eslint-plugin-ember": "11.11.1",
     "eslint-plugin-import": "2.29.0",
     "eslint-plugin-json": "3.1.0",
-    "eslint-plugin-node": "11.1.0",
+    "eslint-plugin-n": "^16.0.0",
     "eslint-plugin-prettier": "^5.0.1",
     "eslint-plugin-simple-import-sort": "10.0.0",
     "prettier": "^3.0.3",
     "rollup": "^4.2.0"
   },
   "peerDependencies": {
-    "@glint/template": "^1.2.1",
     "ember-source": "^4.0.0 || ^5.0.0"
   },
   "publishConfig": {
@@ -130,6 +140,31 @@
       "./helpers/trunc.js": "./dist/_app_/helpers/trunc.js"
     }
   },
+  "files": [
+    "addon-main.cjs",
+    "declarations",
+    "dist",
+    "CHANGELOG.md",
+    "README.md"
+  ],
+  "exports": {
+    ".": {
+      "types": "./declarations/index.d.ts",
+      "default": "./dist/index.js"
+    },
+    "./*": {
+      "types": "./declarations/*.d.ts",
+      "default": "./dist/*.js"
+    },
+    "./addon-main.js": "./addon-main.cjs"
+  },
+  "typesVersions": {
+    "*": {
+      "*": [
+        "declarations/*"
+      ]
+    }
+  },
   "engines": {
     "node": "14.* || 16.* || >= 18"
   }
diff --git a/ember-math-helpers/rollup.config.mjs b/ember-math-helpers/rollup.config.mjs
index 45bcc16f..5d58fa6f 100644
--- a/ember-math-helpers/rollup.config.mjs
+++ b/ember-math-helpers/rollup.config.mjs
@@ -14,7 +14,7 @@ export default {
   plugins: [
     // These are the modules that users should be able to import from your
     // addon. Anything not listed here may get optimized away.
-    addon.publicEntrypoints(['helpers/**/*.js']),
+    addon.publicEntrypoints(['helpers/**/*.js', 'template-registry.js']),
 
     // These are the modules that should get reexported into the traditional
     // "app" tree. Things in here should also be in publicEntrypoints above, but
@@ -24,21 +24,26 @@ export default {
     // This babel config should *not* apply presets or compile away ES modules.
     // It exists only to provide development niceties for you, like automatic
     // template colocation.
+
+    // Follow the V2 Addon rules about dependencies. Your code can import from
+    // `dependencies` and `peerDependencies` as well as standard Ember-provided
+    // package names.
+    addon.dependencies(),
+
     //
     // By default, this will load the actual babel config from the file
     // babel.config.json.
     babel({
+      extensions: ['.js', '.gjs', '.ts', '.gts'],
       babelHelpers: 'bundled',
     }),
 
-    // Follow the V2 Addon rules about dependencies. Your code can import from
-    // `dependencies` and `peerDependencies` as well as standard Ember-provided
-    // package names.
-    addon.dependencies(),
-
     // Ensure that standalone .hbs files are properly integrated as Javascript.
     addon.hbs(),
 
+    // Ensure that .gjs files are properly integrated as Javascript
+    addon.gjs(),
+
     // addons are allowed to contain imports of .css files, which we want rollup
     // to leave alone and keep in the published output.
     addon.keepAssets(['**/*.css']),
diff --git a/ember-math-helpers/src/helpers/abs.js b/ember-math-helpers/src/helpers/abs.js
deleted file mode 100644
index 8fbe8113..00000000
--- a/ember-math-helpers/src/helpers/abs.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Uses `Math.abs` to take the absolute value of the number passed to the helper.
- *
- * ```hbs
- * {{abs a}}
- * ```
- *
- * @param {number} number The number to take the absolute value of
- * @return {number} The absolute value of the passed number
- */
-export function abs([number]) {
-  return Math.abs(number);
-}
-
-export default helper(abs);
diff --git a/ember-math-helpers/src/helpers/abs.ts b/ember-math-helpers/src/helpers/abs.ts
new file mode 100644
index 00000000..4c6386f8
--- /dev/null
+++ b/ember-math-helpers/src/helpers/abs.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface AbsSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Uses `Math.abs` to take the absolute value of the number passed to the helper.
+ *
+ * ```hbs
+ * {{abs a}}
+ * ```
+ *
+ * @param number The number to take the absolute value of
+ * @return The absolute value of the passed number
+ */
+export function abs([number]: [number]) {
+  return Math.abs(number);
+}
+
+export default helper<AbsSignature>(abs);
diff --git a/ember-math-helpers/src/helpers/acos.js b/ember-math-helpers/src/helpers/acos.js
deleted file mode 100644
index 96916e5b..00000000
--- a/ember-math-helpers/src/helpers/acos.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.acos` on the number passed to the helper.
- *
- * ```hbs
- * {{acos a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.acos`
- * @return {number} The acos of the passed number
- */
-export function acos([number]) {
-  return Math.acos(number);
-}
-
-export default helper(acos);
diff --git a/ember-math-helpers/src/helpers/acos.ts b/ember-math-helpers/src/helpers/acos.ts
new file mode 100644
index 00000000..508c6f54
--- /dev/null
+++ b/ember-math-helpers/src/helpers/acos.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface AcosSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.acos` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{acos a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.acos`
+ * @return The acos of the passed number
+ */
+export function acos([number]: [number]) {
+  return Math.acos(number);
+}
+
+export default helper<AcosSignature>(acos);
diff --git a/ember-math-helpers/src/helpers/acosh.js b/ember-math-helpers/src/helpers/acosh.js
deleted file mode 100644
index e3af0dba..00000000
--- a/ember-math-helpers/src/helpers/acosh.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.acosh` on the number passed to the helper.
- *
- * ```hbs
- * {{acosh a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.acosh`
- * @return {number} The acosh of the passed number
- */
-export function acosh([number]) {
-  return Math.acosh(number);
-}
-
-export default helper(acosh);
diff --git a/ember-math-helpers/src/helpers/acosh.ts b/ember-math-helpers/src/helpers/acosh.ts
new file mode 100644
index 00000000..8c5b70ef
--- /dev/null
+++ b/ember-math-helpers/src/helpers/acosh.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface AcoshSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.acosh` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{acosh a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.acosh`
+ * @return The acosh of the passed number
+ */
+export function acosh([number]: [number]) {
+  return Math.acosh(number);
+}
+
+export default helper<AcoshSignature>(acosh);
diff --git a/ember-math-helpers/src/helpers/add.js b/ember-math-helpers/src/helpers/add.js
deleted file mode 100644
index ef939323..00000000
--- a/ember-math-helpers/src/helpers/add.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Sums two or more numbers
- *
- * ```hbs
- * {{add a b}}
- * ```
- *
- * @param {number[]} numbers A list of numbers to sum
- * @return {number} The sum of all the passed numbers
- */
-export function add(numbers) {
-  return numbers.reduce((a, b) => Number(a) + Number(b));
-}
-
-export default helper(add);
diff --git a/ember-math-helpers/src/helpers/add.ts b/ember-math-helpers/src/helpers/add.ts
new file mode 100644
index 00000000..d27f2fc9
--- /dev/null
+++ b/ember-math-helpers/src/helpers/add.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface AddSignature {
+  Args: {
+    Positional: Array<number>;
+  };
+  Return: number;
+}
+
+/**
+ * Sums two or more numbers
+ *
+ * ```hbs
+ * {{add a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to sum
+ * @return The sum of all the passed numbers
+ */
+export function add(numbers: Array<number>) {
+  return numbers.reduce((a, b) => Number(a) + Number(b));
+}
+
+export default helper<AddSignature>(add);
diff --git a/ember-math-helpers/src/helpers/asin.js b/ember-math-helpers/src/helpers/asin.js
deleted file mode 100644
index abfa3be4..00000000
--- a/ember-math-helpers/src/helpers/asin.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.asin` on the number passed to the helper.
- *
- * ```hbs
- * {{asin a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.asin`
- * @return {number} The asin of the passed number
- */
-export function asin([number]) {
-  return Math.asin(number);
-}
-
-export default helper(asin);
diff --git a/ember-math-helpers/src/helpers/asin.ts b/ember-math-helpers/src/helpers/asin.ts
new file mode 100644
index 00000000..fdcb4aea
--- /dev/null
+++ b/ember-math-helpers/src/helpers/asin.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface AsinSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.asin` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{asin a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.asin`
+ * @return The asin of the passed number
+ */
+export function asin([number]: [number]) {
+  return Math.asin(number);
+}
+
+export default helper<AsinSignature>(asin);
diff --git a/ember-math-helpers/src/helpers/asinh.js b/ember-math-helpers/src/helpers/asinh.js
deleted file mode 100644
index 5151a401..00000000
--- a/ember-math-helpers/src/helpers/asinh.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.asinh` on the number passed to the helper.
- *
- * ```hbs
- * {{asinh a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.asinh`
- * @return {number} The asinh of the passed number
- */
-export function asinh([number]) {
-  return Math.asinh(number);
-}
-
-export default helper(asinh);
diff --git a/ember-math-helpers/src/helpers/asinh.ts b/ember-math-helpers/src/helpers/asinh.ts
new file mode 100644
index 00000000..9c88ae78
--- /dev/null
+++ b/ember-math-helpers/src/helpers/asinh.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface AsinhSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.asinh` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{asinh a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.asinh`
+ * @return The asinh of the passed number
+ */
+export function asinh([number]: [number]) {
+  return Math.asinh(number);
+}
+
+export default helper<AsinhSignature>(asinh);
diff --git a/ember-math-helpers/src/helpers/atan.js b/ember-math-helpers/src/helpers/atan.js
deleted file mode 100644
index 0d1e2cf3..00000000
--- a/ember-math-helpers/src/helpers/atan.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.atan` on the number passed to the helper.
- *
- * ```hbs
- * {{atan a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.atan`
- * @return {number} The atan of the passed number
- */
-export function atan([number]) {
-  return Math.atan(number);
-}
-
-export default helper(atan);
diff --git a/ember-math-helpers/src/helpers/atan.ts b/ember-math-helpers/src/helpers/atan.ts
new file mode 100644
index 00000000..c08e619c
--- /dev/null
+++ b/ember-math-helpers/src/helpers/atan.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface AtanSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.atan` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{atan a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.atan`
+ * @return The atan of the passed number
+ */
+export function atan([number]: [number]) {
+  return Math.atan(number);
+}
+
+export default helper<AtanSignature>(atan);
diff --git a/ember-math-helpers/src/helpers/atan2.js b/ember-math-helpers/src/helpers/atan2.js
deleted file mode 100644
index cf8943ed..00000000
--- a/ember-math-helpers/src/helpers/atan2.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.atan2` on the numbers passed to the helper.
- *
- * ```hbs
- * {{atan2 a b}}
- * ```
- *
- * @param {number} number1 The first number to pass to `Math.atan2`
- * @param {number} number2 The second number to pass to `Math.atan2`
- * @return {number} The atan2 of the passed numbers
- */
-export function atan2([number1, number2]) {
-  return Math.atan2(number1, number2);
-}
-
-export default helper(atan2);
diff --git a/ember-math-helpers/src/helpers/atan2.ts b/ember-math-helpers/src/helpers/atan2.ts
new file mode 100644
index 00000000..a53369dd
--- /dev/null
+++ b/ember-math-helpers/src/helpers/atan2.ts
@@ -0,0 +1,25 @@
+import { helper } from '@ember/component/helper';
+
+export interface Atan2Signature {
+  Args: {
+    Positional: [number, number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.atan2` on the numbers passed to the helper.
+ *
+ * ```hbs
+ * {{atan2 a b}}
+ * ```
+ *
+ * @param number1 The first number to pass to `Math.atan2`
+ * @param number2 The second number to pass to `Math.atan2`
+ * @return The atan2 of the passed numbers
+ */
+export function atan2([number1, number2]: [number, number]) {
+  return Math.atan2(number1, number2);
+}
+
+export default helper<Atan2Signature>(atan2);
diff --git a/ember-math-helpers/src/helpers/atanh.js b/ember-math-helpers/src/helpers/atanh.js
deleted file mode 100644
index 1d61c83e..00000000
--- a/ember-math-helpers/src/helpers/atanh.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.atanh` on the number passed to the helper.
- *
- * ```hbs
- * {{atanh a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.atanh`
- * @return {number} The atanh of the passed number
- */
-export function atanh([number]) {
-  return Math.atanh(number);
-}
-
-export default helper(atanh);
diff --git a/ember-math-helpers/src/helpers/atanh.ts b/ember-math-helpers/src/helpers/atanh.ts
new file mode 100644
index 00000000..eb1bba8a
--- /dev/null
+++ b/ember-math-helpers/src/helpers/atanh.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface AtanhSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.atanh` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{atanh a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.atanh`
+ * @return The atanh of the passed number
+ */
+export function atanh([number]: [number]) {
+  return Math.atanh(number);
+}
+
+export default helper<AtanhSignature>(atanh);
diff --git a/ember-math-helpers/src/helpers/cbrt.js b/ember-math-helpers/src/helpers/cbrt.js
deleted file mode 100644
index 6d5b6cbb..00000000
--- a/ember-math-helpers/src/helpers/cbrt.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.cbrt` on the number passed to the helper.
- *
- * ```hbs
- * {{cbrt a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.cbrt`
- * @return {number} The cbrt of the passed number
- */
-export function cbrt([number]) {
-  return Math.cbrt(number);
-}
-
-export default helper(cbrt);
diff --git a/ember-math-helpers/src/helpers/cbrt.ts b/ember-math-helpers/src/helpers/cbrt.ts
new file mode 100644
index 00000000..6f1cfd1c
--- /dev/null
+++ b/ember-math-helpers/src/helpers/cbrt.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface CbrtSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.cbrt` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{cbrt a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.cbrt`
+ * @return The cbrt of the passed number
+ */
+export function cbrt([number]: [number]) {
+  return Math.cbrt(number);
+}
+
+export default helper<CbrtSignature>(cbrt);
diff --git a/ember-math-helpers/src/helpers/ceil.js b/ember-math-helpers/src/helpers/ceil.js
deleted file mode 100644
index 0994f319..00000000
--- a/ember-math-helpers/src/helpers/ceil.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.ceil` on the number passed to the helper.
- *
- * ```hbs
- * {{ceil a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.ceil`
- * @return {number} The ceil of the passed number
- */
-export function ceil([number]) {
-  return Math.ceil(number);
-}
-
-export default helper(ceil);
diff --git a/ember-math-helpers/src/helpers/ceil.ts b/ember-math-helpers/src/helpers/ceil.ts
new file mode 100644
index 00000000..ca4c29d1
--- /dev/null
+++ b/ember-math-helpers/src/helpers/ceil.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface CeilSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.ceil` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{ceil a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.ceil`
+ * @return The ceil of the passed number
+ */
+export function ceil([number]: [number]) {
+  return Math.ceil(number);
+}
+
+export default helper<CeilSignature>(ceil);
diff --git a/ember-math-helpers/src/helpers/clz32.js b/ember-math-helpers/src/helpers/clz32.js
deleted file mode 100644
index 31d6fb7f..00000000
--- a/ember-math-helpers/src/helpers/clz32.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.clz32` on the number passed to the helper.
- *
- * ```hbs
- * {{clz32 a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.clz32`
- * @return {number} The clz32 of the passed number
- */
-export function clz32([number]) {
-  return Math.clz32(number);
-}
-
-export default helper(clz32);
diff --git a/ember-math-helpers/src/helpers/clz32.ts b/ember-math-helpers/src/helpers/clz32.ts
new file mode 100644
index 00000000..2b70238a
--- /dev/null
+++ b/ember-math-helpers/src/helpers/clz32.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface Clz32Signature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.clz32` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{clz32 a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.clz32`
+ * @return The clz32 of the passed number
+ */
+export function clz32([number]: [number]) {
+  return Math.clz32(number);
+}
+
+export default helper<Clz32Signature>(clz32);
diff --git a/ember-math-helpers/src/helpers/cos.js b/ember-math-helpers/src/helpers/cos.js
deleted file mode 100644
index 08777772..00000000
--- a/ember-math-helpers/src/helpers/cos.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.cos` on the number passed to the helper.
- *
- * ```hbs
- * {{cos a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.cos`
- * @return {number} The cos of the passed number
- */
-export function cos([number]) {
-  return Math.cos(number);
-}
-
-export default helper(cos);
diff --git a/ember-math-helpers/src/helpers/cos.ts b/ember-math-helpers/src/helpers/cos.ts
new file mode 100644
index 00000000..9db19bdd
--- /dev/null
+++ b/ember-math-helpers/src/helpers/cos.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface CosSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.cos` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{cos a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.cos`
+ * @return The cos of the passed number
+ */
+export function cos([number]: [number]) {
+  return Math.cos(number);
+}
+
+export default helper<CosSignature>(cos);
diff --git a/ember-math-helpers/src/helpers/cosh.js b/ember-math-helpers/src/helpers/cosh.js
deleted file mode 100644
index f12f1217..00000000
--- a/ember-math-helpers/src/helpers/cosh.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.cosh` on the number passed to the helper.
- *
- * ```hbs
- * {{cosh a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.cosh`
- * @return {number} The cosh of the passed number
- */
-export function cosh([number]) {
-  return Math.cosh(number);
-}
-
-export default helper(cosh);
diff --git a/ember-math-helpers/src/helpers/cosh.ts b/ember-math-helpers/src/helpers/cosh.ts
new file mode 100644
index 00000000..adc0429c
--- /dev/null
+++ b/ember-math-helpers/src/helpers/cosh.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface CoshSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.cosh` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{cosh a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.cosh`
+ * @return The cosh of the passed number
+ */
+export function cosh([number]: [number]) {
+  return Math.cosh(number);
+}
+
+export default helper<CoshSignature>(cosh);
diff --git a/ember-math-helpers/src/helpers/div.js b/ember-math-helpers/src/helpers/div.js
deleted file mode 100644
index 686d96b7..00000000
--- a/ember-math-helpers/src/helpers/div.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Divides two or more numbers
- *
- * ```hbs
- * {{div a b}}
- * ```
- *
- * @param {number[]} numbers A list of numbers to divide
- * @return {number} The result of dividing all the passed numbers
- */
-export function div(numbers) {
-  return numbers.reduce((a, b) => Number(a) / Number(b));
-}
-
-export default helper(div);
diff --git a/ember-math-helpers/src/helpers/div.ts b/ember-math-helpers/src/helpers/div.ts
new file mode 100644
index 00000000..26294fe5
--- /dev/null
+++ b/ember-math-helpers/src/helpers/div.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface DivSignature {
+  Args: {
+    Positional: Array<number>;
+  };
+  Return: number;
+}
+
+/**
+ * Divides two or more numbers
+ *
+ * ```hbs
+ * {{div a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to divide
+ * @return The result of dividing all the passed numbers
+ */
+export function div(numbers: Array<number>) {
+  return numbers.reduce((a, b) => Number(a) / Number(b));
+}
+
+export default helper<DivSignature>(div);
diff --git a/ember-math-helpers/src/helpers/exp.js b/ember-math-helpers/src/helpers/exp.js
deleted file mode 100644
index 0d2ea9ed..00000000
--- a/ember-math-helpers/src/helpers/exp.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.exp` on the number passed to the helper.
- *
- * ```hbs
- * {{exp a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.exp`
- * @return {number} The exp of the passed number
- */
-export function exp([number]) {
-  return Math.exp(number);
-}
-
-export default helper(exp);
diff --git a/ember-math-helpers/src/helpers/exp.ts b/ember-math-helpers/src/helpers/exp.ts
new file mode 100644
index 00000000..d5b49ff3
--- /dev/null
+++ b/ember-math-helpers/src/helpers/exp.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface ExpSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.exp` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{exp a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.exp`
+ * @return The exp of the passed number
+ */
+export function exp([number]: [number]) {
+  return Math.exp(number);
+}
+
+export default helper<ExpSignature>(exp);
diff --git a/ember-math-helpers/src/helpers/expm1.js b/ember-math-helpers/src/helpers/expm1.js
deleted file mode 100644
index 80d173eb..00000000
--- a/ember-math-helpers/src/helpers/expm1.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.expm1` on the number passed to the helper.
- *
- * ```hbs
- * {{expm1 a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.expm1`
- * @return {number} The expm1 of the passed number
- */
-export function expm1([number]) {
-  return Math.expm1(number);
-}
-
-export default helper(expm1);
diff --git a/ember-math-helpers/src/helpers/expm1.ts b/ember-math-helpers/src/helpers/expm1.ts
new file mode 100644
index 00000000..2acc4ef7
--- /dev/null
+++ b/ember-math-helpers/src/helpers/expm1.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface Expm1Signature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.expm1` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{expm1 a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.expm1`
+ * @return The expm1 of the passed number
+ */
+export function expm1([number]: [number]) {
+  return Math.expm1(number);
+}
+
+export default helper<Expm1Signature>(expm1);
diff --git a/ember-math-helpers/src/helpers/floor.js b/ember-math-helpers/src/helpers/floor.ts
similarity index 61%
rename from ember-math-helpers/src/helpers/floor.js
rename to ember-math-helpers/src/helpers/floor.ts
index 002dfe7d..e5516a3c 100644
--- a/ember-math-helpers/src/helpers/floor.js
+++ b/ember-math-helpers/src/helpers/floor.ts
@@ -1,5 +1,12 @@
 import { helper } from '@ember/component/helper';
 
+export interface FloorSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
 /**
  * Executes `Math.floor` on the number passed to the helper.
  *
@@ -10,8 +17,8 @@ import { helper } from '@ember/component/helper';
  * @param {number} number The number to pass to `Math.floor`
  * @return {number} The floor of the passed number
  */
-export function floor([number]) {
+export function floor([number]: [number]) {
   return Math.floor(number);
 }
 
-export default helper(floor);
+export default helper<FloorSignature>(floor);
diff --git a/ember-math-helpers/src/helpers/fround.js b/ember-math-helpers/src/helpers/fround.js
deleted file mode 100644
index 8f985211..00000000
--- a/ember-math-helpers/src/helpers/fround.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.fround` on the number passed to the helper.
- *
- * ```hbs
- * {{fround a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.fround`
- * @return {number} The fround of the passed number
- */
-export function fround([number]) {
-  return Math.fround(number);
-}
-
-export default helper(fround);
diff --git a/ember-math-helpers/src/helpers/fround.ts b/ember-math-helpers/src/helpers/fround.ts
new file mode 100644
index 00000000..2e4617e1
--- /dev/null
+++ b/ember-math-helpers/src/helpers/fround.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface FroundSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.fround` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{fround a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.fround`
+ * @return The fround of the passed number
+ */
+export function fround([number]: [number]) {
+  return Math.fround(number);
+}
+
+export default helper<FroundSignature>(fround);
diff --git a/ember-math-helpers/src/helpers/gcd.js b/ember-math-helpers/src/helpers/gcd.ts
similarity index 59%
rename from ember-math-helpers/src/helpers/gcd.js
rename to ember-math-helpers/src/helpers/gcd.ts
index b66db813..8c437936 100644
--- a/ember-math-helpers/src/helpers/gcd.js
+++ b/ember-math-helpers/src/helpers/gcd.ts
@@ -1,5 +1,12 @@
 import { helper } from '@ember/component/helper';
 
+export interface GcdSignature {
+  Args: {
+    Positional: [number, number];
+  };
+  Return: number;
+}
+
 /**
  * Returns the greatest positive integer that divides each of two integers
  *
@@ -7,9 +14,9 @@ import { helper } from '@ember/component/helper';
  * {{gcd a b}}
  * ```
  *
- * @param {number} number1 The first number
- * @param {number} number2 The second number
- * @return {number} The GCD of the two numbers passed
+ * @param number1 The first number
+ * @param number2 The second number
+ * @return The GCD of the two numbers passed
  */
 export function gcd([number1 = 0, number2 = 0]) {
   const a = Math.abs(number1);
@@ -26,4 +33,4 @@ export function gcd([number1 = 0, number2 = 0]) {
   return gcd([b, a % b]);
 }
 
-export default helper(gcd);
+export default helper<GcdSignature>(gcd);
diff --git a/ember-math-helpers/src/helpers/hypot.js b/ember-math-helpers/src/helpers/hypot.js
deleted file mode 100644
index 293b7e08..00000000
--- a/ember-math-helpers/src/helpers/hypot.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Takes two or more numbers, and returns the square root of the sum of squares of them using `Math.hypot`
- *
- * ```hbs
- * {{max a b}}
- * ```
- *
- * @param {number[]} numbers A list of numbers to pass to `Math.hypot`
- * @return {number} The hypot of the set of numbers
- */
-export function hypot(numbers) {
-  return Math.hypot(...numbers);
-}
-
-export default helper(hypot);
diff --git a/ember-math-helpers/src/helpers/hypot.ts b/ember-math-helpers/src/helpers/hypot.ts
new file mode 100644
index 00000000..ec8c6552
--- /dev/null
+++ b/ember-math-helpers/src/helpers/hypot.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface HypotSignature {
+  Args: {
+    Positional: Array<number>;
+  };
+  Return: number;
+}
+
+/**
+ * Takes two or more numbers, and returns the square root of the sum of squares of them using `Math.hypot`
+ *
+ * ```hbs
+ * {{max a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to pass to `Math.hypot`
+ * @return The hypot of the set of numbers
+ */
+export function hypot(numbers: Array<number>) {
+  return Math.hypot(...numbers);
+}
+
+export default helper<HypotSignature>(hypot);
diff --git a/ember-math-helpers/src/helpers/imul.js b/ember-math-helpers/src/helpers/imul.js
deleted file mode 100644
index 38e355e5..00000000
--- a/ember-math-helpers/src/helpers/imul.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.imul` on the number passed to the helper.
- *
- * ```hbs
- * {{imul a}}
- * ```
- *
- * @param {number} number1 The first number to pass to `Math.imul`
- * @param {number} number2 The second number to pass to `Math.imul`
- * @return {number} The imul of the passed numbers
- */
-export function imul([number1, number2]) {
-  return Math.imul(number1, number2);
-}
-
-export default helper(imul);
diff --git a/ember-math-helpers/src/helpers/imul.ts b/ember-math-helpers/src/helpers/imul.ts
new file mode 100644
index 00000000..7d6c8279
--- /dev/null
+++ b/ember-math-helpers/src/helpers/imul.ts
@@ -0,0 +1,25 @@
+import { helper } from '@ember/component/helper';
+
+export interface ImulSignature {
+  Args: {
+    Positional: [number, number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.imul` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{imul a}}
+ * ```
+ *
+ * @param number1 The first number to pass to `Math.imul`
+ * @param number2 The second number to pass to `Math.imul`
+ * @return The imul of the passed numbers
+ */
+export function imul([number1, number2]: [number, number]) {
+  return Math.imul(number1, number2);
+}
+
+export default helper<ImulSignature>(imul);
diff --git a/ember-math-helpers/src/helpers/lcm.js b/ember-math-helpers/src/helpers/lcm.ts
similarity index 54%
rename from ember-math-helpers/src/helpers/lcm.js
rename to ember-math-helpers/src/helpers/lcm.ts
index e7d09dc8..e46a5828 100644
--- a/ember-math-helpers/src/helpers/lcm.js
+++ b/ember-math-helpers/src/helpers/lcm.ts
@@ -1,6 +1,13 @@
 import { helper } from '@ember/component/helper';
 
-import { gcd } from './gcd';
+import { gcd } from './gcd.ts';
+
+export interface LcmSignature {
+  Args: {
+    Positional: [number, number];
+  };
+  Return: number;
+}
 
 /**
  * Returns the smallest positive integer that is divisible by both number1 and number2
@@ -9,9 +16,9 @@ import { gcd } from './gcd';
  * {{lcm a b}}
  * ```
  *
- * @param {number} number1 The first number
- * @param {number} number2 The second number
- * @return {number} The LCM of the two numbers passed
+ * @param number1 The first number
+ * @param number2 The second number
+ * @return The LCM of the two numbers passed
  */
 export function lcm([number1 = 0, number2 = 0]) {
   return number1 === 0 || number2 === 0
@@ -19,4 +26,4 @@ export function lcm([number1 = 0, number2 = 0]) {
     : Math.abs(number1 * number2) / gcd([number1, number2]);
 }
 
-export default helper(lcm);
+export default helper<LcmSignature>(lcm);
diff --git a/ember-math-helpers/src/helpers/log-e.js b/ember-math-helpers/src/helpers/log-e.js
deleted file mode 100644
index 27462143..00000000
--- a/ember-math-helpers/src/helpers/log-e.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.log` on the number passed to the helper.
- *
- * ```hbs
- * {{log-e a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.log`
- * @return {number} The log of the passed number
- */
-export function logE([number]) {
-  return Math.log(number);
-}
-
-export default helper(logE);
diff --git a/ember-math-helpers/src/helpers/log-e.ts b/ember-math-helpers/src/helpers/log-e.ts
new file mode 100644
index 00000000..d4189cb9
--- /dev/null
+++ b/ember-math-helpers/src/helpers/log-e.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface LogESignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.log` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{log-e a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.log`
+ * @return The log of the passed number
+ */
+export function logE([number]: [number]) {
+  return Math.log(number);
+}
+
+export default helper<LogESignature>(logE);
diff --git a/ember-math-helpers/src/helpers/log10.js b/ember-math-helpers/src/helpers/log10.js
deleted file mode 100644
index f71c24f4..00000000
--- a/ember-math-helpers/src/helpers/log10.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.log10` on the number passed to the helper.
- *
- * ```hbs
- * {{log10 a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.log10`
- * @return {number} The log10 of the passed number
- */
-export function log10([number]) {
-  return Math.log10(number);
-}
-
-export default helper(log10);
diff --git a/ember-math-helpers/src/helpers/log10.ts b/ember-math-helpers/src/helpers/log10.ts
new file mode 100644
index 00000000..bb8c23d3
--- /dev/null
+++ b/ember-math-helpers/src/helpers/log10.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface Log10Signature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.log10` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{log10 a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.log10`
+ * @return The log10 of the passed number
+ */
+export function log10([number]: [number]) {
+  return Math.log10(number);
+}
+
+export default helper<Log10Signature>(log10);
diff --git a/ember-math-helpers/src/helpers/log1p.js b/ember-math-helpers/src/helpers/log1p.js
deleted file mode 100644
index 06783b24..00000000
--- a/ember-math-helpers/src/helpers/log1p.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.log1p` on the number passed to the helper.
- *
- * ```hbs
- * {{log1p a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.log1p`
- * @return {number} The log1p of the passed number
- */
-export function log1p([number]) {
-  return Math.log1p(number);
-}
-
-export default helper(log1p);
diff --git a/ember-math-helpers/src/helpers/log1p.ts b/ember-math-helpers/src/helpers/log1p.ts
new file mode 100644
index 00000000..912aec04
--- /dev/null
+++ b/ember-math-helpers/src/helpers/log1p.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface Log1pSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.log1p` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{log1p a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.log1p`
+ * @return The log1p of the passed number
+ */
+export function log1p([number]: [number]) {
+  return Math.log1p(number);
+}
+
+export default helper<Log1pSignature>(log1p);
diff --git a/ember-math-helpers/src/helpers/log2.js b/ember-math-helpers/src/helpers/log2.js
deleted file mode 100644
index 61095de6..00000000
--- a/ember-math-helpers/src/helpers/log2.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.log2` on the number passed to the helper.
- *
- * ```hbs
- * {{log2 a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.log2`
- * @return {number} The log2 of the passed number
- */
-export function log2([number]) {
-  return Math.log2(number);
-}
-
-export default helper(log2);
diff --git a/ember-math-helpers/src/helpers/log2.ts b/ember-math-helpers/src/helpers/log2.ts
new file mode 100644
index 00000000..edb41a49
--- /dev/null
+++ b/ember-math-helpers/src/helpers/log2.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface Log2Signature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.log2` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{log2 a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.log2`
+ * @return The log2 of the passed number
+ */
+export function log2([number]: [number]) {
+  return Math.log2(number);
+}
+
+export default helper<Log2Signature>(log2);
diff --git a/ember-math-helpers/src/helpers/max.js b/ember-math-helpers/src/helpers/max.js
deleted file mode 100644
index c1f6de05..00000000
--- a/ember-math-helpers/src/helpers/max.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Takes two or more numbers, and finds the max of the set using `Math.max`
- *
- * ```hbs
- * {{max a b}}
- * ```
- *
- * @param {number[]} numbers A list of numbers to pass to `Math.max`
- * @return {number} The max of the set of numbers
- */
-export function max(numbers) {
-  return Math.max(...numbers);
-}
-
-export default helper(max);
diff --git a/ember-math-helpers/src/helpers/max.ts b/ember-math-helpers/src/helpers/max.ts
new file mode 100644
index 00000000..edbc0f8e
--- /dev/null
+++ b/ember-math-helpers/src/helpers/max.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface MaxSignature {
+  Args: {
+    Positional: Array<number>;
+  };
+  Return: number;
+}
+
+/**
+ * Takes two or more numbers, and finds the max of the set using `Math.max`
+ *
+ * ```hbs
+ * {{max a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to pass to `Math.max`
+ * @return The max of the set of numbers
+ */
+export function max(numbers: Array<number>) {
+  return Math.max(...numbers);
+}
+
+export default helper<MaxSignature>(max);
diff --git a/ember-math-helpers/src/helpers/min.js b/ember-math-helpers/src/helpers/min.js
deleted file mode 100644
index 0fb95854..00000000
--- a/ember-math-helpers/src/helpers/min.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Takes two or more numbers, and finds the min of the set using `Math.min`
- *
- * ```hbs
- * {{min a b}}
- * ```
- *
- * @param {number[]} numbers A list of numbers to pass to `Math.min`
- * @return {number} The min of the set of numbers
- */
-export function min(numbers) {
-  return Math.min(...numbers);
-}
-
-export default helper(min);
diff --git a/ember-math-helpers/src/helpers/min.ts b/ember-math-helpers/src/helpers/min.ts
new file mode 100644
index 00000000..2c1eb106
--- /dev/null
+++ b/ember-math-helpers/src/helpers/min.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface MinSignature {
+  Args: {
+    Positional: Array<number>;
+  };
+  Return: number;
+}
+
+/**
+ * Takes two or more numbers, and finds the min of the set using `Math.min`
+ *
+ * ```hbs
+ * {{min a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to pass to `Math.min`
+ * @return The min of the set of numbers
+ */
+export function min(numbers: Array<number>) {
+  return Math.min(...numbers);
+}
+
+export default helper<MinSignature>(min);
diff --git a/ember-math-helpers/src/helpers/mod.js b/ember-math-helpers/src/helpers/mod.js
deleted file mode 100644
index bc5ddb7d..00000000
--- a/ember-math-helpers/src/helpers/mod.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Takes the modulus of two or more numbers
- *
- * ```hbs
- * {{mod a b}}
- * ```
- *
- * @param {number[]} numbers A list of numbers to modulus
- * @return {number} The modulus of all the passed numbers
- */
-export function mod(numbers) {
-  return numbers.reduce((a, b) => Number(a) % Number(b));
-}
-
-export default helper(mod);
diff --git a/ember-math-helpers/src/helpers/mod.ts b/ember-math-helpers/src/helpers/mod.ts
new file mode 100644
index 00000000..4c408fe5
--- /dev/null
+++ b/ember-math-helpers/src/helpers/mod.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface ModSignature {
+  Args: {
+    Positional: Array<number>;
+  };
+  Return: number;
+}
+
+/**
+ * Takes the modulus of two or more numbers
+ *
+ * ```hbs
+ * {{mod a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to modulus
+ * @return The modulus of all the passed numbers
+ */
+export function mod(numbers: Array<number>) {
+  return numbers.reduce((a, b) => Number(a) % Number(b));
+}
+
+export default helper<ModSignature>(mod);
diff --git a/ember-math-helpers/src/helpers/mult.js b/ember-math-helpers/src/helpers/mult.js
deleted file mode 100644
index d0d6c39e..00000000
--- a/ember-math-helpers/src/helpers/mult.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Multiplies two or more numbers
- *
- * ```hbs
- * {{mult a b}}
- * ```
- *
- * @param {number[]} numbers A list of numbers to multiply
- * @return {number} The product of all the passed numbers
- */
-export function mult(numbers) {
-  return numbers.reduce((a, b) => Number(a) * Number(b));
-}
-
-export default helper(mult);
diff --git a/ember-math-helpers/src/helpers/mult.ts b/ember-math-helpers/src/helpers/mult.ts
new file mode 100644
index 00000000..466c5b59
--- /dev/null
+++ b/ember-math-helpers/src/helpers/mult.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface MultSignature {
+  Args: {
+    Positional: Array<number>;
+  };
+  Return: number;
+}
+
+/**
+ * Multiplies two or more numbers
+ *
+ * ```hbs
+ * {{mult a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to multiply
+ * @return The product of all the passed numbers
+ */
+export function mult(numbers: Array<number>) {
+  return numbers.reduce((a, b) => Number(a) * Number(b));
+}
+
+export default helper<MultSignature>(mult);
diff --git a/ember-math-helpers/src/helpers/pow.js b/ember-math-helpers/src/helpers/pow.ts
similarity index 51%
rename from ember-math-helpers/src/helpers/pow.js
rename to ember-math-helpers/src/helpers/pow.ts
index c54ae6be..cda7eeb4 100644
--- a/ember-math-helpers/src/helpers/pow.js
+++ b/ember-math-helpers/src/helpers/pow.ts
@@ -1,5 +1,12 @@
 import { helper } from '@ember/component/helper';
 
+export interface PowSignature {
+  Args: {
+    Positional: Array<number>;
+  };
+  Return: number;
+}
+
 /**
  * Takes two or more numbers, using the first as the base number,
  * then using each subsequent number as an exponent to the previous value
@@ -8,11 +15,11 @@ import { helper } from '@ember/component/helper';
  * {{pow a b}}
  * ```
  *
- * @param {number[]} numbers A list of numbers to pass to `Math.pow`
- * @return {number} The base raised to all exponents
+ * @param numbers A list of numbers to pass to `Math.pow`
+ * @return The base raised to all exponents
  */
-export function pow(numbers) {
+export function pow(numbers: Array<number>) {
   return numbers.reduce((base, exponent) => Math.pow(base, exponent));
 }
 
-export default helper(pow);
+export default helper<PowSignature>(pow);
diff --git a/ember-math-helpers/src/helpers/random.js b/ember-math-helpers/src/helpers/random.ts
similarity index 54%
rename from ember-math-helpers/src/helpers/random.js
rename to ember-math-helpers/src/helpers/random.ts
index 92ec84d9..1d500948 100644
--- a/ember-math-helpers/src/helpers/random.js
+++ b/ember-math-helpers/src/helpers/random.ts
@@ -1,18 +1,16 @@
-import { isArray } from '@ember/array';
 import { helper } from '@ember/component/helper';
 
-const { min, max } = Math;
+export interface RandomSignature {
+  Args: {
+    Named: { decimals?: number };
+    Positional: [upperBound?: number, lowerBound?: number];
+  };
+  Return: number;
+}
 
 // @see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed#max(0, min(MAX_DECIMALS, decimals))));
 const MAX_DECIMALS = 20;
 
-// 💡 Using Number.toFixed, we'll get rounding for free alongside
-// decimal precision. We'll default to whole-number rounding simply
-// by defaulting `decimals` to 0
-const DEFAULT_OPTS = {
-  decimals: 0,
-};
-
 /**
  * Executes `Math.random` with the provided upper-bounded randoms, lower- and upper-bounded randoms,
  * and the option to configure decimal precision.
@@ -29,47 +27,47 @@ const DEFAULT_OPTS = {
  * {{random 21 1797}} or {{random 21 1797 decimals=4}}
  * ```
  *
- * @param {number} upperBound
- * @param {number} lowerBound
+ * @param upperBound
+ * @param lowerBound
  * @param {object} { decimals } decimal precision value
- * @return {number} The random generated number
+ * @return The random generated number
  */
-export function random(params, { decimals } = DEFAULT_OPTS) {
+export function random(
+  [upperBound, lowerBound]: RandomSignature['Args']['Positional'],
+  { decimals }: RandomSignature['Args']['Named'],
+) {
   // no positional args, but only an options hash from named args
-  if (typeof params === 'object' && !isArray(params)) {
-    decimals =
-      typeof params.decimals !== 'undefined'
-        ? params.decimals
-        : DEFAULT_OPTS.decimals;
+  if (typeof upperBound === 'undefined' && typeof lowerBound === 'undefined') {
+    decimals = decimals ?? 0;
 
-    return +Math.random().toFixed(max(0, min(MAX_DECIMALS, decimals)));
+    return +Math.random().toFixed(
+      Math.max(0, Math.min(MAX_DECIMALS, decimals)),
+    );
   }
 
   // one positional arg: treat it as an upper bound
-  if (params && params.length === 1) {
-    const [upperBound] = params;
-
+  if (typeof upperBound !== 'undefined' && typeof lowerBound === 'undefined') {
     return +(Math.random() * upperBound).toFixed(
-      max(0, min(MAX_DECIMALS, decimals)),
+      Math.max(0, Math.min(MAX_DECIMALS, decimals ?? 0)),
     );
   }
 
   // two positional args: use them to derive upper and lower bounds
-  if (params && params.length === 2) {
-    let [lowerBound, upperBound] = params;
-
+  if (typeof upperBound !== 'undefined' && typeof lowerBound !== 'undefined') {
     // for convenience, swap if a higher number is accidentally passed first
     if (upperBound < lowerBound) {
       [lowerBound, upperBound] = [upperBound, lowerBound];
     }
 
     return +(lowerBound + Math.random() * (upperBound - lowerBound)).toFixed(
-      max(0, min(MAX_DECIMALS, decimals)),
+      Math.max(0, Math.min(MAX_DECIMALS, decimals ?? 0)),
     );
   }
 
   // no positional or named args: just return Math.random() w/ default decimal precision
-  return +Math.random().toFixed(max(0, min(MAX_DECIMALS, decimals)));
+  return +Math.random().toFixed(
+    Math.max(0, Math.min(MAX_DECIMALS, decimals ?? 0)),
+  );
 }
 
-export default helper(random);
+export default helper<RandomSignature>(random);
diff --git a/ember-math-helpers/src/helpers/round.js b/ember-math-helpers/src/helpers/round.js
deleted file mode 100644
index 7b50766b..00000000
--- a/ember-math-helpers/src/helpers/round.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-// adapted from:
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round#Decimal_rounding
-/**
- * Decimal adjustment of a number.
- *
- * @param {Number} value The number.
- * @param {Integer} exp The exponent (the 10 logarithm of the adjustment base).
- * @return {Number} The adjusted value.
- */
-function decimalAdjust(value, exp) {
-  // If the exp is undefined or zero...
-  if (typeof exp === 'undefined' || +exp === 0) {
-    return Math.round(value);
-  }
-
-  value = +value;
-  exp = +exp;
-
-  // If the value is not a number or the exp is not an integer...
-  if (
-    value === null ||
-    isNaN(value) ||
-    !(typeof exp === 'number' && exp % 1 === 0)
-  ) {
-    return NaN;
-  }
-
-  // If the value is negative...
-  if (value < 0) {
-    return -decimalAdjust(-value, exp);
-  }
-
-  // Shift
-  value = value.toString().split('e');
-  value = Math.round(+`${value[0]}e${value[1] ? +value[1] - exp : -exp}`);
-  // Shift back
-  value = value.toString().split('e');
-
-  return +`${value[0]}e${value[1] ? +value[1] + exp : exp}`;
-}
-
-export function round(number, namedArgs) {
-  if (namedArgs) {
-    if (namedArgs.decimals) {
-      return decimalAdjust(number[0], -namedArgs.decimals);
-    }
-
-    if (namedArgs.exp) {
-      return decimalAdjust(number[0], namedArgs.exp);
-    }
-  }
-
-  return Math.round(number[0]);
-}
-
-export default helper(round);
diff --git a/ember-math-helpers/src/helpers/round.ts b/ember-math-helpers/src/helpers/round.ts
new file mode 100644
index 00000000..39455878
--- /dev/null
+++ b/ember-math-helpers/src/helpers/round.ts
@@ -0,0 +1,69 @@
+import { helper } from '@ember/component/helper';
+
+export interface RoundSignature {
+  Args: {
+    Named: { decimals?: number; exp?: number };
+    Positional: [number];
+  };
+  Return: number;
+}
+
+// adapted from:
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round#Decimal_rounding
+/**
+ * Decimal adjustment of a number.
+ *
+ * @param value The number.
+ * @param exp The exponent (the 10 logarithm of the adjustment base).
+ * @return The adjusted value.
+ */
+function decimalAdjust(value: number, exp: number): number {
+  // If the exp is undefined or zero...
+  if (typeof exp === 'undefined' || +exp === 0) {
+    return Math.round(value);
+  }
+
+  value = +value;
+  exp = +exp;
+
+  // If the value is not a number or the exp is not an integer...
+  if (
+    value === null ||
+    isNaN(value) ||
+    !(typeof exp === 'number' && exp % 1 === 0)
+  ) {
+    return NaN;
+  }
+
+  // If the value is negative...
+  if (value < 0) {
+    return -decimalAdjust(-value, exp);
+  }
+
+  // Shift
+  let splitValue = value.toString().split('e');
+  value = Math.round(+`${splitValue[0]}e${splitValue[1] ? +splitValue[1] - exp : -exp}`);
+  // Shift back
+  splitValue = value.toString().split('e');
+
+  return +`${splitValue[0]}e${splitValue[1] ? +splitValue[1] + exp : exp}`;
+}
+
+export function round(
+  [number]: [number],
+  namedArgs: RoundSignature['Args']['Named'],
+) {
+  if (namedArgs) {
+    if (namedArgs.decimals) {
+      return decimalAdjust(number, -namedArgs.decimals);
+    }
+
+    if (namedArgs.exp) {
+      return decimalAdjust(number, namedArgs.exp);
+    }
+  }
+
+  return Math.round(number);
+}
+
+export default helper<RoundSignature>(round);
diff --git a/ember-math-helpers/src/helpers/sign.js b/ember-math-helpers/src/helpers/sign.js
deleted file mode 100644
index a5b57bcb..00000000
--- a/ember-math-helpers/src/helpers/sign.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.sign` on the number passed to the helper.
- *
- * ```hbs
- * {{sign a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.sign`
- * @return {number} The sign of the passed number
- */
-export function sign([number]) {
-  return Math.sign(number);
-}
-
-export default helper(sign);
diff --git a/ember-math-helpers/src/helpers/sign.ts b/ember-math-helpers/src/helpers/sign.ts
new file mode 100644
index 00000000..d85862e3
--- /dev/null
+++ b/ember-math-helpers/src/helpers/sign.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface SignSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.sign` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{sign a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.sign`
+ * @return The sign of the passed number
+ */
+export function sign([number]: [number]) {
+  return Math.sign(number);
+}
+
+export default helper<SignSignature>(sign);
diff --git a/ember-math-helpers/src/helpers/sin.js b/ember-math-helpers/src/helpers/sin.js
deleted file mode 100644
index 0bd3880b..00000000
--- a/ember-math-helpers/src/helpers/sin.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.sin` on the number passed to the helper.
- *
- * ```hbs
- * {{sin a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.sin`
- * @return {number} The sin of the passed number
- */
-export function sin([number]) {
-  return Math.sin(number);
-}
-
-export default helper(sin);
diff --git a/ember-math-helpers/src/helpers/sin.ts b/ember-math-helpers/src/helpers/sin.ts
new file mode 100644
index 00000000..bba665a4
--- /dev/null
+++ b/ember-math-helpers/src/helpers/sin.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface SinSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.sin` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{sin a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.sin`
+ * @return The sin of the passed number
+ */
+export function sin([number]: [number]) {
+  return Math.sin(number);
+}
+
+export default helper<SinSignature>(sin);
diff --git a/ember-math-helpers/src/helpers/sqrt.js b/ember-math-helpers/src/helpers/sqrt.js
deleted file mode 100644
index 3921319f..00000000
--- a/ember-math-helpers/src/helpers/sqrt.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.sqrt` on the number passed to the helper.
- *
- * ```hbs
- * {{sqrt a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.sqrt`
- * @return {number} The sqrt of the passed number
- */
-export function sqrt([number]) {
-  return Math.sqrt(number);
-}
-
-export default helper(sqrt);
diff --git a/ember-math-helpers/src/helpers/sqrt.ts b/ember-math-helpers/src/helpers/sqrt.ts
new file mode 100644
index 00000000..a675e722
--- /dev/null
+++ b/ember-math-helpers/src/helpers/sqrt.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface SqrtSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.sqrt` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{sqrt a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.sqrt`
+ * @return The sqrt of the passed number
+ */
+export function sqrt([number]: [number]) {
+  return Math.sqrt(number);
+}
+
+export default helper<SqrtSignature>(sqrt);
diff --git a/ember-math-helpers/src/helpers/sub.js b/ember-math-helpers/src/helpers/sub.js
deleted file mode 100644
index 0975d079..00000000
--- a/ember-math-helpers/src/helpers/sub.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Subtracts two or more numbers
- *
- * ```hbs
- * {{sub a b}}
- * ```
- *
- * @param {number[]} numbers A list of numbers to subtract
- * @return {number} The difference of all the passed numbers
- */
-export function sub(numbers) {
-  return numbers.reduce((a, b) => Number(a) - Number(b));
-}
-
-export default helper(sub);
diff --git a/ember-math-helpers/src/helpers/sub.ts b/ember-math-helpers/src/helpers/sub.ts
new file mode 100644
index 00000000..19a2ad29
--- /dev/null
+++ b/ember-math-helpers/src/helpers/sub.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface SubSignature {
+  Args: {
+    Positional: Array<number>;
+  };
+  Return: number;
+}
+
+/**
+ * Subtracts two or more numbers
+ *
+ * ```hbs
+ * {{sub a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to subtract
+ * @return The difference of all the passed numbers
+ */
+export function sub(numbers: Array<number>) {
+  return numbers.reduce((a, b) => Number(a) - Number(b));
+}
+
+export default helper<SubSignature>(sub);
diff --git a/ember-math-helpers/src/helpers/sum.js b/ember-math-helpers/src/helpers/sum.js
deleted file mode 100644
index ae912876..00000000
--- a/ember-math-helpers/src/helpers/sum.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-import { add } from './add';
-
-/**
- * Alias for {{add}} helper
- *
- * ```hbs
- * {{sum a b}}
- * ```
- *
- * @param {number[]} numbers A list of numbers to sum
- * @return {number} The sum of all the passed numbers
- */
-export function sum(numbers) {
-  return add(numbers);
-}
-
-export default helper(sum);
diff --git a/ember-math-helpers/src/helpers/sum.ts b/ember-math-helpers/src/helpers/sum.ts
new file mode 100644
index 00000000..00e507b0
--- /dev/null
+++ b/ember-math-helpers/src/helpers/sum.ts
@@ -0,0 +1,19 @@
+import { helper } from '@ember/component/helper';
+
+import { add, type AddSignature } from './add.ts';
+
+/**
+ * Alias for {{add}} helper
+ *
+ * ```hbs
+ * {{sum a b}}
+ * ```
+ *
+ * @param numbers A list of numbers to sum
+ * @return The sum of all the passed numbers
+ */
+export function sum(numbers: Array<number>) {
+  return add(numbers);
+}
+
+export default helper<AddSignature>(sum);
diff --git a/ember-math-helpers/src/helpers/tan.js b/ember-math-helpers/src/helpers/tan.js
deleted file mode 100644
index 8dcd30a6..00000000
--- a/ember-math-helpers/src/helpers/tan.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.tan` on the number passed to the helper.
- *
- * ```hbs
- * {{tan a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.tan`
- * @return {number} The tan of the passed number
- */
-export function tan([number]) {
-  return Math.tan(number);
-}
-
-export default helper(tan);
diff --git a/ember-math-helpers/src/helpers/tan.ts b/ember-math-helpers/src/helpers/tan.ts
new file mode 100644
index 00000000..ab547a5d
--- /dev/null
+++ b/ember-math-helpers/src/helpers/tan.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface TanSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.tan` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{tan a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.tan`
+ * @return The tan of the passed number
+ */
+export function tan([number]: [number]) {
+  return Math.tan(number);
+}
+
+export default helper<TanSignature>(tan);
diff --git a/ember-math-helpers/src/helpers/tanh.js b/ember-math-helpers/src/helpers/tanh.js
deleted file mode 100644
index dd7a6016..00000000
--- a/ember-math-helpers/src/helpers/tanh.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.tanh` on the number passed to the helper.
- *
- * ```hbs
- * {{tanh a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.tanh`
- * @return {number} The tanh of the passed number
- */
-export function tanh([number]) {
-  return Math.tanh(number);
-}
-
-export default helper(tanh);
diff --git a/ember-math-helpers/src/helpers/tanh.ts b/ember-math-helpers/src/helpers/tanh.ts
new file mode 100644
index 00000000..1f064923
--- /dev/null
+++ b/ember-math-helpers/src/helpers/tanh.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface TanhSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.tanh` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{tanh a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.tanh`
+ * @return The tanh of the passed number
+ */
+export function tanh([number]: [number]) {
+  return Math.tanh(number);
+}
+
+export default helper<TanhSignature>(tanh);
diff --git a/ember-math-helpers/src/helpers/trunc.js b/ember-math-helpers/src/helpers/trunc.js
deleted file mode 100644
index 838bf28c..00000000
--- a/ember-math-helpers/src/helpers/trunc.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { helper } from '@ember/component/helper';
-
-/**
- * Executes `Math.trunc` on the number passed to the helper.
- *
- * ```hbs
- * {{trunc a}}
- * ```
- *
- * @param {number} number The number to pass to `Math.trunc`
- * @return {number} The trunc of the passed number
- */
-export function trunc([number]) {
-  return Math.trunc(number);
-}
-
-export default helper(trunc);
diff --git a/ember-math-helpers/src/helpers/trunc.ts b/ember-math-helpers/src/helpers/trunc.ts
new file mode 100644
index 00000000..d34aed2b
--- /dev/null
+++ b/ember-math-helpers/src/helpers/trunc.ts
@@ -0,0 +1,24 @@
+import { helper } from '@ember/component/helper';
+
+export interface TruncSignature {
+  Args: {
+    Positional: [number];
+  };
+  Return: number;
+}
+
+/**
+ * Executes `Math.trunc` on the number passed to the helper.
+ *
+ * ```hbs
+ * {{trunc a}}
+ * ```
+ *
+ * @param number The number to pass to `Math.trunc`
+ * @return The trunc of the passed number
+ */
+export function trunc([number]: [number]) {
+  return Math.trunc(number);
+}
+
+export default helper<TruncSignature>(trunc);
diff --git a/ember-math-helpers/src/template-registry.ts b/ember-math-helpers/src/template-registry.ts
new file mode 100644
index 00000000..68716d2a
--- /dev/null
+++ b/ember-math-helpers/src/template-registry.ts
@@ -0,0 +1,87 @@
+import type AbsHelper from './helpers/abs';
+import type AcosHelper from './helpers/acos';
+import type AcoshHelper from './helpers/acosh';
+import type AddHelper from './helpers/add';
+import type AsinHelper from './helpers/asin';
+import type AsinhHelper from './helpers/asinh';
+import type AtanHelper from './helpers/atan';
+import type Atan2Helper from './helpers/atan2';
+import type AtanhHelper from './helpers/atanh';
+import type CbrtHelper from './helpers/cbrt';
+import type CeilHelper from './helpers/ceil';
+import type Clz32Helper from './helpers/clz32';
+import type CosHelper from './helpers/cos';
+import type CoshHelper from './helpers/cosh';
+import type DivHelper from './helpers/div';
+import type ExpHelper from './helpers/exp';
+import type Expm1Helper from './helpers/expm1';
+import type FloorHelper from './helpers/floor';
+import type FroundHelper from './helpers/fround';
+import type GcdHelper from './helpers/gcd';
+import type HypotHelper from './helpers/hypot';
+import type ImulHelper from './helpers/imul';
+import type LcmHelper from './helpers/lcm';
+import type LogEHelper from './helpers/log-e';
+import type Log10Helper from './helpers/log10';
+import type Log1PHelper from './helpers/log1p';
+import type Log2Helper from './helpers/log2';
+import type MaxHelper from './helpers/max';
+import type MinHelper from './helpers/min';
+import type ModHelper from './helpers/mod';
+import type MultHelper from './helpers/mult';
+import type PowHelper from './helpers/pow';
+import type RandomHelper from './helpers/random';
+import type RoundHelper from './helpers/round';
+import type SignHelper from './helpers/sign';
+import type SinHelper from './helpers/sin';
+import type SqrtHelper from './helpers/sqrt';
+import type SubHelper from './helpers/sub';
+import type SumHelper from './helpers/sum';
+import type TanHelper from './helpers/tan';
+import type TanhHelper from './helpers/tanh';
+import type TruncHelper from './helpers/trunc';
+
+export default interface Registry {
+  abs: typeof AbsHelper;
+  acos: typeof AcosHelper;
+  acosh: typeof AcoshHelper;
+  add: typeof AddHelper;
+  asin: typeof AsinHelper;
+  asinh: typeof AsinhHelper;
+  atan: typeof AtanHelper;
+  atan2: typeof Atan2Helper;
+  atanh: typeof AtanhHelper;
+  cbrt: typeof CbrtHelper;
+  ceil: typeof CeilHelper;
+  clz32: typeof Clz32Helper;
+  cos: typeof CosHelper;
+  cosh: typeof CoshHelper;
+  div: typeof DivHelper;
+  exp: typeof ExpHelper;
+  expm1: typeof Expm1Helper;
+  floor: typeof FloorHelper;
+  fround: typeof FroundHelper;
+  gcd: typeof GcdHelper;
+  hypot: typeof HypotHelper;
+  imul: typeof ImulHelper;
+  lcm: typeof LcmHelper;
+  'log-e': typeof LogEHelper;
+  log10: typeof Log10Helper;
+  log1p: typeof Log1PHelper;
+  log2: typeof Log2Helper;
+  max: typeof MaxHelper;
+  min: typeof MinHelper;
+  mod: typeof ModHelper;
+  mult: typeof MultHelper;
+  pow: typeof PowHelper;
+  random: typeof RandomHelper;
+  round: typeof RoundHelper;
+  sign: typeof SignHelper;
+  sin: typeof SinHelper;
+  sqrt: typeof SqrtHelper;
+  sub: typeof SubHelper;
+  sum: typeof SumHelper;
+  tan: typeof TanHelper;
+  tanh: typeof TanhHelper;
+  trunc: typeof TruncHelper;
+}
diff --git a/ember-math-helpers/tsconfig.json b/ember-math-helpers/tsconfig.json
new file mode 100644
index 00000000..9280c948
--- /dev/null
+++ b/ember-math-helpers/tsconfig.json
@@ -0,0 +1,23 @@
+{
+  "extends": "@tsconfig/ember/tsconfig.json",
+  "include": ["src/**/*"],
+  "glint": {
+    "environment": ["ember-loose", "ember-template-imports"]
+  },
+  "compilerOptions": {
+    "allowJs": true,
+    "declarationDir": "declarations",
+
+    /**
+      We don't want to include types dependencies in our compiled output, so tell TypeScript
+      to enforce using `import type` instead of `import` for Types.
+     */
+    "verbatimModuleSyntax": true,
+
+    /**
+      We want our tooling to know how to resolve our custom files so the appropriate plugins
+      can do the proper transformations on those files.
+    */
+    "allowImportingTsExtensions": true
+  }
+}
diff --git a/ember-math-helpers/types/helpers/abs.d.ts b/ember-math-helpers/types/helpers/abs.d.ts
deleted file mode 100644
index 195acb28..00000000
--- a/ember-math-helpers/types/helpers/abs.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface AbsSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type AbsHelper = HelperLike<AbsSignature>;
diff --git a/ember-math-helpers/types/helpers/acos.d.ts b/ember-math-helpers/types/helpers/acos.d.ts
deleted file mode 100644
index 71ee3794..00000000
--- a/ember-math-helpers/types/helpers/acos.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface AcosSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type AcosHelper = HelperLike<AcosSignature>;
diff --git a/ember-math-helpers/types/helpers/acosh.d.ts b/ember-math-helpers/types/helpers/acosh.d.ts
deleted file mode 100644
index b3b0ff51..00000000
--- a/ember-math-helpers/types/helpers/acosh.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface AcoshSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type AcoshHelper = HelperLike<AcoshSignature>;
diff --git a/ember-math-helpers/types/helpers/add.d.ts b/ember-math-helpers/types/helpers/add.d.ts
deleted file mode 100644
index d921fbaa..00000000
--- a/ember-math-helpers/types/helpers/add.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = Array<number>;
-type Return = number;
-
-export interface AddSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type AddHelper = HelperLike<AddSignature>;
diff --git a/ember-math-helpers/types/helpers/asin.d.ts b/ember-math-helpers/types/helpers/asin.d.ts
deleted file mode 100644
index 68588a54..00000000
--- a/ember-math-helpers/types/helpers/asin.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface AsinSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type AsinHelper = HelperLike<AsinSignature>;
diff --git a/ember-math-helpers/types/helpers/asinh.d.ts b/ember-math-helpers/types/helpers/asinh.d.ts
deleted file mode 100644
index b1433672..00000000
--- a/ember-math-helpers/types/helpers/asinh.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface AsinhSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type AsinhHelper = HelperLike<AsinhSignature>;
diff --git a/ember-math-helpers/types/helpers/atan.d.ts b/ember-math-helpers/types/helpers/atan.d.ts
deleted file mode 100644
index 2226e6ec..00000000
--- a/ember-math-helpers/types/helpers/atan.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface AtanSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type AtanHelper = HelperLike<AtanSignature>;
diff --git a/ember-math-helpers/types/helpers/atan2.d.ts b/ember-math-helpers/types/helpers/atan2.d.ts
deleted file mode 100644
index 11b395ee..00000000
--- a/ember-math-helpers/types/helpers/atan2.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number1: number, number2: number];
-type Return = number;
-
-export interface Atan2Signature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type Atan2Helper = HelperLike<Atan2Signature>;
diff --git a/ember-math-helpers/types/helpers/atanh.d.ts b/ember-math-helpers/types/helpers/atanh.d.ts
deleted file mode 100644
index b4e47b5f..00000000
--- a/ember-math-helpers/types/helpers/atanh.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface AtanhSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type AtanhHelper = HelperLike<AtanhSignature>;
diff --git a/ember-math-helpers/types/helpers/cbrt.d.ts b/ember-math-helpers/types/helpers/cbrt.d.ts
deleted file mode 100644
index 3767acb8..00000000
--- a/ember-math-helpers/types/helpers/cbrt.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface CbrtSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type CbrtHelper = HelperLike<CbrtSignature>;
diff --git a/ember-math-helpers/types/helpers/ceil.d.ts b/ember-math-helpers/types/helpers/ceil.d.ts
deleted file mode 100644
index a5c3a7e9..00000000
--- a/ember-math-helpers/types/helpers/ceil.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface CeilSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type CeilHelper = HelperLike<CeilSignature>;
diff --git a/ember-math-helpers/types/helpers/clz32.d.ts b/ember-math-helpers/types/helpers/clz32.d.ts
deleted file mode 100644
index fcfcf6fb..00000000
--- a/ember-math-helpers/types/helpers/clz32.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface Clz32Signature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type Clz32Helper = HelperLike<Clz32Signature>;
diff --git a/ember-math-helpers/types/helpers/cos.d.ts b/ember-math-helpers/types/helpers/cos.d.ts
deleted file mode 100644
index 250bbf38..00000000
--- a/ember-math-helpers/types/helpers/cos.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface CosSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type CosHelper = HelperLike<CosSignature>;
diff --git a/ember-math-helpers/types/helpers/cosh.d.ts b/ember-math-helpers/types/helpers/cosh.d.ts
deleted file mode 100644
index 92717535..00000000
--- a/ember-math-helpers/types/helpers/cosh.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface CoshSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type CoshHelper = HelperLike<CoshSignature>;
diff --git a/ember-math-helpers/types/helpers/div.d.ts b/ember-math-helpers/types/helpers/div.d.ts
deleted file mode 100644
index d9e970c1..00000000
--- a/ember-math-helpers/types/helpers/div.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = Array<number>;
-type Return = number;
-
-export interface DivSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type DivHelper = HelperLike<DivSignature>;
diff --git a/ember-math-helpers/types/helpers/exp.d.ts b/ember-math-helpers/types/helpers/exp.d.ts
deleted file mode 100644
index 2b7473a8..00000000
--- a/ember-math-helpers/types/helpers/exp.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface ExpSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type ExpHelper = HelperLike<ExpSignature>;
diff --git a/ember-math-helpers/types/helpers/expm1.d.ts b/ember-math-helpers/types/helpers/expm1.d.ts
deleted file mode 100644
index e0a02d82..00000000
--- a/ember-math-helpers/types/helpers/expm1.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface Expm1Signature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type Expm1Helper = HelperLike<Expm1Signature>;
diff --git a/ember-math-helpers/types/helpers/floor.d.ts b/ember-math-helpers/types/helpers/floor.d.ts
deleted file mode 100644
index 63c39652..00000000
--- a/ember-math-helpers/types/helpers/floor.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface FloorSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type FloorHelper = HelperLike<FloorSignature>;
diff --git a/ember-math-helpers/types/helpers/fround.d.ts b/ember-math-helpers/types/helpers/fround.d.ts
deleted file mode 100644
index a5d28d4b..00000000
--- a/ember-math-helpers/types/helpers/fround.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface FroundSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type FroundHelper = HelperLike<FroundSignature>;
diff --git a/ember-math-helpers/types/helpers/gcd.d.ts b/ember-math-helpers/types/helpers/gcd.d.ts
deleted file mode 100644
index 660392cb..00000000
--- a/ember-math-helpers/types/helpers/gcd.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number1: number, number2: number];
-type Return = number;
-
-export interface GcdSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type GcdHelper = HelperLike<GcdSignature>;
diff --git a/ember-math-helpers/types/helpers/hypot.d.ts b/ember-math-helpers/types/helpers/hypot.d.ts
deleted file mode 100644
index 8aa5b156..00000000
--- a/ember-math-helpers/types/helpers/hypot.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = Array<number>;
-type Return = number;
-
-export interface HypotSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type HypotHelper = HelperLike<HypotSignature>;
diff --git a/ember-math-helpers/types/helpers/imul.d.ts b/ember-math-helpers/types/helpers/imul.d.ts
deleted file mode 100644
index 98199f1c..00000000
--- a/ember-math-helpers/types/helpers/imul.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number1: number, number2: number];
-type Return = number;
-
-export interface ImulSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type ImulHelper = HelperLike<ImulSignature>;
diff --git a/ember-math-helpers/types/helpers/lcm.d.ts b/ember-math-helpers/types/helpers/lcm.d.ts
deleted file mode 100644
index 6a6110f2..00000000
--- a/ember-math-helpers/types/helpers/lcm.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number1: number, number2: number];
-type Return = number;
-
-export interface LcmSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type LcmHelper = HelperLike<LcmSignature>;
diff --git a/ember-math-helpers/types/helpers/log-e.d.ts b/ember-math-helpers/types/helpers/log-e.d.ts
deleted file mode 100644
index 06c29a7a..00000000
--- a/ember-math-helpers/types/helpers/log-e.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface LogESignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type LogEHelper = HelperLike<LogESignature>;
diff --git a/ember-math-helpers/types/helpers/log10.d.ts b/ember-math-helpers/types/helpers/log10.d.ts
deleted file mode 100644
index be14c7ae..00000000
--- a/ember-math-helpers/types/helpers/log10.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface Log10Signature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type Log10Helper = HelperLike<Log10Signature>;
diff --git a/ember-math-helpers/types/helpers/log1p.d.ts b/ember-math-helpers/types/helpers/log1p.d.ts
deleted file mode 100644
index 643f08a8..00000000
--- a/ember-math-helpers/types/helpers/log1p.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface Log1PSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type Log1PHelper = HelperLike<Log1PSignature>;
diff --git a/ember-math-helpers/types/helpers/log2.d.ts b/ember-math-helpers/types/helpers/log2.d.ts
deleted file mode 100644
index 43369ba7..00000000
--- a/ember-math-helpers/types/helpers/log2.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface Log2Signature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type Log2Helper = HelperLike<Log2Signature>;
diff --git a/ember-math-helpers/types/helpers/max.d.ts b/ember-math-helpers/types/helpers/max.d.ts
deleted file mode 100644
index e473094f..00000000
--- a/ember-math-helpers/types/helpers/max.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = Array<number>;
-type Return = number;
-
-export interface MaxSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type MaxHelper = HelperLike<MaxSignature>;
diff --git a/ember-math-helpers/types/helpers/min.d.ts b/ember-math-helpers/types/helpers/min.d.ts
deleted file mode 100644
index 10ccefec..00000000
--- a/ember-math-helpers/types/helpers/min.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = Array<number>;
-type Return = number;
-
-export interface MinSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type MinHelper = HelperLike<MinSignature>;
diff --git a/ember-math-helpers/types/helpers/mod.d.ts b/ember-math-helpers/types/helpers/mod.d.ts
deleted file mode 100644
index a304f637..00000000
--- a/ember-math-helpers/types/helpers/mod.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = Array<number>;
-type Return = number;
-
-export interface ModSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type ModHelper = HelperLike<ModSignature>;
diff --git a/ember-math-helpers/types/helpers/mult.d.ts b/ember-math-helpers/types/helpers/mult.d.ts
deleted file mode 100644
index 5bdd1da7..00000000
--- a/ember-math-helpers/types/helpers/mult.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = Array<number>;
-type Return = number;
-
-export interface MultSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type MultHelper = HelperLike<MultSignature>;
diff --git a/ember-math-helpers/types/helpers/pow.d.ts b/ember-math-helpers/types/helpers/pow.d.ts
deleted file mode 100644
index 9c0cb11a..00000000
--- a/ember-math-helpers/types/helpers/pow.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = Array<number>;
-type Return = number;
-
-export interface PowSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type PowHelper = HelperLike<PowSignature>;
diff --git a/ember-math-helpers/types/helpers/random.d.ts b/ember-math-helpers/types/helpers/random.d.ts
deleted file mode 100644
index f411b524..00000000
--- a/ember-math-helpers/types/helpers/random.d.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [upperBound: number, lowerBound: number];
-interface Named {
-  decimals?: number;
-}
-type Return = number;
-
-export interface RandomSignature {
-  Positional: Positional;
-  Named: Named;
-  Return: Return;
-}
-
-export type RandomHelper = HelperLike<RandomSignature>;
diff --git a/ember-math-helpers/types/helpers/round.d.ts b/ember-math-helpers/types/helpers/round.d.ts
deleted file mode 100644
index ef692b09..00000000
--- a/ember-math-helpers/types/helpers/round.d.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-interface Named {
-  decimals?: number;
-  exp?: number;
-}
-type Return = number;
-
-export interface RoundSignature {
-  Positional: Positional;
-  Named: Named;
-  Return: Return;
-}
-
-export type RoundHelper = HelperLike<RoundSignature>;
diff --git a/ember-math-helpers/types/helpers/sign.d.ts b/ember-math-helpers/types/helpers/sign.d.ts
deleted file mode 100644
index 0885653a..00000000
--- a/ember-math-helpers/types/helpers/sign.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface SignSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type SignHelper = HelperLike<SignSignature>;
diff --git a/ember-math-helpers/types/helpers/sin.d.ts b/ember-math-helpers/types/helpers/sin.d.ts
deleted file mode 100644
index 6f151b8d..00000000
--- a/ember-math-helpers/types/helpers/sin.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface SinSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type SinHelper = HelperLike<SinSignature>;
diff --git a/ember-math-helpers/types/helpers/sqrt.d.ts b/ember-math-helpers/types/helpers/sqrt.d.ts
deleted file mode 100644
index 8ae85bb3..00000000
--- a/ember-math-helpers/types/helpers/sqrt.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface SqrtSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type SqrtHelper = HelperLike<SqrtSignature>;
diff --git a/ember-math-helpers/types/helpers/sub.d.ts b/ember-math-helpers/types/helpers/sub.d.ts
deleted file mode 100644
index 00460824..00000000
--- a/ember-math-helpers/types/helpers/sub.d.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = Array<number>;
-type Return = number;
-
-export interface SubSignature {
-  Args: {
-    Positional: number[];
-  }
-  Return: number;
-}
-
-export type SubHelper = HelperLike<SubSignature>;
diff --git a/ember-math-helpers/types/helpers/sum.d.ts b/ember-math-helpers/types/helpers/sum.d.ts
deleted file mode 100644
index f0285423..00000000
--- a/ember-math-helpers/types/helpers/sum.d.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = Array<number>;
-type Return = number;
-
-export interface SumSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type SumHelper = HelperLike<SumSignature>;
-
diff --git a/ember-math-helpers/types/helpers/tan.d.ts b/ember-math-helpers/types/helpers/tan.d.ts
deleted file mode 100644
index a6808394..00000000
--- a/ember-math-helpers/types/helpers/tan.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface TanSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type TanHelper = HelperLike<TanSignature>;
diff --git a/ember-math-helpers/types/helpers/tanh.d.ts b/ember-math-helpers/types/helpers/tanh.d.ts
deleted file mode 100644
index 38674b1c..00000000
--- a/ember-math-helpers/types/helpers/tanh.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface TanhSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type TanhHelper = HelperLike<TanhSignature>;
diff --git a/ember-math-helpers/types/helpers/trunc.d.ts b/ember-math-helpers/types/helpers/trunc.d.ts
deleted file mode 100644
index 7896851f..00000000
--- a/ember-math-helpers/types/helpers/trunc.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { HelperLike } from '@glint/template';
-
-type Positional = [number];
-type Return = number;
-
-export interface TruncSignature {
-  Positional: Positional;
-  Return: Return;
-}
-
-export type TruncHelper = HelperLike<TruncSignature>;
diff --git a/ember-math-helpers/types/template-registry.d.ts b/ember-math-helpers/types/template-registry.d.ts
deleted file mode 100644
index 37f167f8..00000000
--- a/ember-math-helpers/types/template-registry.d.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-import type { AbsHelper } from './helpers/abs';
-import type { AcosHelper } from './helpers/acos';
-import type { AcoshHelper } from './helpers/acosh';
-import type { AddHelper } from './helpers/add';
-import type { AsinHelper } from './helpers/asin';
-import type { AsinhHelper } from './helpers/asinh';
-import type { AtanHelper } from './helpers/atan';
-import type { Atan2Helper } from './helpers/atan2';
-import type { AtanhHelper } from './helpers/atanh';
-import type { CbrtHelper } from './helpers/cbrt';
-import type { CeilHelper } from './helpers/ceil';
-import type { Clz32Helper } from './helpers/clz32';
-import type { CosHelper } from './helpers/cos';
-import type { CoshHelper } from './helpers/cosh';
-import type { DivHelper } from './helpers/div';
-import type { ExpHelper } from './helpers/exp';
-import type { Expm1Helper } from './helpers/expm1';
-import type { FloorHelper } from './helpers/floor';
-import type { FroundHelper } from './helpers/fround';
-import type { GcdHelper } from './helpers/gcd';
-import type { HypotHelper } from './helpers/hypot';
-import type { ImulHelper } from './helpers/imul';
-import type { LcmHelper } from './helpers/lcm';
-import type { LogEHelper } from './helpers/log-e';
-import type { Log10Helper } from './helpers/log10';
-import type { Log1PHelper } from './helpers/log1p';
-import type { Log2Helper } from './helpers/log2';
-import type { MaxHelper } from './helpers/max';
-import type { MinHelper } from './helpers/min';
-import type { ModHelper } from './helpers/mod';
-import type { MultHelper } from './helpers/mult';
-import type { PowHelper } from './helpers/pow';
-import type { RandomHelper } from './helpers/random';
-import type { RoundHelper } from './helpers/round';
-import type { SignHelper } from './helpers/sign';
-import type { SinHelper } from './helpers/sin';
-import type { SqrtHelper } from './helpers/sqrt';
-import type { SubHelper } from './helpers/sub';
-import type { SumHelper } from './helpers/sum';
-import type { TanHelper } from './helpers/tan';
-import type { TanhHelper } from './helpers/tanh';
-import type { TruncHelper } from './helpers/trunc';
-
-export default class EmberMathHelpersRegistry {
-  abs: AbsHelper;
-  acos: AcosHelper;
-  acosh: AcoshHelper;
-  add: AddHelper;
-  asin: AsinHelper;
-  asinh: AsinhHelper;
-  atan: AtanHelper;
-  atan2: Atan2Helper;
-  atanh: AtanhHelper;
-  cbrt: CbrtHelper;
-  ceil: CeilHelper;
-  clz32: Clz32Helper;
-  cos: CosHelper;
-  cosh: CoshHelper;
-  div: DivHelper;
-  exp: ExpHelper;
-  expm1: Expm1Helper;
-  floor: FloorHelper;
-  fround: FroundHelper;
-  gcd: GcdHelper;
-  hypot: HypotHelper;
-  imul: ImulHelper;
-  lcm: LcmHelper;
-  'log-e': LogEHelper;
-  log10: Log10Helper;
-  log1p: Log1PHelper;
-  log2: Log2Helper;
-  max: MaxHelper;
-  min: MinHelper;
-  mod: ModHelper;
-  mult: MultHelper;
-  pow: PowHelper;
-  random: RandomHelper;
-  round: RoundHelper;
-  sign: SignHelper;
-  sin: SinHelper;
-  sqrt: SqrtHelper;
-  sub: SubHelper;
-  sum: SumHelper;
-  tan: TanHelper;
-  tanh: TanhHelper;
-  trunc: TruncHelper;
-}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ace78859..ea916509 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,9 +1,5 @@
 lockfileVersion: '6.0'
 
-settings:
-  autoInstallPeers: true
-  excludeLinksFromLockfile: false
-
 patchedDependencies:
   ember-dynamic-render-template@0.0.6:
     hash: ohb62mtauibtdu6v7m3fobc5ga
@@ -25,7 +21,7 @@ importers:
     devDependencies:
       '@babel/core':
         specifier: 7.23.2
-        version: 7.23.2
+        version: 7.23.2(supports-color@8.1.1)
       '@babel/eslint-parser':
         specifier: ^7.22.15
         version: 7.22.15(@babel/core@7.23.2)(eslint@8.52.0)
@@ -73,7 +69,7 @@ importers:
         version: 6.0.1(postcss@8.4.31)
       ember-auto-import:
         specifier: ^2.6.3
-        version: 2.6.3(webpack@5.89.0)
+        version: 2.6.3(@glint/template@1.2.1)(webpack@5.89.0)
       ember-cli:
         specifier: ~5.2.1
         version: 5.2.1
@@ -208,32 +204,116 @@ importers:
         version: 1.8.6
       ember-source:
         specifier: ^4.0.0 || ^5.0.0
-        version: 5.2.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(rsvp@4.8.5)(webpack@5.89.0)
+        version: 5.2.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(@glint/template@1.2.1)(rsvp@4.8.5)(webpack@5.89.0)
     devDependencies:
       '@babel/core':
-        specifier: 7.23.2
-        version: 7.23.2
+        specifier: ^7.23.2
+        version: 7.23.2(supports-color@8.1.1)
       '@babel/plugin-proposal-class-properties':
-        specifier: 7.18.6
+        specifier: ^7.16.7
         version: 7.18.6(@babel/core@7.23.2)
       '@babel/plugin-proposal-decorators':
-        specifier: 7.23.2
+        specifier: ^7.20.13
         version: 7.23.2(@babel/core@7.23.2)
-      '@babel/plugin-syntax-decorators':
-        specifier: 7.22.10
-        version: 7.22.10(@babel/core@7.23.2)
+      '@babel/plugin-transform-class-static-block':
+        specifier: ^7.20.0
+        version: 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-typescript':
+        specifier: ^7.22.15
+        version: 7.22.15(@babel/core@7.23.2)
+      '@babel/runtime':
+        specifier: ^7.17.0
+        version: 7.22.5
       '@embroider/addon-dev':
         specifier: ^4.1.1
         version: 4.1.1(@glint/template@1.2.1)(rollup@4.2.0)
+      '@glint/core':
+        specifier: ^1.2.0
+        version: 1.2.1(typescript@5.2.2)
+      '@glint/environment-ember-loose':
+        specifier: ^1.2.0
+        version: 1.2.1(@glimmer/component@1.1.2)(@glint/template@1.2.1)(@types/ember__array@4.0.4)(@types/ember__component@4.0.14)(@types/ember__controller@4.0.5)(@types/ember__object@4.0.6)(@types/ember__routing@4.0.13)
+      '@glint/environment-ember-template-imports':
+        specifier: ^1.2.0
+        version: 1.2.0(@glint/environment-ember-loose@1.2.1)(@glint/template@1.2.1)(@types/ember__component@4.0.14)(@types/ember__helper@4.0.3)(@types/ember__modifier@4.0.6)(@types/ember__routing@4.0.13)(ember-template-imports@3.4.2)
       '@glint/template':
-        specifier: ^1.2.1
+        specifier: ^1.2.0
         version: 1.2.1
       '@nullvoxpopuli/eslint-configs':
         specifier: 3.2.2
-        version: 3.2.2(@babel/core@7.23.2)(eslint-config-prettier@9.0.0)(eslint-plugin-ember@11.11.1)(eslint@8.52.0)(prettier@3.0.3)
+        version: 3.2.2(@babel/core@7.23.2)(@typescript-eslint/eslint-plugin@6.7.2)(@typescript-eslint/parser@6.7.2)(eslint-config-prettier@9.0.0)(eslint-plugin-ember@11.11.1)(eslint@8.52.0)(prettier@3.0.3)
       '@rollup/plugin-babel':
         specifier: 6.0.4
         version: 6.0.4(@babel/core@7.23.2)(rollup@4.2.0)
+      '@tsconfig/ember':
+        specifier: ^2.0.0
+        version: 2.0.0
+      '@types/ember':
+        specifier: ^4.0.4
+        version: 4.0.4(@babel/core@7.23.2)
+      '@types/ember__application':
+        specifier: ^4.0.6
+        version: 4.0.6(@babel/core@7.23.2)
+      '@types/ember__array':
+        specifier: ^4.0.4
+        version: 4.0.4(@babel/core@7.23.2)
+      '@types/ember__component':
+        specifier: ^4.0.14
+        version: 4.0.14(@babel/core@7.23.2)
+      '@types/ember__controller':
+        specifier: ^4.0.5
+        version: 4.0.5(@babel/core@7.23.2)
+      '@types/ember__debug':
+        specifier: ^4.0.4
+        version: 4.0.4(@babel/core@7.23.2)
+      '@types/ember__engine':
+        specifier: ^4.0.5
+        version: 4.0.5(@babel/core@7.23.2)
+      '@types/ember__error':
+        specifier: ^4.0.3
+        version: 4.0.3
+      '@types/ember__helper':
+        specifier: ^4.0.3
+        version: 4.0.3(@babel/core@7.23.2)
+      '@types/ember__modifier':
+        specifier: ^4.0.6
+        version: 4.0.6(@babel/core@7.23.2)
+      '@types/ember__object':
+        specifier: ^4.0.6
+        version: 4.0.6(@babel/core@7.23.2)
+      '@types/ember__owner':
+        specifier: ^4.0.4
+        version: 4.0.4
+      '@types/ember__polyfills':
+        specifier: ^4.0.2
+        version: 4.0.2
+      '@types/ember__routing':
+        specifier: ^4.0.13
+        version: 4.0.13(@babel/core@7.23.2)
+      '@types/ember__runloop':
+        specifier: ^4.0.3
+        version: 4.0.3(@babel/core@7.23.2)
+      '@types/ember__service':
+        specifier: ^4.0.3
+        version: 4.0.3(@babel/core@7.23.2)
+      '@types/ember__string':
+        specifier: ^3.16.3
+        version: 3.16.3
+      '@types/ember__template':
+        specifier: ^4.0.2
+        version: 4.0.2
+      '@types/ember__test':
+        specifier: ^4.0.2
+        version: 4.0.2(@babel/core@7.23.2)
+      '@types/ember__utils':
+        specifier: ^4.0.3
+        version: 4.0.3(@babel/core@7.23.2)
+      '@typescript-eslint/eslint-plugin':
+        specifier: ^6.7.2
+        version: 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.52.0)(typescript@5.2.2)
+      '@typescript-eslint/parser':
+        specifier: ^6.7.2
+        version: 6.7.2(eslint@8.52.0)(typescript@5.2.2)
       concurrently:
         specifier: 8.2.2
         version: 8.2.2
@@ -251,13 +331,13 @@ importers:
         version: 11.11.1(eslint@8.52.0)
       eslint-plugin-import:
         specifier: 2.29.0
-        version: 2.29.0(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0)
+        version: 2.29.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0)
       eslint-plugin-json:
         specifier: 3.1.0
         version: 3.1.0
-      eslint-plugin-node:
-        specifier: 11.1.0
-        version: 11.1.0(eslint@8.52.0)
+      eslint-plugin-n:
+        specifier: ^16.0.0
+        version: 16.2.0(eslint@8.52.0)
       eslint-plugin-prettier:
         specifier: ^5.0.1
         version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.52.0)(prettier@3.0.3)
@@ -279,7 +359,7 @@ importers:
     devDependencies:
       '@babel/core':
         specifier: 7.23.2
-        version: 7.23.2
+        version: 7.23.2(supports-color@8.1.1)
       '@babel/eslint-parser':
         specifier: ^7.22.15
         version: 7.22.15(@babel/core@7.23.2)(eslint@8.52.0)
@@ -327,7 +407,7 @@ importers:
         version: 8.2.2
       ember-auto-import:
         specifier: ^2.6.3
-        version: 2.6.3(webpack@5.89.0)
+        version: 2.6.3(@glint/template@1.2.1)(webpack@5.89.0)
       ember-cli:
         specifier: ~5.2.1
         version: 5.2.1
@@ -473,28 +553,6 @@ packages:
     resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==}
     engines: {node: '>=6.9.0'}
 
-  /@babel/core@7.23.2:
-    resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@ampproject/remapping': 2.2.0
-      '@babel/code-frame': 7.22.13
-      '@babel/generator': 7.23.0
-      '@babel/helper-compilation-targets': 7.22.15
-      '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
-      '@babel/helpers': 7.23.2
-      '@babel/parser': 7.23.0
-      '@babel/template': 7.22.15
-      '@babel/traverse': 7.23.2
-      '@babel/types': 7.23.0
-      convert-source-map: 2.0.0
-      debug: 4.3.4(supports-color@9.4.0)
-      gensync: 1.0.0-beta.2
-      json5: 2.2.3
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
   /@babel/core@7.23.2(supports-color@8.1.1):
     resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==}
     engines: {node: '>=6.9.0'}
@@ -524,7 +582,7 @@ packages:
       '@babel/core': ^7.11.0
       eslint: ^7.5.0 || ^8.0.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
       eslint: 8.52.0
       eslint-visitor-keys: 2.1.0
@@ -570,30 +628,13 @@ packages:
       lru-cache: 5.1.1
       semver: 6.3.1
 
-  /@babel/helper-create-class-features-plugin@7.22.10(@babel/core@7.23.2):
-    resolution: {integrity: sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.23.2
-      '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-function-name': 7.23.0
-      '@babel/helper-member-expression-to-functions': 7.22.15
-      '@babel/helper-optimise-call-expression': 7.22.5
-      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
-      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-      '@babel/helper-split-export-declaration': 7.22.6
-      semver: 6.3.1
-
   /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.2):
     resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-annotate-as-pure': 7.22.5
       '@babel/helper-environment-visitor': 7.22.20
       '@babel/helper-function-name': 7.23.0
@@ -610,7 +651,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-annotate-as-pure': 7.22.5
       regexpu-core: 5.2.2
 
@@ -619,7 +660,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.4.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-compilation-targets': 7.22.15
       '@babel/helper-plugin-utils': 7.22.5
       debug: 4.3.4(supports-color@9.4.0)
@@ -677,7 +718,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-environment-visitor': 7.22.20
       '@babel/helper-module-imports': 7.22.15
       '@babel/helper-simple-access': 7.22.5
@@ -700,7 +741,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-annotate-as-pure': 7.22.5
       '@babel/helper-environment-visitor': 7.22.20
       '@babel/helper-wrap-function': 7.20.5
@@ -714,7 +755,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-environment-visitor': 7.22.20
       '@babel/helper-member-expression-to-functions': 7.22.15
       '@babel/helper-optimise-call-expression': 7.22.5
@@ -755,17 +796,7 @@ packages:
     dependencies:
       '@babel/helper-function-name': 7.23.0
       '@babel/template': 7.22.15
-      '@babel/traverse': 7.23.2
-      '@babel/types': 7.23.0
-    transitivePeerDependencies:
-      - supports-color
-
-  /@babel/helpers@7.23.2:
-    resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/template': 7.22.15
-      '@babel/traverse': 7.23.2
+      '@babel/traverse': 7.23.2(supports-color@8.1.1)
       '@babel/types': 7.23.0
     transitivePeerDependencies:
       - supports-color
@@ -801,7 +832,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.23.2):
@@ -810,7 +841,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.13.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
       '@babel/plugin-proposal-optional-chaining': 7.20.7(@babel/core@7.23.2)
@@ -822,7 +853,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-environment-visitor': 7.22.20
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.23.2)
@@ -837,8 +868,8 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
-      '@babel/helper-create-class-features-plugin': 7.22.10(@babel/core@7.23.2)
+      '@babel/core': 7.23.2(supports-color@8.1.1)
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-proposal-class-static-block@7.20.7(@babel/core@7.23.2):
@@ -848,7 +879,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.12.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2)
@@ -859,7 +890,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
@@ -873,7 +904,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2)
 
@@ -884,7 +915,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2)
 
@@ -895,7 +926,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2)
 
@@ -906,7 +937,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2)
 
@@ -917,7 +948,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2)
 
@@ -928,7 +959,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2)
 
@@ -940,7 +971,7 @@ packages:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/compat-data': 7.22.9
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-compilation-targets': 7.22.15
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2)
@@ -953,7 +984,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2)
 
@@ -964,7 +995,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
       '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2)
@@ -976,7 +1007,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
 
@@ -987,7 +1018,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-annotate-as-pure': 7.22.5
       '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
@@ -1000,7 +1031,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
 
@@ -1009,7 +1040,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.2):
@@ -1017,7 +1048,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.2):
@@ -1026,7 +1057,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-decorators@7.22.10(@babel/core@7.23.2):
@@ -1035,7 +1066,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.2):
@@ -1043,7 +1074,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.2):
@@ -1051,7 +1082,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.23.2):
@@ -1060,7 +1091,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.2):
@@ -1068,7 +1099,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.2):
@@ -1076,7 +1107,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.2):
@@ -1084,7 +1115,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.2):
@@ -1092,7 +1123,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.2):
@@ -1100,7 +1131,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.2):
@@ -1108,7 +1139,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.2):
@@ -1116,7 +1147,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.2):
@@ -1125,7 +1156,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.2):
@@ -1134,16 +1165,16 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
-  /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.23.2):
-    resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==}
+  /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.23.2):
@@ -1152,7 +1183,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.23.2):
@@ -1161,7 +1192,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-module-imports': 7.22.15
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.23.2)
@@ -1174,7 +1205,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.23.2):
@@ -1183,7 +1214,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.23.2):
@@ -1192,7 +1223,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.12.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2)
@@ -1204,7 +1235,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-annotate-as-pure': 7.22.5
       '@babel/helper-compilation-targets': 7.22.15
       '@babel/helper-environment-visitor': 7.22.20
@@ -1221,7 +1252,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/template': 7.22.15
 
@@ -1231,7 +1262,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.23.2):
@@ -1240,7 +1271,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
 
@@ -1250,7 +1281,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.23.2):
@@ -1259,7 +1290,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9
       '@babel/helper-plugin-utils': 7.22.5
 
@@ -1269,7 +1300,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.23.2):
@@ -1278,7 +1309,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-compilation-targets': 7.22.15
       '@babel/helper-function-name': 7.23.0
       '@babel/helper-plugin-utils': 7.22.5
@@ -1289,7 +1320,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.23.2):
@@ -1298,7 +1329,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.23.2):
@@ -1307,17 +1338,17 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
 
-  /@babel/plugin-transform-modules-commonjs@7.20.11(@babel/core@7.23.2):
-    resolution: {integrity: sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==}
+  /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-simple-access': 7.22.5
@@ -1328,7 +1359,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-hoist-variables': 7.22.5
       '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
@@ -1340,7 +1371,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
 
@@ -1350,7 +1381,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
 
@@ -1360,7 +1391,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.23.2):
@@ -1369,7 +1400,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
 
@@ -1379,7 +1410,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.23.2):
@@ -1388,7 +1419,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.23.2):
@@ -1397,7 +1428,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       regenerator-transform: 0.15.1
 
@@ -1407,7 +1438,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-runtime@7.19.6(@babel/core@7.23.2):
@@ -1416,7 +1447,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-module-imports': 7.22.15
       '@babel/helper-plugin-utils': 7.22.5
       babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.23.2)
@@ -1432,7 +1463,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-spread@7.20.7(@babel/core@7.23.2):
@@ -1441,7 +1472,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
 
@@ -1451,7 +1482,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.23.2):
@@ -1460,7 +1491,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.23.2):
@@ -1469,28 +1500,29 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
-  /@babel/plugin-transform-typescript@7.20.13(@babel/core@7.23.2):
-    resolution: {integrity: sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==}
+  /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
+      '@babel/helper-annotate-as-pure': 7.22.5
       '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.23.2)
+      '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2)
 
   /@babel/plugin-transform-typescript@7.4.5(@babel/core@7.23.2):
     resolution: {integrity: sha512-RPB/YeGr4ZrFKNwfuQRlMf2lxoCUaU01MTw39/OFE/RiL8HDjtn68BwEPft1P7JN4akyEmjGWAMNldOV7o9V2g==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.23.2)
+      '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2)
     dev: true
 
   /@babel/plugin-transform-typescript@7.5.5(@babel/core@7.23.2):
@@ -1498,10 +1530,10 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.23.2)
+      '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2)
 
   /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.23.2):
     resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==}
@@ -1509,7 +1541,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
 
   /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.23.2):
@@ -1518,7 +1550,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-create-regexp-features-plugin': 7.20.5(@babel/core@7.23.2)
       '@babel/helper-plugin-utils': 7.22.5
 
@@ -1536,7 +1568,7 @@ packages:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/compat-data': 7.22.9
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-compilation-targets': 7.22.15
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/helper-validator-option': 7.22.15
@@ -1587,7 +1619,7 @@ packages:
       '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.23.2)
       '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.23.2)
       '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.23.2)
-      '@babel/plugin-transform-modules-commonjs': 7.20.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2)
       '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.23.2)
       '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.23.2)
       '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.23.2)
@@ -1619,7 +1651,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-plugin-utils': 7.22.5
       '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.23.2)
       '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.23.2)
@@ -1663,23 +1695,6 @@ packages:
       - supports-color
     dev: true
 
-  /@babel/traverse@7.23.2:
-    resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/code-frame': 7.22.13
-      '@babel/generator': 7.23.0
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-function-name': 7.23.0
-      '@babel/helper-hoist-variables': 7.22.5
-      '@babel/helper-split-export-declaration': 7.22.6
-      '@babel/parser': 7.23.0
-      '@babel/types': 7.23.0
-      debug: 4.3.4(supports-color@9.4.0)
-      globals: 11.12.0
-    transitivePeerDependencies:
-      - supports-color
-
   /@babel/traverse@7.23.2(supports-color@8.1.1):
     resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
     engines: {node: '>=6.9.0'}
@@ -1860,7 +1875,7 @@ packages:
       '@simple-dom/interface': 1.4.0
       broccoli-debug: 0.6.5
       broccoli-funnel: 3.0.8
-      ember-auto-import: 2.6.3(webpack@5.89.0)
+      ember-auto-import: 2.6.3(@glint/template@1.2.1)(webpack@5.89.0)
       ember-cli-babel: 7.26.11
       ember-cli-htmlbars: 6.3.0
       ember-source: 5.4.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(rsvp@4.8.5)(webpack@5.89.0)
@@ -1937,10 +1952,10 @@ packages:
       '@embroider/core': 0.47.2
     dependencies:
       '@babel/code-frame': 7.22.13
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2)
       '@babel/preset-env': 7.20.2(@babel/core@7.23.2)
-      '@babel/traverse': 7.23.2
+      '@babel/traverse': 7.23.2(supports-color@8.1.1)
       '@embroider/core': 0.47.2
       '@embroider/macros': 0.47.2
       '@embroider/shared-internals': 0.47.2
@@ -1963,7 +1978,7 @@ packages:
       fs-extra: 9.1.0
       fs-tree-diff: 2.0.1
       heimdalljs: 0.2.6
-      jsdom: 16.7.0
+      jsdom: 16.7.0(supports-color@8.1.1)
       lodash: 4.17.21
       pkg-up: 3.1.0
       resolve: 1.22.4
@@ -1989,7 +2004,7 @@ packages:
       '@embroider/core': ^3.3.0
     dependencies:
       '@babel/code-frame': 7.22.13
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2)
       '@babel/plugin-transform-runtime': 7.19.6(@babel/core@7.23.2)
       '@babel/preset-env': 7.20.2(@babel/core@7.23.2)
@@ -2019,7 +2034,7 @@ packages:
       fast-sourcemap-concat: 1.4.0
       fs-extra: 9.1.0
       fs-tree-diff: 2.0.1
-      jsdom: 16.7.0
+      jsdom: 16.7.0(supports-color@8.1.1)
       lodash: 4.17.21
       pkg-up: 3.1.0
       resolve: 1.22.4
@@ -2042,12 +2057,12 @@ packages:
     resolution: {integrity: sha512-93zjU1uovLFkokSWwygUZEC21lHs4pNSyTYaVqp0o0I7f6Gzh+grTjkCsaYCUjnHOIORGUb7LVX2clBnOmwTLg==}
     engines: {node: 12.* || 14.* || >= 16}
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/parser': 7.23.0
       '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2)
       '@babel/plugin-transform-runtime': 7.19.6(@babel/core@7.23.2)
       '@babel/runtime': 7.22.5
-      '@babel/traverse': 7.23.2
+      '@babel/traverse': 7.23.2(supports-color@8.1.1)
       '@embroider/macros': 0.47.2
       '@embroider/shared-internals': 0.47.2
       assert-never: 1.2.1
@@ -2065,7 +2080,7 @@ packages:
       fs-tree-diff: 2.0.1
       handlebars: 4.7.7
       js-string-escape: 1.0.1
-      jsdom: 16.7.0
+      jsdom: 16.7.0(supports-color@8.1.1)
       lodash: 4.17.21
       resolve: 1.22.4
       resolve-package-path: 4.0.3
@@ -2084,11 +2099,11 @@ packages:
     resolution: {integrity: sha512-QkOLFB3DUuDg6DU7qNAKFNJUyzgmjWNiRLcyrhThYgWeN5h8ilatG3sl5atBN6Jh3wCIJmhjXagafkA82a0abQ==}
     engines: {node: 12.* || 14.* || >= 16}
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/parser': 7.23.0
-      '@babel/traverse': 7.23.0
+      '@babel/traverse': 7.23.2(supports-color@8.1.1)
       '@embroider/macros': 1.13.2(@glint/template@1.2.1)
-      '@embroider/shared-internals': 2.5.0
+      '@embroider/shared-internals': 2.5.0(supports-color@8.1.1)
       assert-never: 1.2.1
       babel-plugin-ember-template-compilation: 2.2.0
       broccoli-node-api: 1.7.0
@@ -2102,7 +2117,7 @@ packages:
       fs-tree-diff: 2.0.1
       handlebars: 4.7.7
       js-string-escape: 1.0.1
-      jsdom: 16.7.0
+      jsdom: 16.7.0(supports-color@8.1.1)
       lodash: 4.17.21
       resolve: 1.22.4
       resolve-package-path: 4.0.3
@@ -2172,7 +2187,7 @@ packages:
       '@glint/template':
         optional: true
     dependencies:
-      '@embroider/shared-internals': 2.5.0
+      '@embroider/shared-internals': 2.5.0(supports-color@8.1.1)
       '@glint/template': 1.2.1
       assert-never: 1.2.1
       babel-import-util: 2.0.0
@@ -2213,22 +2228,6 @@ packages:
     transitivePeerDependencies:
       - supports-color
 
-  /@embroider/shared-internals@2.5.0:
-    resolution: {integrity: sha512-7qzrb7GVIyNqeY0umxoeIvjDC+ay1b+wb2yCVuYTUYrFfLAkLEy9FNI3iWCi3RdQ9OFjgcAxAnwsAiPIMZZ3pQ==}
-    engines: {node: 12.* || 14.* || >= 16}
-    dependencies:
-      babel-import-util: 2.0.0
-      debug: 4.3.4(supports-color@9.4.0)
-      ember-rfc176-data: 0.3.18
-      fs-extra: 9.1.0
-      js-string-escape: 1.0.1
-      lodash: 4.17.21
-      resolve-package-path: 4.0.3
-      semver: 7.5.4
-      typescript-memoize: 1.1.1
-    transitivePeerDependencies:
-      - supports-color
-
   /@embroider/shared-internals@2.5.0(supports-color@8.1.1):
     resolution: {integrity: sha512-7qzrb7GVIyNqeY0umxoeIvjDC+ay1b+wb2yCVuYTUYrFfLAkLEy9FNI3iWCi3RdQ9OFjgcAxAnwsAiPIMZZ3pQ==}
     engines: {node: 12.* || 14.* || >= 16}
@@ -2244,7 +2243,6 @@ packages:
       typescript-memoize: 1.1.1
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
   /@embroider/test-setup@3.0.2(@embroider/compat@3.2.3)(@embroider/core@3.3.0)(@embroider/webpack@3.2.0):
     resolution: {integrity: sha512-cq/xp06CAB8rAGnObeJux7qALnAX2MatMVLjWyGDr3ogS5lHTNXZVCv4ltTM3pJ8EsZWpPM32dtUZqSJFkGibQ==}
@@ -2769,6 +2767,92 @@ packages:
       '@glimmer/interfaces': 0.84.3
       '@glimmer/util': 0.84.3
 
+  /@glint/core@1.2.1(typescript@5.2.2):
+    resolution: {integrity: sha512-25Zn65aLSN1M7s0D950sTNElZYRqa6HFA0xcT03iI/vQd1F6c3luMAXbFrsTSHlktZx2dqJ38c2dUnZJQBQgMw==}
+    hasBin: true
+    peerDependencies:
+      typescript: '>=4.8.0'
+    dependencies:
+      '@glimmer/syntax': 0.84.3
+      escape-string-regexp: 4.0.0
+      semver: 7.5.4
+      silent-error: 1.1.1
+      typescript: 5.2.2
+      uuid: 8.3.2
+      vscode-languageserver: 8.1.0
+      vscode-languageserver-textdocument: 1.0.8
+      vscode-uri: 3.0.8
+      yargs: 17.7.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@glint/environment-ember-loose@1.2.1(@glimmer/component@1.1.2)(@glint/template@1.2.1)(@types/ember__array@4.0.4)(@types/ember__component@4.0.14)(@types/ember__controller@4.0.5)(@types/ember__object@4.0.6)(@types/ember__routing@4.0.13):
+    resolution: {integrity: sha512-ZA0Ht7vwd1FosVLtMFrB2Er62P1v6yX/UuS6z9UVR6DMPfrL5qx6vef+EGJPLBrBKZMlm7zMB6Fyca201y4hDA==}
+    peerDependencies:
+      '@glimmer/component': ^1.1.2
+      '@glint/template': ^1.2.1
+      '@types/ember__array': ^4.0.2
+      '@types/ember__component': ^4.0.10
+      '@types/ember__controller': ^4.0.2
+      '@types/ember__object': ^4.0.4
+      '@types/ember__routing': ^4.0.11
+      ember-cli-htmlbars: ^6.0.1
+      ember-modifier: ^3.2.7 || ^4.0.0
+    peerDependenciesMeta:
+      '@types/ember__array':
+        optional: true
+      '@types/ember__component':
+        optional: true
+      '@types/ember__controller':
+        optional: true
+      '@types/ember__object':
+        optional: true
+      '@types/ember__routing':
+        optional: true
+      ember-cli-htmlbars:
+        optional: true
+      ember-modifier:
+        optional: true
+    dependencies:
+      '@glimmer/component': 1.1.2(@babel/core@7.23.2)
+      '@glint/template': 1.2.1
+      '@types/ember__array': 4.0.4(@babel/core@7.23.2)
+      '@types/ember__component': 4.0.14(@babel/core@7.23.2)
+      '@types/ember__controller': 4.0.5(@babel/core@7.23.2)
+      '@types/ember__object': 4.0.6(@babel/core@7.23.2)
+      '@types/ember__routing': 4.0.13(@babel/core@7.23.2)
+    dev: true
+
+  /@glint/environment-ember-template-imports@1.2.0(@glint/environment-ember-loose@1.2.1)(@glint/template@1.2.1)(@types/ember__component@4.0.14)(@types/ember__helper@4.0.3)(@types/ember__modifier@4.0.6)(@types/ember__routing@4.0.13)(ember-template-imports@3.4.2):
+    resolution: {integrity: sha512-IP+tA23Nym+ij0behNbCBVmITNJe65pBDAuKf4b3eaK+dEgOFwWFB5M+dJLUxCHUxNJGMac6lRnWSxY3S4zgMw==}
+    peerDependencies:
+      '@glint/environment-ember-loose': ^1.2.0
+      '@glint/template': ^1.2.0
+      '@types/ember__component': ^4.0.10
+      '@types/ember__helper': ^4.0.1
+      '@types/ember__modifier': ^4.0.3
+      '@types/ember__routing': ^4.0.12
+      ember-template-imports: ^3.0.0
+    peerDependenciesMeta:
+      '@types/ember__component':
+        optional: true
+      '@types/ember__helper':
+        optional: true
+      '@types/ember__modifier':
+        optional: true
+      '@types/ember__routing':
+        optional: true
+    dependencies:
+      '@glint/environment-ember-loose': 1.2.1(@glimmer/component@1.1.2)(@glint/template@1.2.1)(@types/ember__array@4.0.4)(@types/ember__component@4.0.14)(@types/ember__controller@4.0.5)(@types/ember__object@4.0.6)(@types/ember__routing@4.0.13)
+      '@glint/template': 1.2.1
+      '@types/ember__component': 4.0.14(@babel/core@7.23.2)
+      '@types/ember__helper': 4.0.3(@babel/core@7.23.2)
+      '@types/ember__modifier': 4.0.6(@babel/core@7.23.2)
+      '@types/ember__routing': 4.0.13(@babel/core@7.23.2)
+      ember-template-imports: 3.4.2
+    dev: true
+
   /@glint/template@1.2.1:
     resolution: {integrity: sha512-rlYy/93fAhYjXmTchWcwCpPFMfrqBYEskzbDYawS2oz4DVwtf4fOITLKB0QddQMI7WUCjgXAiIGZqcNa/R4YeQ==}
 
@@ -2919,7 +3003,7 @@ packages:
       rimraf: 3.0.2
     dev: true
 
-  /@nullvoxpopuli/eslint-configs@3.2.2(@babel/core@7.23.2)(eslint-config-prettier@9.0.0)(eslint-plugin-ember@11.11.1)(eslint@8.52.0)(prettier@3.0.3):
+  /@nullvoxpopuli/eslint-configs@3.2.2(@babel/core@7.23.2)(@typescript-eslint/eslint-plugin@6.7.2)(@typescript-eslint/parser@6.7.2)(eslint-config-prettier@9.0.0)(eslint-plugin-ember@11.11.1)(eslint@8.52.0)(prettier@3.0.3):
     resolution: {integrity: sha512-Qm7TR7K+kb5emAoddPsoznmAgUptL7YWUOdtaBq2T4pgkEyr7JTS1v4TPg07LusfYi2He2nKJBdTcD++hrsNdw==}
     engines: {node: '>= v16.0.0'}
     peerDependencies:
@@ -2947,13 +3031,15 @@ packages:
       prettier:
         optional: true
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
+      '@typescript-eslint/eslint-plugin': 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.52.0)(typescript@5.2.2)
+      '@typescript-eslint/parser': 6.7.2(eslint@8.52.0)(typescript@5.2.2)
       cosmiconfig: 8.2.0
       eslint: 8.52.0
-      eslint-import-resolver-typescript: 3.6.0(eslint-plugin-import@2.29.0)(eslint@8.52.0)
+      eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.7.2)(eslint-plugin-import@2.29.0)(eslint@8.52.0)
       eslint-plugin-decorator-position: 5.0.2(eslint@8.52.0)
       eslint-plugin-ember: 11.11.1(eslint@8.52.0)
-      eslint-plugin-import: 2.29.0(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0)
+      eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0)
       eslint-plugin-json: 3.1.0
       eslint-plugin-n: 16.2.0(eslint@8.52.0)
       eslint-plugin-prettier: 4.2.1(eslint-config-prettier@9.0.0)(eslint@8.52.0)(prettier@3.0.3)
@@ -3540,7 +3626,7 @@ packages:
       rollup:
         optional: true
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-module-imports': 7.22.15
       '@rollup/pluginutils': 5.0.2(rollup@4.2.0)
       rollup: 4.2.0
@@ -3715,53 +3801,245 @@ packages:
     engines: {node: '>=10.13.0'}
     dev: true
 
-  /@types/acorn@4.0.6:
-    resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
-    dependencies:
-      '@types/estree': 1.0.0
+  /@tsconfig/ember@2.0.0:
+    resolution: {integrity: sha512-RzbDYYcjxVdG8Ki0xe99HN3+nHTZe6EBgw6N7B3yup7QogVFQQxA9nY7X80j1XzF15xqetwWiYfAjv5lkkp0/A==}
+    dev: true
+
+  /@types/acorn@4.0.6:
+    resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
+    dependencies:
+      '@types/estree': 1.0.0
+    dev: true
+
+  /@types/babel__code-frame@7.0.3:
+    resolution: {integrity: sha512-2TN6oiwtNjOezilFVl77zwdNPwQWaDBBCCWWxyo1ctiO3vAtd7H/aB/CBJdw9+kqq3+latD0SXoedIuHySSZWw==}
+    dev: true
+
+  /@types/body-parser@1.19.2:
+    resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
+    dependencies:
+      '@types/connect': 3.4.35
+      '@types/node': 18.11.18
+    dev: true
+
+  /@types/chai-as-promised@7.1.5:
+    resolution: {integrity: sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==}
+    dependencies:
+      '@types/chai': 4.3.4
+    dev: true
+
+  /@types/chai@4.3.4:
+    resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==}
+    dev: true
+
+  /@types/connect@3.4.35:
+    resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
+    dependencies:
+      '@types/node': 18.11.18
+    dev: true
+
+  /@types/cookie@0.4.1:
+    resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==}
+    dev: true
+
+  /@types/cors@2.8.13:
+    resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==}
+    dependencies:
+      '@types/node': 18.11.18
+    dev: true
+
+  /@types/debug@4.1.7:
+    resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
+    dependencies:
+      '@types/ms': 0.7.31
+    dev: true
+
+  /@types/ember@4.0.4(@babel/core@7.23.2):
+    resolution: {integrity: sha512-MeByM2it6topE4s53+OGS0qHL3mvZIP2+U+eUlhN2w4d9oA6XzP9iaXROA2Eqxjmt4UAJiHHcR2uZ5TVcbEzfw==}
+    dependencies:
+      '@types/ember__application': 4.0.6(@babel/core@7.23.2)
+      '@types/ember__array': 4.0.4(@babel/core@7.23.2)
+      '@types/ember__component': 4.0.14(@babel/core@7.23.2)
+      '@types/ember__controller': 4.0.5(@babel/core@7.23.2)
+      '@types/ember__debug': 4.0.4(@babel/core@7.23.2)
+      '@types/ember__engine': 4.0.5(@babel/core@7.23.2)
+      '@types/ember__error': 4.0.3
+      '@types/ember__object': 4.0.6(@babel/core@7.23.2)
+      '@types/ember__polyfills': 4.0.2
+      '@types/ember__routing': 4.0.13(@babel/core@7.23.2)
+      '@types/ember__runloop': 4.0.3(@babel/core@7.23.2)
+      '@types/ember__service': 4.0.3(@babel/core@7.23.2)
+      '@types/ember__string': 3.16.3
+      '@types/ember__template': 4.0.2
+      '@types/ember__test': 4.0.2(@babel/core@7.23.2)
+      '@types/ember__utils': 4.0.3(@babel/core@7.23.2)
+      '@types/htmlbars-inline-precompile': 3.0.1
+      '@types/rsvp': 4.0.6
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
+    dev: true
+
+  /@types/ember__application@4.0.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-ojZUGF8zmTpkTg6MJy4hplGvwTJEBCB3ku6UwgQhu0TizeGESBTUXxZIeyiORNBgfzkqT3Ugo+i+777zsIAfhg==}
+    dependencies:
+      '@glimmer/component': 1.1.2(@babel/core@7.23.2)
+      '@types/ember': 4.0.4(@babel/core@7.23.2)
+      '@types/ember__engine': 4.0.5(@babel/core@7.23.2)
+      '@types/ember__object': 4.0.6(@babel/core@7.23.2)
+      '@types/ember__owner': 4.0.4
+      '@types/ember__routing': 4.0.13(@babel/core@7.23.2)
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
+    dev: true
+
+  /@types/ember__array@4.0.4(@babel/core@7.23.2):
+    resolution: {integrity: sha512-nMg0+2ooumlfHJjwmI1tnVTBg8TfORhXT4OdzJzCjweFjBCA25L7K0W9J/NKzTUTryJsaDil6VMbY3dCXpyBvA==}
+    dependencies:
+      '@types/ember': 4.0.4(@babel/core@7.23.2)
+      '@types/ember__object': 4.0.6(@babel/core@7.23.2)
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
+    dev: true
+
+  /@types/ember__component@4.0.14(@babel/core@7.23.2):
+    resolution: {integrity: sha512-qqEJOCxxPJrfYpgs8+8Zjrc8uRzpbhALtsG6nf/LoB4DkXisSd+C6a3n04ACvGfDa+1uVA3SZ8sTqKPgx6nM9g==}
+    dependencies:
+      '@types/ember': 4.0.4(@babel/core@7.23.2)
+      '@types/ember__object': 4.0.6(@babel/core@7.23.2)
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
+    dev: true
+
+  /@types/ember__controller@4.0.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-sjTYCkVO/JO0JTHU+Xz8TtDotpTCoJZ+esoSSSgHAjHOV4rYioeBzHSSaZk5s9NoNt9X0jqJhdY+oUJfJ1/rkw==}
+    dependencies:
+      '@types/ember__object': 4.0.6(@babel/core@7.23.2)
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
+    dev: true
+
+  /@types/ember__debug@4.0.4(@babel/core@7.23.2):
+    resolution: {integrity: sha512-VlK75Br460+7c7Lvcjr4NyYD6KWLi2FMHWID52svEdbv1dj2+BrXE43PW1xjbycErWoalj/vGsBKGjxt+W1+ZA==}
+    dependencies:
+      '@types/ember__object': 4.0.6(@babel/core@7.23.2)
+      '@types/ember__owner': 4.0.4
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
+    dev: true
+
+  /@types/ember__engine@4.0.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-yx4d2xhCzu5ZwDib++0plLIMv8G6/l9TUAWWmQMsz0L/ETK9jIH0H7uEzyWZSTR2ETcP230oAkPzTk2J3IQAmg==}
+    dependencies:
+      '@types/ember__object': 4.0.6(@babel/core@7.23.2)
+      '@types/ember__owner': 4.0.4
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
+    dev: true
+
+  /@types/ember__error@4.0.3:
+    resolution: {integrity: sha512-lQ/ZrPS5s7LjYhML8TCfcKyMumAy7Hh+9CI66WShHumuojSZZm36LhpaUXC0sMf5uF3uKimaVrvvvrvBLDePZg==}
+    dev: true
+
+  /@types/ember__helper@4.0.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-8s8fgZvpAysHrRnKy9abYRLq7ughcBU/k0FYKqlDPVQewp4lhggYlltj3MZhf6WNnbtG4G0fzvOIRa6sm33TpQ==}
+    dependencies:
+      '@types/ember': 4.0.4(@babel/core@7.23.2)
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
+    dev: true
+
+  /@types/ember__modifier@4.0.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-4V1IBPLHsnQ45ma+eNDVZO41Bxbv1WGyd8moNxqShBbF9LpyFesbV4GTf/x5By3U8FwY1VzRFKPbEoulx9R2KQ==}
+    dependencies:
+      '@types/ember': 4.0.4(@babel/core@7.23.2)
+      '@types/ember__owner': 4.0.4
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
+    dev: true
+
+  /@types/ember__object@4.0.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-BVjR2+Q1hQowHnRw9TVwoSOcEly14o3XathEd+wYERLRfl2kbCB/Yh1hutraXqWu3WFuhbxLCS/5FJUCdQcRIg==}
+    dependencies:
+      '@types/ember': 4.0.4(@babel/core@7.23.2)
+      '@types/rsvp': 4.0.6
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
+    dev: true
+
+  /@types/ember__owner@4.0.4:
+    resolution: {integrity: sha512-FD0XuAlIfeVEwpKcAeGczQxa6D0huKxvPHuPE+FIm+zWZmqnI6yhxDhZgeGjnhmCCLAHRp8+1HRoKOFwnmaW3Q==}
     dev: true
 
-  /@types/babel__code-frame@7.0.3:
-    resolution: {integrity: sha512-2TN6oiwtNjOezilFVl77zwdNPwQWaDBBCCWWxyo1ctiO3vAtd7H/aB/CBJdw9+kqq3+latD0SXoedIuHySSZWw==}
+  /@types/ember__polyfills@4.0.2:
+    resolution: {integrity: sha512-DMtjEhCHgrMion+qDWQVC9gW5SIY5wElueFbAmBLghTcUOgLWLTFzah3PxKln9cQNRO36699Irg2UdYOJsY6Jg==}
     dev: true
 
-  /@types/body-parser@1.19.2:
-    resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
+  /@types/ember__routing@4.0.13(@babel/core@7.23.2):
+    resolution: {integrity: sha512-CNBx6RmGzZpe8ahuy6+aPYKc/EelmbkndqgCigGkkrqvV5B+ayb3rdeKa2XojyXIqSjvjmcYyj9TTvian0yDgg==}
     dependencies:
-      '@types/connect': 3.4.35
-      '@types/node': 18.11.18
+      '@types/ember': 4.0.4(@babel/core@7.23.2)
+      '@types/ember__controller': 4.0.5(@babel/core@7.23.2)
+      '@types/ember__object': 4.0.6(@babel/core@7.23.2)
+      '@types/ember__service': 4.0.3(@babel/core@7.23.2)
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
     dev: true
 
-  /@types/chai-as-promised@7.1.5:
-    resolution: {integrity: sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==}
+  /@types/ember__runloop@4.0.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-F6Ujl02xAFOAuOwlAJVdZg64PzacgyRfaCTicY2hyBA4rDpkVVNUsICAJw1NYEUJC6nTaeeanmBGPiZH1htJkw==}
     dependencies:
-      '@types/chai': 4.3.4
+      '@types/ember': 4.0.4(@babel/core@7.23.2)
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
     dev: true
 
-  /@types/chai@4.3.4:
-    resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==}
+  /@types/ember__service@4.0.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-LH+gI8Ha2PGM7sJ1Ap4+Ml62vejc8tlwE2xJCqklfH39DPKxAZanCdJCHOL13Ak1xoRZ2KKT4pXhxJIXaI2PWA==}
+    dependencies:
+      '@types/ember__object': 4.0.6(@babel/core@7.23.2)
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
     dev: true
 
-  /@types/connect@3.4.35:
-    resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
+  /@types/ember__string@3.16.3:
+    resolution: {integrity: sha512-0T9ofzm9LL/bSG5u1SxKx/j2h/bHKkl5NKjGCNbFQxEKBw4f2cs6+AMDgWke9z+qrRRIz9vGEtMXnA3yJrO2xA==}
     dependencies:
-      '@types/node': 18.11.18
+      '@types/ember__template': 4.0.2
     dev: true
 
-  /@types/cookie@0.4.1:
-    resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==}
+  /@types/ember__template@4.0.2:
+    resolution: {integrity: sha512-kQWkak5Sy8m4xcXiXNO2A5+N12qoYK9EK2WtGQYG5pN0wSl6iYFGuz8iq7wEcOyiQ0BH9xSv3uCURukv3U+Txw==}
     dev: true
 
-  /@types/cors@2.8.13:
-    resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==}
+  /@types/ember__test@4.0.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-hoep5m7XmafmjIOHj+PN3T6RyCuVk6Wmjo7IVSM1aCxyIiSbJN8h1vs/Ma8I6kFoMmZYmdLsMxNoxMf7jEon4w==}
     dependencies:
-      '@types/node': 18.11.18
+      '@types/ember__application': 4.0.6(@babel/core@7.23.2)
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
     dev: true
 
-  /@types/debug@4.1.7:
-    resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
+  /@types/ember__utils@4.0.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-o+0oRoT72wcxq4aqZTVEcPJKkKORig6mggs6OWrssCKF+cFZIkO7MNSkHy8ad88xNuyiGETIrBaXkr7XpNY1qg==}
     dependencies:
-      '@types/ms': 0.7.31
+      '@types/ember': 4.0.4(@babel/core@7.23.2)
+    transitivePeerDependencies:
+      - '@babel/core'
+      - supports-color
     dev: true
 
   /@types/eslint-scope@3.7.4:
@@ -3774,7 +4052,7 @@ packages:
     resolution: {integrity: sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==}
     dependencies:
       '@types/estree': 1.0.0
-      '@types/json-schema': 7.0.11
+      '@types/json-schema': 7.0.14
 
   /@types/estree@1.0.0:
     resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
@@ -3820,12 +4098,16 @@ packages:
       '@types/minimatch': 5.1.2
       '@types/node': 18.11.18
 
+  /@types/htmlbars-inline-precompile@3.0.1:
+    resolution: {integrity: sha512-0kejKcYmD/GDJyA94GYGcYKQRF0UkxWDhIdA82DYI3dajIyK27uhQpmBB/4EIpBS2zgtrzfwZWWTdRSsHRSY+w==}
+    dev: true
+
   /@types/http-cache-semantics@4.0.1:
     resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==}
     dev: true
 
-  /@types/json-schema@7.0.11:
-    resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
+  /@types/json-schema@7.0.14:
+    resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==}
 
   /@types/json5@0.0.29:
     resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
@@ -3896,6 +4178,14 @@ packages:
       '@types/glob': 8.0.1
       '@types/node': 18.11.18
 
+  /@types/rsvp@4.0.6:
+    resolution: {integrity: sha512-2CgsI0j74ULhrZrqcMwZ7nSvcyX767KaJDefxCnrNSp1D4MuLX8qxOPHwHz7/5b2FC94ILh3Db6du6QAvpc+Qw==}
+    dev: true
+
+  /@types/semver@7.5.4:
+    resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==}
+    dev: true
+
   /@types/serve-static@1.15.0:
     resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==}
     dependencies:
@@ -3930,6 +4220,137 @@ packages:
       '@types/yargs-parser': 21.0.0
     dev: true
 
+  /@typescript-eslint/eslint-plugin@6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.52.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
+      eslint: ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@eslint-community/regexpp': 4.6.2
+      '@typescript-eslint/parser': 6.7.2(eslint@8.52.0)(typescript@5.2.2)
+      '@typescript-eslint/scope-manager': 6.7.2
+      '@typescript-eslint/type-utils': 6.7.2(eslint@8.52.0)(typescript@5.2.2)
+      '@typescript-eslint/utils': 6.7.2(eslint@8.52.0)(typescript@5.2.2)
+      '@typescript-eslint/visitor-keys': 6.7.2
+      debug: 4.3.4(supports-color@9.4.0)
+      eslint: 8.52.0
+      graphemer: 1.4.0
+      ignore: 5.2.4
+      natural-compare: 1.4.0
+      semver: 7.5.4
+      ts-api-utils: 1.0.3(typescript@5.2.2)
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/parser@6.7.2(eslint@8.52.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      eslint: ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/scope-manager': 6.7.2
+      '@typescript-eslint/types': 6.7.2
+      '@typescript-eslint/typescript-estree': 6.7.2(typescript@5.2.2)
+      '@typescript-eslint/visitor-keys': 6.7.2
+      debug: 4.3.4(supports-color@9.4.0)
+      eslint: 8.52.0
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/scope-manager@6.7.2:
+    resolution: {integrity: sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    dependencies:
+      '@typescript-eslint/types': 6.7.2
+      '@typescript-eslint/visitor-keys': 6.7.2
+    dev: true
+
+  /@typescript-eslint/type-utils@6.7.2(eslint@8.52.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      eslint: ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/typescript-estree': 6.7.2(typescript@5.2.2)
+      '@typescript-eslint/utils': 6.7.2(eslint@8.52.0)(typescript@5.2.2)
+      debug: 4.3.4(supports-color@9.4.0)
+      eslint: 8.52.0
+      ts-api-utils: 1.0.3(typescript@5.2.2)
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/types@6.7.2:
+    resolution: {integrity: sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    dev: true
+
+  /@typescript-eslint/typescript-estree@6.7.2(typescript@5.2.2):
+    resolution: {integrity: sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/types': 6.7.2
+      '@typescript-eslint/visitor-keys': 6.7.2
+      debug: 4.3.4(supports-color@9.4.0)
+      globby: 11.1.0
+      is-glob: 4.0.3
+      semver: 7.5.4
+      ts-api-utils: 1.0.3(typescript@5.2.2)
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/utils@6.7.2(eslint@8.52.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      eslint: ^7.0.0 || ^8.0.0
+    dependencies:
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0)
+      '@types/json-schema': 7.0.14
+      '@types/semver': 7.5.4
+      '@typescript-eslint/scope-manager': 6.7.2
+      '@typescript-eslint/types': 6.7.2
+      '@typescript-eslint/typescript-estree': 6.7.2(typescript@5.2.2)
+      eslint: 8.52.0
+      semver: 7.5.4
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /@typescript-eslint/visitor-keys@6.7.2:
+    resolution: {integrity: sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    dependencies:
+      '@typescript-eslint/types': 6.7.2
+      eslint-visitor-keys: 3.4.3
+    dev: true
+
   /@ungap/structured-clone@1.2.0:
     resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
     dev: true
@@ -4115,15 +4536,6 @@ packages:
     engines: {node: '>=0.4.0'}
     hasBin: true
 
-  /agent-base@6.0.2:
-    resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
-    engines: {node: '>= 6.0.0'}
-    dependencies:
-      debug: 4.3.4(supports-color@9.4.0)
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /agent-base@6.0.2(supports-color@8.1.1):
     resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
     engines: {node: '>= 6.0.0'}
@@ -4849,7 +5261,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-beta.42
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       semver: 5.7.2
 
   /babel-plugin-debug-macros@0.3.4(@babel/core@7.23.2):
@@ -4858,7 +5270,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       semver: 5.7.2
 
   /babel-plugin-ember-data-packages-polyfill@0.1.2:
@@ -4954,7 +5366,7 @@ packages:
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/compat-data': 7.22.9
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.23.2)
       semver: 6.3.1
     transitivePeerDependencies:
@@ -4965,7 +5377,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.23.2)
       core-js-compat: 3.27.2
     transitivePeerDependencies:
@@ -4976,7 +5388,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.23.2)
     transitivePeerDependencies:
       - supports-color
@@ -5595,7 +6007,7 @@ packages:
     resolution: {integrity: sha512-6IXBgfRt7HZ61g67ssBc6lBb3Smw3DPZ9dEYirgtvXWpRZ2A9M22nxy6opEwJDgDJzlu/bB7ToppW33OFkA1gA==}
     engines: {node: '>= 6'}
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/polyfill': 7.12.1
       broccoli-funnel: 2.0.2
       broccoli-merge-trees: 3.0.2
@@ -5616,7 +6028,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.17.9
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       broccoli-persistent-filter: 3.1.3
       clone: 2.1.2
       hash-for-dep: 1.5.1
@@ -7829,16 +8241,16 @@ packages:
   /electron-to-chromium@1.4.490:
     resolution: {integrity: sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==}
 
-  /ember-auto-import@2.6.3(webpack@5.89.0):
+  /ember-auto-import@2.6.3(@glint/template@1.2.1)(webpack@5.89.0):
     resolution: {integrity: sha512-uLhrRDJYWCRvQ4JQ1e64XlSrqAKSd6PXaJ9ZsZI6Tlms9T4DtQFxNXasqji2ZRJBVrxEoLCRYX3RTldsQ0vNGQ==}
     engines: {node: 12.* || 14.* || >= 16}
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.2)
       '@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.23.2)
       '@babel/preset-env': 7.20.2(@babel/core@7.23.2)
       '@embroider/macros': 1.13.2(@glint/template@1.2.1)
-      '@embroider/shared-internals': 2.5.0
+      '@embroider/shared-internals': 2.5.0(supports-color@8.1.1)
       babel-loader: 8.3.0(@babel/core@7.23.2)(webpack@5.89.0)
       babel-plugin-ember-modules-api-polyfill: 3.5.0
       babel-plugin-ember-template-compilation: 2.2.0
@@ -7912,7 +8324,7 @@ packages:
     resolution: {integrity: sha512-JJYeYjiz/JTn34q7F5DSOjkkZqy8qwFOOxXfE6pe9yEJqWGu4qErKxlz8I22JoVEQ/aBUO+OcKTpmctvykM9YA==}
     engines: {node: 6.* || 8.* || >= 10.*}
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-compilation-targets': 7.22.15
       '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.2)
       '@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.23.2)
@@ -7920,7 +8332,7 @@ packages:
       '@babel/plugin-proposal-private-property-in-object': 7.20.5(@babel/core@7.23.2)
       '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.23.2)
       '@babel/plugin-transform-runtime': 7.19.6(@babel/core@7.23.2)
-      '@babel/plugin-transform-typescript': 7.20.13(@babel/core@7.23.2)
+      '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.2)
       '@babel/polyfill': 7.12.1
       '@babel/preset-env': 7.20.2(@babel/core@7.23.2)
       '@babel/runtime': 7.12.18
@@ -7951,7 +8363,7 @@ packages:
     peerDependencies:
       '@babel/core': ^7.12.0
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/helper-compilation-targets': 7.22.15
       '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.2)
       '@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.23.2)
@@ -7960,7 +8372,7 @@ packages:
       '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.2)
       '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.23.2)
       '@babel/plugin-transform-runtime': 7.19.6(@babel/core@7.23.2)
-      '@babel/plugin-transform-typescript': 7.20.13(@babel/core@7.23.2)
+      '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.2)
       '@babel/preset-env': 7.20.2(@babel/core@7.23.2)
       '@babel/runtime': 7.12.18
       amd-name-resolver: 1.3.1
@@ -8328,7 +8740,7 @@ packages:
     engines: {node: '>= 16'}
     hasBin: true
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@pnpm/find-workspace-dir': 6.0.2
       broccoli: 3.5.2
       broccoli-builder: 0.18.14
@@ -8621,7 +9033,7 @@ packages:
     engines: {node: 8.* || 10.* || >= 12}
     dependencies:
       '@babel/parser': 7.23.0
-      '@babel/traverse': 7.23.2
+      '@babel/traverse': 7.23.2(supports-color@8.1.1)
       recast: 0.18.10
     transitivePeerDependencies:
       - supports-color
@@ -8636,7 +9048,7 @@ packages:
       - encoding
     dev: true
 
-  /ember-source@5.2.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(rsvp@4.8.5)(webpack@5.89.0):
+  /ember-source@5.2.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(@glint/template@1.2.1)(rsvp@4.8.5)(webpack@5.89.0):
     resolution: {integrity: sha512-rr8qLnyW6QV5N4ItwFluTH/SZ5W7uGsYL5GP0tYA2z9zFqD0g2TTJRBsaUPYFlHqcuUhWHiGg+xOyLcHZJOrig==}
     engines: {node: '>= 16.*'}
     peerDependencies:
@@ -8671,7 +9083,7 @@ packages:
       broccoli-funnel: 3.0.8
       broccoli-merge-trees: 4.2.0
       chalk: 4.1.2
-      ember-auto-import: 2.6.3(webpack@5.89.0)
+      ember-auto-import: 2.6.3(@glint/template@1.2.1)(webpack@5.89.0)
       ember-cli-babel: 7.26.11
       ember-cli-get-component-path-option: 1.0.0
       ember-cli-is-package-missing: 1.0.0
@@ -8731,7 +9143,7 @@ packages:
       broccoli-funnel: 3.0.8
       broccoli-merge-trees: 4.2.0
       chalk: 4.1.2
-      ember-auto-import: 2.6.3(webpack@5.89.0)
+      ember-auto-import: 2.6.3(@glint/template@1.2.1)(webpack@5.89.0)
       ember-cli-babel: 7.26.11
       ember-cli-get-component-path-option: 1.0.0
       ember-cli-is-package-missing: 1.0.0
@@ -9137,7 +9549,7 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-import-resolver-typescript@3.6.0(eslint-plugin-import@2.29.0)(eslint@8.52.0):
+  /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.7.2)(eslint-plugin-import@2.29.0)(eslint@8.52.0):
     resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
@@ -9147,8 +9559,8 @@ packages:
       debug: 4.3.4(supports-color@9.4.0)
       enhanced-resolve: 5.15.0
       eslint: 8.52.0
-      eslint-module-utils: 2.8.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0)
-      eslint-plugin-import: 2.29.0(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0)
+      eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0)
+      eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0)
       fast-glob: 3.3.1
       get-tsconfig: 4.7.0
       is-core-module: 2.13.1
@@ -9160,7 +9572,7 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-module-utils@2.8.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0):
+  /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0):
     resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
     engines: {node: '>=4'}
     peerDependencies:
@@ -9181,10 +9593,11 @@ packages:
       eslint-import-resolver-webpack:
         optional: true
     dependencies:
+      '@typescript-eslint/parser': 6.7.2(eslint@8.52.0)(typescript@5.2.2)
       debug: 3.2.7
       eslint: 8.52.0
       eslint-import-resolver-node: 0.3.9
-      eslint-import-resolver-typescript: 3.6.0(eslint-plugin-import@2.29.0)(eslint@8.52.0)
+      eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.7.2)(eslint-plugin-import@2.29.0)(eslint@8.52.0)
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -9199,7 +9612,7 @@ packages:
       '@babel/eslint-parser':
         optional: true
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.23.2)
       '@ember-data/rfc395-data': 0.0.4
       ember-rfc176-data: 0.3.18
@@ -9244,18 +9657,7 @@ packages:
       eslint: 8.52.0
     dev: true
 
-  /eslint-plugin-es@3.0.1(eslint@8.52.0):
-    resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==}
-    engines: {node: '>=8.10.0'}
-    peerDependencies:
-      eslint: '>=4.19.1'
-    dependencies:
-      eslint: 8.52.0
-      eslint-utils: 2.1.0
-      regexpp: 3.2.0
-    dev: true
-
-  /eslint-plugin-import@2.29.0(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0):
+  /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0):
     resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==}
     engines: {node: '>=4'}
     peerDependencies:
@@ -9265,6 +9667,7 @@ packages:
       '@typescript-eslint/parser':
         optional: true
     dependencies:
+      '@typescript-eslint/parser': 6.7.2(eslint@8.52.0)(typescript@5.2.2)
       array-includes: 3.1.7
       array.prototype.findlastindex: 1.2.3
       array.prototype.flat: 1.3.2
@@ -9273,7 +9676,7 @@ packages:
       doctrine: 2.1.0
       eslint: 8.52.0
       eslint-import-resolver-node: 0.3.9
-      eslint-module-utils: 2.8.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0)
+      eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.52.0)
       hasown: 2.0.0
       is-core-module: 2.13.1
       is-glob: 4.0.3
@@ -9315,21 +9718,6 @@ packages:
       semver: 7.5.4
     dev: true
 
-  /eslint-plugin-node@11.1.0(eslint@8.52.0):
-    resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==}
-    engines: {node: '>=8.10.0'}
-    peerDependencies:
-      eslint: '>=5.16.0'
-    dependencies:
-      eslint: 8.52.0
-      eslint-plugin-es: 3.0.1(eslint@8.52.0)
-      eslint-utils: 2.1.0
-      ignore: 5.2.4
-      minimatch: 3.1.2
-      resolve: 1.22.4
-      semver: 6.3.1
-    dev: true
-
   /eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.0.0)(eslint@8.52.0)(prettier@3.0.3):
     resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
     engines: {node: '>=12.0.0'}
@@ -9401,13 +9789,6 @@ packages:
       estraverse: 5.3.0
     dev: true
 
-  /eslint-utils@2.1.0:
-    resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==}
-    engines: {node: '>=6'}
-    dependencies:
-      eslint-visitor-keys: 1.3.0
-    dev: true
-
   /eslint-utils@3.0.0(eslint@8.52.0):
     resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
     engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
@@ -9418,11 +9799,6 @@ packages:
       eslint-visitor-keys: 2.1.0
     dev: true
 
-  /eslint-visitor-keys@1.3.0:
-    resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
-    engines: {node: '>=4'}
-    dev: true
-
   /eslint-visitor-keys@2.1.0:
     resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
     engines: {node: '>=10'}
@@ -11041,17 +11417,6 @@ packages:
     resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==}
     dev: true
 
-  /http-proxy-agent@4.0.1:
-    resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==}
-    engines: {node: '>= 6'}
-    dependencies:
-      '@tootallnate/once': 1.1.2
-      agent-base: 6.0.2
-      debug: 4.3.4(supports-color@9.4.0)
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /http-proxy-agent@4.0.1(supports-color@8.1.1):
     resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==}
     engines: {node: '>= 6'}
@@ -11101,16 +11466,6 @@ packages:
       resolve-alpn: 1.2.1
     dev: true
 
-  /https-proxy-agent@5.0.1:
-    resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
-    engines: {node: '>= 6'}
-    dependencies:
-      agent-base: 6.0.2
-      debug: 4.3.4(supports-color@9.4.0)
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /https-proxy-agent@5.0.1(supports-color@8.1.1):
     resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
     engines: {node: '>= 6'}
@@ -11843,7 +12198,7 @@ packages:
     resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
     engines: {node: '>=8'}
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/parser': 7.23.0
       '@istanbuljs/schema': 0.1.3
       istanbul-lib-coverage: 3.2.0
@@ -11945,48 +12300,6 @@ packages:
     resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
     dev: true
 
-  /jsdom@16.7.0:
-    resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      canvas: ^2.5.0
-    peerDependenciesMeta:
-      canvas:
-        optional: true
-    dependencies:
-      abab: 2.0.6
-      acorn: 8.9.0
-      acorn-globals: 6.0.0
-      cssom: 0.4.4
-      cssstyle: 2.3.0
-      data-urls: 2.0.0
-      decimal.js: 10.4.3
-      domexception: 2.0.1
-      escodegen: 2.1.0
-      form-data: 3.0.1
-      html-encoding-sniffer: 2.0.1
-      http-proxy-agent: 4.0.1
-      https-proxy-agent: 5.0.1
-      is-potential-custom-element-name: 1.0.1
-      nwsapi: 2.2.2
-      parse5: 6.0.1
-      saxes: 5.0.1
-      symbol-tree: 3.2.4
-      tough-cookie: 4.1.2
-      w3c-hr-time: 1.0.2
-      w3c-xmlserializer: 2.0.0
-      webidl-conversions: 6.1.0
-      whatwg-encoding: 1.0.5
-      whatwg-mimetype: 2.3.0
-      whatwg-url: 8.7.0
-      ws: 7.5.9
-      xml-name-validator: 3.0.0
-    transitivePeerDependencies:
-      - bufferutil
-      - supports-color
-      - utf-8-validate
-    dev: true
-
   /jsdom@16.7.0(supports-color@8.1.1):
     resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==}
     engines: {node: '>=10'}
@@ -12636,8 +12949,8 @@ packages:
       agentkeepalive: 4.2.1
       cacache: 15.3.0
       http-cache-semantics: 4.1.1
-      http-proxy-agent: 4.0.1
-      https-proxy-agent: 5.0.1
+      http-proxy-agent: 4.0.1(supports-color@8.1.1)
+      https-proxy-agent: 5.0.1(supports-color@8.1.1)
       is-lambda: 1.0.1
       lru-cache: 6.0.0
       minipass: 3.3.6
@@ -14879,7 +15192,7 @@ packages:
     peerDependencies:
       prettier: '>= 3.0.0'
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@glimmer/syntax': 0.84.3
       ember-cli-htmlbars: 6.3.0
       ember-template-imports: 3.4.2
@@ -15311,11 +15624,6 @@ packages:
       define-properties: 1.2.0
       functions-have-names: 1.2.3
 
-  /regexpp@3.2.0:
-    resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
-    engines: {node: '>=8'}
-    dev: true
-
   /regexpu-core@2.0.0:
     resolution: {integrity: sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==}
     dependencies:
@@ -15515,9 +15823,9 @@ packages:
   /remove-types@1.0.0:
     resolution: {integrity: sha512-G7Hk1Q+UJ5DvlNAoJZObxANkBZGiGdp589rVcTW/tYqJWJ5rwfraSnKSQaETN8Epaytw8J40nS/zC7bcHGv36w==}
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       '@babel/plugin-syntax-decorators': 7.22.10(@babel/core@7.23.2)
-      '@babel/plugin-transform-typescript': 7.20.13(@babel/core@7.23.2)
+      '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.2)
       prettier: 2.8.8
     transitivePeerDependencies:
       - supports-color
@@ -15977,7 +16285,7 @@ packages:
     resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==}
     engines: {node: '>= 8.9.0'}
     dependencies:
-      '@types/json-schema': 7.0.11
+      '@types/json-schema': 7.0.14
       ajv: 6.12.6
       ajv-keywords: 3.5.2(ajv@6.12.6)
 
@@ -15985,7 +16293,7 @@ packages:
     resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
     engines: {node: '>= 10.13.0'}
     dependencies:
-      '@types/json-schema': 7.0.11
+      '@types/json-schema': 7.0.14
       ajv: 6.12.6
       ajv-keywords: 3.5.2(ajv@6.12.6)
 
@@ -15993,7 +16301,7 @@ packages:
     resolution: {integrity: sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==}
     engines: {node: '>= 12.13.0'}
     dependencies:
-      '@types/json-schema': 7.0.11
+      '@types/json-schema': 7.0.14
       ajv: 8.12.0
       ajv-formats: 2.1.1(ajv@8.12.0)
       ajv-keywords: 5.1.0(ajv@8.12.0)
@@ -16247,7 +16555,7 @@ packages:
     resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==}
     engines: {node: '>= 10'}
     dependencies:
-      agent-base: 6.0.2
+      agent-base: 6.0.2(supports-color@8.1.1)
       debug: 4.3.4(supports-color@9.4.0)
       socks: 2.7.1
     transitivePeerDependencies:
@@ -17396,6 +17704,15 @@ packages:
     resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==}
     dev: true
 
+  /ts-api-utils@1.0.3(typescript@5.2.2):
+    resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
+    engines: {node: '>=16.13.0'}
+    peerDependencies:
+      typescript: '>=4.2.0'
+    dependencies:
+      typescript: 5.2.2
+    dev: true
+
   /ts-interface-checker@0.1.13:
     resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
     dev: true
@@ -17515,6 +17832,12 @@ packages:
   /typescript-memoize@1.1.1:
     resolution: {integrity: sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==}
 
+  /typescript@5.2.2:
+    resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==}
+    engines: {node: '>=14.17'}
+    hasBin: true
+    dev: true
+
   /uc.micro@1.0.6:
     resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==}
     dev: true
@@ -17900,25 +18223,44 @@ packages:
     dependencies:
       jsonc-parser: 3.2.0
       vscode-languageserver-textdocument: 1.0.8
-      vscode-languageserver-types: 3.17.2
+      vscode-languageserver-types: 3.17.3
       vscode-nls: 5.2.0
-      vscode-uri: 3.0.7
+      vscode-uri: 3.0.8
+    dev: true
+
+  /vscode-jsonrpc@8.1.0:
+    resolution: {integrity: sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==}
+    engines: {node: '>=14.0.0'}
+    dev: true
+
+  /vscode-languageserver-protocol@3.17.3:
+    resolution: {integrity: sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==}
+    dependencies:
+      vscode-jsonrpc: 8.1.0
+      vscode-languageserver-types: 3.17.3
     dev: true
 
   /vscode-languageserver-textdocument@1.0.8:
     resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==}
     dev: true
 
-  /vscode-languageserver-types@3.17.2:
-    resolution: {integrity: sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==}
+  /vscode-languageserver-types@3.17.3:
+    resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==}
+    dev: true
+
+  /vscode-languageserver@8.1.0:
+    resolution: {integrity: sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==}
+    hasBin: true
+    dependencies:
+      vscode-languageserver-protocol: 3.17.3
     dev: true
 
   /vscode-nls@5.2.0:
     resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==}
     dev: true
 
-  /vscode-uri@3.0.7:
-    resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==}
+  /vscode-uri@3.0.8:
+    resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
     dev: true
 
   /w3c-hr-time@1.0.2:
@@ -18201,7 +18543,7 @@ packages:
   /workerpool@3.1.2:
     resolution: {integrity: sha512-WJFA0dGqIK7qj7xPTqciWBH5DlJQzoPjsANvc3Y4hNB0SScT+Emjvt0jPPkDBUjBNngX1q9hHgt1Gfwytu6pug==}
     dependencies:
-      '@babel/core': 7.23.2
+      '@babel/core': 7.23.2(supports-color@8.1.1)
       object-assign: 4.1.1
       rsvp: 4.8.5
     transitivePeerDependencies:
@@ -18405,6 +18747,7 @@ packages:
     resolution: {directory: ember-math-helpers, type: directory}
     id: file:ember-math-helpers
     name: ember-math-helpers
+    version: 3.0.0
     engines: {node: 14.* || 16.* || >= 18}
     peerDependencies:
       ember-source: ^4.0.0 || ^5.0.0
@@ -18414,3 +18757,7 @@ packages:
     transitivePeerDependencies:
       - supports-color
     dev: false
+
+settings:
+  autoInstallPeers: true
+  excludeLinksFromLockfile: false
diff --git a/test-app/ember-cli-build.js b/test-app/ember-cli-build.js
index 86a1fbec..3828b4f4 100644
--- a/test-app/ember-cli-build.js
+++ b/test-app/ember-cli-build.js
@@ -4,7 +4,10 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app');
 
 module.exports = function (defaults) {
   const app = new EmberApp(defaults, {
-    // Add options here
+    'ember-cli-babel': { enableTypeScriptTransform: true },
+    autoImport: {
+      watchDependencies: ['ember-math-helpers'],
+    },
   });
 
   const { Webpack } = require('@embroider/webpack');