UNPKG

typescript-class-helpers

Version:
215 lines 9.67 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CLASS = exports.TchHelpers = exports.SYMBOL = exports.Models = void 0; const lib_1 = require("tnp-core/lib"); const classname_1 = require("./classname"); const describe_class_1 = require("./describe-class"); const set_class_name_1 = require("./set-class-name"); var models_1 = require("./models"); Object.defineProperty(exports, "Models", { enumerable: true, get: function () { return models_1.Models; } }); var symbols_1 = require("./symbols"); Object.defineProperty(exports, "SYMBOL", { enumerable: true, get: function () { return symbols_1.SYMBOL; } }); class TchHelpers { static getBy(className) { return classname_1.CLASSNAME.getClassBy(className); } static getFromObject(o) { if (lib_1._.isUndefined(o) || lib_1._.isNull(o)) { return; } if (o.constructor) { return o.constructor; } const p = Object.getPrototypeOf(o); return p && p.constructor; } static getName(target, production = false) { return classname_1.CLASSNAME.getClassName(target, production); } static getNameFromObject(o) { const fnCLass = this.getFromObject(o); return this.getName(fnCLass); } static getConfigs(target) { return classname_1.CLASSNAME.getClassConfig(target); } static describeProperites(target) { const d1 = (0, describe_class_1.describeFromClassStringify)(target); const d2 = (0, describe_class_1.describeByDefaultModelsAndMapping)(target); let uniq = {}; // @ts-ignore d1.concat(d2).forEach(p => uniq[p] = p); return Object.keys(uniq) .filter(d => !!d) .filter(d => typeof target.prototype[d] !== 'function'); } } exports.TchHelpers = TchHelpers; const notAllowedAsMethodName = [ 'length', 'name', 'arguments', 'caller', 'constructor', 'apply', 'bind', 'call', 'toString', '__defineGetter__', '__defineSetter__', 'hasOwnProperty', '__lookupGetter__', '__lookupSetter__', 'isPrototypeOf', 'propertyIsEnumerable', 'valueOf', '__proto__', 'toLocaleString', ]; const getMethodsNames = (classOrClassInstance, allMethodsNames = []) => { if (!classOrClassInstance) { return allMethodsNames; } const isClassFunction = lib_1._.isFunction(classOrClassInstance); const classFun = (isClassFunction ? classOrClassInstance : Object.getPrototypeOf(classOrClassInstance)); const objectToCheck = isClassFunction ? classOrClassInstance?.prototype : classOrClassInstance; const prototypeObj = Object.getPrototypeOf(objectToCheck || {}); const properties = lib_1._.uniq([ ...Object.getOwnPropertyNames(objectToCheck || {}), ...Object.getOwnPropertyNames(prototypeObj || {}), ...Object.keys(objectToCheck || {}), ...Object.keys(prototypeObj || {}), ]) .filter(f => !!f && !notAllowedAsMethodName.includes(f)); properties.filter((methodName) => typeof objectToCheck[methodName] === 'function').forEach(p => allMethodsNames.push(p)); if (!classFun || !classFun.constructor || classFun?.constructor?.name === 'Object') { return allMethodsNames; } return getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames); }; exports.CLASS = { NAME: classname_1.CLASSNAME.CLASSNAME, setName: set_class_name_1.setClassName, getBy: TchHelpers.getBy, /** * @deprecated */ getSingleton(target) { if (typeof target !== 'function') { console.error(`[typescript-class-helpers][setSingletonObj] Type of target is not a function`); return; } const config = TchHelpers.getConfigs(target)[0]; // console.log(`getSingleton for ${target.name}: `, config.singleton) return config.singleton; }, /** * @deprecated */ setSingletonObj(target, singletonObject) { // console.log('SET SINGLETON', singletonObject) if (typeof target !== 'function') { console.error(`[typescript-class-helpers][setSingletonObj] Type of target is not a function`); return; } if (Array.isArray(singletonObject)) { console.error(`[typescript-class-helpers][setSingletonObj] Singleton instance cant be an array`); return; } if (typeof singletonObject !== 'object') { console.error(`[typescript-class-helpers][setSingletonObj] Singleton instance cant must be a object`); return; } const className = exports.CLASS.getName(target); // console.log(`SINGLETON SET for TARGET ${className}`) const config = TchHelpers.getConfigs(target)[0]; if (config.singleton) { console.warn(`[typescript-class-helpers] You are trying to set singleton of "${className}" second time with different object.`); } config.singleton = singletonObject; }, /** * @deprecated */ getConfigs: TchHelpers.getConfigs, /** * @deprecated */ getConfig: (target) => { return lib_1._.first(TchHelpers.getConfigs(target)); }, getMethodsNames(classOrClassInstance) { return getMethodsNames(classOrClassInstance); }, getFromObject: TchHelpers.getFromObject, getName: TchHelpers.getName, getNameFromObject: TchHelpers.getNameFromObject, describeProperites: TchHelpers.describeProperites, /** * @deprecated */ OBJECT: (obj) => { return { get indexValue() { return classname_1.CLASSNAME.getObjectIndexValue(obj); }, get indexProperty() { return classname_1.CLASSNAME.getObjectIndexPropertyValue(obj); }, get isClassObject() { if (!lib_1._.isObject(obj) || lib_1._.isArray(obj) || lib_1._.isRegExp(obj) || lib_1._.isBuffer(obj) || lib_1._.isArrayBuffer(obj)) { return false; } if (lib_1._.isDate(obj)) { return true; } const className = exports.CLASS.getNameFromObject(obj); return lib_1._.isString(className) && className !== 'Object'; }, isEqual: (anotherObj, compareDeep = false) => { if (!exports.CLASS.OBJECT(obj).isClassObject || !exports.CLASS.OBJECT(anotherObj).isClassObject) { return false; } if (obj === anotherObj) { // console.log(`EQ v1: , v2: - class1 ${CLASS.getNameFromObject(obj)}, class2 ${CLASS.getNameFromObject(anotherObj)}`, obj, anotherObj) return true; } const v1 = classname_1.CLASSNAME.getObjectIndexValue(obj); const v2 = classname_1.CLASSNAME.getObjectIndexValue(anotherObj); const f1 = classname_1.CLASSNAME.getObjectClassFamily(obj); const f2 = classname_1.CLASSNAME.getObjectClassFamily(anotherObj); const isFamilyDiff = (!lib_1._.isString(f1) || !lib_1._.isString(f2) || (f1 !== f2)); // console.log(`DIFF FAMILY ${isFamilyDiff} v1: ${CLASSNAME.getObjectClassFamily(obj)}, v2: ${CLASSNAME.getObjectClassFamily(anotherObj)} - class1 ${CLASS.getNameFromObject(obj)}, class2 ${CLASS.getNameFromObject(anotherObj)}`) if (isFamilyDiff) { // console.log(`DIFF v1: ${v1}, v2: ${v2} - class1 ${CLASS.getNameFromObject(obj)}, class2 ${CLASS.getNameFromObject(anotherObj)}`) return false; } if (!exports.CLASS.OBJECT(obj).isClassObject || !exports.CLASS.OBJECT(anotherObj).isClassObject) { // console.log(`NOT CLASS v1: ${v1}, v2: ${v2} - class1 ${CLASS.getNameFromObject(obj)}, class2 ${CLASS.getNameFromObject(anotherObj)}`) return false; } // console.log(`v1: ${v1} ,class ${CLASS.getNameFromObject(obj)} ,prop: ${CLASS.OBJECT(obj).indexProperty}`) // console.log(`v2: ${v2} ,class ${CLASS.getNameFromObject(anotherObj)} ,prop: ${CLASS.OBJECT(anotherObj).indexProperty}`) // console.log(`v1: ${v1}, v2: ${v2} - class1 ${CLASS.getNameFromObject(obj)}, class2 ${CLASS.getNameFromObject(anotherObj)}`) // console.log('') if ((lib_1._.isNumber(v1) && lib_1._.isNumber(v2)) || (lib_1._.isString(v1) && lib_1._.isString(v2))) { const res = (v1 === v2); // @ts-ignore return res; } if (compareDeep) { return lib_1._.isEqual(v1, v2); } return false; } }; } }; __exportStar(require("enum-values"), exports); //# sourceMappingURL=index.js.map