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