UNPKG

typescript-class-helpers

Version:
192 lines (191 loc) 7.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CLASSNAME = void 0; const lib_1 = require("tnp-core/lib"); const models_1 = require("./models"); const symbols_1 = require("./symbols"); const index_1 = require("./index"); const lib_2 = require("tnp-core/lib"); const storage_1 = require("./storage"); const set_class_name_1 = require("./set-class-name"); const registerd_db_1 = require("./registerd-db"); const errors_messages_1 = require("./errors-messages"); //#region @backend const FormData = require("form-data"); //#endregion function getClasses() { const s = (0, storage_1.getStorage)(); return s[symbols_1.SYMBOL.CLASSES]; } var CLASSNAME; (function (CLASSNAME_1) { function getClassConfig(target, configs = [], callerTarget) { if (!lib_1._.isFunction(target)) { throw `[typescript-class-helper][getClassConfig] Cannot get class config from: ${target}`; } let config; const parentClass = Object.getPrototypeOf(target); const isValidParent = lib_1._.isFunction(parentClass) && parentClass.name !== ''; if (registerd_db_1.registerd.classes.includes(target)) { config = registerd_db_1.registerd.configs[registerd_db_1.registerd.classes.findIndex(c => c === target)]; } else { config = new models_1.Models.ClassConfig(); config.classReference = target; registerd_db_1.registerd.classes.push(target); } registerd_db_1.registerd.configs[registerd_db_1.registerd.classes.findIndex(c => c === target)] = config; if (callerTarget) { const callerTargetConfig = registerd_db_1.registerd.configs[registerd_db_1.registerd.classes.findIndex(c => c === callerTarget)]; if (!config.vChildren.includes(callerTargetConfig)) { config.vChildren.push(callerTargetConfig); } callerTargetConfig.vParent = config; } configs.push(config); return isValidParent ? getClassConfig(parentClass, configs, target) : configs; } CLASSNAME_1.getClassConfig = getClassConfig; /** * PLEASE PROVIDE NAME AS TYPED STRING, NOT VARIABLE * Decorator requred for production mode * @param name Name of class */ function CLASSNAME(className, options) { return function (target) { // console.log(`CLASSNAME Inited ${className}`) return (0, set_class_name_1.setClassName)(target, className, options); }; } CLASSNAME_1.CLASSNAME = CLASSNAME; function getClassName(target, production = false) { if (lib_1._.isNil(target)) { // console.log(target); // Helpers.warn(`[typescript-class-helpers][getClassName] target is nil`) return void 0; } if (lib_1._.isString(target)) { // console.log(target); lib_2.Helpers.log(`[typescript-class-helpers][getClassName] target is string: '${target}', produciton: ${production}`); return target; } if (!lib_1._.isFunction(target)) { // console.log(target); lib_2.Helpers.log(`[typescript-class-helpers][getClassName] target is not a class`); return void 0; } if (target[symbols_1.SYMBOL.ClassNameStaticProperty]) { return target[symbols_1.SYMBOL.ClassNameStaticProperty]; } const configs = getClassConfig(target); const config = lib_1._.first(configs); const classNameInBrowser = config?.classNameInBrowser; if (lib_2.Helpers.isBrowser && lib_1._.isString(classNameInBrowser)) { return classNameInBrowser; } const className = config?.className; if (typeof className === 'string') { return className; } if (production) { console.log('class without @CLASS.NAME deocrator', target); throw new Error(errors_messages_1.ERROR_MSG_CLASS_WITHOUT_DECORATOR); } else { // Helpers.log('check for ' + target.name) // setTimeout(() => { // // Helpers.log('check for ' + target.name + ' === ' + config.className)/ // // TODO this may work, but not yet in singleton/morphi // if (!config.className) { // if (target?.name && target.name !== 'Object') { // ConfigHelpers.log(`[typescript-class-helpers] Please use @CLASS.NAME` // + `('${(target?.name && !!target.name) ? target.name : '...'}') decorator for class ${target?.name}`) // } // } // }) } // special thing when cloning classes if (target.name?.startsWith('class_')) { return ''; } return target.name; } CLASSNAME_1.getClassName = getClassName; // @ts-ignore function getObjectIndexPropertyValue(obj) { const className = index_1.TchHelpers.getNameFromObject(obj); // console.log('className',className) let c = getClasses().find(c => c.className === className); // console.log('c',c) if (c) { return c.uniqueKey; } } CLASSNAME_1.getObjectIndexPropertyValue = getObjectIndexPropertyValue; // @ts-ignore function getClassFamilyByClassName(className) { let c = getClasses().find(c => c.className === className); // console.log('getClasses()', getClasses()) if (c) { return c.classFamily; } } CLASSNAME_1.getClassFamilyByClassName = getClassFamilyByClassName; // @ts-ignore function getObjectClassFamily(obj) { const className = index_1.TchHelpers.getNameFromObject(obj); // console.log('className',className) let c = getClasses().find(c => c.className === className); // console.log('c',c) if (c) { return c.classFamily; } } CLASSNAME_1.getObjectClassFamily = getObjectClassFamily; function getObjectIndexValue(obj) { const className = index_1.TchHelpers.getNameFromObject(obj); // console.log('className',className) let c = getClasses().find(c => c.className === className); // console.log('c',c) if (c && lib_1._.isString(c.uniqueKey)) { return obj[c.uniqueKey]; } } CLASSNAME_1.getObjectIndexValue = getObjectIndexValue; function getClassBy(className) { let res; if (Array.isArray(className)) { if (className.length !== 1) { throw `Mapping error... please use proper class names: { propertyObject: 'MyClassName', propertyWithArray: ['MyClassName'] } `; } className = className[0]; } if (typeof className === 'function') { // TODO QUICK_FIX res = className; } if (className === 'Date') { res = Date; } if (className === 'FormData') { res = FormData; } let c = getClasses().find(c => c.className === className); if (c) { res = c.target; } // console.log(`getClassBy "${className} return \n\n ${res} \n\n`) // @ts-ignore return res; } CLASSNAME_1.getClassBy = getClassBy; })(CLASSNAME || (exports.CLASSNAME = CLASSNAME = {})); //# sourceMappingURL=classname.js.map