function meld(target, pointcut, aspect) {
		var pointcutType, remove;
		if(arguments.length < 3) {
			return addAspectToFunction(target, pointcut);
		} else {
			if (isArray(pointcut)) {
				remove = addAspectToAll(target, pointcut, aspect);
			} else {
				pointcutType = typeof pointcut;
				if (pointcutType === 'string') {
					if (typeof target[pointcut] === 'function') {
						remove = addAspectToMethod(target, pointcut, aspect);
					}
				} else if (pointcutType === 'function') {
					remove = addAspectToAll(target, pointcut(target), aspect);
				} else {
					remove = addAspectToMatches(target, pointcut, aspect);
				}
			}
			return remove;
		}
	}n/a
add = function () { return meld.apply(null, arguments); }...
`buster test`
# What's New
### 1.3.0
* [`meld()`](docs/api.md#adding-aspects) is now a function that adds aspects.
	* **DEPRECATED:** `meld.add()`.  Use `meld()` instead.
### 1.2.2
* Remove stray `console.log`.
### 1.2.1
...after = function (target, method, adviceFunc) {
			var aspect = {};
			if(arguments.length === 2) {
				aspect[type] = method;
				return meld(target, aspect);
			} else {
				aspect[type] = adviceFunc;
				return meld(target, method, aspect);
			}
		}...
var myObject = {
	doSomething: function(a, b) {
		return a + b;
	}
};
// Call a function after myObject.doSomething returns
var remover = meld.after(myObject, 'doSomething', function(result) {
	console.log('myObject.doSomething returned: ' + result);
});
myObject.doSomething(1, 2); // Logs: "myObject.doSomething returned: 3"
remover.remove();
...afterReturning = function (target, method, adviceFunc) {
			var aspect = {};
			if(arguments.length === 2) {
				aspect[type] = method;
				return meld(target, aspect);
			} else {
				aspect[type] = adviceFunc;
				return meld(target, method, aspect);
			}
		}n/a
afterThrowing = function (target, method, adviceFunc) {
			var aspect = {};
			if(arguments.length === 2) {
				aspect[type] = method;
				return meld(target, aspect);
			} else {
				aspect[type] = adviceFunc;
				return meld(target, method, aspect);
			}
		}n/a
around = function (target, method, adviceFunc) {
			var aspect = {};
			if(arguments.length === 2) {
				aspect[type] = method;
				return meld(target, aspect);
			} else {
				aspect[type] = adviceFunc;
				return meld(target, method, aspect);
			}
		}n/a
before = function (target, method, adviceFunc) {
			var aspect = {};
			if(arguments.length === 2) {
				aspect[type] = method;
				return meld(target, aspect);
			} else {
				aspect[type] = adviceFunc;
				return meld(target, method, aspect);
			}
		}n/a
function joinpoint() {
		return currentJoinpoint;
	}...
### 1.2.1
* Fix for IE8-specific issue with meld's internal use of `Object.defineProperty`.
* Internally shim Object.create if not available to so that meld no longer requires an Object.create shim to advise constructors
 in pre-ES5 environments.
### 1.2.0
* `meld.joinpoint()` - [Access the current joinpoint](docs/api.md#meldjoinpoint) from
 any advice type.
* [Bundled aspects](docs/aspects.md):
	* trace: trace method call entry/return/throw
	* memoize: simple memoization for methods and functions
	* cache: configurable caching aspect to do more than simple memoization
### 1.1.0
...on = function (target, method, adviceFunc) {
			var aspect = {};
			if(arguments.length === 2) {
				aspect[type] = method;
				return meld(target, aspect);
			} else {
				aspect[type] = adviceFunc;
				return meld(target, method, aspect);
			}
		}n/a