typescript-class-helpers 21.0.13 → 21.0.17

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.
Files changed (107) hide show
  1. package/browser/package.json +1 -1
  2. package/browser-prod/README.md +24 -0
  3. package/browser-prod/fesm2022/typescript-class-helpers-browser.mjs +609 -0
  4. package/browser-prod/fesm2022/typescript-class-helpers-browser.mjs.map +1 -0
  5. package/browser-prod/package.json +23 -0
  6. package/browser-prod/types/typescript-class-helpers-browser.d.ts +146 -0
  7. package/browser-prod.split-namespaces.json +36 -0
  8. package/lib/build-info._auto-generated_.d.ts +1 -1
  9. package/lib/build-info._auto-generated_.js +1 -1
  10. package/lib/env/env.angular-node-app.d.ts +30 -28
  11. package/lib/env/env.angular-node-app.js +32 -30
  12. package/lib/env/env.angular-node-app.js.map +1 -1
  13. package/lib/env/env.docs-webapp.d.ts +30 -28
  14. package/lib/env/env.docs-webapp.js +32 -30
  15. package/lib/env/env.docs-webapp.js.map +1 -1
  16. package/lib/env/env.electron-app.d.ts +30 -28
  17. package/lib/env/env.electron-app.js +32 -30
  18. package/lib/env/env.electron-app.js.map +1 -1
  19. package/lib/env/env.mobile-app.d.ts +30 -28
  20. package/lib/env/env.mobile-app.js +32 -30
  21. package/lib/env/env.mobile-app.js.map +1 -1
  22. package/lib/env/env.npm-lib-and-cli-tool.d.ts +30 -28
  23. package/lib/env/env.npm-lib-and-cli-tool.js +32 -30
  24. package/lib/env/env.npm-lib-and-cli-tool.js.map +1 -1
  25. package/lib/env/env.vscode-plugin.d.ts +30 -28
  26. package/lib/env/env.vscode-plugin.js +32 -30
  27. package/lib/env/env.vscode-plugin.js.map +1 -1
  28. package/lib/index._auto-generated_.d.ts +0 -1
  29. package/lib/migrations/index.d.ts +1 -0
  30. package/lib/migrations/index.js +19 -0
  31. package/lib/migrations/index.js.map +1 -0
  32. package/lib/migrations/migrations_index._auto-generated_.d.ts +0 -0
  33. package/lib/migrations/migrations_index._auto-generated_.js +4 -0
  34. package/lib/migrations/migrations_index._auto-generated_.js.map +1 -0
  35. package/lib/package.json +4 -0
  36. package/lib-prod/build-info._auto-generated_.d.ts +24 -0
  37. package/lib-prod/build-info._auto-generated_.js +30 -0
  38. package/lib-prod/build-info._auto-generated_.js.map +1 -0
  39. package/lib-prod/classname.d.ts +14 -0
  40. package/lib-prod/classname.js +196 -0
  41. package/lib-prod/classname.js.map +1 -0
  42. package/lib-prod/describe-class.d.ts +6 -0
  43. package/lib-prod/describe-class.js +77 -0
  44. package/lib-prod/describe-class.js.map +1 -0
  45. package/lib-prod/env/env.angular-node-app.d.ts +64 -0
  46. package/lib-prod/env/env.angular-node-app.js +71 -0
  47. package/lib-prod/env/env.angular-node-app.js.map +1 -0
  48. package/lib-prod/env/env.docs-webapp.d.ts +64 -0
  49. package/lib-prod/env/env.docs-webapp.js +71 -0
  50. package/lib-prod/env/env.docs-webapp.js.map +1 -0
  51. package/lib-prod/env/env.electron-app.d.ts +64 -0
  52. package/lib-prod/env/env.electron-app.js +71 -0
  53. package/lib-prod/env/env.electron-app.js.map +1 -0
  54. package/lib-prod/env/env.mobile-app.d.ts +64 -0
  55. package/lib-prod/env/env.mobile-app.js +71 -0
  56. package/lib-prod/env/env.mobile-app.js.map +1 -0
  57. package/lib-prod/env/env.npm-lib-and-cli-tool.d.ts +64 -0
  58. package/lib-prod/env/env.npm-lib-and-cli-tool.js +71 -0
  59. package/lib-prod/env/env.npm-lib-and-cli-tool.js.map +1 -0
  60. package/lib-prod/env/env.vscode-plugin.d.ts +64 -0
  61. package/lib-prod/env/env.vscode-plugin.js +71 -0
  62. package/lib-prod/env/env.vscode-plugin.js.map +1 -0
  63. package/lib-prod/env/index.d.ts +6 -0
  64. package/lib-prod/env/index.js +23 -0
  65. package/lib-prod/env/index.js.map +1 -0
  66. package/lib-prod/errors-messages.d.ts +1 -0
  67. package/lib-prod/errors-messages.js +15 -0
  68. package/lib-prod/errors-messages.js.map +1 -0
  69. package/lib-prod/index._auto-generated_.d.ts +0 -0
  70. package/lib-prod/index._auto-generated_.js +6 -0
  71. package/lib-prod/index._auto-generated_.js.map +1 -0
  72. package/lib-prod/index.d.ts +48 -0
  73. package/lib-prod/index.js +202 -0
  74. package/lib-prod/index.js.map +1 -0
  75. package/lib-prod/migrations/migrations_index._auto-generated_.d.ts +0 -0
  76. package/lib-prod/models.d.ts +81 -0
  77. package/lib-prod/models.js +61 -0
  78. package/lib-prod/models.js.map +1 -0
  79. package/lib-prod/package.json +4 -0
  80. package/lib-prod/registerd-db.d.ts +5 -0
  81. package/lib-prod/registerd-db.js +8 -0
  82. package/lib-prod/registerd-db.js.map +1 -0
  83. package/lib-prod/set-class-name.d.ts +2 -0
  84. package/lib-prod/set-class-name.js +100 -0
  85. package/lib-prod/set-class-name.js.map +1 -0
  86. package/lib-prod/storage.d.ts +1 -0
  87. package/lib-prod/storage.js +27 -0
  88. package/lib-prod/storage.js.map +1 -0
  89. package/lib-prod/symbols.d.ts +7 -0
  90. package/lib-prod/symbols.js +12 -0
  91. package/lib-prod/symbols.js.map +1 -0
  92. package/lib-prod.split-namespaces.json +36 -0
  93. package/package.json +1 -1
  94. package/websql/package.json +1 -1
  95. package/websql-prod/README.md +24 -0
  96. package/websql-prod/fesm2022/typescript-class-helpers-websql.mjs +608 -0
  97. package/websql-prod/fesm2022/typescript-class-helpers-websql.mjs.map +1 -0
  98. package/websql-prod/package.json +23 -0
  99. package/websql-prod/types/typescript-class-helpers-websql.d.ts +147 -0
  100. package/websql-prod.split-namespaces.json +36 -0
  101. package/migrations/migrations_index._auto-generated_.d.ts +0 -1
  102. package/tmp-environment.json +0 -37
  103. /package/{migrations → lib-prod/migrations}/index.d.ts +0 -0
  104. /package/{migrations → lib-prod/migrations}/index.js +0 -0
  105. /package/{migrations → lib-prod/migrations}/index.js.map +0 -0
  106. /package/{migrations → lib-prod/migrations}/migrations_index._auto-generated_.js +0 -0
  107. /package/{migrations → lib-prod/migrations}/migrations_index._auto-generated_.js.map +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typescript-class-helpers/browser",
