(def, hookKey, hook)
| 1702 | /* */ |
| 1703 | |
| 1704 | function mergeVNodeHook (def, hookKey, hook) { |
| 1705 | var invoker; |
| 1706 | var oldHook = def[hookKey]; |
| 1707 | |
| 1708 | function wrappedHook () { |
| 1709 | hook.apply(this, arguments); |
| 1710 | // important: remove merged hook to ensure it's called only once |
| 1711 | // and prevent memory leak |
| 1712 | remove(invoker.fns, wrappedHook); |
| 1713 | } |
| 1714 | |
| 1715 | if (!oldHook) { |
| 1716 | // no existing hook |
| 1717 | invoker = createFnInvoker([wrappedHook]); |
| 1718 | } else { |
| 1719 | /* istanbul ignore if */ |
| 1720 | if (oldHook.fns && oldHook.merged) { |
| 1721 | // already a merged invoker |
| 1722 | invoker = oldHook; |
| 1723 | invoker.fns.push(wrappedHook); |
| 1724 | } else { |
| 1725 | // existing plain hook |
| 1726 | invoker = createFnInvoker([oldHook, wrappedHook]); |
| 1727 | } |
| 1728 | } |
| 1729 | |
| 1730 | invoker.merged = true; |
| 1731 | def[hookKey] = invoker; |
| 1732 | } |
| 1733 | |
| 1734 | /* */ |
| 1735 |
no test coverage detected