forked from neomjs/neo
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClassSystem.mjs
More file actions
60 lines (51 loc) · 1.67 KB
/
Copy pathClassSystem.mjs
File metadata and controls
60 lines (51 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import Base from '../core/Base.mjs';
/**
* @class Neo.util.ClassSystem
* @extends Neo.core.Base
*/
class ClassSystem extends Base {
static getConfig() {return {
/**
* @member {String} className='Neo.util.ClassSystem'
* @protected
*/
className: 'Neo.util.ClassSystem'
}}
/**
* can get used inside beforeSet methods in case you want to create instances like stores
* @param {Object|Neo.core.Base|null} config
* @param {Neo.core.Base|String} [DefaultClass=null]
* @param {Object} [defaultValues={}]
* @returns {Neo.core.Base} instance
*/
static beforeSetInstance(config, DefaultClass=null, defaultValues={}) {
if (Neo.isString(DefaultClass)) {
DefaultClass = Neo.ns(DefaultClass);
}
if (!config && DefaultClass) {
config = Neo.create(DefaultClass, defaultValues);
} else if (config?.isClass) {
config = Neo.create(config, defaultValues);
} else if (Neo.isObject(config) && !(config instanceof Neo.core.Base)) {
if (config.ntype) {
config = Neo.ntype({
...defaultValues,
...config
});
} else {
const newConfig = {};
if (DefaultClass) {
newConfig.module = DefaultClass;
}
Object.assign(newConfig, {
...defaultValues,
...config
});
config = Neo.create(newConfig);
}
}
return config;
}
}
Neo.applyClassConfig(ClassSystem);
export default ClassSystem;