Skip to content

Commit ac63592

Browse files
fix: memoization when injecting magic (#4276)
* fix: memoization when injecting magic * extract get utlilties to a function * add return comment * fix tests * refactor * wip --------- Co-authored-by: Caleb Porzio <[email protected]>
1 parent 4c3478c commit ac63592

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

packages/alpinejs/src/magics.js

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,26 @@ export function magic(name, callback) {
99
}
1010

1111
export function injectMagics(obj, el) {
12-
Object.entries(magics).forEach(([name, callback]) => {
13-
let memoizedUtilities = null;
14-
function getUtilities() {
15-
if (memoizedUtilities) {
16-
return memoizedUtilities;
17-
} else {
18-
let [utilities, cleanup] = getElementBoundUtilities(el)
19-
20-
memoizedUtilities = {interceptor, ...utilities}
21-
22-
onElRemoved(el, cleanup)
23-
return memoizedUtilities;
24-
}
25-
}
12+
let memoizedUtilities = getUtilities(el)
2613

14+
Object.entries(magics).forEach(([name, callback]) => {
2715
Object.defineProperty(obj, `$${name}`, {
2816
get() {
29-
return callback(el, getUtilities());
17+
return callback(el, memoizedUtilities);
3018
},
3119
enumerable: false,
3220
})
3321
})
3422

3523
return obj
3624
}
25+
26+
export function getUtilities(el) {
27+
let [utilities, cleanup] = getElementBoundUtilities(el)
28+
29+
let utils = { interceptor, ...utilities }
30+
31+
onElRemoved(el, cleanup)
32+
33+
return utils;
34+
}

0 commit comments

Comments
 (0)