UNPKG

typescript-class-helpers

Version:
90 lines 11.5 kB
import { _ } from 'tnp-core/websql'; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWNsYXNzLW5hbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC13ZWJzcWwvdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzL3Byb2plY3RzL3R5cGVzY3JpcHQtY2xhc3MtaGVscGVycy9zcmMvbGliL3NldC1jbGFzcy1uYW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRW5DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBR2hDLFNBQVMsVUFBVTtJQUNqQixNQUFNLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQztJQUN2QixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFRLENBQUM7QUFDbEMsQ0FBQztBQUVELGFBQWE7QUFDYixNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWdCLEVBQUUsU0FBaUIsRUFBRSxPQUFpQztJQUVqRyxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLElBQUk7UUFDekUsV0FBVyxFQUFFLEtBQUssQ0FBQztRQUNuQixTQUFTLEVBQUUsSUFBSTtRQUNmLGtCQUFrQixFQUFFLEtBQUssQ0FBQztRQUMxQixTQUFTLEVBQUUsS0FBSyxDQUFDO1FBQ2pCLFlBQVksRUFBRSxLQUFLO0tBQ08sQ0FBQztJQUU3QixJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FB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QUFDLElBQUksQ0FBQyxHQUFTLFFBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdHLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRTtZQUN0RCxLQUFLLEVBQUUsU0FBUztZQUNoQixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUE7UUFHRixPQUFPLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztJQUNsQyxDQUFDO1NBQU0sSUFBSSxTQUFTLEtBQUssY0FBYyxFQUFFLENBQUM7UUFHeEMsTUFBTSxJQUFJLEdBQUcsSUFBSyxRQUFnQixFQUFFLENBQUM7UUFDckMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFHdkMsQ0FBQztBQUNILENBQUM7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDJFQUEyRSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcbmltcG9ydCB7IFNZTUJPTCB9IGZyb20gJy4vc3ltYm9scyc7XG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBnZXRTdG9yYWdlIH0gZnJvbSAnLi9zdG9yYWdlJztcbmltcG9ydCB7IENMQVNTTkFNRSB9IGZyb20gJy4vY2xhc3NuYW1lJztcbmltcG9ydCB7IENMQVNTIH0gZnJvbSAnLi9pbmRleCc7XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3NlcygpOiBNb2RlbHMuQ2xhc3NNZXRhW10ge1xuICBjb25zdCBzID0gZ2V0U3RvcmFnZSgpO1xuICByZXR1cm4gc1tTWU1CT0wuQ0xBU1NFU10gYXMgYW55O1xufVxuXG4vLyBAdHMtaWdub3JlXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2xhc3NOYW1lKHRhcmdldDogRnVuY3Rpb24sIGNsYXNzTmFtZTogc3RyaW5nLCBvcHRpb25zPzogTW9kZWxzLkNMQVNTTkFNRU9wdGlvbnMpIHtcblxuICBsZXQgeyBjbGFzc0ZhbWlseSwgdW5pcXVlS2V5LCBjbGFzc05hbWVJbkJyb3dzZXIsIHNpbmdsZXRvbiB9ID0gb3B0aW9ucyB8fCB7XG4gICAgY2xhc3NGYW1pbHk6IHZvaWQgMCxcbiAgICB1bmlxdWVLZXk6ICdpZCcsXG4gICAgY2xhc3NOYW1lSW5Ccm93c2VyOiB2b2lkIDAsXG4gICAgc2luZ2xldG9uOiB2b2lkIDAsXG4gICAgYXV0b2luc3RhbmNlOiBmYWxzZVxuICB9IGFzIE1vZGVscy5DTEFTU05BTUVPcHRpb25zO1xuXG4gIGlmICghXy5pc1VuZGVmaW5lZChzaW5nbGV0b24pICYmIF8uaXNCb29sZWFuKHNpbmdsZXRvbikgJiYgc2luZ2xldG9uKSB7XG4gICAgc2luZ2xldG9uID0gJ2ZpcnN0LWluc3RhbmNlJ1xuICB9XG5cbiAgaWYgKCF1bmlxdWVLZXkpIHtcbiAgICB1bmlxdWVLZXkgPSAnaWQnXG4gIH1cblxuICBpZiAodGFyZ2V0KSB7XG4gICAgY29uc3QgY29uZmlnID0gXy5maXJzdChDTEFTU05BTUUuZ2V0Q2xhc3NDb25maWcodGFyZ2V0KSk7XG4gICAgY29uZmlnLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICBjb25maWcudW5pcXVlS2V5ID0gdW5pcXVlS2V5O1xuICAgIGNvbmZpZy5jbGFzc05hbWVJbkJyb3dzZXIgPSBjbGFzc05hbWVJbkJyb3dzZXI7XG5cbiAgfVxuXG4gIGNvbnN0IGV4aXN0ZWQgPSAoZ2V0Q2xhc3NlcygpIGFzIHsgY2xhc3NOYW1lOiBzdHJpbmc7IHRhcmdldDogRnVuY3Rpb247IH1bXSlcbiAgICAuZmluZChmID0+IGYuY2xhc3NOYW1lID09PSBjbGFzc05hbWUpXG5cbiAgaWYgKGV4aXN0ZWQpIHtcbiAgICBleGlzdGVkLnRhcmdldCA9IHRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjbGFzc05hbWVJbkJyb3dzZXIsXG4gICAgICB0YXJnZXQsXG4gICAgICB1bmlxdWVLZXksXG4gICAgICBjbGFzc0ZhbWlseVxuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKGNsYXNzRmFtaWx5KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcywgJ2NsYXNzRmFtaWx5Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICAgICAgICBpZiAoIV8uaXNGdW5jdGlvbihwYXJlbnQpIHx8IHBhcmVudC5uYW1lID09PSAnT2JqZWN0JyB8fCBwYXJlbnQubmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZU5ldyA9IENMQVNTTkFNRS5nZXRDbGFzc05hbWUocGFyZW50KVxuICAgICAgICAgIHJldHVybiBDTEFTU05BTUUuZ2V0Q2xhc3NGYW1pbHlCeUNsYXNzTmFtZShjbGFzc05hbWVOZXcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIGdldENsYXNzZXMoKS5wdXNoKHJlcylcbiAgfVxuICBjb25zdCBPcmlnaW5hbCA9IHRhcmdldDtcblxuXG4gIGlmIChzaW5nbGV0b24gPT09ICdmaXJzdC1pbnN0YW5jZScgfHwgc2luZ2xldG9uID09PSAnbGFzdC1pbnN0YW5jZScpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkZWNvcmF0ZWRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gT3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICAgICAgY29uc3QgZXhpc3RlZFNpbmdsZXRvbiA9IENMQVNTLmdldFNpbmdsZXRvbihPcmlnaW5hbClcbiAgICAgICAgaWYgKCFleGlzdGVkU2luZ2xldG9uIHx8IHNpbmdsZXRvbiA9PT0gJ2xhc3QtaW5zdGFuY2UnKSB7XG4gICAgICAgICAgQ0xBU1Muc2V0U2luZ2xldG9uT2JqKE9yaWdpbmFsLCB0aGlzKVxuICAgICAgICAgIENMQVNTLnNldFNpbmdsZXRvbk9iaihvYmouZGVjb3JhdGVkQ29uc3RydWN0b3IsIHRoaXMpXG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcblxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICB9XG4gICAgfTtcblxuXG4gICAgb2JqLmRlY29yYXRlZENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9yaWdpbmFsLnByb3RvdHlwZTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgT2JqZWN0LmtleXMoT3JpZ2luYWwpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4geyBvYmouZGVjb3JhdGVkQ29uc3RydWN0b3JbbmFtZV0gPSAoPGFueT5PcmlnaW5hbClbbmFtZV07IH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmouZGVjb3JhdGVkQ29uc3RydWN0b3IsICduYW1lJywge1xuICAgICAgdmFsdWU6IGNsYXNzTmFtZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KVxuXG5cbiAgICByZXR1cm4gb2JqLmRlY29yYXRlZENvbnN0cnVjdG9yO1xuICB9IGVsc2UgaWYgKHNpbmdsZXRvbiA9PT0gJ2F1dG9pbnN0YW5jZScpIHtcblxuXG4gICAgY29uc3QgYXV0byA9IG5ldyAoT3JpZ2luYWwgYXMgYW55KSgpO1xuICAgIENMQVNTLnNldFNpbmdsZXRvbk9iaihPcmlnaW5hbCwgYXV0bylcblxuXG4gIH1cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXR5cGVzY3JpcHQtY2xhc3MtaGVscGVycyBsaWIvc2V0LWNsYXNzLW5hbWUudHMiXX0=