diff --git a/packages/alpinejs/src/magics.js b/packages/alpinejs/src/magics.js index f1dadd76e..21dd746e6 100644 --- a/packages/alpinejs/src/magics.js +++ b/packages/alpinejs/src/magics.js @@ -9,24 +9,12 @@ export function magic(name, callback) { } export function injectMagics(obj, el) { - Object.entries(magics).forEach(([name, callback]) => { - let memoizedUtilities = null; - function getUtilities() { - if (memoizedUtilities) { - return memoizedUtilities; - } else { - let [utilities, cleanup] = getElementBoundUtilities(el) - - memoizedUtilities = {interceptor, ...utilities} - - onElRemoved(el, cleanup) - return memoizedUtilities; - } - } + let memoizedUtilities = getUtilities(el) + Object.entries(magics).forEach(([name, callback]) => { Object.defineProperty(obj, `$${name}`, { get() { - return callback(el, getUtilities()); + return callback(el, memoizedUtilities); }, enumerable: false, }) @@ -34,3 +22,13 @@ export function injectMagics(obj, el) { return obj } + +export function getUtilities(el) { + let [utilities, cleanup] = getElementBoundUtilities(el) + + let utils = { interceptor, ...utilities } + + onElRemoved(el, cleanup) + + return utils; +}