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