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