UNPKG

vue-di-kit

Version:
106 lines 3.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("reflect-metadata"); var globalization_1 = require("../globalization"); var argumenter_1 = require("@joejukan/argumenter"); var classification_1 = require("../classification"); var web_kit_1 = require("@joejukan/web-kit"); var function_1 = require("../function"); var V = function_1.getVue(); function Component() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var argue = new argumenter_1.Argumenter(args); var options = argue.object || {}; return function (type) { process(options, type); var _super = findSuper(type.prototype); var extended = _super.extend(options); globalization_1.class_components[web_kit_1.singular(type)] = extended; if (!options.name) { options.name = web_kit_1.singular(type); } globalization_1.components[options.name] = extended; return extended; }; } exports.Component = Component; function findSuper(proto) { var parent = Object.getPrototypeOf(proto); if (parent instanceof V) return parent.constructor; return V; } function isProp(key) { if (key.startsWith('$')) return false; if (key.startsWith('_')) return false; if (key === 'constructor' || key === '__proto__') return false; if (isLCM(key)) return false; return true; } function isLCM(key) { // screen for lifecycle methods if (key.match(/created|destroyed|mounted|updated|activated|deactivated/i)) return true; else if (key.match(/beforeCreate|beforeDestroy|beforeMount|beforeUpdate/i)) return true; // screen for navigation guard methods else if (key.match(/beforeRouteEnter|beforeRouteLeave|beforeRouteUpdate/i)) return true; return false; } function process(options, type) { if (!options.name) options.name = web_kit_1.kebab(type); var vue = new type(); var keys = web_kit_1.properties(vue, true); var data = {}; var props = options.props = {}; options.computed = {}; var watch = options.watch = {}; options.methods = {}; for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = vue[key]; if (isProp(key)) { // TODO: find a more efficient way to get the value. if (Reflect.hasMetadata(key, type.prototype)) { var property = Reflect.getMetadata(key, type.prototype); property.setValue(value); options.props[key] = property; } else if (value instanceof classification_1.Property) { options.props[key] = value; } else if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { data[key] = value; } else if (Array.isArray(value)) { data[key] = value; } else if (typeof value === 'function') { options.methods[key] = value; vue[key] = function () { }; } else if (value instanceof classification_1.Computed) { options.computed[key] = value; } else if (typeof value === 'object') data[key] = value; } else if (typeof value === 'function') { if (isLCM(key)) options[key] = value; } options.data = function () { return web_kit_1.clone(data); }; } } //# sourceMappingURL=component.js.map