/* eslint-disable */ /*eslint no-unused-vars: "off" */ /** vue-property-decorator verson 9.0.0 MIT LICENSE copyright 2020 kaorun343 */ /// 'use strict'; import Vue from './vue'; import {Component, createDecorator, mixins } from './vue-class-component'; export { Component, Vue, mixins as Mixins }; /** Used for keying reactive provide/inject properties */ var reactiveInjectKey = '__reactiveInject__'; /** * decorator of an inject * @param from key * @return PropertyDecorator */ export function Inject(options) { return createDecorator(function (componentOptions, key) { if (typeof componentOptions.inject === 'undefined') { componentOptions.inject = {}; } if (!Array.isArray(componentOptions.inject)) { componentOptions.inject[key] = options || key; } }); } /** * decorator of a reactive inject * @param from key * @return PropertyDecorator */ export function InjectReactive(options) { return createDecorator(function (componentOptions, key) { if (typeof componentOptions.inject === 'undefined') { componentOptions.inject = {}; } if (!Array.isArray(componentOptions.inject)) { var fromKey_1 = !!options ? options.from || options : key; var defaultVal_1 = (!!options && options.default) || undefined; if (!componentOptions.computed) componentOptions.computed = {}; componentOptions.computed[key] = function () { var obj = this[reactiveInjectKey]; return obj ? obj[fromKey_1] : defaultVal_1; }; componentOptions.inject[reactiveInjectKey] = reactiveInjectKey; } }); } function produceProvide(original) { var provide = function () { var _this = this; var rv = typeof original === 'function' ? original.call(this) : original; rv = Object.create(rv || null); // set reactive services (propagates previous services if necessary) rv[reactiveInjectKey] = this[reactiveInjectKey] || {}; for (var i in provide.managed) { rv[provide.managed[i]] = this[i]; } var _loop_1 = function (i) { rv[provide.managedReactive[i]] = this_1[i]; // Duplicates the behavior of `@Provide` Object.defineProperty(rv[reactiveInjectKey], provide.managedReactive[i], { enumerable: true, get: function () { return _this[i]; }, }); }; var this_1 = this; for (var i in provide.managedReactive) { _loop_1(i); } return rv; }; provide.managed = {}; provide.managedReactive = {}; return provide; } function needToProduceProvide(original) { return (typeof original !== 'function' || (!original.managed && !original.managedReactive)); } /** * decorator of a provide * @param key key * @return PropertyDecorator | void */ export function Provide(key) { return createDecorator(function (componentOptions, k) { var provide = componentOptions.provide; if (needToProduceProvide(provide)) { provide = componentOptions.provide = produceProvide(provide); } provide.managed[k] = key || k; }); } /** * decorator of a reactive provide * @param key key * @return PropertyDecorator | void */ export function ProvideReactive(key) { return createDecorator(function (componentOptions, k) { var provide = componentOptions.provide; // inject parent reactive services (if any) if (!Array.isArray(componentOptions.inject)) { componentOptions.inject = componentOptions.inject || {}; componentOptions.inject[reactiveInjectKey] = { from: reactiveInjectKey, default: {}, }; } if (needToProduceProvide(provide)) { provide = componentOptions.provide = produceProvide(provide); } provide.managedReactive[k] = key || k; }); } /** @see {@link https://github.com/vuejs/vue-class-component/blob/master/src/reflect.ts} */ var reflectMetadataIsSupported = typeof Reflect !== 'undefined' && typeof Reflect.getMetadata !== 'undefined'; function applyMetadata(options, target, key) { if (reflectMetadataIsSupported) { if (!Array.isArray(options) && typeof options !== 'function' && typeof options.type === 'undefined') { var type = Reflect.getMetadata('design:type', target, key); if (type !== Object) { options.type = type; } } } } /** * decorator of model * @param event event name * @param options options * @return PropertyDecorator */ export function Model(event, options) { if (options === void 0) { options = {}; } return function (target, key) { applyMetadata(options, target, key); createDecorator(function (componentOptions, k) { ; (componentOptions.props || (componentOptions.props = {}))[k] = options; componentOptions.model = { prop: k, event: event || k }; })(target, key); }; } /** * decorator of a prop * @param options the options for the prop * @return PropertyDecorator | void */ export function Prop(options) { if (options === void 0) { options = {}; } return function (target, key) { applyMetadata(options, target, key); createDecorator(function (componentOptions, k) { ; (componentOptions.props || (componentOptions.props = {}))[k] = options; })(target, key); }; } /** * decorator of a synced prop * @param propName the name to interface with from outside, must be different from decorated property * @param options the options for the synced prop * @return PropertyDecorator | void */ export function PropSync(propName, options) { if (options === void 0) { options = {}; } // @ts-ignore return function (target, key) { applyMetadata(options, target, key); createDecorator(function (componentOptions, k) { ; (componentOptions.props || (componentOptions.props = {}))[propName] = options; (componentOptions.computed || (componentOptions.computed = {}))[k] = { get: function () { return this[propName]; }, set: function (value) { // @ts-ignore this.$emit("update:" + propName, value); }, }; })(target, key); }; } /** * decorator of a watch function * @param path the path or the expression to observe * @param WatchOption * @return MethodDecorator */ export function Watch(path, options) { if (options === void 0) { options = {}; } var _a = options.deep, deep = _a === void 0 ? false : _a, _b = options.immediate, immediate = _b === void 0 ? false : _b; return createDecorator(function (componentOptions, handler) { if (typeof componentOptions.watch !== 'object') { componentOptions.watch = Object.create(null); } var watch = componentOptions.watch; if (typeof watch[path] === 'object' && !Array.isArray(watch[path])) { watch[path] = [watch[path]]; } else if (typeof watch[path] === 'undefined') { watch[path] = []; } watch[path].push({ handler: handler, deep: deep, immediate: immediate }); }); } // 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, [emitName].concat(args)); } } else { if (args.length === 0) { _this.$emit(emitName, returnValue); } else if (args.length === 1) { _this.$emit(emitName, returnValue, args[0]); } else { _this.$emit.apply(_this, [emitName, returnValue].concat(args)); } } }; var returnValue = original.apply(this, args); if (isPromise(returnValue)) { returnValue.then(emit); } else { emit(returnValue); } return returnValue; }; }; } /** * decorator of a ref prop * @param refKey the ref key defined in template */ export function Ref(refKey) { return createDecorator(function (options, key) { options.computed = options.computed || {}; options.computed[key] = { cache: false, get: function () { return this.$refs[refKey || key]; }, }; }); } function isPromise(obj) { return obj instanceof Promise || (obj && typeof obj.then === 'function'); }