typescript-class-helpers 16.100.8 → 16.100.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  THIS FILE IS GENERATED. THIS FILE IS GENERATED. THIS FILE IS GENERATED.
2
2
 
3
- Assets from this folder are being shipped with this npm package (typescript-class-helpers@16.100.8)
3
+ Assets from this folder are being shipped with this npm package (typescript-class-helpers@16.100.9)
4
4
  created from this project.
5
5
 
6
6
  THIS FILE IS GENERATED.THIS FILE IS GENERATED. THIS FILE IS GENERATED.
@@ -39,13 +39,39 @@ export class TchHelpers {
39
39
  .filter(d => typeof target.prototype[d] !== 'function');
40
40
  }
41
41
  }
42
- const notAllowed = [
42
+ const notAllowedAsMethodName = [
43
43
  'length', 'name',
44
44
  'arguments', 'caller',
45
45
  'constructor', 'apply',
46
46
  'bind', 'call',
47
- 'toString'
47
+ 'toString',
48
+ '__defineGetter__',
49
+ '__defineSetter__', 'hasOwnProperty',
50
+ '__lookupGetter__', '__lookupSetter__',
51
+ 'isPrototypeOf', 'propertyIsEnumerable',
52
+ 'valueOf', '__proto__', 'toLocaleString',
48
53
  ];
54
+ const getMethodsNames = (classOrClassInstance, allMethodsNames = []) => {
55
+ if (!classOrClassInstance) {
56
+ return allMethodsNames;
57
+ }
58
+ const isClassFunction = _.isFunction(classOrClassInstance);
59
+ const classFun = (isClassFunction ? classOrClassInstance : Object.getPrototypeOf(classOrClassInstance));
60
+ const objectToCheck = isClassFunction ? classOrClassInstance?.prototype : classOrClassInstance;
61
+ const prototypeObj = Object.getPrototypeOf(objectToCheck || {});
62
+ const properties = _.uniq([
63
+ ...Object.getOwnPropertyNames(objectToCheck || {}),
64
+ ...Object.getOwnPropertyNames(prototypeObj || {}),
65
+ ...Object.keys(objectToCheck || {}),
66
+ ...Object.keys(prototypeObj || {}),
67
+ ])
68
+ .filter(f => !!f && !notAllowedAsMethodName.includes(f));
69
+ properties.filter((methodName) => typeof objectToCheck[methodName] === 'function').forEach(p => allMethodsNames.push(p));
70
+ if (!classFun || !classFun.constructor || classFun?.constructor?.name === 'Object') {
71
+ return allMethodsNames;
72
+ }
73
+ return getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);
74
+ };
49
75
  export const CLASS = {
50
76
  NAME: CLASSNAME.CLASSNAME,
51
77
  setName: setClassName,
@@ -94,21 +120,8 @@ export const CLASS = {
94
120
  getConfig: (target) => {
95
121
  return _.first(TchHelpers.getConfigs(target));
96
122
  },
97
- getMethodsNames(classOrClassInstance, allMethodsNames = []) {
98
- if (!classOrClassInstance) {
99
- return allMethodsNames;
100
- }
101
- const isFun = _.isFunction(classOrClassInstance);
102
- const classFun = (isFun ? classOrClassInstance : Object.getPrototypeOf(classOrClassInstance));
103
- const objectToCheck = isFun ? classOrClassInstance?.prototype : classOrClassInstance;
104
- const ooo = Object.getPrototypeOf(objectToCheck || {});
105
- const properties = ((isFun ? Object.keys(objectToCheck || {}) : (!!ooo ? Object.getOwnPropertyNames(ooo) : [])) || [])
106
- .filter(f => !notAllowed.includes(f));
107
- properties.filter((methodName) => typeof objectToCheck[methodName] === 'function').forEach(p => allMethodsNames.push(p));
108
- if (!classFun || !classFun.constructor || classFun?.constructor?.name === 'Object') {
109
- return allMethodsNames;
110
- }
111
- return CLASS.getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);
123
+ getMethodsNames(classOrClassInstance) {
124
+ return getMethodsNames(classOrClassInstance);
112
125
  },
113
126
  getFromObject: TchHelpers.getFromObject,
114
127
  getName: TchHelpers.getName,
@@ -170,4 +183,4 @@ export const CLASS = {
170
183
  export * from 'enum-values';
171
184
  ;
172
185
  ({}); // @--end-of-file-for-module=typescript-class-helpers lib/index.ts
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnMvcHJvamVjdHMvdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLGlDQUFpQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuQyxNQUFNLE9BQU8sVUFBVTtJQUVyQixNQUFNLENBQUMsS0FBSyxDQUFDLFNBQTRCO1FBQ3ZDLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFTO1FBQzVCLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNqQixPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUM7U0FDdEI7UUFDRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBZ0IsRUFB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QyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUV6RSxJQUFJLFlBQVksRUFBRTtvQkFFaEIsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLEVBQUU7b0JBRS9FLE9BQU8sS0FBSyxDQUFBO2lCQUNiO2dCQU1ELElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO29CQUU1RSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDeEIsYUFBYTtvQkFDYixPQUFPLEdBQUcsQ0FBQztpQkFDWjtnQkFDRCxJQUFJLFdBQVcsRUFBRTtvQkFDZixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO2lCQUN6QjtnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7U0FDRixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUFFRCxjQUFjLGFBQWEsQ0FBQztBQUUzQixDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtFQUFrRSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBDTEFTU05BTUUgfSBmcm9tICcuL2NsYXNzbmFtZSc7XG5pbXBvcnQgeyBkZXNjcmliZUZyb21DbGFzc1N0cmluZ2lmeSwgZGVzY3JpYmVCeURlZmF1bHRNb2RlbHNBbmRNYXBwaW5nIH0gZnJvbSAnLi9kZXNjcmliZS1jbGFzcyc7XG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBzZXRDbGFzc05hbWUgfSBmcm9tICcuL3NldC1jbGFzcy1uYW1lJztcblxuZXhwb3J0IHsgTW9kZWxzIH0gZnJvbSAnLi9tb2RlbHMnO1xuZXhwb3J0IHsgU1lNQk9MIH0gZnJvbSAnLi9zeW1ib2xzJztcblxuZXhwb3J0IGNsYXNzIFRjaEhlbHBlcnMge1xuXG4gIHN0YXRpYyBnZXRCeShjbGFzc05hbWU6IHN0cmluZyB8IEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIENMQVNTTkFNRS5nZXRDbGFzc0J5KGNsYXNzTmFtZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RnJvbU9iamVjdChvOiBPYmplY3QpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChvKSB8fCBfLmlzTnVsbChvKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoby5jb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIG8uY29uc3RydWN0b3I7XG4gICAgfVxuICAgIGNvbnN0IHAgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgcmV0dXJuIHAgJiYgcC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXROYW1lKHRhcmdldDogRnVuY3Rpb24sIHByb2R1Y3Rpb24gPSBmYWxzZSkge1xuICAgIHJldHVybiBDTEFTU05BTUUuZ2V0Q2xhc3NOYW1lKHRhcmdldCwgcHJvZHVjdGlvbikgYXMgc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGdldE5hbWVGcm9tT2JqZWN0KG86IE9iamVjdCkge1xuICAgIGNvbnN0IGZuQ0xhc3MgPSB0aGlzLmdldEZyb21PYmplY3Qobyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmFtZShmbkNMYXNzKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRDb25maWdzKHRhcmdldDogRnVuY3Rpb24pOiBNb2RlbHMuQ2xhc3NDb25maWdbXSB7XG4gICAgcmV0dXJuIENMQVNTTkFNRS5nZXRDbGFzc0NvbmZpZyh0YXJnZXQpXG4gIH1cblxuICBzdGF0aWMgZGVzY3JpYmVQcm9wZXJpdGVzKHRhcmdldDogRnVuY3Rpb24pIHtcbiAgICBjb25zdCBkMSA9IGRlc2NyaWJlRnJvbUNsYXNzU3RyaW5naWZ5KHRhcmdldCk7XG4gICAgY29uc3QgZDIgPSBkZXNjcmliZUJ5RGVmYXVsdE1vZGVsc0FuZE1hcHBpbmcodGFyZ2V0KTtcbiAgICBsZXQgdW5pcSA9IHt9O1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBkMS5jb25jYXQoZDIpLmZvckVhY2gocCA9PiB1bmlxW3BdID0gcCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHVuaXEpXG4gICAgICAuZmlsdGVyKGQgPT4gISFkKVxuICAgICAgLmZpbHRlcihkID0+IHR5cGVvZiB0YXJnZXQucHJvdG90eXBlW2RdICE9PSAnZnVuY3Rpb24nKVxuICB9XG5cbn1cblxuY29uc3Qgbm90QWxsb3dlZCA9IFtcbiAgJ2xlbmd0aCcsICduYW1lJyxcbiAgJ2FyZ3VtZW50cycsICdjYWxsZXInLFxuICAnY29uc3RydWN0b3InLCAnYXBwbHknLFxuICAnYmluZCcsICdjYWxsJyxcbiAgJ3RvU3RyaW5nJ1xuXVxuXG5leHBvcnQgY29uc3QgQ0xBU1MgPSB7XG4gIE5BTUU6IENMQVNTTkFNRS5DTEFTU05BTUUsXG4gIHNldE5hbWU6IHNldENsYXNzTmFtZSxcbiAgZ2V0Qnk6IFRjaEhlbHBlcnMuZ2V0QnksXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0U2luZ2xldG9uPFQgPSBhbnk+KHRhcmdldDogRnVuY3Rpb24pIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihgW3R5cGVzY3JpcHQtY2xhc3MtaGVscGVyc11bc2V0U2luZ2xldG9uT2JqXSBUeXBlIG9mIHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbmApXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gVGNoSGVscGVycy5nZXRDb25maWdzKHRhcmdldClbMF1cblxuXG4gICAgcmV0dXJuIGNvbmZpZy5zaW5nbGV0b24gYXMgVDtcbiAgfSxcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBzZXRTaW5nbGV0b25PYmoodGFyZ2V0OiBGdW5jdGlvbiwgc2luZ2xldG9uT2JqZWN0OiBhbnkpIHtcblxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzXVtzZXRTaW5nbGV0b25PYmpdIFR5cGUgb2YgdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uYClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHNpbmdsZXRvbk9iamVjdCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFt0eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnNdW3NldFNpbmdsZXRvbk9ial0gU2luZ2xldG9uIGluc3RhbmNlIGNhbnQgYmUgYW4gYXJyYXlgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzaW5nbGV0b25PYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzXVtzZXRTaW5nbGV0b25PYmpdIFNpbmdsZXRvbiBpbnN0YW5jZSBjYW50IG11c3QgYmUgYSBvYmplY3RgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gQ0xBU1MuZ2V0TmFtZSh0YXJnZXQpO1xuXG5cblxuICAgIGNvbnN0IGNvbmZpZyA9IFRjaEhlbHBlcnMuZ2V0Q29uZmlncyh0YXJnZXQpWzBdXG5cbiAgICBpZiAoY29uZmlnLnNpbmdsZXRvbikge1xuICAgICAgY29uc29sZS53YXJuKGBbdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzXSBZb3UgYXJlIHRyeWluZyB0byBzZXQgc2luZ2xldG9uIG9mIFwiJHtjbGFzc05hbWV9XCIgc2Vjb25kIHRpbWUgd2l0aCBkaWZmZXJlbnQgb2JqZWN0LmApXG4gICAgfVxuXG4gICAgY29uZmlnLnNpbmdsZXRvbiA9IHNpbmdsZXRvbk9iamVjdDtcbiAgfSxcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBnZXRDb25maWdzOiBUY2hIZWxwZXJzLmdldENvbmZpZ3MsXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0Q29uZmlnOiAodGFyZ2V0OiBGdW5jdGlvbikgPT4ge1xuICAgIHJldHVybiBfLmZpcnN0KFRjaEhlbHBlcnMuZ2V0Q29uZmlncyh0YXJnZXQpKTtcbiAgfSxcblxuICBnZXRNZXRob2RzTmFtZXMoY2xhc3NPckNsYXNzSW5zdGFuY2U6IGFueSwgYWxsTWV0aG9kc05hbWVzID0gW10pOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFjbGFzc09yQ2xhc3NJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIGFsbE1ldGhvZHNOYW1lcztcbiAgICB9XG5cbiAgICBjb25zdCBpc0Z1biA9IF8uaXNGdW5jdGlvbihjbGFzc09yQ2xhc3NJbnN0YW5jZSk7XG4gICAgY29uc3QgY2xhc3NGdW4gPSAoaXNGdW4gPyBjbGFzc09yQ2xhc3NJbnN0YW5jZSA6IE9iamVjdC5nZXRQcm90b3R5cGVPZihjbGFzc09yQ2xhc3NJbnN0YW5jZSkpO1xuICAgIGNvbnN0IG9iamVjdFRvQ2hlY2sgPSBpc0Z1biA/IChjbGFzc09yQ2xhc3NJbnN0YW5jZSBhcyBGdW5jdGlvbik/LnByb3RvdHlwZSA6IGNsYXNzT3JDbGFzc0luc3RhbmNlO1xuXG4gICAgY29uc3Qgb29vID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdFRvQ2hlY2sgfHwge30pO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSAoKGlzRnVuID8gT2JqZWN0LmtleXMob2JqZWN0VG9DaGVjayB8fCB7fSkgOiAoISFvb28gPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvb28pIDogW10pKSB8fCBbXSlcbiAgICAgIC5maWx0ZXIoZiA9PiAhbm90QWxsb3dlZC5pbmNsdWRlcyhmKSk7XG5cblxuXG5cblxuXG4gICAgcHJvcGVydGllcy5maWx0ZXIoKG1ldGhvZE5hbWUpID0+IHR5cGVvZiBvYmplY3RUb0NoZWNrW21ldGhvZE5hbWVdID09PSAnZnVuY3Rpb24nKS5mb3JFYWNoKHAgPT4gYWxsTWV0aG9kc05hbWVzLnB1c2gocCkpO1xuICAgIGlmICghY2xhc3NGdW4gfHwgIWNsYXNzRnVuLmNvbnN0cnVjdG9yIHx8IGNsYXNzRnVuPy5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ09iamVjdCcpIHtcbiAgICAgIHJldHVybiBhbGxNZXRob2RzTmFtZXM7XG4gICAgfVxuICAgIHJldHVybiBDTEFTUy5nZXRNZXRob2RzTmFtZXMoT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXNzRnVuKSwgYWxsTWV0aG9kc05hbWVzKTtcbiAgfSxcbiAgZ2V0RnJvbU9iamVjdDogVGNoSGVscGVycy5nZXRGcm9tT2JqZWN0LFxuICBnZXROYW1lOiBUY2hIZWxwZXJzLmdldE5hbWUsXG4gIGdldE5hbWVGcm9tT2JqZWN0OiBUY2hIZWxwZXJzLmdldE5hbWVGcm9tT2JqZWN0LFxuICBkZXNjcmliZVByb3Blcml0ZXM6IFRjaEhlbHBlcnMuZGVzY3JpYmVQcm9wZXJpdGVzLFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIE9CSkVDVDogKG9iajogYW55KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldCBpbmRleFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gQ0xBU1NOQU1FLmdldE9iamVjdEluZGV4VmFsdWUob2JqKTtcbiAgICAgIH0sXG4gICAgICBnZXQgaW5kZXhQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIENMQVNTTkFNRS5nZXRPYmplY3RJbmRleFByb3BlcnR5VmFsdWUob2JqKTtcbiAgICAgIH0sXG4gICAgICBnZXQgaXNDbGFzc09iamVjdCgpIHtcblxuICAgICAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSB8fCBfLmlzQXJyYXkob2JqKSB8fCBfLmlzUmVnRXhwKG9iaikgfHxcbiAgICAgICAgICBfLmlzQnVmZmVyKG9iaikgfHwgXy5pc0FycmF5QnVmZmVyKG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNEYXRlKG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBDTEFTUy5nZXROYW1lRnJvbU9iamVjdChvYmopXG4gICAgICAgIHJldHVybiBfLmlzU3RyaW5nKGNsYXNzTmFtZSkgJiYgY2xhc3NOYW1lICE9PSAnT2JqZWN0JztcbiAgICAgIH0sXG4gICAgICBpc0VxdWFsOiAoYW5vdGhlck9iajogYW55LCBjb21wYXJlRGVlcCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGlmICghQ0xBU1MuT0JKRUNUKG9iaikuaXNDbGFzc09iamVjdCB8fCAhQ0xBU1MuT0JKRUNUKGFub3RoZXJPYmopLmlzQ2xhc3NPYmplY3QpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iaiA9PT0gYW5vdGhlck9iaikge1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdjEgPSBDTEFTU05BTUUuZ2V0T2JqZWN0SW5kZXhWYWx1ZShvYmopO1xuICAgICAgICBjb25zdCB2MiA9IENMQVNTTkFNRS5nZXRPYmplY3RJbmRleFZhbHVlKGFub3RoZXJPYmopO1xuICAgICAgICBjb25zdCBmMSA9IENMQVNTTkFNRS5nZXRPYmplY3RDbGFzc0ZhbWlseShvYmopXG4gICAgICAgIGNvbnN0IGYyID0gQ0xBU1NOQU1FLmdldE9iamVjdENsYXNzRmFtaWx5KGFub3RoZXJPYmopXG4gICAgICAgIGNvbnN0IGlzRmFtaWx5RGlmZiA9ICghXy5pc1N0cmluZyhmMSkgfHwgIV8uaXNTdHJpbmcoZjIpIHx8IChmMSAhPT0gZjIpKTtcblxuICAgICAgICBpZiAoaXNGYW1pbHlEaWZmKSB7XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDTEFTUy5PQkpFQ1Qob2JqKS5pc0NsYXNzT2JqZWN0IHx8ICFDTEFTUy5PQkpFQ1QoYW5vdGhlck9iaikuaXNDbGFzc09iamVjdCkge1xuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuXG5cblxuXG4gICAgICAgIGlmICgoXy5pc051bWJlcih2MSkgJiYgXy5pc051bWJlcih2MikpIHx8IChfLmlzU3RyaW5nKHYxKSAmJiBfLmlzU3RyaW5nKHYyKSkpIHtcblxuICAgICAgICAgIGNvbnN0IHJlcyA9ICh2MSA9PT0gdjIpO1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wYXJlRGVlcCkge1xuICAgICAgICAgIHJldHVybiBfLmlzRXF1YWwodjEsIHYyKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0ICogZnJvbSAnZW51bS12YWx1ZXMnO1xuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzIGxpYi9pbmRleC50cyJdfQ==
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnMvcHJvamVjdHMvdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLGlDQUFpQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuQyxNQUFNLE9BQU8sVUFBVTtJQUVyQixNQUFNLENBQUMsS0FBSyxDQUFDLFNBQTRCO1FBQ3ZDLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFTO1FBQzVCLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNqQixPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUM7U0FDdEI7UUFDRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBZ0IsRUFBRSxVQUFVLEdBQUcsS0FBSztRQUNqRCxPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBVyxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBUztRQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFnQjtRQUNoQyxPQUFPLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDekMsQ0FBQztJQUVELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFnQjtRQUN4QyxNQUFNLEVBQUUsR0FBRywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLEVBQUUsR0FBRyxpQ0FBaUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxhQUFhO1FBQ2IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzthQUNyQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0NBRUY7QUFFRCxNQUFNLHNCQUFzQixHQUFHO0lBQzdCLFFBQVEsRUFBRSxNQUFNO0lBQ2hCLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLGFBQWEsRUFBRSxPQUFPO0lBQ3RCLE1BQU0sRUFBRSxNQUFNO0lBQ2QsVUFBVTtJQUNWLGtCQUFrQjtJQUNsQixrQkFBa0IsRUFBRSxnQkFBZ0I7SUFDcEMsa0JBQWtCLEVBQUUsa0JBQWtCO0lBQ3RDLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsU0FBUyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0I7Q0FDekMsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHLENBQUMsb0JBQXlCLEVBQUUsZUFBZSxHQUFHLEVBQUUsRUFBWSxFQUFFO0lBQ3BGLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtRQUN6QixPQUFPLGVBQWUsQ0FBQztLQUN4QjtJQUVELE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUMzRCxNQUFNLFFBQVEsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUUsb0JBQWlDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQztJQUM3RyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVoRSxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hCLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDbEQsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUNqRCxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUNuQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztLQUNuQyxDQUFDO1NBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTNELFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLE9BQU8sYUFBYSxDQUFDLFVBQVUsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6SCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksS0FBSyxRQUFRLEVBQUU7UUFDbEYsT0FBTyxlQUFlLENBQUM7S0FDeEI7SUFDRCxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzNFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRztJQUNuQixJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVM7SUFDekIsT0FBTyxFQUFFLFlBQVk7SUFDckIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO0lBQ3ZCOztPQUVHO0lBQ0gsWUFBWSxDQUFVLE1BQWdCO1FBQ3BDLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEVBQThFLENBQUMsQ0FBQTtZQUM3RixPQUFNO1NBQ1A7UUFDRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRy9DLE9BQU8sTUFBTSxDQUFDLFNBQWMsQ0FBQztJQUMvQixDQUFDO0lBQ0Q7O09BRUc7SUFDSCxlQUFlLENBQUMsTUFBZ0IsRUFBRSxlQUFvQjtRQUVwRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRTtZQUNoQyxPQUFPLENBQUMsS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUE7WUFDN0YsT0FBTTtTQUNQO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ2xDLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUZBQWlGLENBQUMsQ0FBQTtZQUNoRyxPQUFNO1NBQ1A7UUFFRCxJQUFJLE9BQU8sZUFBZSxLQUFLLFFBQVEsRUFBRTtZQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLHNGQUFzRixDQUFDLENBQUE7WUFDckcsT0FBTTtTQUNQO1FBRUQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUl4QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRS9DLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxTQUFTLHNDQUFzQyxDQUFDLENBQUE7U0FDaEk7UUFFRCxNQUFNLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQztJQUNyQyxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7SUFDakM7O09BRUc7SUFDSCxTQUFTLEVBQUUsQ0FBQyxNQUFnQixFQUFFLEVBQUU7UUFDOUIsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBR0QsZUFBZSxDQUFDLG9CQUF5QjtRQUN2QyxPQUFPLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCxhQUFhLEVBQUUsVUFBVSxDQUFDLGFBQWE7SUFDdkMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO0lBQzNCLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxpQkFBaUI7SUFDL0Msa0JBQWtCLEVBQUUsVUFBVSxDQUFDLGtCQUFrQjtJQUNqRDs7T0FFRztJQUNILE1BQU0sRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO1FBQ25CLE9BQU87WUFDTCxJQUFJLFVBQVU7Z0JBQ1osT0FBTyxTQUFTLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUNELElBQUksYUFBYTtnQkFDZixPQUFPLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsSUFBSSxhQUFhO2dCQUVmLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBQ3ZELENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDekMsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBQ0QsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNqQixPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQzlDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLEtBQUssUUFBUSxDQUFDO1lBQ3pELENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxVQUFlLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBRSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQWEsRUFBRTtvQkFDL0UsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBQ0QsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFO29CQUV0QixPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDckQsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUM5QyxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBQ3JELE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUV6RSxJQUFJLFlBQVksRUFBRTtvQkFFaEIsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLEVBQUU7b0JBRS9FLE9BQU8sS0FBSyxDQUFBO2lCQUNiO2dCQU1ELElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO29CQUU1RSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDeEIsYUFBYTtvQkFDYixPQUFPLEdBQUcsQ0FBQztpQkFDWjtnQkFDRCxJQUFJLFdBQVcsRUFBRTtvQkFDZixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO2lCQUN6QjtnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7U0FDRixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUFFRCxjQUFjLGFBQWEsQ0FBQztBQUUzQixDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtFQUFrRSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBDTEFTU05BTUUgfSBmcm9tICcuL2NsYXNzbmFtZSc7XG5pbXBvcnQgeyBkZXNjcmliZUZyb21DbGFzc1N0cmluZ2lmeSwgZGVzY3JpYmVCeURlZmF1bHRNb2RlbHNBbmRNYXBwaW5nIH0gZnJvbSAnLi9kZXNjcmliZS1jbGFzcyc7XG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBzZXRDbGFzc05hbWUgfSBmcm9tICcuL3NldC1jbGFzcy1uYW1lJztcblxuZXhwb3J0IHsgTW9kZWxzIH0gZnJvbSAnLi9tb2RlbHMnO1xuZXhwb3J0IHsgU1lNQk9MIH0gZnJvbSAnLi9zeW1ib2xzJztcblxuZXhwb3J0IGNsYXNzIFRjaEhlbHBlcnMge1xuXG4gIHN0YXRpYyBnZXRCeShjbGFzc05hbWU6IHN0cmluZyB8IEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIENMQVNTTkFNRS5nZXRDbGFzc0J5KGNsYXNzTmFtZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RnJvbU9iamVjdChvOiBPYmplY3QpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChvKSB8fCBfLmlzTnVsbChvKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoby5jb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIG8uY29uc3RydWN0b3I7XG4gICAgfVxuICAgIGNvbnN0IHAgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgcmV0dXJuIHAgJiYgcC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXROYW1lKHRhcmdldDogRnVuY3Rpb24sIHByb2R1Y3Rpb24gPSBmYWxzZSkge1xuICAgIHJldHVybiBDTEFTU05BTUUuZ2V0Q2xhc3NOYW1lKHRhcmdldCwgcHJvZHVjdGlvbikgYXMgc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGdldE5hbWVGcm9tT2JqZWN0KG86IE9iamVjdCkge1xuICAgIGNvbnN0IGZuQ0xhc3MgPSB0aGlzLmdldEZyb21PYmplY3Qobyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmFtZShmbkNMYXNzKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRDb25maWdzKHRhcmdldDogRnVuY3Rpb24pOiBNb2RlbHMuQ2xhc3NDb25maWdbXSB7XG4gICAgcmV0dXJuIENMQVNTTkFNRS5nZXRDbGFzc0NvbmZpZyh0YXJnZXQpXG4gIH1cblxuICBzdGF0aWMgZGVzY3JpYmVQcm9wZXJpdGVzKHRhcmdldDogRnVuY3Rpb24pIHtcbiAgICBjb25zdCBkMSA9IGRlc2NyaWJlRnJvbUNsYXNzU3RyaW5naWZ5KHRhcmdldCk7XG4gICAgY29uc3QgZDIgPSBkZXNjcmliZUJ5RGVmYXVsdE1vZGVsc0FuZE1hcHBpbmcodGFyZ2V0KTtcbiAgICBsZXQgdW5pcSA9IHt9O1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBkMS5jb25jYXQoZDIpLmZvckVhY2gocCA9PiB1bmlxW3BdID0gcCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHVuaXEpXG4gICAgICAuZmlsdGVyKGQgPT4gISFkKVxuICAgICAgLmZpbHRlcihkID0+IHR5cGVvZiB0YXJnZXQucHJvdG90eXBlW2RdICE9PSAnZnVuY3Rpb24nKVxuICB9XG5cbn1cblxuY29uc3Qgbm90QWxsb3dlZEFzTWV0aG9kTmFtZSA9IFtcbiAgJ2xlbmd0aCcsICduYW1lJyxcbiAgJ2FyZ3VtZW50cycsICdjYWxsZXInLFxuICAnY29uc3RydWN0b3InLCAnYXBwbHknLFxuICAnYmluZCcsICdjYWxsJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ19fZGVmaW5lR2V0dGVyX18nLFxuICAnX19kZWZpbmVTZXR0ZXJfXycsICdoYXNPd25Qcm9wZXJ0eScsXG4gICdfX2xvb2t1cEdldHRlcl9fJywgJ19fbG9va3VwU2V0dGVyX18nLFxuICAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd2YWx1ZU9mJywgJ19fcHJvdG9fXycsICd0b0xvY2FsZVN0cmluZycsXG5dO1xuXG5jb25zdCBnZXRNZXRob2RzTmFtZXMgPSAoY2xhc3NPckNsYXNzSW5zdGFuY2U6IGFueSwgYWxsTWV0aG9kc05hbWVzID0gW10pOiBzdHJpbmdbXSA9PiB7XG4gIGlmICghY2xhc3NPckNsYXNzSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gYWxsTWV0aG9kc05hbWVzO1xuICB9XG5cbiAgY29uc3QgaXNDbGFzc0Z1bmN0aW9uID0gXy5pc0Z1bmN0aW9uKGNsYXNzT3JDbGFzc0luc3RhbmNlKTtcbiAgY29uc3QgY2xhc3NGdW4gPSAoaXNDbGFzc0Z1bmN0aW9uID8gY2xhc3NPckNsYXNzSW5zdGFuY2UgOiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY2xhc3NPckNsYXNzSW5zdGFuY2UpKTtcbiAgY29uc3Qgb2JqZWN0VG9DaGVjayA9IGlzQ2xhc3NGdW5jdGlvbiA/IChjbGFzc09yQ2xhc3NJbnN0YW5jZSBhcyBGdW5jdGlvbik/LnByb3RvdHlwZSA6IGNsYXNzT3JDbGFzc0luc3RhbmNlO1xuICBjb25zdCBwcm90b3R5cGVPYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0VG9DaGVjayB8fCB7fSk7XG5cbiAgY29uc3QgcHJvcGVydGllcyA9IF8udW5pcShbXG4gICAgLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0VG9DaGVjayB8fCB7fSksXG4gICAgLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlT2JqIHx8IHt9KSxcbiAgICAuLi5PYmplY3Qua2V5cyhvYmplY3RUb0NoZWNrIHx8IHt9KSxcbiAgICAuLi5PYmplY3Qua2V5cyhwcm90b3R5cGVPYmogfHwge30pLFxuICBdKVxuICAgIC5maWx0ZXIoZiA9PiAhIWYgJiYgIW5vdEFsbG93ZWRBc01ldGhvZE5hbWUuaW5jbHVkZXMoZikpO1xuXG4gIHByb3BlcnRpZXMuZmlsdGVyKChtZXRob2ROYW1lKSA9PiB0eXBlb2Ygb2JqZWN0VG9DaGVja1ttZXRob2ROYW1lXSA9PT0gJ2Z1bmN0aW9uJykuZm9yRWFjaChwID0+IGFsbE1ldGhvZHNOYW1lcy5wdXNoKHApKTtcblxuICBpZiAoIWNsYXNzRnVuIHx8ICFjbGFzc0Z1bi5jb25zdHJ1Y3RvciB8fCBjbGFzc0Z1bj8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdPYmplY3QnKSB7XG4gICAgcmV0dXJuIGFsbE1ldGhvZHNOYW1lcztcbiAgfVxuICByZXR1cm4gZ2V0TWV0aG9kc05hbWVzKE9iamVjdC5nZXRQcm90b3R5cGVPZihjbGFzc0Z1biksIGFsbE1ldGhvZHNOYW1lcyk7XG59O1xuXG5leHBvcnQgY29uc3QgQ0xBU1MgPSB7XG4gIE5BTUU6IENMQVNTTkFNRS5DTEFTU05BTUUsXG4gIHNldE5hbWU6IHNldENsYXNzTmFtZSxcbiAgZ2V0Qnk6IFRjaEhlbHBlcnMuZ2V0QnksXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0U2luZ2xldG9uPFQgPSBhbnk+KHRhcmdldDogRnVuY3Rpb24pIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihgW3R5cGVzY3JpcHQtY2xhc3MtaGVscGVyc11bc2V0U2luZ2xldG9uT2JqXSBUeXBlIG9mIHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbmApXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gVGNoSGVscGVycy5nZXRDb25maWdzKHRhcmdldClbMF1cblxuXG4gICAgcmV0dXJuIGNvbmZpZy5zaW5nbGV0b24gYXMgVDtcbiAgfSxcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBzZXRTaW5nbGV0b25PYmoodGFyZ2V0OiBGdW5jdGlvbiwgc2luZ2xldG9uT2JqZWN0OiBhbnkpIHtcblxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzXVtzZXRTaW5nbGV0b25PYmpdIFR5cGUgb2YgdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uYClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHNpbmdsZXRvbk9iamVjdCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFt0eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnNdW3NldFNpbmdsZXRvbk9ial0gU2luZ2xldG9uIGluc3RhbmNlIGNhbnQgYmUgYW4gYXJyYXlgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzaW5nbGV0b25PYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzXVtzZXRTaW5nbGV0b25PYmpdIFNpbmdsZXRvbiBpbnN0YW5jZSBjYW50IG11c3QgYmUgYSBvYmplY3RgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gQ0xBU1MuZ2V0TmFtZSh0YXJnZXQpO1xuXG5cblxuICAgIGNvbnN0IGNvbmZpZyA9IFRjaEhlbHBlcnMuZ2V0Q29uZmlncyh0YXJnZXQpWzBdXG5cbiAgICBpZiAoY29uZmlnLnNpbmdsZXRvbikge1xuICAgICAgY29uc29sZS53YXJuKGBbdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzXSBZb3UgYXJlIHRyeWluZyB0byBzZXQgc2luZ2xldG9uIG9mIFwiJHtjbGFzc05hbWV9XCIgc2Vjb25kIHRpbWUgd2l0aCBkaWZmZXJlbnQgb2JqZWN0LmApXG4gICAgfVxuXG4gICAgY29uZmlnLnNpbmdsZXRvbiA9IHNpbmdsZXRvbk9iamVjdDtcbiAgfSxcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBnZXRDb25maWdzOiBUY2hIZWxwZXJzLmdldENvbmZpZ3MsXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0Q29uZmlnOiAodGFyZ2V0OiBGdW5jdGlvbikgPT4ge1xuICAgIHJldHVybiBfLmZpcnN0KFRjaEhlbHBlcnMuZ2V0Q29uZmlncyh0YXJnZXQpKTtcbiAgfSxcblxuXG4gIGdldE1ldGhvZHNOYW1lcyhjbGFzc09yQ2xhc3NJbnN0YW5jZTogYW55KTogc3RyaW5nW10ge1xuICAgIHJldHVybiBnZXRNZXRob2RzTmFtZXMoY2xhc3NPckNsYXNzSW5zdGFuY2UpO1xuICB9LFxuICBnZXRGcm9tT2JqZWN0OiBUY2hIZWxwZXJzLmdldEZyb21PYmplY3QsXG4gIGdldE5hbWU6IFRjaEhlbHBlcnMuZ2V0TmFtZSxcbiAgZ2V0TmFtZUZyb21PYmplY3Q6IFRjaEhlbHBlcnMuZ2V0TmFtZUZyb21PYmplY3QsXG4gIGRlc2NyaWJlUHJvcGVyaXRlczogVGNoSGVscGVycy5kZXNjcmliZVByb3Blcml0ZXMsXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgT0JKRUNUOiAob2JqOiBhbnkpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0IGluZGV4VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBDTEFTU05BTUUuZ2V0T2JqZWN0SW5kZXhWYWx1ZShvYmopO1xuICAgICAgfSxcbiAgICAgIGdldCBpbmRleFByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gQ0xBU1NOQU1FLmdldE9iamVjdEluZGV4UHJvcGVydHlWYWx1ZShvYmopO1xuICAgICAgfSxcbiAgICAgIGdldCBpc0NsYXNzT2JqZWN0KCkge1xuXG4gICAgICAgIGlmICghXy5pc09iamVjdChvYmopIHx8IF8uaXNBcnJheShvYmopIHx8IF8uaXNSZWdFeHAob2JqKSB8fFxuICAgICAgICAgIF8uaXNCdWZmZXIob2JqKSB8fCBfLmlzQXJyYXlCdWZmZXIob2JqKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5pc0RhdGUob2JqKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IENMQVNTLmdldE5hbWVGcm9tT2JqZWN0KG9iailcbiAgICAgICAgcmV0dXJuIF8uaXNTdHJpbmcoY2xhc3NOYW1lKSAmJiBjbGFzc05hbWUgIT09ICdPYmplY3QnO1xuICAgICAgfSxcbiAgICAgIGlzRXF1YWw6IChhbm90aGVyT2JqOiBhbnksIGNvbXBhcmVEZWVwID0gZmFsc2UpID0+IHtcbiAgICAgICAgaWYgKCFDTEFTUy5PQkpFQ1Qob2JqKS5pc0NsYXNzT2JqZWN0IHx8ICFDTEFTUy5PQkpFQ1QoYW5vdGhlck9iaikuaXNDbGFzc09iamVjdCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqID09PSBhbm90aGVyT2JqKSB7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2MSA9IENMQVNTTkFNRS5nZXRPYmplY3RJbmRleFZhbHVlKG9iaik7XG4gICAgICAgIGNvbnN0IHYyID0gQ0xBU1NOQU1FLmdldE9iamVjdEluZGV4VmFsdWUoYW5vdGhlck9iaik7XG4gICAgICAgIGNvbnN0IGYxID0gQ0xBU1NOQU1FLmdldE9iamVjdENsYXNzRmFtaWx5KG9iailcbiAgICAgICAgY29uc3QgZjIgPSBDTEFTU05BTUUuZ2V0T2JqZWN0Q2xhc3NGYW1pbHkoYW5vdGhlck9iailcbiAgICAgICAgY29uc3QgaXNGYW1pbHlEaWZmID0gKCFfLmlzU3RyaW5nKGYxKSB8fCAhXy5pc1N0cmluZyhmMikgfHwgKGYxICE9PSBmMikpO1xuXG4gICAgICAgIGlmIChpc0ZhbWlseURpZmYpIHtcblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUNMQVNTLk9CSkVDVChvYmopLmlzQ2xhc3NPYmplY3QgfHwgIUNMQVNTLk9CSkVDVChhbm90aGVyT2JqKS5pc0NsYXNzT2JqZWN0KSB7XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG5cblxuXG5cbiAgICAgICAgaWYgKChfLmlzTnVtYmVyKHYxKSAmJiBfLmlzTnVtYmVyKHYyKSkgfHwgKF8uaXNTdHJpbmcodjEpICYmIF8uaXNTdHJpbmcodjIpKSkge1xuXG4gICAgICAgICAgY29uc3QgcmVzID0gKHYxID09PSB2Mik7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBhcmVEZWVwKSB7XG4gICAgICAgICAgcmV0dXJuIF8uaXNFcXVhbCh2MSwgdjIpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgKiBmcm9tICdlbnVtLXZhbHVlcyc7XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnMgbGliL2luZGV4LnRzIl19
@@ -426,13 +426,39 @@ class TchHelpers {
426
426
  .filter(d => typeof target.prototype[d] !== 'function');
427
427
  }
428
428
  }
429
- const notAllowed = [
429
+ const notAllowedAsMethodName = [
430
430
  'length', 'name',
431
431
  'arguments', 'caller',
432
432
  'constructor', 'apply',
433
433
  'bind', 'call',
434
- 'toString'
434
+ 'toString',
435
+ '__defineGetter__',
436
+ '__defineSetter__', 'hasOwnProperty',
437
+ '__lookupGetter__', '__lookupSetter__',
438
+ 'isPrototypeOf', 'propertyIsEnumerable',
439
+ 'valueOf', '__proto__', 'toLocaleString',
435
440
  ];
441
+ const getMethodsNames = (classOrClassInstance, allMethodsNames = []) => {
442
+ if (!classOrClassInstance) {
443
+ return allMethodsNames;
444
+ }
445
+ const isClassFunction = _.isFunction(classOrClassInstance);
446
+ const classFun = (isClassFunction ? classOrClassInstance : Object.getPrototypeOf(classOrClassInstance));
447
+ const objectToCheck = isClassFunction ? classOrClassInstance?.prototype : classOrClassInstance;
448
+ const prototypeObj = Object.getPrototypeOf(objectToCheck || {});
449
+ const properties = _.uniq([
450
+ ...Object.getOwnPropertyNames(objectToCheck || {}),
451
+ ...Object.getOwnPropertyNames(prototypeObj || {}),
452
+ ...Object.keys(objectToCheck || {}),
453
+ ...Object.keys(prototypeObj || {}),
454
+ ])
455
+ .filter(f => !!f && !notAllowedAsMethodName.includes(f));
456
+ properties.filter((methodName) => typeof objectToCheck[methodName] === 'function').forEach(p => allMethodsNames.push(p));
457
+ if (!classFun || !classFun.constructor || classFun?.constructor?.name === 'Object') {
458
+ return allMethodsNames;
459
+ }
460
+ return getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);
461
+ };
436
462
  const CLASS = {
437
463
  NAME: CLASSNAME.CLASSNAME,
438
464
  setName: setClassName,
@@ -481,21 +507,8 @@ const CLASS = {
481
507
  getConfig: (target) => {
482
508
  return _.first(TchHelpers.getConfigs(target));
483
509
  },
484
- getMethodsNames(classOrClassInstance, allMethodsNames = []) {
485
- if (!classOrClassInstance) {
486
- return allMethodsNames;
487
- }
488
- const isFun = _.isFunction(classOrClassInstance);
489
- const classFun = (isFun ? classOrClassInstance : Object.getPrototypeOf(classOrClassInstance));
490
- const objectToCheck = isFun ? classOrClassInstance?.prototype : classOrClassInstance;
491
- const ooo = Object.getPrototypeOf(objectToCheck || {});
492
- const properties = ((isFun ? Object.keys(objectToCheck || {}) : (!!ooo ? Object.getOwnPropertyNames(ooo) : [])) || [])
493
- .filter(f => !notAllowed.includes(f));
494
- properties.filter((methodName) => typeof objectToCheck[methodName] === 'function').forEach(p => allMethodsNames.push(p));
495
- if (!classFun || !classFun.constructor || classFun?.constructor?.name === 'Object') {
496
- return allMethodsNames;
497
- }
498
- return CLASS.getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);
510
+ getMethodsNames(classOrClassInstance) {
511
+ return getMethodsNames(classOrClassInstance);
499
512
  },
500
513
  getFromObject: TchHelpers.getFromObject,
501
514
  getName: TchHelpers.getName,
@@ -1 +1 @@
1
- {"version":3,"file":"typescript-class-helpers.mjs","sources":["../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/models.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/symbols.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/storage.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/set-class-name.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/registerd-db.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/errors-messages.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/classname.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/describe-class.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/index.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/typescript-class-helpers.ts"],"sourcesContent":["\n\nimport { CoreModels } from 'tnp-core/browser';\n\nexport namespace Models {\n\n /**\n * @deprecated\n */\n export type CLASSNAMEOptions = {\n uniqueKey?: string,\n /**\n * autoinstance - create instance of singleton automaticly inside decorator\n * first-instance - use first instace of created class as decorator\n */\n singleton?: 'autoinstance' | 'first-instance' | 'last-instance' | boolean,\n classFamily?: string,\n classNameInBrowser?: string,\n }\n\n /**\n * @deprecated\n */\n export class ParamConfig {\n paramName: string;\n paramType: CoreModels.ParamType;\n index: number;\n defaultType: any;\n expireInSeconds?: number;\n }\n\n /**\n * @deprecated\n */\n export class MethodConfig {\n methodName: string;\n /**\n * path is global in express app\n */\n global?: boolean;\n /**\n * override default content type\n */\n contentType?: any;\n /**\n * override default axiso response type\n */\n responseType?: any;\n path: string;\n descriptor: PropertyDescriptor;\n type: CoreModels.HttpMethod;\n/* */\n/* */\n \n parameters: { [paramName: string]: ParamConfig } = {};\n }\n\n /**\n * @deprecated\n */\n export interface ClassMeta {\n uniqueKey?: string;\n className?: string;\n classFamily?: string;\n classNameInBrowser?: string;\n target?: Function;\n }\n\n /**\n * @deprecated\n */\n export class ClassConfig {\n browserTransformFn?: (entity: any) => any;\n // @ts-ignore\n singleton: Object = void 0;\n injections: { getter: Function, propertyName: string; }[] = [];\n calculatedPath: string;\n path: string;\n vChildren?: ClassConfig[] = [];\n vParent?: ClassConfig;\n classReference: Function;\n className?: string;\n uniqueKey?: string;\n classNameInBrowser?: string;\n methods: { [methodName: string]: MethodConfig } = {};\n }\n\n}\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/models.ts","\n\nexport const SYMBOL = {\n MODELS_MAPPING: Symbol(),\n DEFAULT_MODEL: Symbol(),\n STORAGE: 'classesstorage',\n CLASSES: 'classes',\n}\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/symbols.ts","\n\nimport { Helpers } from 'tnp-core/browser';\nimport { SYMBOL } from './symbols';\nimport { _ } from 'tnp-core/browser';\n\nfunction defaultValues() {\n return _.cloneDeep({\n [SYMBOL.CLASSES]: []\n })\n}\n\nexport function getStorage<T = any>(property?: string): T {\n\n/* */\n/* */\n/* */\n/* */\n \n\n if (typeof property === 'string') {\n\n const storageInClassStaticProp = getStorage();\n return storageInClassStaticProp[property]\n }\n\n if (typeof defaultValues.prototype[SYMBOL.STORAGE] === 'undefined') {\n defaultValues.prototype[SYMBOL.STORAGE] = defaultValues()\n }\n return defaultValues.prototype[SYMBOL.STORAGE]\n}\n\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/storage.ts","\n\nimport { _ } from 'tnp-core/browser';\nimport { SYMBOL } from './symbols';\nimport { Models } from './models';\nimport { getStorage } from './storage';\nimport { CLASSNAME } from './classname';\nimport { CLASS } from './index';\n\n\nfunction getClasses(): Models.ClassMeta[] {\n const s = getStorage();\n return s[SYMBOL.CLASSES] as any;\n}\n\n// @ts-ignore\nexport function setClassName(target: Function, className: string, options?: Models.CLASSNAMEOptions) {\n\n let { classFamily, uniqueKey, classNameInBrowser, singleton } = options || {\n classFamily: void 0,\n uniqueKey: 'id',\n classNameInBrowser: void 0,\n singleton: void 0,\n autoinstance: false\n } as Models.CLASSNAMEOptions;\n\n if (!_.isUndefined(singleton) && _.isBoolean(singleton) && singleton) {\n singleton = 'first-instance'\n }\n\n if (!uniqueKey) {\n uniqueKey = 'id'\n }\n\n if (target) {\n const config = _.first(CLASSNAME.getClassConfig(target));\n config.className = className;\n config.uniqueKey = uniqueKey;\n config.classNameInBrowser = classNameInBrowser;\n\n }\n\n const existed = (getClasses() as { className: string; target: Function; }[])\n .find(f => f.className === className)\n\n if (existed) {\n existed.target = target;\n } else {\n const res = {\n className,\n classNameInBrowser,\n target,\n uniqueKey,\n classFamily\n }\n\n if (_.isUndefined(classFamily)) {\n Object.defineProperty(res, 'classFamily', {\n get: function () {\n const parent = Object.getPrototypeOf(target);\n if (!_.isFunction(parent) || parent.name === 'Object' || parent.name === '') {\n return className;\n }\n const classNameNew = CLASSNAME.getClassName(parent)\n return CLASSNAME.getClassFamilyByClassName(classNameNew)\n }\n })\n }\n getClasses().push(res)\n }\n const Original = target;\n\n\n if (singleton === 'first-instance' || singleton === 'last-instance') {\n const obj = {\n // @ts-ignore\n decoratedConstructor: function (...args) {\n\n const context = Original.apply(this, args);\n\n const existedSingleton = CLASS.getSingleton(Original)\n if (!existedSingleton || singleton === 'last-instance') {\n CLASS.setSingletonObj(Original, this)\n CLASS.setSingletonObj(obj.decoratedConstructor, this)\n\n }\n else {\n\n }\n\n return context;\n }\n };\n\n\n obj.decoratedConstructor.prototype = Original.prototype;\n // @ts-ignore\n Object.keys(Original).forEach((name: string) => { obj.decoratedConstructor[name] = (<any>Original)[name]; });\n Object.defineProperty(obj.decoratedConstructor, 'name', {\n value: className,\n configurable: true,\n })\n\n\n return obj.decoratedConstructor;\n } else if (singleton === 'autoinstance') {\n\n\n const auto = new (Original as any)();\n CLASS.setSingletonObj(Original, auto)\n\n\n }\n}\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/set-class-name.ts","\n\nimport { Models } from './models';\nexport const registerd = {\n configs: [] as Models.ClassConfig[],\n classes: [] as Function[],\n}\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/registerd-db.ts","\n\n\nexport const ERROR_MSG_CLASS_WITHOUT_DECORATOR = `[typescript-class-helpers][getClassName(...)](PRODUCTION MODE ERROR)\nPlease use decoartor @CLASSNAME for each entity or controller\nThis is preventing class name problem in minified code.\n // @ts-ignore\nimport { CLASS } from '../lib';\n\n@CLASS.NAME('ExampleClass')\nclass ExampleClass {\n ...\n}\n`;\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/errors-messages.ts","\n\nimport { _ } from 'tnp-core/browser';\nimport { Models } from './models';\nimport { SYMBOL } from './symbols';\nimport { TchHelpers } from './index';\nimport { Helpers } from 'tnp-core/browser';\nimport { getStorage } from './storage';\nimport { setClassName } from './set-class-name';\nimport { registerd } from './registerd-db';\nimport { ERROR_MSG_CLASS_WITHOUT_DECORATOR } from './errors-messages';\n/* */\n/* */\n \n\nfunction getClasses(): Models.ClassMeta[] {\n const s = getStorage();\n return s[SYMBOL.CLASSES] as any;\n}\nexport namespace CLASSNAME {\n\n export function getClassConfig(target: Function, configs: Models.ClassConfig[] = [], callerTarget?: Function): Models.ClassConfig[] {\n if (!_.isFunction(target)) {\n throw `[typescript-class-helper][getClassConfig] Cannot get class config from: ${target}`\n }\n\n let config: Models.ClassConfig;\n const parentClass = Object.getPrototypeOf(target);\n const isValidParent = (_.isFunction(parentClass) && parentClass.name !== '');\n\n if (registerd.classes.includes(target)) {\n config = registerd.configs[registerd.classes.findIndex(c => c === target)];\n } else {\n config = new Models.ClassConfig();\n config.classReference = target;\n registerd.classes.push(target);\n }\n\n registerd.configs[registerd.classes.findIndex(c => c === target)] = config;\n if (callerTarget) {\n const callerTargetConfig = registerd.configs[registerd.classes.findIndex(c => c === callerTarget)];\n if (!config.vChildren.includes(callerTargetConfig)) {\n config.vChildren.push(callerTargetConfig);\n }\n callerTargetConfig.vParent = config;\n }\n\n configs.push(config);\n\n return isValidParent ? getClassConfig(parentClass, configs, target) : configs;\n }\n\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 CLASSNAME(className: string,\n options?: Models.CLASSNAMEOptions) {\n return function (target: Function) {\n\n return setClassName(target, className, options);\n } as any;\n }\n\n export function getClassName(target: Function, production = false) {\n if (_.isNil(target)) {\n\n\n return void 0;\n }\n if (_.isString(target)) {\n\n Helpers.warn(`[typescript-class-helpers][getClassName] target is string: '${target}', produciton: ${production}`)\n return target;\n }\n if (!_.isFunction(target)) {\n\n Helpers.warn(`[typescript-class-helpers][getClassName] target is not a class`)\n return void 0;\n }\n\n const configs = getClassConfig(target);\n const config = _.first(configs);\n\n const classNameInBrowser = config?.classNameInBrowser;\n\n if (Helpers.isBrowser && _.isString(classNameInBrowser)) {\n return classNameInBrowser;\n }\n\n const className = config?.className;\n\n if (typeof className === 'string') {\n return className;\n }\n\n\n if (production) {\n console.log('class without @CLASS.NAME deocrator', target as any)\n throw new Error(ERROR_MSG_CLASS_WITHOUT_DECORATOR);\n } else {\n\n\n\n\n\n\n\n\n\n\n\n\n }\n\n\n if (target.name?.startsWith('class_')) {\n return '';\n }\n\n return target.name;\n }\n\n // @ts-ignore\n export function getObjectIndexPropertyValue(obj: any) {\n const className = TchHelpers.getNameFromObject(obj);\n\n let c = getClasses().find(c => c.className === className);\n\n if (c) {\n return c.uniqueKey;\n }\n }\n\n // @ts-ignore\n export function getClassFamilyByClassName(className: string) {\n let c = getClasses().find(c => c.className === className);\n\n if (c) {\n return c.classFamily;\n }\n }\n\n // @ts-ignore\n export function getObjectClassFamily(obj: any) {\n const className = TchHelpers.getNameFromObject(obj);\n\n let c = getClasses().find(c => c.className === className);\n\n if (c) {\n return c.classFamily;\n }\n }\n\n export function getObjectIndexValue(obj: any) {\n const className = TchHelpers.getNameFromObject(obj);\n\n let c = getClasses().find(c => c.className === className);\n\n if (c && _.isString(c.uniqueKey)) {\n return obj[c.uniqueKey];\n }\n }\n\n export function getClassBy(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') { // 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 let c = getClasses().find(c => c.className === className);\n\n if (c) {\n res = c.target;\n }\n\n // @ts-ignore\n return res;\n }\n\n}\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/classname.ts","\n\nimport { _ } from 'tnp-core/browser';\nimport { SYMBOL } from './symbols';\n\n\n\n/**\n * @DEPRECATED\n * Describe fields assigned in class\n */\nconst FRegEx = new RegExp(/(?:this\\.)(.+?(?= ))/g);\nexport function describeFromClassStringify(target: Function, parent = false): string[] {\n // @ts-ignore\n var result = [];\n if (parent) {\n var proto = Object.getPrototypeOf(target.prototype);\n if (proto) {\n // @ts-ignore\n result = result.concat(describeFromClassStringify(proto.constructor, parent));\n }\n }\n const classString = target.toString();\n const matches = classString.match(FRegEx) || []\n\n\n\n\n result = result.concat(matches);\n return result.map(prop => prop\n .replace('this.', '')\n .replace('.', '')\n .replace(')', '')\n .replace('(', '')\n )\n\n}\n\n/**\n * Describe fields assigne through @DefaultModelWithMapping decorator\n * without functions\n */\nexport function describeByDefaultModelsAndMapping(target: Function): string[] {\n let res = {}\n if (target) {\n // @ts-ignore\n if (target[SYMBOL.DEFAULT_MODEL]) {\n // @ts-ignore\n Object.keys(target[SYMBOL.DEFAULT_MODEL])\n .filter(key => {\n // @ts-ignore\n return !_.isFunction(target[SYMBOL.DEFAULT_MODEL][key]);\n })\n .forEach(key => {\n // @ts-ignore\n return res[key] = null;\n });\n }\n // @ts-ignore\n let mapping = target[SYMBOL.MODELS_MAPPING];\n if (_.isArray(mapping)) {\n mapping.forEach(m => {\n Object.keys(m)\n .forEach(key => {\n // @ts-ignore\n res[key] = null;\n });\n })\n } else if (mapping) {\n\n Object.keys(mapping)\n .forEach(key => {\n // @ts-ignore\n res[key] = null;\n });\n }\n }\n\n let propNames = Object.keys(res).filter(f => !!f);\n propNames = (!propNames.includes('id') ? ['id'] : []).concat(propNames);\n return propNames;\n}\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/describe-class.ts","\n\nimport { _ } from 'tnp-core/browser';\nimport { CLASSNAME } from './classname';\nimport { describeFromClassStringify, describeByDefaultModelsAndMapping } from './describe-class';\nimport { Models } from './models';\nimport { setClassName } from './set-class-name';\n\nexport { Models } from './models';\nexport { SYMBOL } from './symbols';\n\nexport class TchHelpers {\n\n static getBy(className: string | Function) {\n return CLASSNAME.getClassBy(className);\n }\n\n static 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\n static getName(target: Function, production = false) {\n return CLASSNAME.getClassName(target, production) as string;\n }\n\n static getNameFromObject(o: Object) {\n const fnCLass = this.getFromObject(o);\n return this.getName(fnCLass);\n }\n\n static getConfigs(target: Function): Models.ClassConfig[] {\n return CLASSNAME.getClassConfig(target)\n }\n\n static describeProperites(target: Function) {\n const d1 = describeFromClassStringify(target);\n const d2 = describeByDefaultModelsAndMapping(target);\n let uniq = {};\n // @ts-ignore\n d1.concat(d2).forEach(p => uniq[p] = p);\n return Object.keys(uniq)\n .filter(d => !!d)\n .filter(d => typeof target.prototype[d] !== 'function')\n }\n\n}\n\nconst notAllowed = [\n 'length', 'name',\n 'arguments', 'caller',\n 'constructor', 'apply',\n 'bind', 'call',\n 'toString'\n]\n\nexport const CLASS = {\n NAME: CLASSNAME.CLASSNAME,\n setName: setClassName,\n getBy: TchHelpers.getBy,\n /**\n * @deprecated\n */\n getSingleton<T = any>(target: Function) {\n if (typeof target !== 'function') {\n console.error(`[typescript-class-helpers][setSingletonObj] Type of target is not a function`)\n return\n }\n const config = TchHelpers.getConfigs(target)[0]\n\n\n return config.singleton as T;\n },\n /**\n * @deprecated\n */\n setSingletonObj(target: Function, singletonObject: any) {\n\n if (typeof target !== 'function') {\n console.error(`[typescript-class-helpers][setSingletonObj] Type of target is not a function`)\n return\n }\n\n if (Array.isArray(singletonObject)) {\n console.error(`[typescript-class-helpers][setSingletonObj] Singleton instance cant be an array`)\n return\n }\n\n if (typeof singletonObject !== 'object') {\n console.error(`[typescript-class-helpers][setSingletonObj] Singleton instance cant must be a object`)\n return\n }\n\n const className = CLASS.getName(target);\n\n\n\n const config = TchHelpers.getConfigs(target)[0]\n\n if (config.singleton) {\n console.warn(`[typescript-class-helpers] You are trying to set singleton of \"${className}\" second time with different object.`)\n }\n\n config.singleton = singletonObject;\n },\n /**\n * @deprecated\n */\n getConfigs: TchHelpers.getConfigs,\n /**\n * @deprecated\n */\n getConfig: (target: Function) => {\n return _.first(TchHelpers.getConfigs(target));\n },\n\n getMethodsNames(classOrClassInstance: any, allMethodsNames = []): string[] {\n if (!classOrClassInstance) {\n return allMethodsNames;\n }\n\n const isFun = _.isFunction(classOrClassInstance);\n const classFun = (isFun ? classOrClassInstance : Object.getPrototypeOf(classOrClassInstance));\n const objectToCheck = isFun ? (classOrClassInstance as Function)?.prototype : classOrClassInstance;\n\n const ooo = Object.getPrototypeOf(objectToCheck || {});\n const properties = ((isFun ? Object.keys(objectToCheck || {}) : (!!ooo ? Object.getOwnPropertyNames(ooo) : [])) || [])\n .filter(f => !notAllowed.includes(f));\n\n\n\n\n\n\n properties.filter((methodName) => typeof objectToCheck[methodName] === 'function').forEach(p => allMethodsNames.push(p));\n if (!classFun || !classFun.constructor || classFun?.constructor?.name === 'Object') {\n return allMethodsNames;\n }\n return CLASS.getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);\n },\n getFromObject: TchHelpers.getFromObject,\n getName: TchHelpers.getName,\n getNameFromObject: TchHelpers.getNameFromObject,\n describeProperites: TchHelpers.describeProperites,\n /**\n * @deprecated\n */\n OBJECT: (obj: any) => {\n return {\n get indexValue() {\n return CLASSNAME.getObjectIndexValue(obj);\n },\n get indexProperty() {\n return CLASSNAME.getObjectIndexPropertyValue(obj);\n },\n get isClassObject() {\n\n if (!_.isObject(obj) || _.isArray(obj) || _.isRegExp(obj) ||\n _.isBuffer(obj) || _.isArrayBuffer(obj)) {\n return false;\n }\n if (_.isDate(obj)) {\n return true;\n }\n const className = CLASS.getNameFromObject(obj)\n return _.isString(className) && className !== 'Object';\n },\n isEqual: (anotherObj: any, compareDeep = false) => {\n if (!CLASS.OBJECT(obj).isClassObject || !CLASS.OBJECT(anotherObj).isClassObject) {\n return false;\n }\n if (obj === anotherObj) {\n\n return true;\n }\n const v1 = CLASSNAME.getObjectIndexValue(obj);\n const v2 = CLASSNAME.getObjectIndexValue(anotherObj);\n const f1 = CLASSNAME.getObjectClassFamily(obj)\n const f2 = CLASSNAME.getObjectClassFamily(anotherObj)\n const isFamilyDiff = (!_.isString(f1) || !_.isString(f2) || (f1 !== f2));\n\n if (isFamilyDiff) {\n\n return false;\n }\n if (!CLASS.OBJECT(obj).isClassObject || !CLASS.OBJECT(anotherObj).isClassObject) {\n\n return false\n }\n\n\n\n\n\n if ((_.isNumber(v1) && _.isNumber(v2)) || (_.isString(v1) && _.isString(v2))) {\n\n const res = (v1 === v2);\n // @ts-ignore\n return res;\n }\n if (compareDeep) {\n return _.isEqual(v1, v2)\n }\n return false;\n }\n }\n }\n}\n\nexport * from 'enum-values';\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/index.ts","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getClasses"],"mappings":"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"}
1
+ {"version":3,"file":"typescript-class-helpers.mjs","sources":["../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/models.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/symbols.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/storage.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/set-class-name.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/registerd-db.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/errors-messages.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/classname.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/describe-class.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/lib/index.ts","../../../tmp-libs-for-dist/typescript-class-helpers/projects/typescript-class-helpers/src/typescript-class-helpers.ts"],"sourcesContent":["\n\nimport { CoreModels } from 'tnp-core/browser';\n\nexport namespace Models {\n\n /**\n * @deprecated\n */\n export type CLASSNAMEOptions = {\n uniqueKey?: string,\n /**\n * autoinstance - create instance of singleton automaticly inside decorator\n * first-instance - use first instace of created class as decorator\n */\n singleton?: 'autoinstance' | 'first-instance' | 'last-instance' | boolean,\n classFamily?: string,\n classNameInBrowser?: string,\n }\n\n /**\n * @deprecated\n */\n export class ParamConfig {\n paramName: string;\n paramType: CoreModels.ParamType;\n index: number;\n defaultType: any;\n expireInSeconds?: number;\n }\n\n /**\n * @deprecated\n */\n export class MethodConfig {\n methodName: string;\n /**\n * path is global in express app\n */\n global?: boolean;\n /**\n * override default content type\n */\n contentType?: any;\n /**\n * override default axiso response type\n */\n responseType?: any;\n path: string;\n descriptor: PropertyDescriptor;\n type: CoreModels.HttpMethod;\n/* */\n/* */\n \n parameters: { [paramName: string]: ParamConfig } = {};\n }\n\n /**\n * @deprecated\n */\n export interface ClassMeta {\n uniqueKey?: string;\n className?: string;\n classFamily?: string;\n classNameInBrowser?: string;\n target?: Function;\n }\n\n /**\n * @deprecated\n */\n export class ClassConfig {\n browserTransformFn?: (entity: any) => any;\n // @ts-ignore\n singleton: Object = void 0;\n injections: { getter: Function, propertyName: string; }[] = [];\n calculatedPath: string;\n path: string;\n vChildren?: ClassConfig[] = [];\n vParent?: ClassConfig;\n classReference: Function;\n className?: string;\n uniqueKey?: string;\n classNameInBrowser?: string;\n methods: { [methodName: string]: MethodConfig } = {};\n }\n\n}\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/models.ts","\n\nexport const SYMBOL = {\n MODELS_MAPPING: Symbol(),\n DEFAULT_MODEL: Symbol(),\n STORAGE: 'classesstorage',\n CLASSES: 'classes',\n}\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/symbols.ts","\n\nimport { Helpers } from 'tnp-core/browser';\nimport { SYMBOL } from './symbols';\nimport { _ } from 'tnp-core/browser';\n\nfunction defaultValues() {\n return _.cloneDeep({\n [SYMBOL.CLASSES]: []\n })\n}\n\nexport function getStorage<T = any>(property?: string): T {\n\n/* */\n/* */\n/* */\n/* */\n \n\n if (typeof property === 'string') {\n\n const storageInClassStaticProp = getStorage();\n return storageInClassStaticProp[property]\n }\n\n if (typeof defaultValues.prototype[SYMBOL.STORAGE] === 'undefined') {\n defaultValues.prototype[SYMBOL.STORAGE] = defaultValues()\n }\n return defaultValues.prototype[SYMBOL.STORAGE]\n}\n\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/storage.ts","\n\nimport { _ } from 'tnp-core/browser';\nimport { SYMBOL } from './symbols';\nimport { Models } from './models';\nimport { getStorage } from './storage';\nimport { CLASSNAME } from './classname';\nimport { CLASS } from './index';\n\n\nfunction getClasses(): Models.ClassMeta[] {\n const s = getStorage();\n return s[SYMBOL.CLASSES] as any;\n}\n\n// @ts-ignore\nexport function setClassName(target: Function, className: string, options?: Models.CLASSNAMEOptions) {\n\n let { classFamily, uniqueKey, classNameInBrowser, singleton } = options || {\n classFamily: void 0,\n uniqueKey: 'id',\n classNameInBrowser: void 0,\n singleton: void 0,\n autoinstance: false\n } as Models.CLASSNAMEOptions;\n\n if (!_.isUndefined(singleton) && _.isBoolean(singleton) && singleton) {\n singleton = 'first-instance'\n }\n\n if (!uniqueKey) {\n uniqueKey = 'id'\n }\n\n if (target) {\n const config = _.first(CLASSNAME.getClassConfig(target));\n config.className = className;\n config.uniqueKey = uniqueKey;\n config.classNameInBrowser = classNameInBrowser;\n\n }\n\n const existed = (getClasses() as { className: string; target: Function; }[])\n .find(f => f.className === className)\n\n if (existed) {\n existed.target = target;\n } else {\n const res = {\n className,\n classNameInBrowser,\n target,\n uniqueKey,\n classFamily\n }\n\n if (_.isUndefined(classFamily)) {\n Object.defineProperty(res, 'classFamily', {\n get: function () {\n const parent = Object.getPrototypeOf(target);\n if (!_.isFunction(parent) || parent.name === 'Object' || parent.name === '') {\n return className;\n }\n const classNameNew = CLASSNAME.getClassName(parent)\n return CLASSNAME.getClassFamilyByClassName(classNameNew)\n }\n })\n }\n getClasses().push(res)\n }\n const Original = target;\n\n\n if (singleton === 'first-instance' || singleton === 'last-instance') {\n const obj = {\n // @ts-ignore\n decoratedConstructor: function (...args) {\n\n const context = Original.apply(this, args);\n\n const existedSingleton = CLASS.getSingleton(Original)\n if (!existedSingleton || singleton === 'last-instance') {\n CLASS.setSingletonObj(Original, this)\n CLASS.setSingletonObj(obj.decoratedConstructor, this)\n\n }\n else {\n\n }\n\n return context;\n }\n };\n\n\n obj.decoratedConstructor.prototype = Original.prototype;\n // @ts-ignore\n Object.keys(Original).forEach((name: string) => { obj.decoratedConstructor[name] = (<any>Original)[name]; });\n Object.defineProperty(obj.decoratedConstructor, 'name', {\n value: className,\n configurable: true,\n })\n\n\n return obj.decoratedConstructor;\n } else if (singleton === 'autoinstance') {\n\n\n const auto = new (Original as any)();\n CLASS.setSingletonObj(Original, auto)\n\n\n }\n}\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/set-class-name.ts","\n\nimport { Models } from './models';\nexport const registerd = {\n configs: [] as Models.ClassConfig[],\n classes: [] as Function[],\n}\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/registerd-db.ts","\n\n\nexport const ERROR_MSG_CLASS_WITHOUT_DECORATOR = `[typescript-class-helpers][getClassName(...)](PRODUCTION MODE ERROR)\nPlease use decoartor @CLASSNAME for each entity or controller\nThis is preventing class name problem in minified code.\n // @ts-ignore\nimport { CLASS } from '../lib';\n\n@CLASS.NAME('ExampleClass')\nclass ExampleClass {\n ...\n}\n`;\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/errors-messages.ts","\n\nimport { _ } from 'tnp-core/browser';\nimport { Models } from './models';\nimport { SYMBOL } from './symbols';\nimport { TchHelpers } from './index';\nimport { Helpers } from 'tnp-core/browser';\nimport { getStorage } from './storage';\nimport { setClassName } from './set-class-name';\nimport { registerd } from './registerd-db';\nimport { ERROR_MSG_CLASS_WITHOUT_DECORATOR } from './errors-messages';\n/* */\n/* */\n \n\nfunction getClasses(): Models.ClassMeta[] {\n const s = getStorage();\n return s[SYMBOL.CLASSES] as any;\n}\nexport namespace CLASSNAME {\n\n export function getClassConfig(target: Function, configs: Models.ClassConfig[] = [], callerTarget?: Function): Models.ClassConfig[] {\n if (!_.isFunction(target)) {\n throw `[typescript-class-helper][getClassConfig] Cannot get class config from: ${target}`\n }\n\n let config: Models.ClassConfig;\n const parentClass = Object.getPrototypeOf(target);\n const isValidParent = (_.isFunction(parentClass) && parentClass.name !== '');\n\n if (registerd.classes.includes(target)) {\n config = registerd.configs[registerd.classes.findIndex(c => c === target)];\n } else {\n config = new Models.ClassConfig();\n config.classReference = target;\n registerd.classes.push(target);\n }\n\n registerd.configs[registerd.classes.findIndex(c => c === target)] = config;\n if (callerTarget) {\n const callerTargetConfig = registerd.configs[registerd.classes.findIndex(c => c === callerTarget)];\n if (!config.vChildren.includes(callerTargetConfig)) {\n config.vChildren.push(callerTargetConfig);\n }\n callerTargetConfig.vParent = config;\n }\n\n configs.push(config);\n\n return isValidParent ? getClassConfig(parentClass, configs, target) : configs;\n }\n\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 CLASSNAME(className: string,\n options?: Models.CLASSNAMEOptions) {\n return function (target: Function) {\n\n return setClassName(target, className, options);\n } as any;\n }\n\n export function getClassName(target: Function, production = false) {\n if (_.isNil(target)) {\n\n\n return void 0;\n }\n if (_.isString(target)) {\n\n Helpers.warn(`[typescript-class-helpers][getClassName] target is string: '${target}', produciton: ${production}`)\n return target;\n }\n if (!_.isFunction(target)) {\n\n Helpers.warn(`[typescript-class-helpers][getClassName] target is not a class`)\n return void 0;\n }\n\n const configs = getClassConfig(target);\n const config = _.first(configs);\n\n const classNameInBrowser = config?.classNameInBrowser;\n\n if (Helpers.isBrowser && _.isString(classNameInBrowser)) {\n return classNameInBrowser;\n }\n\n const className = config?.className;\n\n if (typeof className === 'string') {\n return className;\n }\n\n\n if (production) {\n console.log('class without @CLASS.NAME deocrator', target as any)\n throw new Error(ERROR_MSG_CLASS_WITHOUT_DECORATOR);\n } else {\n\n\n\n\n\n\n\n\n\n\n\n\n }\n\n\n if (target.name?.startsWith('class_')) {\n return '';\n }\n\n return target.name;\n }\n\n // @ts-ignore\n export function getObjectIndexPropertyValue(obj: any) {\n const className = TchHelpers.getNameFromObject(obj);\n\n let c = getClasses().find(c => c.className === className);\n\n if (c) {\n return c.uniqueKey;\n }\n }\n\n // @ts-ignore\n export function getClassFamilyByClassName(className: string) {\n let c = getClasses().find(c => c.className === className);\n\n if (c) {\n return c.classFamily;\n }\n }\n\n // @ts-ignore\n export function getObjectClassFamily(obj: any) {\n const className = TchHelpers.getNameFromObject(obj);\n\n let c = getClasses().find(c => c.className === className);\n\n if (c) {\n return c.classFamily;\n }\n }\n\n export function getObjectIndexValue(obj: any) {\n const className = TchHelpers.getNameFromObject(obj);\n\n let c = getClasses().find(c => c.className === className);\n\n if (c && _.isString(c.uniqueKey)) {\n return obj[c.uniqueKey];\n }\n }\n\n export function getClassBy(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') { // 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 let c = getClasses().find(c => c.className === className);\n\n if (c) {\n res = c.target;\n }\n\n // @ts-ignore\n return res;\n }\n\n}\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/classname.ts","\n\nimport { _ } from 'tnp-core/browser';\nimport { SYMBOL } from './symbols';\n\n\n\n/**\n * @DEPRECATED\n * Describe fields assigned in class\n */\nconst FRegEx = new RegExp(/(?:this\\.)(.+?(?= ))/g);\nexport function describeFromClassStringify(target: Function, parent = false): string[] {\n // @ts-ignore\n var result = [];\n if (parent) {\n var proto = Object.getPrototypeOf(target.prototype);\n if (proto) {\n // @ts-ignore\n result = result.concat(describeFromClassStringify(proto.constructor, parent));\n }\n }\n const classString = target.toString();\n const matches = classString.match(FRegEx) || []\n\n\n\n\n result = result.concat(matches);\n return result.map(prop => prop\n .replace('this.', '')\n .replace('.', '')\n .replace(')', '')\n .replace('(', '')\n )\n\n}\n\n/**\n * Describe fields assigne through @DefaultModelWithMapping decorator\n * without functions\n */\nexport function describeByDefaultModelsAndMapping(target: Function): string[] {\n let res = {}\n if (target) {\n // @ts-ignore\n if (target[SYMBOL.DEFAULT_MODEL]) {\n // @ts-ignore\n Object.keys(target[SYMBOL.DEFAULT_MODEL])\n .filter(key => {\n // @ts-ignore\n return !_.isFunction(target[SYMBOL.DEFAULT_MODEL][key]);\n })\n .forEach(key => {\n // @ts-ignore\n return res[key] = null;\n });\n }\n // @ts-ignore\n let mapping = target[SYMBOL.MODELS_MAPPING];\n if (_.isArray(mapping)) {\n mapping.forEach(m => {\n Object.keys(m)\n .forEach(key => {\n // @ts-ignore\n res[key] = null;\n });\n })\n } else if (mapping) {\n\n Object.keys(mapping)\n .forEach(key => {\n // @ts-ignore\n res[key] = null;\n });\n }\n }\n\n let propNames = Object.keys(res).filter(f => !!f);\n propNames = (!propNames.includes('id') ? ['id'] : []).concat(propNames);\n return propNames;\n}\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/describe-class.ts","\n\nimport { _ } from 'tnp-core/browser';\nimport { CLASSNAME } from './classname';\nimport { describeFromClassStringify, describeByDefaultModelsAndMapping } from './describe-class';\nimport { Models } from './models';\nimport { setClassName } from './set-class-name';\n\nexport { Models } from './models';\nexport { SYMBOL } from './symbols';\n\nexport class TchHelpers {\n\n static getBy(className: string | Function) {\n return CLASSNAME.getClassBy(className);\n }\n\n static 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\n static getName(target: Function, production = false) {\n return CLASSNAME.getClassName(target, production) as string;\n }\n\n static getNameFromObject(o: Object) {\n const fnCLass = this.getFromObject(o);\n return this.getName(fnCLass);\n }\n\n static getConfigs(target: Function): Models.ClassConfig[] {\n return CLASSNAME.getClassConfig(target)\n }\n\n static describeProperites(target: Function) {\n const d1 = describeFromClassStringify(target);\n const d2 = describeByDefaultModelsAndMapping(target);\n let uniq = {};\n // @ts-ignore\n d1.concat(d2).forEach(p => uniq[p] = p);\n return Object.keys(uniq)\n .filter(d => !!d)\n .filter(d => typeof target.prototype[d] !== 'function')\n }\n\n}\n\nconst notAllowedAsMethodName = [\n 'length', 'name',\n 'arguments', 'caller',\n 'constructor', 'apply',\n 'bind', 'call',\n 'toString',\n '__defineGetter__',\n '__defineSetter__', 'hasOwnProperty',\n '__lookupGetter__', '__lookupSetter__',\n 'isPrototypeOf', 'propertyIsEnumerable',\n 'valueOf', '__proto__', 'toLocaleString',\n];\n\nconst getMethodsNames = (classOrClassInstance: any, allMethodsNames = []): string[] => {\n if (!classOrClassInstance) {\n return allMethodsNames;\n }\n\n const isClassFunction = _.isFunction(classOrClassInstance);\n const classFun = (isClassFunction ? classOrClassInstance : Object.getPrototypeOf(classOrClassInstance));\n const objectToCheck = isClassFunction ? (classOrClassInstance as Function)?.prototype : 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 ])\n .filter(f => !!f && !notAllowedAsMethodName.includes(f));\n\n properties.filter((methodName) => typeof objectToCheck[methodName] === 'function').forEach(p => allMethodsNames.push(p));\n\n if (!classFun || !classFun.constructor || classFun?.constructor?.name === 'Object') {\n return allMethodsNames;\n }\n return getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);\n};\n\nexport const CLASS = {\n NAME: CLASSNAME.CLASSNAME,\n setName: setClassName,\n getBy: TchHelpers.getBy,\n /**\n * @deprecated\n */\n getSingleton<T = any>(target: Function) {\n if (typeof target !== 'function') {\n console.error(`[typescript-class-helpers][setSingletonObj] Type of target is not a function`)\n return\n }\n const config = TchHelpers.getConfigs(target)[0]\n\n\n return config.singleton as T;\n },\n /**\n * @deprecated\n */\n setSingletonObj(target: Function, singletonObject: any) {\n\n if (typeof target !== 'function') {\n console.error(`[typescript-class-helpers][setSingletonObj] Type of target is not a function`)\n return\n }\n\n if (Array.isArray(singletonObject)) {\n console.error(`[typescript-class-helpers][setSingletonObj] Singleton instance cant be an array`)\n return\n }\n\n if (typeof singletonObject !== 'object') {\n console.error(`[typescript-class-helpers][setSingletonObj] Singleton instance cant must be a object`)\n return\n }\n\n const className = CLASS.getName(target);\n\n\n\n const config = TchHelpers.getConfigs(target)[0]\n\n if (config.singleton) {\n console.warn(`[typescript-class-helpers] You are trying to set singleton of \"${className}\" second time with different object.`)\n }\n\n config.singleton = singletonObject;\n },\n /**\n * @deprecated\n */\n getConfigs: TchHelpers.getConfigs,\n /**\n * @deprecated\n */\n getConfig: (target: Function) => {\n return _.first(TchHelpers.getConfigs(target));\n },\n\n\n getMethodsNames(classOrClassInstance: any): string[] {\n return getMethodsNames(classOrClassInstance);\n },\n getFromObject: TchHelpers.getFromObject,\n getName: TchHelpers.getName,\n getNameFromObject: TchHelpers.getNameFromObject,\n describeProperites: TchHelpers.describeProperites,\n /**\n * @deprecated\n */\n OBJECT: (obj: any) => {\n return {\n get indexValue() {\n return CLASSNAME.getObjectIndexValue(obj);\n },\n get indexProperty() {\n return CLASSNAME.getObjectIndexPropertyValue(obj);\n },\n get isClassObject() {\n\n if (!_.isObject(obj) || _.isArray(obj) || _.isRegExp(obj) ||\n _.isBuffer(obj) || _.isArrayBuffer(obj)) {\n return false;\n }\n if (_.isDate(obj)) {\n return true;\n }\n const className = CLASS.getNameFromObject(obj)\n return _.isString(className) && className !== 'Object';\n },\n isEqual: (anotherObj: any, compareDeep = false) => {\n if (!CLASS.OBJECT(obj).isClassObject || !CLASS.OBJECT(anotherObj).isClassObject) {\n return false;\n }\n if (obj === anotherObj) {\n\n return true;\n }\n const v1 = CLASSNAME.getObjectIndexValue(obj);\n const v2 = CLASSNAME.getObjectIndexValue(anotherObj);\n const f1 = CLASSNAME.getObjectClassFamily(obj)\n const f2 = CLASSNAME.getObjectClassFamily(anotherObj)\n const isFamilyDiff = (!_.isString(f1) || !_.isString(f2) || (f1 !== f2));\n\n if (isFamilyDiff) {\n\n return false;\n }\n if (!CLASS.OBJECT(obj).isClassObject || !CLASS.OBJECT(anotherObj).isClassObject) {\n\n return false\n }\n\n\n\n\n\n if ((_.isNumber(v1) && _.isNumber(v2)) || (_.isString(v1) && _.isString(v2))) {\n\n const res = (v1 === v2);\n // @ts-ignore\n return res;\n }\n if (compareDeep) {\n return _.isEqual(v1, v2)\n }\n return false;\n }\n }\n }\n}\n\nexport * from 'enum-values';\n\n ;({}); // @--end-of-file-for-module=typescript-class-helpers lib/index.ts","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getClasses"],"mappings":";;;AAIM,IAAW,OAmFhB;AAnFD,CAAA,UAAiB,MAAM,EAAA;AAgBrB;;AAEG;AACH,IAAA,MAAa,WAAW,CAAA;AAMvB,KAAA;AANY,IAAA,MAAA,CAAA,WAAW,cAMvB,CAAA;AAED;;AAEG;AACH,IAAA,MAAa,YAAY,CAAA;AAAzB,QAAA,WAAA,GAAA;;;YAoBE,IAAU,CAAA,UAAA,GAAyC,EAAE,CAAC;SACvD;AAAA,KAAA;AArBY,IAAA,MAAA,CAAA,YAAY,eAqBxB,CAAA;AAaD;;AAEG;AACH,IAAA,MAAa,WAAW,CAAA;AAAxB,QAAA,WAAA,GAAA;;YAGE,IAAS,CAAA,SAAA,GAAW,KAAK,CAAC,CAAC;YAC3B,IAAU,CAAA,UAAA,GAAkD,EAAE,CAAC;YAG/D,IAAS,CAAA,SAAA,GAAmB,EAAE,CAAC;YAM/B,IAAO,CAAA,OAAA,GAA2C,EAAE,CAAC;SACtD;AAAA,KAAA;AAdY,IAAA,MAAA,CAAA,WAAW,cAcvB,CAAA;AAEH,CAAC,EAnFgB,MAAM,KAAN,MAAM,GAmFtB,EAAA,CAAA,CAAA,CAAA;AAEA,CAAC;AAAA,CAAC,EAAE,EAAE;;ACvFM,MAAA,MAAM,GAAG;IACpB,cAAc,EAAE,MAAM,EAAE;IACxB,aAAa,EAAE,MAAM,EAAE;AACvB,IAAA,OAAO,EAAE,gBAAgB;AACzB,IAAA,OAAO,EAAE,SAAS;EAGlB;AAAA,CAAC,EAAE,EAAE;;ACHP,SAAS,aAAa,GAAA;IACpB,OAAO,CAAC,CAAC,SAAS,CAAC;AACjB,QAAA,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE;AACrB,KAAA,CAAC,CAAA;AACJ,CAAC;AAEK,SAAU,UAAU,CAAU,QAAiB,EAAA;;;;;AAQnD,IAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAEhC,QAAA,MAAM,wBAAwB,GAAG,UAAU,EAAE,CAAC;AAC9C,QAAA,OAAO,wBAAwB,CAAC,QAAQ,CAAC,CAAA;AAC1C,KAAA;IAED,IAAI,OAAO,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,WAAW,EAAE;QAClE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,aAAa,EAAE,CAAA;AAC1D,KAAA;IACD,OAAO,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAChD,CAAC;AAGA,CAAC;AAAA,CAAC,EAAE,EAAE;;ACvBP,SAASA,YAAU,GAAA;AACjB,IAAA,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;AACvB,IAAA,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAQ,CAAC;AAClC,CAAC;AAED;SACgB,YAAY,CAAC,MAAgB,EAAE,SAAiB,EAAE,OAAiC,EAAA;IAEjG,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,GAAG,OAAO,IAAI;QACzE,WAAW,EAAE,KAAK,CAAC;AACnB,QAAA,SAAS,EAAE,IAAI;QACf,kBAAkB,EAAE,KAAK,CAAC;QAC1B,SAAS,EAAE,KAAK,CAAC;AACjB,QAAA,YAAY,EAAE,KAAK;KACO,CAAC;AAE7B,IAAA,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,EAAE;QACpE,SAAS,GAAG,gBAAgB,CAAA;AAC7B,KAAA;IAED,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,IAAI,CAAA;AACjB,KAAA;AAED,IAAA,IAAI,MAAM,EAAE;AACV,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AACzD,QAAA,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B,QAAA,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B,QAAA,MAAM,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;AAEhD,KAAA;IAED,MAAM,OAAO,GAAIA,YAAU,EAAiD;SACzE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA;AAEvC,IAAA,IAAI,OAAO,EAAE;AACX,QAAA,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,KAAA;AAAM,SAAA;AACL,QAAA,MAAM,GAAG,GAAG;YACV,SAAS;YACT,kBAAkB;YAClB,MAAM;YACN,SAAS;YACT,WAAW;SACZ,CAAA;AAED,QAAA,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;AAC9B,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,EAAE;AACxC,gBAAA,GAAG,EAAE,YAAA;oBACH,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC7C,oBAAA,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE,EAAE;AAC3E,wBAAA,OAAO,SAAS,CAAC;AAClB,qBAAA;oBACD,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;AACnD,oBAAA,OAAO,SAAS,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAA;iBACzD;AACF,aAAA,CAAC,CAAA;AACH,SAAA;AACD,QAAAA,YAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACvB,KAAA;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC;AAGxB,IAAA,IAAI,SAAS,KAAK,gBAAgB,IAAI,SAAS,KAAK,eAAe,EAAE;AACnE,QAAA,MAAM,GAAG,GAAG;;YAEV,oBAAoB,EAAE,UAAU,GAAG,IAAI,EAAA;gBAErC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAE3C,MAAM,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;AACrD,gBAAA,IAAI,CAAC,gBAAgB,IAAI,SAAS,KAAK,eAAe,EAAE;AACtD,oBAAA,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;oBACrC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAA;AAEtD,iBAAA;AACI,qBAAA;AAEJ,iBAAA;AAED,gBAAA,OAAO,OAAO,CAAC;aAChB;SACF,CAAC;QAGF,GAAG,CAAC,oBAAoB,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;;AAExD,QAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,KAAO,EAAA,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAS,QAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7G,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,oBAAoB,EAAE,MAAM,EAAE;AACtD,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,YAAY,EAAE,IAAI;AACnB,SAAA,CAAC,CAAA;QAGF,OAAO,GAAG,CAAC,oBAAoB,CAAC;AACjC,KAAA;SAAM,IAAI,SAAS,KAAK,cAAc,EAAE;AAGvC,QAAA,MAAM,IAAI,GAAG,IAAK,QAAgB,EAAE,CAAC;AACrC,QAAA,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;AAGtC,KAAA;AACH,CAAC;AAEA,CAAC;AAAA,CAAC,EAAE,EAAE;;AChHA,MAAM,SAAS,GAAG;AACvB,IAAA,OAAO,EAAE,EAA0B;AACnC,IAAA,OAAO,EAAE,EAAgB;CAC1B,CAEC;AAAA,CAAC,EAAE,EAAE;;ACLA,MAAM,iCAAiC,GAAG,CAAA;;;;;;;;;;CAUhD,CAAC;AAED,CAAC;AAAA,CAAC,EAAE,EAAE;;ACJP;AACA;AAGA,SAAS,UAAU,GAAA;AACjB,IAAA,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;AACvB,IAAA,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAQ,CAAC;AAClC,CAAC;AACK,IAAW,SAAS,CAqLzB;AArLD,CAAA,UAAiB,WAAS,EAAA;AAExB,IAAA,SAAgB,cAAc,CAAC,MAAgB,EAAE,OAAgC,GAAA,EAAE,EAAE,YAAuB,EAAA;AAC1G,QAAA,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YACzB,MAAM,CAAA,wEAAA,EAA2E,MAAM,CAAA,CAAE,CAAA;AAC1F,SAAA;AAED,QAAA,IAAI,MAA0B,CAAC;QAC/B,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAClD,QAAA,MAAM,aAAa,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QAE7E,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACtC,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;AAC5E,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;AAClC,YAAA,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC;AAC/B,YAAA,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChC,SAAA;QAED,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;AAC3E,QAAA,IAAI,YAAY,EAAE;YAChB,MAAM,kBAAkB,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC;YACnG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;AAClD,gBAAA,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC3C,aAAA;AACD,YAAA,kBAAkB,CAAC,OAAO,GAAG,MAAM,CAAC;AACrC,SAAA;AAED,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAErB,QAAA,OAAO,aAAa,GAAG,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;KAC/E;AA7Be,IAAA,WAAA,CAAA,cAAc,iBA6B7B,CAAA;AAED;;;;AAIG;AACH,IAAA,SAAgB,SAAS,CAAC,SAAiB,EACzC,OAAiC,EAAA;AACjC,QAAA,OAAO,UAAU,MAAgB,EAAA;YAE/B,OAAO,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAClD,SAAQ,CAAC;KACV;AANe,IAAA,WAAA,CAAA,SAAS,YAMxB,CAAA;AAED,IAAA,SAAgB,YAAY,CAAC,MAAgB,EAAE,UAAU,GAAG,KAAK,EAAA;AAC/D,QAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAGnB,OAAO,KAAK,CAAC,CAAC;AACf,SAAA;AACD,QAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAEtB,OAAO,CAAC,IAAI,CAAC,CAAA,4DAAA,EAA+D,MAAM,CAAkB,eAAA,EAAA,UAAU,CAAE,CAAA,CAAC,CAAA;AACjH,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;AACD,QAAA,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAEzB,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,8DAAA,CAAgE,CAAC,CAAA;YAC9E,OAAO,KAAK,CAAC,CAAC;AACf,SAAA;AAED,QAAA,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAEhC,QAAA,MAAM,kBAAkB,GAAG,MAAM,EAAE,kBAAkB,CAAC;QAEtD,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;AACvD,YAAA,OAAO,kBAAkB,CAAC;AAC3B,SAAA;AAED,QAAA,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,CAAC;AAEpC,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACjC,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AAGD,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,MAAa,CAAC,CAAA;AACjE,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACpD,SAAA;AAAM,aAAA;AAaN,SAAA;QAGD,IAAI,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE;AACrC,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QAED,OAAO,MAAM,CAAC,IAAI,CAAC;KACpB;AAzDe,IAAA,WAAA,CAAA,YAAY,eAyD3B,CAAA;;IAGD,SAAgB,2BAA2B,CAAC,GAAQ,EAAA;QAClD,MAAM,SAAS,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAEpD,QAAA,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;AAE1D,QAAA,IAAI,CAAC,EAAE;YACL,OAAO,CAAC,CAAC,SAAS,CAAC;AACpB,SAAA;KACF;AARe,IAAA,WAAA,CAAA,2BAA2B,8BAQ1C,CAAA;;IAGD,SAAgB,yBAAyB,CAAC,SAAiB,EAAA;AACzD,QAAA,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;AAE1D,QAAA,IAAI,CAAC,EAAE;YACL,OAAO,CAAC,CAAC,WAAW,CAAC;AACtB,SAAA;KACF;AANe,IAAA,WAAA,CAAA,yBAAyB,4BAMxC,CAAA;;IAGD,SAAgB,oBAAoB,CAAC,GAAQ,EAAA;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAEpD,QAAA,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;AAE1D,QAAA,IAAI,CAAC,EAAE;YACL,OAAO,CAAC,CAAC,WAAW,CAAC;AACtB,SAAA;KACF;AARe,IAAA,WAAA,CAAA,oBAAoB,uBAQnC,CAAA;IAED,SAAgB,mBAAmB,CAAC,GAAQ,EAAA;QAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAEpD,QAAA,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;AAChC,YAAA,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACzB,SAAA;KACF;AARe,IAAA,WAAA,CAAA,mBAAmB,sBAQlC,CAAA;IAED,SAAgB,UAAU,CAAC,SAA4B,EAAA;AACrD,QAAA,IAAI,GAAG,CAAC;AACR,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5B,YAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,MAAM,CAAA;;;;;;SAML,CAAA;AACF,aAAA;AACD,YAAA,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;AACzB,SAAA;AACD,QAAA,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;YACnC,GAAG,GAAG,SAAS,CAAC;AACjB,SAAA;QACD,IAAI,SAAS,KAAK,MAAM,EAAE;YACxB,GAAG,GAAG,IAAI,CAAC;AACZ,SAAA;QAED,IAAI,SAAS,KAAK,UAAU,EAAE;YAC5B,GAAG,GAAG,QAAQ,CAAC;AAChB,SAAA;AAED,QAAA,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;AAE1D,QAAA,IAAI,CAAC,EAAE;AACL,YAAA,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;AAChB,SAAA;;AAGD,QAAA,OAAO,GAAG,CAAC;KACZ;AAjCe,IAAA,WAAA,CAAA,UAAU,aAiCzB,CAAA;AAEH,CAAC,EArLgB,SAAS,KAAT,SAAS,GAqLzB,EAAA,CAAA,CAAA,CAAA;AAEA,CAAC;AAAA,CAAC,EAAE,EAAE;;ACnMP;;;AAGI;AACJ,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,uBAAuB,CAAC,CAAC;SACnC,0BAA0B,CAAC,MAAgB,EAAE,MAAM,GAAG,KAAK,EAAA;;IAEzE,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,IAAA,IAAI,MAAM,EAAE;QACV,IAAI,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACpD,QAAA,IAAI,KAAK,EAAE;;AAET,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/E,SAAA;AACF,KAAA;AACD,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;AAK/C,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI;AAC3B,SAAA,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;AACpB,SAAA,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AAChB,SAAA,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AAChB,SAAA,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAClB,CAAA;AAEH,CAAC;AAED;;;AAGK;AACC,SAAU,iCAAiC,CAAC,MAAgB,EAAA;IAChE,IAAI,GAAG,GAAG,EAAE,CAAA;AACZ,IAAA,IAAI,MAAM,EAAE;;AAEV,QAAA,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;;YAEhC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;iBACtC,MAAM,CAAC,GAAG,IAAG;;AAEZ,gBAAA,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,aAAC,CAAC;iBACD,OAAO,CAAC,GAAG,IAAG;;AAEb,gBAAA,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACzB,aAAC,CAAC,CAAC;AACN,SAAA;;QAED,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACtB,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAG;AAClB,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;qBACX,OAAO,CAAC,GAAG,IAAG;;AAEb,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAClB,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAA;AACH,SAAA;AAAM,aAAA,IAAI,OAAO,EAAE;AAElB,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;iBACjB,OAAO,CAAC,GAAG,IAAG;;AAEb,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAClB,aAAC,CAAC,CAAC;AACN,SAAA;AACF,KAAA;AAED,IAAA,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AACxE,IAAA,OAAO,SAAS,CAAC;AACnB,CAAC;AAEA,CAAC;AAAA,CAAC,EAAE,EAAE;;MCxEM,UAAU,CAAA;IAErB,OAAO,KAAK,CAAC,SAA4B,EAAA;AACvC,QAAA,OAAO,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;KACxC;IAED,OAAO,aAAa,CAAC,CAAS,EAAA;AAC5B,QAAA,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACnC,OAAO;AACR,SAAA;QACD,IAAI,CAAC,CAAC,WAAW,EAAE;YACjB,OAAO,CAAC,CAAC,WAAW,CAAC;AACtB,SAAA;QACD,MAAM,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACnC,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;KAC3B;AAED,IAAA,OAAO,OAAO,CAAC,MAAgB,EAAE,UAAU,GAAG,KAAK,EAAA;QACjD,OAAO,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAW,CAAC;KAC7D;IAED,OAAO,iBAAiB,CAAC,CAAS,EAAA;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACtC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAC9B;IAED,OAAO,UAAU,CAAC,MAAgB,EAAA;AAChC,QAAA,OAAO,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;KACxC;IAED,OAAO,kBAAkB,CAAC,MAAgB,EAAA;AACxC,QAAA,MAAM,EAAE,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAC9C,QAAA,MAAM,EAAE,GAAG,iCAAiC,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,IAAI,GAAG,EAAE,CAAC;;AAEd,QAAA,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;aACrB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,aAAA,MAAM,CAAC,CAAC,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAA;KAC1D;AAEF,CAAA;AAED,MAAM,sBAAsB,GAAG;AAC7B,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,WAAW,EAAE,QAAQ;AACrB,IAAA,aAAa,EAAE,OAAO;AACtB,IAAA,MAAM,EAAE,MAAM;IACd,UAAU;IACV,kBAAkB;AAClB,IAAA,kBAAkB,EAAE,gBAAgB;AACpC,IAAA,kBAAkB,EAAE,kBAAkB;AACtC,IAAA,eAAe,EAAE,sBAAsB;IACvC,SAAS,EAAE,WAAW,EAAE,gBAAgB;CACzC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,oBAAyB,EAAE,eAAe,GAAG,EAAE,KAAc;IACpF,IAAI,CAAC,oBAAoB,EAAE;AACzB,QAAA,OAAO,eAAe,CAAC;AACxB,KAAA;IAED,MAAM,eAAe,GAAG,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAC3D,IAAA,MAAM,QAAQ,IAAI,eAAe,GAAG,oBAAoB,GAAG,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACxG,IAAA,MAAM,aAAa,GAAG,eAAe,GAAI,oBAAiC,EAAE,SAAS,GAAG,oBAAoB,CAAC;IAC7G,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;AAEhE,IAAA,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC;AACxB,QAAA,GAAG,MAAM,CAAC,mBAAmB,CAAC,aAAa,IAAI,EAAE,CAAC;AAClD,QAAA,GAAG,MAAM,CAAC,mBAAmB,CAAC,YAAY,IAAI,EAAE,CAAC;AACjD,QAAA,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;AACnC,QAAA,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;KACnC,CAAC;AACC,SAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3D,IAAA,UAAU,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,OAAO,aAAa,CAAC,UAAU,CAAC,KAAK,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzH,IAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,QAAQ,EAAE,WAAW,EAAE,IAAI,KAAK,QAAQ,EAAE;AAClF,QAAA,OAAO,eAAe,CAAC;AACxB,KAAA;IACD,OAAO,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEW,MAAA,KAAK,GAAG;IACnB,IAAI,EAAE,SAAS,CAAC,SAAS;AACzB,IAAA,OAAO,EAAE,YAAY;IACrB,KAAK,EAAE,UAAU,CAAC,KAAK;AACvB;;AAEG;AACH,IAAA,YAAY,CAAU,MAAgB,EAAA;AACpC,QAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AAChC,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,4EAAA,CAA8E,CAAC,CAAA;YAC7F,OAAM;AACP,SAAA;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAG/C,OAAO,MAAM,CAAC,SAAc,CAAC;KAC9B;AACD;;AAEG;IACH,eAAe,CAAC,MAAgB,EAAE,eAAoB,EAAA;AAEpD,QAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AAChC,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,4EAAA,CAA8E,CAAC,CAAA;YAC7F,OAAM;AACP,SAAA;AAED,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;AAClC,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,+EAAA,CAAiF,CAAC,CAAA;YAChG,OAAM;AACP,SAAA;AAED,QAAA,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE;AACvC,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,oFAAA,CAAsF,CAAC,CAAA;YACrG,OAAM;AACP,SAAA;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAIxC,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAE/C,IAAI,MAAM,CAAC,SAAS,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,kEAAkE,SAAS,CAAA,oCAAA,CAAsC,CAAC,CAAA;AAChI,SAAA;AAED,QAAA,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;KACpC;AACD;;AAEG;IACH,UAAU,EAAE,UAAU,CAAC,UAAU;AACjC;;AAEG;AACH,IAAA,SAAS,EAAE,CAAC,MAAgB,KAAI;QAC9B,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;KAC/C;AAGD,IAAA,eAAe,CAAC,oBAAyB,EAAA;AACvC,QAAA,OAAO,eAAe,CAAC,oBAAoB,CAAC,CAAC;KAC9C;IACD,aAAa,EAAE,UAAU,CAAC,aAAa;IACvC,OAAO,EAAE,UAAU,CAAC,OAAO;IAC3B,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;IAC/C,kBAAkB,EAAE,UAAU,CAAC,kBAAkB;AACjD;;AAEG;AACH,IAAA,MAAM,EAAE,CAAC,GAAQ,KAAI;QACnB,OAAO;AACL,YAAA,IAAI,UAAU,GAAA;AACZ,gBAAA,OAAO,SAAS,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;aAC3C;AACD,YAAA,IAAI,aAAa,GAAA;AACf,gBAAA,OAAO,SAAS,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC;aACnD;AACD,YAAA,IAAI,aAAa,GAAA;gBAEf,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AACvD,oBAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;AACzC,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACD,gBAAA,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AACjB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAA;gBAC9C,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,QAAQ,CAAC;aACxD;YACD,OAAO,EAAE,CAAC,UAAe,EAAE,WAAW,GAAG,KAAK,KAAI;AAChD,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE;AAC/E,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;gBACD,IAAI,GAAG,KAAK,UAAU,EAAE;AAEtB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;gBACD,MAAM,EAAE,GAAG,SAAS,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;gBAC9C,MAAM,EAAE,GAAG,SAAS,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBACrD,MAAM,EAAE,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAA;gBAC9C,MAAM,EAAE,GAAG,SAAS,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAA;gBACrD,MAAM,YAAY,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAEzE,gBAAA,IAAI,YAAY,EAAE;AAEhB,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACD,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE;AAE/E,oBAAA,OAAO,KAAK,CAAA;AACb,iBAAA;AAMD,gBAAA,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE;AAE5E,oBAAA,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;;AAExB,oBAAA,OAAO,GAAG,CAAC;AACZ,iBAAA;AACD,gBAAA,IAAI,WAAW,EAAE;oBACf,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;AACzB,iBAAA;AACD,gBAAA,OAAO,KAAK,CAAC;aACd;SACF,CAAA;KACF;EACF;AAIA,CAAC;AAAA,CAAC,EAAE,EAAE;;ACpOP;;AAEG;;;;"}
@@ -32,7 +32,7 @@ export declare const CLASS: {
32
32
  * @deprecated
33
33
  */
34
34
  getConfig: (target: Function) => Models.ClassConfig;
35
- getMethodsNames(classOrClassInstance: any, allMethodsNames?: any[]): string[];
35
+ getMethodsNames(classOrClassInstance: any): string[];
36
36
  getFromObject: typeof TchHelpers.getFromObject;
37
37
  getName: typeof TchHelpers.getName;
38
38
  getNameFromObject: typeof TchHelpers.getNameFromObject;
@@ -39,13 +39,39 @@ export class TchHelpers {
39
39
  .filter(d => typeof target.prototype[d] !== 'function');
40
40
  }
41
41
  }
42
- const notAllowed = [
42
+ const notAllowedAsMethodName = [
43
43
  'length', 'name',
44
44
  'arguments', 'caller',
45
45
  'constructor', 'apply',
46
46
  'bind', 'call',
47
- 'toString'
47
+ 'toString',
48
+ '__defineGetter__',
49
+ '__defineSetter__', 'hasOwnProperty',
50
+ '__lookupGetter__', '__lookupSetter__',
51
+ 'isPrototypeOf', 'propertyIsEnumerable',
52
+ 'valueOf', '__proto__', 'toLocaleString',
48
53
  ];
54
+ const getMethodsNames = (classOrClassInstance, allMethodsNames = []) => {
55
+ if (!classOrClassInstance) {
56
+ return allMethodsNames;
57
+ }
58
+ const isClassFunction = _.isFunction(classOrClassInstance);
59
+ const classFun = (isClassFunction ? classOrClassInstance : Object.getPrototypeOf(classOrClassInstance));
60
+ const objectToCheck = isClassFunction ? classOrClassInstance?.prototype : classOrClassInstance;
61
+ const prototypeObj = Object.getPrototypeOf(objectToCheck || {});
62
+ const properties = _.uniq([
63
+ ...Object.getOwnPropertyNames(objectToCheck || {}),
64
+ ...Object.getOwnPropertyNames(prototypeObj || {}),
65
+ ...Object.keys(objectToCheck || {}),
66
+ ...Object.keys(prototypeObj || {}),
67
+ ])
68
+ .filter(f => !!f && !notAllowedAsMethodName.includes(f));
69
+ properties.filter((methodName) => typeof objectToCheck[methodName] === 'function').forEach(p => allMethodsNames.push(p));
70
+ if (!classFun || !classFun.constructor || classFun?.constructor?.name === 'Object') {
71
+ return allMethodsNames;
72
+ }
73
+ return getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);
74
+ };
49
75
  export const CLASS = {
50
76
  NAME: CLASSNAME.CLASSNAME,
51
77
  setName: setClassName,
@@ -94,21 +120,8 @@ export const CLASS = {
94
120
  getConfig: (target) => {
95
121
  return _.first(TchHelpers.getConfigs(target));
96
122
  },
97
- getMethodsNames(classOrClassInstance, allMethodsNames = []) {
98
- if (!classOrClassInstance) {
99
- return allMethodsNames;
100
- }
101
- const isFun = _.isFunction(classOrClassInstance);
102
- const classFun = (isFun ? classOrClassInstance : Object.getPrototypeOf(classOrClassInstance));
103
- const objectToCheck = isFun ? classOrClassInstance?.prototype : classOrClassInstance;
104
- const ooo = Object.getPrototypeOf(objectToCheck || {});
105
- const properties = ((isFun ? Object.keys(objectToCheck || {}) : (!!ooo ? Object.getOwnPropertyNames(ooo) : [])) || [])
106
- .filter(f => !notAllowed.includes(f));
107
- properties.filter((methodName) => typeof objectToCheck[methodName] === 'function').forEach(p => allMethodsNames.push(p));
108
- if (!classFun || !classFun.constructor || classFun?.constructor?.name === 'Object') {
109
- return allMethodsNames;
110
- }
111
- return CLASS.getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);
123
+ getMethodsNames(classOrClassInstance) {
124
+ return getMethodsNames(classOrClassInstance);
112
125
  },
113
126
  getFromObject: TchHelpers.getFromObject,
114
127
  getName: TchHelpers.getName,
@@ -170,4 +183,4 @@ export const CLASS = {
170
183
  export * from 'enum-values';
171
184
  ;
172
185
  ({}); // @--end-of-file-for-module=typescript-class-helpers lib/index.ts
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnMvcHJvamVjdHMvdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLGlDQUFpQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuQyxNQUFNLE9BQU8sVUFBVTtJQUVyQixNQUFNLENBQUMsS0FBSyxDQUFDLFNBQTRCO1FBQ3ZDLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFTO1FBQzVCLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNqQixPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUM7U0FDdEI7UUFDRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBZ0IsRUFB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QyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUV6RSxJQUFJLFlBQVksRUFBRTtvQkFFaEIsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLEVBQUU7b0JBRS9FLE9BQU8sS0FBSyxDQUFBO2lCQUNiO2dCQU1ELElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO29CQUU1RSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDeEIsYUFBYTtvQkFDYixPQUFPLEdBQUcsQ0FBQztpQkFDWjtnQkFDRCxJQUFJLFdBQVcsRUFBRTtvQkFDZixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO2lCQUN6QjtnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7U0FDRixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUFFRCxjQUFjLGFBQWEsQ0FBQztBQUUzQixDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtFQUFrRSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBDTEFTU05BTUUgfSBmcm9tICcuL2NsYXNzbmFtZSc7XG5pbXBvcnQgeyBkZXNjcmliZUZyb21DbGFzc1N0cmluZ2lmeSwgZGVzY3JpYmVCeURlZmF1bHRNb2RlbHNBbmRNYXBwaW5nIH0gZnJvbSAnLi9kZXNjcmliZS1jbGFzcyc7XG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBzZXRDbGFzc05hbWUgfSBmcm9tICcuL3NldC1jbGFzcy1uYW1lJztcblxuZXhwb3J0IHsgTW9kZWxzIH0gZnJvbSAnLi9tb2RlbHMnO1xuZXhwb3J0IHsgU1lNQk9MIH0gZnJvbSAnLi9zeW1ib2xzJztcblxuZXhwb3J0IGNsYXNzIFRjaEhlbHBlcnMge1xuXG4gIHN0YXRpYyBnZXRCeShjbGFzc05hbWU6IHN0cmluZyB8IEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIENMQVNTTkFNRS5nZXRDbGFzc0J5KGNsYXNzTmFtZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RnJvbU9iamVjdChvOiBPYmplY3QpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChvKSB8fCBfLmlzTnVsbChvKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoby5jb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIG8uY29uc3RydWN0b3I7XG4gICAgfVxuICAgIGNvbnN0IHAgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgcmV0dXJuIHAgJiYgcC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXROYW1lKHRhcmdldDogRnVuY3Rpb24sIHByb2R1Y3Rpb24gPSBmYWxzZSkge1xuICAgIHJldHVybiBDTEFTU05BTUUuZ2V0Q2xhc3NOYW1lKHRhcmdldCwgcHJvZHVjdGlvbikgYXMgc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGdldE5hbWVGcm9tT2JqZWN0KG86IE9iamVjdCkge1xuICAgIGNvbnN0IGZuQ0xhc3MgPSB0aGlzLmdldEZyb21PYmplY3Qobyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmFtZShmbkNMYXNzKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRDb25maWdzKHRhcmdldDogRnVuY3Rpb24pOiBNb2RlbHMuQ2xhc3NDb25maWdbXSB7XG4gICAgcmV0dXJuIENMQVNTTkFNRS5nZXRDbGFzc0NvbmZpZyh0YXJnZXQpXG4gIH1cblxuICBzdGF0aWMgZGVzY3JpYmVQcm9wZXJpdGVzKHRhcmdldDogRnVuY3Rpb24pIHtcbiAgICBjb25zdCBkMSA9IGRlc2NyaWJlRnJvbUNsYXNzU3RyaW5naWZ5KHRhcmdldCk7XG4gICAgY29uc3QgZDIgPSBkZXNjcmliZUJ5RGVmYXVsdE1vZGVsc0FuZE1hcHBpbmcodGFyZ2V0KTtcbiAgICBsZXQgdW5pcSA9IHt9O1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBkMS5jb25jYXQoZDIpLmZvckVhY2gocCA9PiB1bmlxW3BdID0gcCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHVuaXEpXG4gICAgICAuZmlsdGVyKGQgPT4gISFkKVxuICAgICAgLmZpbHRlcihkID0+IHR5cGVvZiB0YXJnZXQucHJvdG90eXBlW2RdICE9PSAnZnVuY3Rpb24nKVxuICB9XG5cbn1cblxuY29uc3Qgbm90QWxsb3dlZCA9IFtcbiAgJ2xlbmd0aCcsICduYW1lJyxcbiAgJ2FyZ3VtZW50cycsICdjYWxsZXInLFxuICAnY29uc3RydWN0b3InLCAnYXBwbHknLFxuICAnYmluZCcsICdjYWxsJyxcbiAgJ3RvU3RyaW5nJ1xuXVxuXG5leHBvcnQgY29uc3QgQ0xBU1MgPSB7XG4gIE5BTUU6IENMQVNTTkFNRS5DTEFTU05BTUUsXG4gIHNldE5hbWU6IHNldENsYXNzTmFtZSxcbiAgZ2V0Qnk6IFRjaEhlbHBlcnMuZ2V0QnksXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0U2luZ2xldG9uPFQgPSBhbnk+KHRhcmdldDogRnVuY3Rpb24pIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihgW3R5cGVzY3JpcHQtY2xhc3MtaGVscGVyc11bc2V0U2luZ2xldG9uT2JqXSBUeXBlIG9mIHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbmApXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gVGNoSGVscGVycy5nZXRDb25maWdzKHRhcmdldClbMF1cblxuXG4gICAgcmV0dXJuIGNvbmZpZy5zaW5nbGV0b24gYXMgVDtcbiAgfSxcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBzZXRTaW5nbGV0b25PYmoodGFyZ2V0OiBGdW5jdGlvbiwgc2luZ2xldG9uT2JqZWN0OiBhbnkpIHtcblxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzXVtzZXRTaW5nbGV0b25PYmpdIFR5cGUgb2YgdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uYClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHNpbmdsZXRvbk9iamVjdCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFt0eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnNdW3NldFNpbmdsZXRvbk9ial0gU2luZ2xldG9uIGluc3RhbmNlIGNhbnQgYmUgYW4gYXJyYXlgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzaW5nbGV0b25PYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzXVtzZXRTaW5nbGV0b25PYmpdIFNpbmdsZXRvbiBpbnN0YW5jZSBjYW50IG11c3QgYmUgYSBvYmplY3RgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gQ0xBU1MuZ2V0TmFtZSh0YXJnZXQpO1xuXG5cblxuICAgIGNvbnN0IGNvbmZpZyA9IFRjaEhlbHBlcnMuZ2V0Q29uZmlncyh0YXJnZXQpWzBdXG5cbiAgICBpZiAoY29uZmlnLnNpbmdsZXRvbikge1xuICAgICAgY29uc29sZS53YXJuKGBbdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzXSBZb3UgYXJlIHRyeWluZyB0byBzZXQgc2luZ2xldG9uIG9mIFwiJHtjbGFzc05hbWV9XCIgc2Vjb25kIHRpbWUgd2l0aCBkaWZmZXJlbnQgb2JqZWN0LmApXG4gICAgfVxuXG4gICAgY29uZmlnLnNpbmdsZXRvbiA9IHNpbmdsZXRvbk9iamVjdDtcbiAgfSxcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBnZXRDb25maWdzOiBUY2hIZWxwZXJzLmdldENvbmZpZ3MsXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0Q29uZmlnOiAodGFyZ2V0OiBGdW5jdGlvbikgPT4ge1xuICAgIHJldHVybiBfLmZpcnN0KFRjaEhlbHBlcnMuZ2V0Q29uZmlncyh0YXJnZXQpKTtcbiAgfSxcblxuICBnZXRNZXRob2RzTmFtZXMoY2xhc3NPckNsYXNzSW5zdGFuY2U6IGFueSwgYWxsTWV0aG9kc05hbWVzID0gW10pOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFjbGFzc09yQ2xhc3NJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIGFsbE1ldGhvZHNOYW1lcztcbiAgICB9XG5cbiAgICBjb25zdCBpc0Z1biA9IF8uaXNGdW5jdGlvbihjbGFzc09yQ2xhc3NJbnN0YW5jZSk7XG4gICAgY29uc3QgY2xhc3NGdW4gPSAoaXNGdW4gPyBjbGFzc09yQ2xhc3NJbnN0YW5jZSA6IE9iamVjdC5nZXRQcm90b3R5cGVPZihjbGFzc09yQ2xhc3NJbnN0YW5jZSkpO1xuICAgIGNvbnN0IG9iamVjdFRvQ2hlY2sgPSBpc0Z1biA/IChjbGFzc09yQ2xhc3NJbnN0YW5jZSBhcyBGdW5jdGlvbik/LnByb3RvdHlwZSA6IGNsYXNzT3JDbGFzc0luc3RhbmNlO1xuXG4gICAgY29uc3Qgb29vID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdFRvQ2hlY2sgfHwge30pO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSAoKGlzRnVuID8gT2JqZWN0LmtleXMob2JqZWN0VG9DaGVjayB8fCB7fSkgOiAoISFvb28gPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvb28pIDogW10pKSB8fCBbXSlcbiAgICAgIC5maWx0ZXIoZiA9PiAhbm90QWxsb3dlZC5pbmNsdWRlcyhmKSk7XG5cblxuXG5cblxuXG4gICAgcHJvcGVydGllcy5maWx0ZXIoKG1ldGhvZE5hbWUpID0+IHR5cGVvZiBvYmplY3RUb0NoZWNrW21ldGhvZE5hbWVdID09PSAnZnVuY3Rpb24nKS5mb3JFYWNoKHAgPT4gYWxsTWV0aG9kc05hbWVzLnB1c2gocCkpO1xuICAgIGlmICghY2xhc3NGdW4gfHwgIWNsYXNzRnVuLmNvbnN0cnVjdG9yIHx8IGNsYXNzRnVuPy5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ09iamVjdCcpIHtcbiAgICAgIHJldHVybiBhbGxNZXRob2RzTmFtZXM7XG4gICAgfVxuICAgIHJldHVybiBDTEFTUy5nZXRNZXRob2RzTmFtZXMoT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXNzRnVuKSwgYWxsTWV0aG9kc05hbWVzKTtcbiAgfSxcbiAgZ2V0RnJvbU9iamVjdDogVGNoSGVscGVycy5nZXRGcm9tT2JqZWN0LFxuICBnZXROYW1lOiBUY2hIZWxwZXJzLmdldE5hbWUsXG4gIGdldE5hbWVGcm9tT2JqZWN0OiBUY2hIZWxwZXJzLmdldE5hbWVGcm9tT2JqZWN0LFxuICBkZXNjcmliZVByb3Blcml0ZXM6IFRjaEhlbHBlcnMuZGVzY3JpYmVQcm9wZXJpdGVzLFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIE9CSkVDVDogKG9iajogYW55KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldCBpbmRleFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gQ0xBU1NOQU1FLmdldE9iamVjdEluZGV4VmFsdWUob2JqKTtcbiAgICAgIH0sXG4gICAgICBnZXQgaW5kZXhQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIENMQVNTTkFNRS5nZXRPYmplY3RJbmRleFByb3BlcnR5VmFsdWUob2JqKTtcbiAgICAgIH0sXG4gICAgICBnZXQgaXNDbGFzc09iamVjdCgpIHtcblxuICAgICAgICBpZiAoIV8uaXNPYmplY3Qob2JqKSB8fCBfLmlzQXJyYXkob2JqKSB8fCBfLmlzUmVnRXhwKG9iaikgfHxcbiAgICAgICAgICBfLmlzQnVmZmVyKG9iaikgfHwgXy5pc0FycmF5QnVmZmVyKG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNEYXRlKG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBDTEFTUy5nZXROYW1lRnJvbU9iamVjdChvYmopXG4gICAgICAgIHJldHVybiBfLmlzU3RyaW5nKGNsYXNzTmFtZSkgJiYgY2xhc3NOYW1lICE9PSAnT2JqZWN0JztcbiAgICAgIH0sXG4gICAgICBpc0VxdWFsOiAoYW5vdGhlck9iajogYW55LCBjb21wYXJlRGVlcCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGlmICghQ0xBU1MuT0JKRUNUKG9iaikuaXNDbGFzc09iamVjdCB8fCAhQ0xBU1MuT0JKRUNUKGFub3RoZXJPYmopLmlzQ2xhc3NPYmplY3QpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iaiA9PT0gYW5vdGhlck9iaikge1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdjEgPSBDTEFTU05BTUUuZ2V0T2JqZWN0SW5kZXhWYWx1ZShvYmopO1xuICAgICAgICBjb25zdCB2MiA9IENMQVNTTkFNRS5nZXRPYmplY3RJbmRleFZhbHVlKGFub3RoZXJPYmopO1xuICAgICAgICBjb25zdCBmMSA9IENMQVNTTkFNRS5nZXRPYmplY3RDbGFzc0ZhbWlseShvYmopXG4gICAgICAgIGNvbnN0IGYyID0gQ0xBU1NOQU1FLmdldE9iamVjdENsYXNzRmFtaWx5KGFub3RoZXJPYmopXG4gICAgICAgIGNvbnN0IGlzRmFtaWx5RGlmZiA9ICghXy5pc1N0cmluZyhmMSkgfHwgIV8uaXNTdHJpbmcoZjIpIHx8IChmMSAhPT0gZjIpKTtcblxuICAgICAgICBpZiAoaXNGYW1pbHlEaWZmKSB7XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDTEFTUy5PQkpFQ1Qob2JqKS5pc0NsYXNzT2JqZWN0IHx8ICFDTEFTUy5PQkpFQ1QoYW5vdGhlck9iaikuaXNDbGFzc09iamVjdCkge1xuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cblxuXG5cblxuXG4gICAgICAgIGlmICgoXy5pc051bWJlcih2MSkgJiYgXy5pc051bWJlcih2MikpIHx8IChfLmlzU3RyaW5nKHYxKSAmJiBfLmlzU3RyaW5nKHYyKSkpIHtcblxuICAgICAgICAgIGNvbnN0IHJlcyA9ICh2MSA9PT0gdjIpO1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wYXJlRGVlcCkge1xuICAgICAgICAgIHJldHVybiBfLmlzRXF1YWwodjEsIHYyKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0ICogZnJvbSAnZW51bS12YWx1ZXMnO1xuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzIGxpYi9pbmRleC50cyJdfQ==
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnMvcHJvamVjdHMvdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLGlDQUFpQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuQyxNQUFNLE9BQU8sVUFBVTtJQUVyQixNQUFNLENBQUMsS0FBSyxDQUFDLFNBQTRCO1FBQ3ZDLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFTO1FBQzVCLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNqQixPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUM7U0FDdEI7UUFDRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBZ0IsRUFB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Q0gsQ0FBQztDQUNGLENBQUE7QUFFRCxjQUFjLGFBQWEsQ0FBQztBQUUzQixDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtFQUFrRSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBDTEFTU05BTUUgfSBmcm9tICcuL2NsYXNzbmFtZSc7XG5pbXBvcnQgeyBkZXNjcmliZUZyb21DbGFzc1N0cmluZ2lmeSwgZGVzY3JpYmVCeURlZmF1bHRNb2RlbHNBbmRNYXBwaW5nIH0gZnJvbSAnLi9kZXNjcmliZS1jbGFzcyc7XG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBzZXRDbGFzc05hbWUgfSBmcm9tICcuL3NldC1jbGFzcy1uYW1lJztcblxuZXhwb3J0IHsgTW9kZWxzIH0gZnJvbSAnLi9tb2RlbHMnO1xuZXhwb3J0IHsgU1lNQk9MIH0gZnJvbSAnLi9zeW1ib2xzJztcblxuZXhwb3J0IGNsYXNzIFRjaEhlbHBlcnMge1xuXG4gIHN0YXRpYyBnZXRCeShjbGFzc05hbWU6IHN0cmluZyB8IEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIENMQVNTTkFNRS5nZXRDbGFzc0J5KGNsYXNzTmFtZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RnJvbU9iamVjdChvOiBPYmplY3QpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChvKSB8fCBfLmlzTnVsbChvKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoby5jb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIG8uY29uc3RydWN0b3I7XG4gICAgfVxuICAgIGNvbnN0IHAgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgcmV0dXJuIHAgJiYgcC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXROYW1lKHRhcmdldDogRnVuY3Rpb24sIHByb2R1Y3Rpb24gPSBmYWxzZSkge1xuICAgIHJldHVybiBDTEFTU05BTUUuZ2V0Q2xhc3NOYW1lKHRhcmdldCwgcHJvZHVjdGlvbikgYXMgc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGdldE5hbWVGcm9tT2JqZWN0KG86IE9iamVjdCkge1xuICAgIGNvbnN0IGZuQ0xhc3MgPSB0aGlzLmdldEZyb21PYmplY3Qobyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmFtZShmbkNMYXNzKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRDb25maWdzKHRhcmdldDogRnVuY3Rpb24pOiBNb2RlbHMuQ2xhc3NDb25maWdbXSB7XG4gICAgcmV0dXJuIENMQVNTTkFNRS5nZXRDbGFzc0NvbmZpZyh0YXJnZXQpXG4gIH1cblxuICBzdGF0aWMgZGVzY3JpYmVQcm9wZXJpdGVzKHRhcmdldDogRnVuY3Rpb24pIHtcbiAgICBjb25zdCBkMSA9IGRlc2NyaWJlRnJvbUNsYXNzU3RyaW5naWZ5KHRhcmdldCk7XG4gICAgY29uc3QgZDIgPSBkZXNjcmliZUJ5RGVmYXVsdE1vZGVsc0FuZE1hcHBpbmcodGFyZ2V0KTtcbiAgICBsZXQgdW5pcSA9IHt9O1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBkMS5jb25jYXQoZDIpLmZvckVhY2gocCA9PiB1bmlxW3BdID0gcCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHVuaXEpXG4gICAgICAuZmlsdGVyKGQgPT4gISFkKVxuICAgICAgLmZpbHRlcihkID0+IHR5cGVvZiB0YXJnZXQucHJvdG90eXBlW2RdICE9PSAnZnVuY3Rpb24nKVxuICB9XG5cbn1cblxuY29uc3Qgbm90QWxsb3dlZEFzTWV0aG9kTmFtZSA9IFtcbiAgJ2xlbmd0aCcsICduYW1lJyxcbiAgJ2FyZ3VtZW50cycsICdjYWxsZXInLFxuICAnY29uc3RydWN0b3InLCAnYXBwbHknLFxuICAnYmluZCcsICdjYWxsJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ19fZGVmaW5lR2V0dGVyX18nLFxuICAnX19kZWZpbmVTZXR0ZXJfXycsICdoYXNPd25Qcm9wZXJ0eScsXG4gICdfX2xvb2t1cEdldHRlcl9fJywgJ19fbG9va3VwU2V0dGVyX18nLFxuICAnaXNQcm90b3R5cGVPZicsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd2YWx1ZU9mJywgJ19fcHJvdG9fXycsICd0b0xvY2FsZVN0cmluZycsXG5dO1xuXG5jb25zdCBnZXRNZXRob2RzTmFtZXMgPSAoY2xhc3NPckNsYXNzSW5zdGFuY2U6IGFueSwgYWxsTWV0aG9kc05hbWVzID0gW10pOiBzdHJpbmdbXSA9PiB7XG4gIGlmICghY2xhc3NPckNsYXNzSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gYWxsTWV0aG9kc05hbWVzO1xuICB9XG5cbiAgY29uc3QgaXNDbGFzc0Z1bmN0aW9uID0gXy5pc0Z1bmN0aW9uKGNsYXNzT3JDbGFzc0luc3RhbmNlKTtcbiAgY29uc3QgY2xhc3NGdW4gPSAoaXNDbGFzc0Z1bmN0aW9uID8gY2xhc3NPckNsYXNzSW5zdGFuY2UgOiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY2xhc3NPckNsYXNzSW5zdGFuY2UpKTtcbiAgY29uc3Qgb2JqZWN0VG9DaGVjayA9IGlzQ2xhc3NGdW5jdGlvbiA/IChjbGFzc09yQ2xhc3NJbnN0YW5jZSBhcyBGdW5jdGlvbik/LnByb3RvdHlwZSA6IGNsYXNzT3JDbGFzc0luc3RhbmNlO1xuICBjb25zdCBwcm90b3R5cGVPYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0VG9DaGVjayB8fCB7fSk7XG5cbiAgY29uc3QgcHJvcGVydGllcyA9IF8udW5pcShbXG4gICAgLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0VG9DaGVjayB8fCB7fSksXG4gICAgLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlT2JqIHx8IHt9KSxcbiAgICAuLi5PYmplY3Qua2V5cyhvYmplY3RUb0NoZWNrIHx8IHt9KSxcbiAgICAuLi5PYmplY3Qua2V5cyhwcm90b3R5cGVPYmogfHwge30pLFxuICBdKVxuICAgIC5maWx0ZXIoZiA9PiAhIWYgJiYgIW5vdEFsbG93ZWRBc01ldGhvZE5hbWUuaW5jbHVkZXMoZikpO1xuXG4gIHByb3BlcnRpZXMuZmlsdGVyKChtZXRob2ROYW1lKSA9PiB0eXBlb2Ygb2JqZWN0VG9DaGVja1ttZXRob2ROYW1lXSA9PT0gJ2Z1bmN0aW9uJykuZm9yRWFjaChwID0+IGFsbE1ldGhvZHNOYW1lcy5wdXNoKHApKTtcblxuICBpZiAoIWNsYXNzRnVuIHx8ICFjbGFzc0Z1bi5jb25zdHJ1Y3RvciB8fCBjbGFzc0Z1bj8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdPYmplY3QnKSB7XG4gICAgcmV0dXJuIGFsbE1ldGhvZHNOYW1lcztcbiAgfVxuICByZXR1cm4gZ2V0TWV0aG9kc05hbWVzKE9iamVjdC5nZXRQcm90b3R5cGVPZihjbGFzc0Z1biksIGFsbE1ldGhvZHNOYW1lcyk7XG59O1xuXG5leHBvcnQgY29uc3QgQ0xBU1MgPSB7XG4gIE5BTUU6IENMQVNTTkFNRS5DTEFTU05BTUUsXG4gIHNldE5hbWU6IHNldENsYXNzTmFtZSxcbiAgZ2V0Qnk6IFRjaEhlbHBlcnMuZ2V0QnksXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0U2luZ2xldG9uPFQgPSBhbnk+KHRhcmdldDogRnVuY3Rpb24pIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihgW3R5cGVzY3JpcHQtY2xhc3MtaGVscGVyc11bc2V0U2luZ2xldG9uT2JqXSBUeXBlIG9mIHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbmApXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gVGNoSGVscGVycy5nZXRDb25maWdzKHRhcmdldClbMF1cblxuXG4gICAgcmV0dXJuIGNvbmZpZy5zaW5nbGV0b24gYXMgVDtcbiAgfSxcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBzZXRTaW5nbGV0b25PYmoodGFyZ2V0OiBGdW5jdGlvbiwgc2luZ2xldG9uT2JqZWN0OiBhbnkpIHtcblxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzXVtzZXRTaW5nbGV0b25PYmpdIFR5cGUgb2YgdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uYClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHNpbmdsZXRvbk9iamVjdCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFt0eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnNdW3NldFNpbmdsZXRvbk9ial0gU2luZ2xldG9uIGluc3RhbmNlIGNhbnQgYmUgYW4gYXJyYXlgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzaW5nbGV0b25PYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzXVtzZXRTaW5nbGV0b25PYmpdIFNpbmdsZXRvbiBpbnN0YW5jZSBjYW50IG11c3QgYmUgYSBvYmplY3RgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gQ0xBU1MuZ2V0TmFtZSh0YXJnZXQpO1xuXG5cblxuICAgIGNvbnN0IGNvbmZpZyA9IFRjaEhlbHBlcnMuZ2V0Q29uZmlncyh0YXJnZXQpWzBdXG5cbiAgICBpZiAoY29uZmlnLnNpbmdsZXRvbikge1xuICAgICAgY29uc29sZS53YXJuKGBbdHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzXSBZb3UgYXJlIHRyeWluZyB0byBzZXQgc2luZ2xldG9uIG9mIFwiJHtjbGFzc05hbWV9XCIgc2Vjb25kIHRpbWUgd2l0aCBkaWZmZXJlbnQgb2JqZWN0LmApXG4gICAgfVxuXG4gICAgY29uZmlnLnNpbmdsZXRvbiA9IHNpbmdsZXRvbk9iamVjdDtcbiAgfSxcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBnZXRDb25maWdzOiBUY2hIZWxwZXJzLmdldENvbmZpZ3MsXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZ2V0Q29uZmlnOiAodGFyZ2V0OiBGdW5jdGlvbikgPT4ge1xuICAgIHJldHVybiBfLmZpcnN0KFRjaEhlbHBlcnMuZ2V0Q29uZmlncyh0YXJnZXQpKTtcbiAgfSxcblxuXG4gIGdldE1ldGhvZHNOYW1lcyhjbGFzc09yQ2xhc3NJbnN0YW5jZTogYW55KTogc3RyaW5nW10ge1xuICAgIHJldHVybiBnZXRNZXRob2RzTmFtZXMoY2xhc3NPckNsYXNzSW5zdGFuY2UpO1xuICB9LFxuICBnZXRGcm9tT2JqZWN0OiBUY2hIZWxwZXJzLmdldEZyb21PYmplY3QsXG4gIGdldE5hbWU6IFRjaEhlbHBlcnMuZ2V0TmFtZSxcbiAgZ2V0TmFtZUZyb21PYmplY3Q6IFRjaEhlbHBlcnMuZ2V0TmFtZUZyb21PYmplY3QsXG4gIGRlc2NyaWJlUHJvcGVyaXRlczogVGNoSGVscGVycy5kZXNjcmliZVByb3Blcml0ZXMsXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgT0JKRUNUOiAob2JqOiBhbnkpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0IGluZGV4VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBDTEFTU05BTUUuZ2V0T2JqZWN0SW5kZXhWYWx1ZShvYmopO1xuICAgICAgfSxcbiAgICAgIGdldCBpbmRleFByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gQ0xBU1NOQU1FLmdldE9iamVjdEluZGV4UHJvcGVydHlWYWx1ZShvYmopO1xuICAgICAgfSxcbiAgICAgIGdldCBpc0NsYXNzT2JqZWN0KCkge1xuXG4gICAgICAgIGlmICghXy5pc09iamVjdChvYmopIHx8IF8uaXNBcnJheShvYmopIHx8IF8uaXNSZWdFeHAob2JqKSB8fFxuICAgICAgICAgIF8uaXNCdWZmZXIob2JqKSB8fCBfLmlzQXJyYXlCdWZmZXIob2JqKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5pc0RhdGUob2JqKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IENMQVNTLmdldE5hbWVGcm9tT2JqZWN0KG9iailcbiAgICAgICAgcmV0dXJuIF8uaXNTdHJpbmcoY2xhc3NOYW1lKSAmJiBjbGFzc05hbWUgIT09ICdPYmplY3QnO1xuICAgICAgfSxcbiAgICAgIGlzRXF1YWw6IChhbm90aGVyT2JqOiBhbnksIGNvbXBhcmVEZWVwID0gZmFsc2UpID0+IHtcbiAgICAgICAgaWYgKCFDTEFTUy5PQkpFQ1Qob2JqKS5pc0NsYXNzT2JqZWN0IHx8ICFDTEFTUy5PQkpFQ1QoYW5vdGhlck9iaikuaXNDbGFzc09iamVjdCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqID09PSBhbm90aGVyT2JqKSB7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2MSA9IENMQVNTTkFNRS5nZXRPYmplY3RJbmRleFZhbHVlKG9iaik7XG4gICAgICAgIGNvbnN0IHYyID0gQ0xBU1NOQU1FLmdldE9iamVjdEluZGV4VmFsdWUoYW5vdGhlck9iaik7XG4gICAgICAgIGNvbnN0IGYxID0gQ0xBU1NOQU1FLmdldE9iamVjdENsYXNzRmFtaWx5KG9iailcbiAgICAgICAgY29uc3QgZjIgPSBDTEFTU05BTUUuZ2V0T2JqZWN0Q2xhc3NGYW1pbHkoYW5vdGhlck9iailcbiAgICAgICAgY29uc3QgaXNGYW1pbHlEaWZmID0gKCFfLmlzU3RyaW5nKGYxKSB8fCAhXy5pc1N0cmluZyhmMikgfHwgKGYxICE9PSBmMikpO1xuXG4gICAgICAgIGlmIChpc0ZhbWlseURpZmYpIHtcblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUNMQVNTLk9CSkVDVChvYmopLmlzQ2xhc3NPYmplY3QgfHwgIUNMQVNTLk9CSkVDVChhbm90aGVyT2JqKS5pc0NsYXNzT2JqZWN0KSB7XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuXG5cblxuXG5cbiAgICAgICAgaWYgKChfLmlzTnVtYmVyKHYxKSAmJiBfLmlzTnVtYmVyKHYyKSkgfHwgKF8uaXNTdHJpbmcodjEpICYmIF8uaXNTdHJpbmcodjIpKSkge1xuXG4gICAgICAgICAgY29uc3QgcmVzID0gKHYxID09PSB2Mik7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBhcmVEZWVwKSB7XG4gICAgICAgICAgcmV0dXJuIF8uaXNFcXVhbCh2MSwgdjIpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgKiBmcm9tICdlbnVtLXZhbHVlcyc7XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnMgbGliL2luZGV4LnRzIl19