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'); }