暂无描述

magics.js 1021B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import Alpine from './alpine'
  2. import { getElementBoundUtilities } from './directives'
  3. import { interceptor } from './interceptor'
  4. import { onElRemoved } from './mutation'
  5. let magics = {}
  6. export function magic(name, callback) {
  7. magics[name] = callback
  8. }
  9. export function injectMagics(obj, el) {
  10. Object.entries(magics).forEach(([name, callback]) => {
  11. let memoizedUtilities = null;
  12. function getUtilities() {
  13. if (memoizedUtilities) {
  14. return memoizedUtilities;
  15. } else {
  16. let [utilities, cleanup] = getElementBoundUtilities(el)
  17. memoizedUtilities = {interceptor, ...utilities}
  18. onElRemoved(el, cleanup)
  19. return memoizedUtilities;
  20. }
  21. }
  22. Object.defineProperty(obj, `$${name}`, {
  23. get() {
  24. return callback(el, getUtilities());
  25. },
  26. enumerable: false,
  27. })
  28. })
  29. return obj
  30. }