3
- "version": "21.0.13",
3
+ "version": "21.0.17",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0"
@@ -0,0 +1,24 @@
1
+ # MyLib
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
8
+ > Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,609 @@
1
+ import { CoreModels_ClassNameStaticProperty, _, Helpers } from 'tnp-core/browser-prod';
2
+
3
+ /**
4
+ * @deprecated
5
+ */
6
+ class Models_ParamConfig {
7
+ }
8
+ /**
9
+ * @deprecated
10
+ */
11
+ class Models_MethodConfig {
12
+ constructor() {
13
+ /* */
14
+ /* */
15
+ this.parameters = {};
16
+ }
17
+ }
18
+ /**
19
+ * @deprecated
20
+ */
21
+ class Models_ClassConfig {
22
+ constructor() {
23
+ // @ts-ignore
24
+ this.singleton = void 0;
25
+ this.injections = [];
26
+ this.vChildren = [];
27
+ this.methods = {};
28
+ }
29
+ }
30
+ //end of namespace Models
31
+
32
+ const SYMBOL = {
33
+ MODELS_MAPPING: Symbol(),
34
+ DEFAULT_MODEL: Symbol(),
35
+ STORAGE: 'classesstorage',
36
+ CLASSES: 'classes',
37
+ ClassNameStaticProperty: CoreModels_ClassNameStaticProperty,
38
+ };
39
+
40
+ function defaultValues() {
41
+ return _.cloneDeep({
42
+ [SYMBOL.CLASSES]: []
43
+ });
44
+ }
45
+ function getStorage(property) {
46
+ /* */
47
+ /* */
48
+ /* */
49
+ /* */
50
+ if (typeof property === 'string') {
51
+ const storageInClassStaticProp = getStorage();
52
+ return storageInClassStaticProp[property];
53
+ }
54
+ if (typeof defaultValues.prototype[SYMBOL.STORAGE] === 'undefined') {
55
+ defaultValues.prototype[SYMBOL.STORAGE] = defaultValues();
56
+ }
57
+ return defaultValues.prototype[SYMBOL.STORAGE];
58
+ }
59
+
60
+ function getClasses$1() {
61
+ const s = getStorage();
62
+ return s[SYMBOL.CLASSES];
63
+ }
64
+ // @ts-ignore
65
+ function setClassName(target, className, options) {
66
+ let { classFamily, uniqueKey, classNameInBrowser, singleton } = options || {
67
+ classFamily: void 0,
68
+ uniqueKey: 'id',
69
+ classNameInBrowser: void 0,
70
+ singleton: void 0,
71
+ autoinstance: false
72
+ };
73
+ if (!_.isUndefined(singleton) && _.isBoolean(singleton) && singleton) {
74
+ singleton = 'first-instance';
75
+ }
76
+ if (!uniqueKey) {
77
+ uniqueKey = 'id';
78
+ }
79
+ if (target) {
80
+ const config = _.first(CLASSNAME_getClassConfig(target));
81
+ config.className = className;
82
+ config.uniqueKey = uniqueKey;
83
+ config.classNameInBrowser = classNameInBrowser;
84
+ // console.log(`Setting class Name to "${target.name}"`)
85
+ }
86
+ const existed = getClasses$1()
87
+ .find(f => f.className === className);
88
+ if (existed) {
89
+ existed.target = target;
90
+ }
91
+ else {
92
+ const res = {
93
+ className,
94
+ classNameInBrowser,
95
+ target,
96
+ uniqueKey,
97
+ classFamily
98
+ };
99
+ if (_.isUndefined(classFamily)) {
100
+ Object.defineProperty(res, 'classFamily', {
101
+ get: function () {
102
+ const parent = Object.getPrototypeOf(target);
103
+ if (!_.isFunction(parent) || parent.name === 'Object' || parent.name === '') {
104
+ return className;
105
+ }
106
+ const classNameNew = CLASSNAME_getClassName(parent);
107
+ return CLASSNAME_getClassFamilyByClassName(classNameNew);
108
+ }
109
+ });
110
+ }
111
+ getClasses$1().push(res);
112
+ }
113
+ const Original = target;
114
+ if (singleton === 'first-instance' || singleton === 'last-instance') {
115
+ const obj = {
116
+ // @ts-ignore
117
+ decoratedConstructor: function (...args) {
118
+ // console.log(`DECORATED CONSTRUCTOR OF ${Original.name}`)
119
+ const context = Original.apply(this, args);
120
+ const existedSingleton = CLASS.getSingleton(Original);
121
+ if (!existedSingleton || singleton === 'last-instance') {
122
+ CLASS.setSingletonObj(Original, this);
123
+ CLASS.setSingletonObj(obj.decoratedConstructor, this);
124
+ // console.log(`Singleton created for "${className}", mode: ${singleton} `);
125
+ }
126
+ else {
127
+ // console.log('ingleton exists')
128
+ }
129
+ return context;
130
+ }
131
+ };
132
+ // copy prototype so intanceof operator still works
133
+ obj.decoratedConstructor.prototype = Original.prototype;
134
+ // @ts-ignore
135
+ Object.keys(Original).forEach((name) => { obj.decoratedConstructor[name] = Original[name]; });
136
+ Object.defineProperty(obj.decoratedConstructor, 'name', {
137
+ value: className,
138
+ configurable: true,
139
+ });
140
+ // (obj.decoratedConstructor as any).name = className;
141
+ // console.log('return new contruor', decoratedConstructor)
142
+ return obj.decoratedConstructor;
143
+ }
144
+ else if (singleton === 'autoinstance') {
145
+ // console.log(`AUTOINSTANCE FOR ${target.name}`)
146
+ const auto = new Original();
147
+ CLASS.setSingletonObj(Original, auto);
148
+ // console.log(`Singleton created for "${className}", mode: ${singleton} `)
149
+ }
150
+ }
151
+
152
+ const registerd = {
153
+ configs: [],
154
+ classes: [],
155
+ };
156
+
157
+ const ERROR_MSG_CLASS_WITHOUT_DECORATOR = `[typescript-class-helpers][getClassName(...)](PRODUCTION MODE ERROR)
158
+ Please use decoartor @CLASSNAME for each entity or controller
159
+ This is preventing class name problem in minified code.
160
+
161
+ import { CLASS } from 'typescript-class-helpers';
162
+
163
+ @CLASS.NAME('ExampleClass')
164
+ class ExampleClass {
165
+ ...
166
+ }
167
+ `;
168
+
169
+ /* */
170
+ /* */
171
+ function getClasses() {
172
+ const s = getStorage();
173
+ return s[SYMBOL.CLASSES];
174
+ }
175
+ //namespace CLASSNAME
176
+ function CLASSNAME_getClassConfig(target, configs = [], callerTarget) {
177
+ if (!_.isFunction(target)) {
178
+ throw `[typescript-class-helper][getClassConfig] Cannot get class config from: ${target}`;
179
+ }
180
+ let config;
181
+ const parentClass = Object.getPrototypeOf(target);
182
+ const isValidParent = _.isFunction(parentClass) && parentClass.name !== '';
183
+ if (registerd.classes.includes(target)) {
184
+ config =
185
+ registerd.configs[registerd.classes.findIndex(c => c === target)];
186
+ }
187
+ else {
188
+ config = new Models_ClassConfig();
189
+ config.classReference = target;
190
+ registerd.classes.push(target);
191
+ }
192
+ registerd.configs[registerd.classes.findIndex(c => c === target)] = config;
193
+ if (callerTarget) {
194
+ const callerTargetConfig = registerd.configs[registerd.classes.findIndex(c => c === callerTarget)];
195
+ if (!config.vChildren.includes(callerTargetConfig)) {
196
+ config.vChildren.push(callerTargetConfig);
197
+ }
198
+ callerTargetConfig.vParent = config;
199
+ }
200
+ configs.push(config);
201
+ return isValidParent
202
+ ? CLASSNAME_getClassConfig(parentClass, configs, target)
203
+ : configs;
204
+ }
205
+ /**
206
+ * PLEASE PROVIDE NAME AS TYPED STRING, NOT VARIABLE
207
+ * Decorator requred for production mode
208
+ * @param name Name of class
209
+ */
210
+ function CLASSNAME_CLASSNAME(className, options) {
211
+ return function (target) {
212
+ // console.log(`CLASSNAME Inited ${className}`)
213
+ return setClassName(target, className, options);
214
+ };
215
+ }
216
+ function CLASSNAME_getClassName(target, production = false) {
217
+ if (_.isNil(target)) {
218
+ // console.log(target);
219
+ // Helpers.warn(`[typescript-class-helpers][getClassName] target is nil`)
220
+ return void 0;
221
+ }
222
+ if (_.isString(target)) {
223
+ // console.log(target);
224
+ Helpers.log(`[typescript-class-helpers][getClassName] target is string: '${target}', produciton: ${production}`);
225
+ return target;
226
+ }
227
+ if (target === Date) {
228
+ return 'Date';
229
+ }
230
+ if (target === FormData) {
231
+ return 'FormData';
232
+ }
233
+ if (!_.isFunction(target)) {
234
+ // console.log(target);
235
+ Helpers.log(`[typescript-class-helpers][getClassName] target is not a class`);
236
+ return void 0;
237
+ }
238
+ if (target[SYMBOL.ClassNameStaticProperty]) {
239
+ return target[SYMBOL.ClassNameStaticProperty];
240
+ }
241
+ const configs = CLASSNAME_getClassConfig(target);
242
+ const config = _.first(configs);
243
+ const classNameInBrowser = config?.classNameInBrowser;
244
+ if (Helpers.isBrowser && _.isString(classNameInBrowser)) {
245
+ return classNameInBrowser;
246
+ }
247
+ const className = config?.className;
248
+ if (typeof className === 'string') {
249
+ return className;
250
+ }
251
+ if (production) {
252
+ console.log('class without @CLASS.NAME deocrator', target);
253
+ throw new Error(ERROR_MSG_CLASS_WITHOUT_DECORATOR);
254
+ }
255
+ else {
256
+ // Helpers.log('check for ' + target.name)
257
+ // setTimeout(() => {
258
+ // // Helpers.log('check for ' + target.name + ' === ' + config.className)/
259
+ // // TODO this may work, but not yet in singleton/morphi
260
+ // if (!config.className) {
261
+ // if (target?.name && target.name !== 'Object') {
262
+ // ConfigHelpers.log(`[typescript-class-helpers] Please use @CLASS.NAME`
263
+ // + `('${(target?.name && !!target.name) ? target.name : '...'}') decorator for class ${target?.name}`)
264
+ // }
265
+ // }
266
+ // })
267
+ }
268
+ // special thing when cloning classes
269
+ if (target.name?.startsWith('class_')) {
270
+ return '';
271
+ }
272
+ return target.name;
273
+ }
274
+ // @ts-ignore
275
+ function CLASSNAME_getObjectIndexPropertyValue(obj) {
276
+ const className = TchHelpers.getNameFromObject(obj);
277
+ // console.log('className',className)
278
+ let c = getClasses().find(c => c.className === className);
279
+ // console.log('c',c)
280
+ if (c) {
281
+ return c.uniqueKey;
282
+ }
283
+ }
284
+ // @ts-ignore
285
+ function CLASSNAME_getClassFamilyByClassName(className) {
286
+ let c = getClasses().find(c => c.className === className);
287
+ // console.log('getClasses()', getClasses())
288
+ if (c) {
289
+ return c.classFamily;
290
+ }
291
+ }
292
+ // @ts-ignore
293
+ function CLASSNAME_getObjectClassFamily(obj) {
294
+ const className = TchHelpers.getNameFromObject(obj);
295
+ // console.log('className',className)
296
+ let c = getClasses().find(c => c.className === className);
297
+ // console.log('c',c)
298
+ if (c) {
299
+ return c.classFamily;
300
+ }
301
+ }
302
+ function CLASSNAME_getObjectIndexValue(obj) {
303
+ const className = TchHelpers.getNameFromObject(obj);
304
+ // console.log('className',className)
305
+ let c = getClasses().find(c => c.className === className);
306
+ // console.log('c',c)
307
+ if (c && _.isString(c.uniqueKey)) {
308
+ return obj[c.uniqueKey];
309
+ }
310
+ }
311
+ function CLASSNAME_getClassBy(className) {
312
+ let res;
313
+ if (Array.isArray(className)) {
314
+ if (className.length !== 1) {
315
+ throw `Mapping error... please use proper class names:
316
+ {
317
+ propertyObject: 'MyClassName',
318
+ propertyWithArray: ['MyClassName']
319
+ }
320
+
321
+ `;
322
+ }
323
+ className = className[0];
324
+ }
325
+ if (typeof className === 'function') {
326
+ // TODO QUICK_FIX
327
+ res = className;
328
+ }
329
+ if (className === 'Date') {
330
+ res = Date;
331
+ }
332
+ if (className === 'FormData') {
333
+ res = FormData;
334
+ }
335
+ let c = getClasses().find(c => c.className === className);
336
+ if (c) {
337
+ res = c.target;
338
+ }
339
+ // console.log(`getClassBy "${className} return \n\n ${res} \n\n`)
340
+ // @ts-ignore
341
+ return res;
342
+ }
343
+ //end of namespace CLASSNAME
344
+
345
+ /**
346
+ * @DEPRECATED
347
+ * Describe fields assigned in class
348
+ */
349
+ const FRegEx = new RegExp(/(?:this\.)(.+?(?= ))/g);
350
+ function describeFromClassStringify(target, parent = false) {
351
+ // @ts-ignore
352
+ var result = [];
353
+ if (parent) {
354
+ var proto = Object.getPrototypeOf(target.prototype);
355
+ if (proto) {
356
+ // @ts-ignore
357
+ result = result.concat(describeFromClassStringify(proto.constructor, parent));
358
+ }
359
+ }
360
+ const classString = target.toString();
361
+ const matches = classString.match(FRegEx) || [];
362
+ // console.log({
363
+ // classString,
364
+ // });
365
+ result = result.concat(matches);
366
+ return result.map(prop => prop
367
+ .replace('this.', '')
368
+ .replace('.', '')
369
+ .replace(')', '')
370
+ .replace('(', ''));
371
+ }
372
+ /**
373
+ * Describe fields assigne through @DefaultModelWithMapping decorator
374
+ * without functions
375
+ */
376
+ function describeByDefaultModelsAndMapping(target) {
377
+ let res = {};
378
+ if (target) {
379
+ // @ts-ignore
380
+ if (target[SYMBOL.DEFAULT_MODEL]) {
381
+ // @ts-ignore
382
+ Object.keys(target[SYMBOL.DEFAULT_MODEL])
383
+ .filter(key => {
384
+ // @ts-ignore
385
+ return !_.isFunction(target[SYMBOL.DEFAULT_MODEL][key]);
386
+ })
387
+ .forEach(key => {
388
+ // @ts-ignore
389
+ return res[key] = null;
390
+ });
391
+ }
392
+ // @ts-ignore
393
+ let mapping = target[SYMBOL.MODELS_MAPPING];
394
+ if (_.isArray(mapping)) {
395
+ mapping.forEach(m => {
396
+ Object.keys(m)
397
+ .forEach(key => {
398
+ // @ts-ignore
399
+ res[key] = null;
400
+ });
401
+ });
402
+ }
403
+ else if (mapping) {
404
+ Object.keys(mapping)
405
+ .forEach(key => {
406
+ // @ts-ignore
407
+ res[key] = null;
408
+ });
409
+ }
410
+ }
411
+ let propNames = Object.keys(res).filter(f => !!f);
412
+ propNames = (!propNames.includes('id') ? ['id'] : []).concat(propNames);
413
+ return propNames;
414
+ }
415
+
416
+ class TchHelpers {
417
+ static getBy(className) {
418
+ return CLASSNAME_getClassBy(className);
419
+ }
420
+ static getFromObject(o) {
421
+ if (_.isUndefined(o) || _.isNull(o)) {
422
+ return;
423
+ }
424
+ if (o.constructor) {
425
+ return o.constructor;
426
+ }
427
+ const p = Object.getPrototypeOf(o);
428
+ return p && p.constructor;
429
+ }
430
+ static getName(target, production = false) {
431
+ return CLASSNAME_getClassName(target, production);
432
+ }
433
+ static getNameFromObject(o) {
434
+ const fnCLass = this.getFromObject(o);
435
+ return this.getName(fnCLass);
436
+ }
437
+ static getConfigs(target) {
438
+ return CLASSNAME_getClassConfig(target);
439
+ }
440
+ static describeProperites(target) {
441
+ const d1 = describeFromClassStringify(target);
442
+ const d2 = describeByDefaultModelsAndMapping(target);
443
+ let uniq = {};
444
+ // @ts-ignore
445
+ d1.concat(d2).forEach(p => uniq[p] = p);
446
+ return Object.keys(uniq)
447
+ .filter(d => !!d)
448
+ .filter(d => typeof target.prototype[d] !== 'function');
449
+ }
450
+ }
451
+ const notAllowedAsMethodName = [
452
+ 'length', 'name',
453
+ 'arguments', 'caller',
454
+ 'constructor', 'apply',
455
+ 'bind', 'call',
456
+ 'toString',
457
+ '__defineGetter__',
458
+ '__defineSetter__', 'hasOwnProperty',
459
+ '__lookupGetter__', '__lookupSetter__',
460
+ 'isPrototypeOf', 'propertyIsEnumerable',
461
+ 'valueOf', '__proto__', 'toLocaleString',
462
+ ];
463
+ const getMethodsNames = (classOrClassInstance, allMethodsNames = []) => {
464
+ if (!classOrClassInstance) {
465
+ return allMethodsNames;
466
+ }
467
+ const isClassFunction = _.isFunction(classOrClassInstance);
468
+ const classFun = (isClassFunction ? classOrClassInstance : Object.getPrototypeOf(classOrClassInstance));
469
+ const objectToCheck = isClassFunction ? classOrClassInstance?.prototype : classOrClassInstance;
470
+ const prototypeObj = Object.getPrototypeOf(objectToCheck || {});
471
+ const properties = _.uniq([
472
+ ...Object.getOwnPropertyNames(objectToCheck || {}),
473
+ ...Object.getOwnPropertyNames(prototypeObj || {}),
474
+ ...Object.keys(objectToCheck || {}),
475
+ ...Object.keys(prototypeObj || {}),
476
+ ])
477
+ .filter(f => !!f && !notAllowedAsMethodName.includes(f));
478
+ properties.filter((methodName) => typeof objectToCheck[methodName] === 'function').forEach(p => allMethodsNames.push(p));
479
+ if (!classFun || !classFun.constructor || classFun?.constructor?.name === 'Object') {
480
+ return allMethodsNames;
481
+ }
482
+ return getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);
483
+ };
484
+ const CLASS = {
485
+ NAME: CLASSNAME_CLASSNAME,
486
+ setName: setClassName,
487
+ getBy: TchHelpers.getBy,
488
+ /**
489
+ * @deprecated
490
+ */
491
+ getSingleton(target) {
492
+ if (typeof target !== 'function') {
493
+ console.error(`[typescript-class-helpers][setSingletonObj] Type of target is not a function`);
494
+ return;
495
+ }
496
+ const config = TchHelpers.getConfigs(target)[0];
497
+ // console.log(`getSingleton for ${target.name}: `, config.singleton)
498
+ return config.singleton;
499
+ },
500
+ /**
501
+ * @deprecated
502
+ */
503
+ setSingletonObj(target, singletonObject) {
504
+ // console.log('SET SINGLETON', singletonObject)
505
+ if (typeof target !== 'function') {
506
+ console.error(`[typescript-class-helpers][setSingletonObj] Type of target is not a function`);
507
+ return;
508
+ }
509
+ if (Array.isArray(singletonObject)) {
510
+ console.error(`[typescript-class-helpers][setSingletonObj] Singleton instance cant be an array`);
511
+ return;
512
+ }
513
+ if (typeof singletonObject !== 'object') {
514
+ console.error(`[typescript-class-helpers][setSingletonObj] Singleton instance cant must be a object`);
515
+ return;
516
+ }
517
+ const className = CLASS.getName(target);
518
+ // console.log(`SINGLETON SET for TARGET ${className}`)
519
+ const config = TchHelpers.getConfigs(target)[0];
520
+ if (config.singleton) {
521
+ console.warn(`[typescript-class-helpers] You are trying to set singleton of "${className}" second time with different object.`);
522
+ }
523
+ config.singleton = singletonObject;
524
+ },
525
+ /**
526
+ * @deprecated
527
+ */
528
+ getConfigs: TchHelpers.getConfigs,
529
+ /**
530
+ * @deprecated
531
+ */
532
+ getConfig: (target) => {
533
+ return _.first(TchHelpers.getConfigs(target));
534
+ },
535
+ getMethodsNames(classOrClassInstance) {
536
+ return getMethodsNames(classOrClassInstance);
537
+ },
538
+ getFromObject: TchHelpers.getFromObject,
539
+ getName: TchHelpers.getName,
540
+ getNameFromObject: TchHelpers.getNameFromObject,
541
+ describeProperites: TchHelpers.describeProperites,
542
+ /**
543
+ * @deprecated
544
+ */
545
+ OBJECT: (obj) => {
546
+ return {
547
+ get indexValue() {
548
+ return CLASSNAME_getObjectIndexValue(obj);
549
+ },
550
+ get indexProperty() {
551
+ return CLASSNAME_getObjectIndexPropertyValue(obj);
552
+ },
553
+ get isClassObject() {
554
+ if (!_.isObject(obj) || _.isArray(obj) || _.isRegExp(obj) ||
555
+ _.isBuffer(obj) || _.isArrayBuffer(obj)) {
556
+ return false;
557
+ }
558
+ if (_.isDate(obj)) {
559
+ return true;
560
+ }
561
+ const className = CLASS.getNameFromObject(obj);
562
+ return _.isString(className) && className !== 'Object';
563
+ },
564
+ isEqual: (anotherObj, compareDeep = false) => {
565
+ if (!CLASS.OBJECT(obj).isClassObject || !CLASS.OBJECT(anotherObj).isClassObject) {
566
+ return false;
567
+ }
568
+ if (obj === anotherObj) {
569
+ // console.log(`EQ v1: , v2: - class1 ${CLASS.getNameFromObject(obj)}, class2 ${CLASS.getNameFromObject(anotherObj)}`, obj, anotherObj)
570
+ return true;
571
+ }
572
+ const v1 = CLASSNAME_getObjectIndexValue(obj);
573
+ const v2 = CLASSNAME_getObjectIndexValue(anotherObj);
574
+ const f1 = CLASSNAME_getObjectClassFamily(obj);
575
+ const f2 = CLASSNAME_getObjectClassFamily(anotherObj);
576
+ const isFamilyDiff = (!_.isString(f1) || !_.isString(f2) || (f1 !== f2));
577
+ // console.log(`DIFF FAMILY ${isFamilyDiff} v1: ${CLASSNAME_getObjectClassFamily(obj)}, v2: ${CLASSNAME_getObjectClassFamily(anotherObj)} - class1 ${CLASS.getNameFromObject(obj)}, class2 ${CLASS.getNameFromObject(anotherObj)}`)
578
+ if (isFamilyDiff) {
579
+ // console.log(`DIFF v1: ${v1}, v2: ${v2} - class1 ${CLASS.getNameFromObject(obj)}, class2 ${CLASS.getNameFromObject(anotherObj)}`)
580
+ return false;
581
+ }
582
+ if (!CLASS.OBJECT(obj).isClassObject || !CLASS.OBJECT(anotherObj).isClassObject) {
583
+ // console.log(`NOT CLASS v1: ${v1}, v2: ${v2} - class1 ${CLASS.getNameFromObject(obj)}, class2 ${CLASS.getNameFromObject(anotherObj)}`)
584
+ return false;
585
+ }
586
+ // console.log(`v1: ${v1} ,class ${CLASS.getNameFromObject(obj)} ,prop: ${CLASS.OBJECT(obj).indexProperty}`)
587
+ // console.log(`v2: ${v2} ,class ${CLASS.getNameFromObject(anotherObj)} ,prop: ${CLASS.OBJECT(anotherObj).indexProperty}`)
588
+ // console.log(`v1: ${v1}, v2: ${v2} - class1 ${CLASS.getNameFromObject(obj)}, class2 ${CLASS.getNameFromObject(anotherObj)}`)
589
+ // console.log('')
590
+ if ((_.isNumber(v1) && _.isNumber(v2)) || (_.isString(v1) && _.isString(v2))) {
591
+ const res = (v1 === v2);
592
+ // @ts-ignore
593
+ return res;
594
+ }
595
+ if (compareDeep) {
596
+ return _.isEqual(v1, v2);
597
+ }
598
+ return false;
599
+ }
600
+ };
601
+ }
602
+ };
603
+
604
+ /**
605
+ * Generated bundle index. Do not edit.
606
+ */
607
+
608
+ export { CLASS, Models_ClassConfig, Models_MethodConfig, Models_ParamConfig, SYMBOL, TchHelpers };
609
+ //# sourceMappingURL=typescript-class-helpers-browser.mjs.map