typescript-class-helpers
Version:
Usefull helper to have in your typescript project
1 lines • 10.2 kB
Source Map (JSON)
{"version":3,"file":"typescript-class-helpers-browser.mjs","sources":["../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/typescript-class-helpers.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/typescript-class-helpers-browser.ts"],"sourcesContent":["/* */ \nimport { _, CoreModels, UtilsOs } from 'tnp-core/browser';\nimport { Helpers } from 'tnp-core/browser';\n\nconst REGISTRY_SYMBOL = Symbol.for('TAON.CLASS_REGISTRY');\n\ntype Registry = Map<string, Function>;\n\nfunction getRegistry(): Registry {\n const g = globalThis as any;\n\n if (!g[REGISTRY_SYMBOL]) {\n g[REGISTRY_SYMBOL] = new Map<string, Function>();\n }\n\n return g[REGISTRY_SYMBOL];\n}\n\nconst classes = getRegistry();\n\nexport function getClassName(target: Function): string | undefined {\n if (_.isNil(target)) {\n return void 0;\n }\n if (_.isString(target)) {\n return target;\n }\n\n if (target === Date) {\n return 'Date';\n }\n\n if ((target as any) === FormData) {\n return 'FormData';\n }\n\n if (!_.isFunction(target)) {\n // console.log(target);\n Helpers.log(\n `[typescript-class-helpers][getClassName] target is not a class`,\n );\n return void 0;\n }\n\n if (!_.isNil(target[CoreModels.ClassNameStaticProperty])) {\n return target[CoreModels.ClassNameStaticProperty];\n }\n\n // special thing when cloning classes\n if (target.name?.startsWith('class_')) {\n return '';\n }\n\n return;\n}\n\nexport function getFromObject(o: Object) {\n if (_.isUndefined(o) || _.isNull(o)) {\n return;\n }\n if (o.constructor) {\n return o.constructor;\n }\n const p = Object.getPrototypeOf(o);\n return p && p.constructor;\n}\n\nconst notAllowedAsMethodName = [\n 'length',\n 'name',\n 'arguments',\n 'caller',\n 'constructor',\n 'apply',\n 'bind',\n 'call',\n 'toString',\n '__defineGetter__',\n '__defineSetter__',\n 'hasOwnProperty',\n '__lookupGetter__',\n '__lookupSetter__',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'valueOf',\n '__proto__',\n 'toLocaleString',\n];\n\nexport namespace CLASS {\n /**\n * PLEASE PROVIDE NAME AS TYPED STRING, NOT VARIABLE\n * Decorator requred for production mode\n * @param name Name of class\n */\n export function NAME(className: string) {\n return function (target: Function) {\n return setClassName(target, className);\n } as any;\n }\n\n export function setName(target: Function, className: string) {\n setClassName(target, className);\n }\n\n export function getClassNameFromObjInstanceOrClassFn(\n target: any,\n ): string | undefined {\n if (typeof target === 'object') {\n return getNameFromObject(target);\n }\n return getClassName(target);\n }\n\n export function setClassName(target: Function, className: string): void {\n target[CoreModels.ClassNameStaticProperty] = className;\n classes.set(className, target);\n }\n export function getBy(className: string | Function): Function {\n let res;\n if (Array.isArray(className)) {\n if (className.length !== 1) {\n throw `Mapping error... please use proper class names:\n {\n propertyObject: 'MyClassName',\n propertyWithArray: ['MyClassName']\n }\n\n `;\n }\n className = className[0];\n }\n if (typeof className === 'function') {\n // TODO QUICK_FIX\n res = className;\n }\n if (className === 'Date') {\n res = Date;\n }\n\n if (className === 'FormData') {\n res = FormData;\n }\n\n const classFromMap = classes.get(className as string);\n return classFromMap ? classFromMap : res;\n }\n\n export function getFromObject(o: Object): Function | undefined{\n if (_.isUndefined(o) || _.isNull(o)) {\n return;\n }\n if (o.constructor) {\n return o.constructor;\n }\n const p = Object.getPrototypeOf(o);\n return p && p.constructor;\n }\n\n export function getName(target: Function): string | undefined {\n return getClassName(target) as string;\n }\n export function getNameFromObject(o: Object): string | undefined {\n const fnCLass = getFromObject(o);\n return getName(fnCLass);\n }\n\n export const getMethodsNames = (\n classOrClassInstance: any,\n allMethodsNames = [],\n ): string[] => {\n if (!classOrClassInstance) {\n return allMethodsNames;\n }\n\n const isClassFunction = _.isFunction(classOrClassInstance);\n const classFun = isClassFunction\n ? classOrClassInstance\n : Object.getPrototypeOf(classOrClassInstance);\n const objectToCheck = isClassFunction\n ? (classOrClassInstance as Function)?.prototype\n : classOrClassInstance;\n const prototypeObj = Object.getPrototypeOf(objectToCheck || {});\n\n const properties = _.uniq([\n ...Object.getOwnPropertyNames(objectToCheck || {}),\n ...Object.getOwnPropertyNames(prototypeObj || {}),\n ...Object.keys(objectToCheck || {}),\n ...Object.keys(prototypeObj || {}),\n ]).filter(f => !!f && !notAllowedAsMethodName.includes(f));\n\n properties\n .filter(methodName => typeof objectToCheck[methodName] === 'function')\n .forEach(p => allMethodsNames.push(p));\n\n if (\n !classFun ||\n !classFun.constructor ||\n classFun?.constructor?.name === 'Object'\n ) {\n return allMethodsNames;\n }\n return getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}