UNPKG

typescript-class-helpers

Version:
90 lines 11.5 kB
import { _ } from 'tnp-core/browser'; import { SYMBOL } from './symbols'; import { getStorage } from './storage'; import { CLASSNAME } from './classname'; import { CLASS } from './index'; function getClasses() { const s = getStorage(); return s[SYMBOL.CLASSES]; } // @ts-ignore export function setClassName(target, className, options) { let { classFamily, uniqueKey, classNameInBrowser, singleton } = options || { classFamily: void 0, uniqueKey: 'id', classNameInBrowser: void 0, singleton: void 0, autoinstance: false }; if (!_.isUndefined(singleton) && _.isBoolean(singleton) && singleton) { singleton = 'first-instance'; } if (!uniqueKey) { uniqueKey = 'id'; } if (target) { const config = _.first(CLASSNAME.getClassConfig(target)); config.className = className; config.uniqueKey = uniqueKey; config.classNameInBrowser = classNameInBrowser; } const existed = getClasses() .find(f => f.className === className); if (existed) { existed.target = target; } else { const res = { className, classNameInBrowser, target, uniqueKey, classFamily }; if (_.isUndefined(classFamily)) { Object.defineProperty(res, 'classFamily', { get: function () { const parent = Object.getPrototypeOf(target); if (!_.isFunction(parent) || parent.name === 'Object' || parent.name === '') { return className; } const classNameNew = CLASSNAME.getClassName(parent); return CLASSNAME.getClassFamilyByClassName(classNameNew); } }); } getClasses().push(res); } const Original = target; if (singleton === 'first-instance' || singleton === 'last-instance') { const obj = { // @ts-ignore decoratedConstructor: function (...args) { const context = Original.apply(this, args); const existedSingleton = CLASS.getSingleton(Original); if (!existedSingleton || singleton === 'last-instance') { CLASS.setSingletonObj(Original, this); CLASS.setSingletonObj(obj.decoratedConstructor, this); } else { } return context; } }; obj.decoratedConstructor.prototype = Original.prototype; // @ts-ignore Object.keys(Original).forEach((name) => { obj.decoratedConstructor[name] = Original[name]; }); Object.defineProperty(obj.decoratedConstructor, 'name', { value: className, configurable: true, }); return obj.decoratedConstructor; } else if (singleton === 'autoinstance') { const auto = new Original(); CLASS.setSingletonObj(Original, auto); } } ; ({}); // @--end-of-file-for-module=typescript-class-helpers lib/set-class-name.ts //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWNsYXNzLW5hbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnMvcHJvamVjdHMvdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzL3NyYy9saWIvc2V0LWNsYXNzLW5hbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHaEMsU0FBUyxVQUFVO0lBQ2pCLE1BQU0sQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQVEsQ0FBQztBQUNsQyxDQUFDO0FBRUQsYUFBYTtBQUNiLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBZ0IsRUFBRSxTQUFpQixFQUFFLE9BQWlDO0lBRWpHLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sSUFBSTtRQUN6RSxXQUFXLEVBQUUsS0FBSyxDQUFDO1FBQ25CLFNBQVMsRUFBRSxJQUFJO1FBQ2Ysa0JBQWtCLEVBQUUsS0FBSyxDQUFDO1FBQzFCLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDakIsWUFBWSxFQUFFLEtBQUs7S0FDTyxDQUFDO0lBRTdCLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7UUFDckUsU0FB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SSxDQUFDLEdBQVMsUUFBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0csTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFO1lBQ3RELEtBQUssRUFBRSxTQUFTO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQTtRQUdGLE9BQU8sR0FBRyxDQUFDLG9CQUFvQixDQUFDO0lBQ2xDLENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUd4QyxNQUFNLElBQUksR0FBRyxJQUFLLFFBQWdCLEVBQUUsQ0FBQztRQUNyQyxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUd2QyxDQUFDO0FBQ0gsQ0FBQztBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsMkVBQTJFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IF8gfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmltcG9ydCB7IFNZTUJPTCB9IGZyb20gJy4vc3ltYm9scyc7XG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBnZXRTdG9yYWdlIH0gZnJvbSAnLi9zdG9yYWdlJztcbmltcG9ydCB7IENMQVNTTkFNRSB9IGZyb20gJy4vY2xhc3NuYW1lJztcbmltcG9ydCB7IENMQVNTIH0gZnJvbSAnLi9pbmRleCc7XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3NlcygpOiBNb2RlbHMuQ2xhc3NNZXRhW10ge1xuICBjb25zdCBzID0gZ2V0U3RvcmFnZSgpO1xuICByZXR1cm4gc1tTWU1CT0wuQ0xBU1NFU10gYXMgYW55O1xufVxuXG4vLyBAdHMtaWdub3JlXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2xhc3NOYW1lKHRhcmdldDogRnVuY3Rpb24sIGNsYXNzTmFtZTogc3RyaW5nLCBvcHRpb25zPzogTW9kZWxzLkNMQVNTTkFNRU9wdGlvbnMpIHtcblxuICBsZXQgeyBjbGFzc0ZhbWlseSwgdW5pcXVlS2V5LCBjbGFzc05hbWVJbkJyb3dzZXIsIHNpbmdsZXRvbiB9ID0gb3B0aW9ucyB8fCB7XG4gICAgY2xhc3NGYW1pbHk6IHZvaWQgMCxcbiAgICB1bmlxdWVLZXk6ICdpZCcsXG4gICAgY2xhc3NOYW1lSW5Ccm93c2VyOiB2b2lkIDAsXG4gICAgc2luZ2xldG9uOiB2b2lkIDAsXG4gICAgYXV0b2luc3RhbmNlOiBmYWxzZVxuICB9IGFzIE1vZGVscy5DTEFTU05BTUVPcHRpb25zO1xuXG4gIGlmICghXy5pc1VuZGVmaW5lZChzaW5nbGV0b24pICYmIF8uaXNCb29sZWFuKHNpbmdsZXRvbikgJiYgc2luZ2xldG9uKSB7XG4gICAgc2luZ2xldG9uID0gJ2ZpcnN0LWluc3RhbmNlJ1xuICB9XG5cbiAgaWYgKCF1bmlxdWVLZXkpIHtcbiAgICB1bmlxdWVLZXkgPSAnaWQnXG4gIH1cblxuICBpZiAodGFyZ2V0KSB7XG4gICAgY29uc3QgY29uZmlnID0gXy5maXJzdChDTEFTU05BTUUuZ2V0Q2xhc3NDb25maWcodGFyZ2V0KSk7XG4gICAgY29uZmlnLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICBjb25maWcudW5pcXVlS2V5ID0gdW5pcXVlS2V5O1xuICAgIGNvbmZpZy5jbGFzc05hbWVJbkJyb3dzZXIgPSBjbGFzc05hbWVJbkJyb3dzZXI7XG5cbiAgfVxuXG4gIGNvbnN0IGV4aXN0ZWQgPSAoZ2V0Q2xhc3NlcygpIGFzIHsgY2xhc3NOYW1lOiBzdHJpbmc7IHRhcmdldDogRnVuY3Rpb247IH1bXSlcbiAgICAuZmluZChmID0+IGYuY2xhc3NOYW1lID09PSBjbGFzc05hbWUpXG5cbiAgaWYgKGV4aXN0ZWQpIHtcbiAgICBleGlzdGVkLnRhcmdldCA9IHRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjbGFzc05hbWVJbkJyb3dzZXIsXG4gICAgICB0YXJnZXQsXG4gICAgICB1bmlxdWVLZXksXG4gICAgICBjbGFzc0ZhbWlseVxuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKGNsYXNzRmFtaWx5KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcywgJ2NsYXNzRmFtaWx5Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbihwYXJlbnQpIHx8IHBhcmVudC5uYW1lID09PSAnT2JqZWN0JyB8fCBwYXJlbnQubmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZU5ldyA9IENMQVNTTkFNRS5nZXRDbGFzc05hbWUocGFyZW50KVxuICAgICAgICAgIHJldHVybiBDTEFTU05BTUUuZ2V0Q2xhc3NGYW1pbHlCeUNsYXNzTmFtZShjbGFzc05hbWVOZXcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIGdldENsYXNzZXMoKS5wdXNoKHJlcylcbiAgfVxuICBjb25zdCBPcmlnaW5hbCA9IHRhcmdldDtcblxuXG4gIGlmIChzaW5nbGV0b24gPT09ICdmaXJzdC1pbnN0YW5jZScgfHwgc2luZ2xldG9uID09PSAnbGFzdC1pbnN0YW5jZScpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkZWNvcmF0ZWRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gT3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICAgICAgY29uc3QgZXhpc3RlZFNpbmdsZXRvbiA9IENMQVNTLmdldFNpbmdsZXRvbihPcmlnaW5hbClcbiAgICAgICAgaWYgKCFleGlzdGVkU2luZ2xldG9uIHx8IHNpbmdsZXRvbiA9PT0gJ2xhc3QtaW5zdGFuY2UnKSB7XG4gICAgICAgICAgQ0xBU1Muc2V0U2luZ2xldG9uT2JqKE9yaWdpbmFsLCB0aGlzKVxuICAgICAgICAgIENMQVNTLnNldFNpbmdsZXRvbk9iaihvYmouZGVjb3JhdGVkQ29uc3RydWN0b3IsIHRoaXMpXG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcblxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICB9XG4gICAgfTtcblxuXG4gICAgb2JqLmRlY29yYXRlZENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9yaWdpbmFsLnByb3RvdHlwZTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgT2JqZWN0LmtleXMoT3JpZ2luYWwpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4geyBvYmouZGVjb3JhdGVkQ29uc3RydWN0b3JbbmFtZV0gPSAoPGFueT5PcmlnaW5hbClbbmFtZV07IH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmouZGVjb3JhdGVkQ29uc3RydWN0b3IsICduYW1lJywge1xuICAgICAgdmFsdWU6IGNsYXNzTmFtZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KVxuXG5cbiAgICByZXR1cm4gb2JqLmRlY29yYXRlZENvbnN0cnVjdG9yO1xuICB9IGVsc2UgaWYgKHNpbmdsZXRvbiA9PT0gJ2F1dG9pbnN0YW5jZScpIHtcblxuXG4gICAgY29uc3QgYXV0byA9IG5ldyAoT3JpZ2luYWwgYXMgYW55KSgpO1xuICAgIENMQVNTLnNldFNpbmdsZXRvbk9iaihPcmlnaW5hbCwgYXV0bylcblxuXG4gIH1cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXR5cGVzY3JpcHQtY2xhc3MtaGVscGVycyBsaWIvc2V0LWNsYXNzLW5hbWUudHMiXX0=