var __spreadArrays = (this && this.__spreadArrays) || function () {
|
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
r[k] = a[j];
|
return r;
|
};
|
// Code copied from Vue/src/shared/util.js
|
var hyphenateRE = /\B([A-Z])/g;
|
var hyphenate = function (str) { return str.replace(hyphenateRE, '-$1').toLowerCase(); };
|
/**
|
* decorator of an event-emitter function
|
* @param event The name of the event
|
* @return MethodDecorator
|
*/
|
export function Emit(event) {
|
return function (_target, propertyKey, descriptor) {
|
var key = hyphenate(propertyKey);
|
var original = descriptor.value;
|
descriptor.value = function emitter() {
|
var _this = this;
|
var args = [];
|
for (var _i = 0; _i < arguments.length; _i++) {
|
args[_i] = arguments[_i];
|
}
|
var emit = function (returnValue) {
|
var emitName = event || key;
|
if (returnValue === undefined) {
|
if (args.length === 0) {
|
_this.$emit(emitName);
|
}
|
else if (args.length === 1) {
|
_this.$emit(emitName, args[0]);
|
}
|
else {
|
_this.$emit.apply(_this, __spreadArrays([emitName], args));
|
}
|
}
|
else {
|
args.unshift(returnValue);
|
_this.$emit.apply(_this, __spreadArrays([emitName], args));
|
}
|
};
|
var returnValue = original.apply(this, args);
|
if (isPromise(returnValue)) {
|
returnValue.then(emit);
|
}
|
else {
|
emit(returnValue);
|
}
|
return returnValue;
|
};
|
};
|
}
|
function isPromise(obj) {
|
return obj instanceof Promise || (obj && typeof obj.then === 'function');
|
}
|