typescript-class-helpers 21.0.26 → 21.0.27
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/package.json +1 -1
- package/browser-prod/package.json +1 -1
- package/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib/build-info._auto-generated_.js +1 -1
- package/lib/package.json +1 -1
- package/lib-prod/build-info._auto-generated_.js +26 -14
- package/lib-prod/classname.js +167 -137
- package/lib-prod/describe-class.js +67 -44
- package/lib-prod/env/env.angular-node-app.js +66 -130
- package/lib-prod/env/env.docs-webapp.js +66 -130
- package/lib-prod/env/env.electron-app.js +66 -130
- package/lib-prod/env/env.mobile-app.js +66 -130
- package/lib-prod/env/env.npm-lib-and-cli-tool.js +66 -130
- package/lib-prod/env/env.vscode-plugin.js +66 -130
- package/lib-prod/env/index.js +6 -6
- package/lib-prod/errors-messages.js +1 -4
- package/lib-prod/index._auto-generated_.js +5 -0
- package/lib-prod/index.js +179 -181
- package/lib-prod/models.js +24 -46
- package/lib-prod/package.json +1 -1
- package/lib-prod/registerd-db.js +3 -6
- package/lib-prod/set-class-name.js +90 -80
- package/lib-prod/storage.js +20 -21
- package/lib-prod/symbols.js +6 -9
- package/lib-prod.split-namespaces.json +6 -18
- package/package.json +1 -1
- package/websql/package.json +1 -1
- package/websql-prod/package.json +1 -1
package/browser/package.json
CHANGED
|
@@ -25,6 +25,6 @@ exports.CURRENT_PACKAGE_TAON_VERSION = 'v21';
|
|
|
25
25
|
/**
|
|
26
26
|
* Autogenerated by current cli tool. Use *tnp release* to bump version.
|
|
27
27
|
*/
|
|
28
|
-
exports.CURRENT_PACKAGE_VERSION = '21.0.
|
|
28
|
+
exports.CURRENT_PACKAGE_VERSION = '21.0.27';
|
|
29
29
|
// THIS FILE IS GENERATED - DO NOT MODIFY
|
|
30
30
|
//# sourceMappingURL=build-info._auto-generated_.js.map
|
package/lib/package.json
CHANGED
|
@@ -1,14 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
// THIS FILE IS GENERATED - DO NOT MODIFY
|
|
2
|
+
/**
|
|
3
|
+
* Autogenerated by current cli tool
|
|
4
|
+
*/
|
|
5
|
+
export const BUILD_FRAMEWORK_CLI_NAME = 'tnp';
|
|
6
|
+
/**
|
|
7
|
+
* This value can be change in taon.jsonc (appId)
|
|
8
|
+
*/
|
|
9
|
+
export const APP_ID = 'com.domain.example.typescript-class-helpers';
|
|
10
|
+
/**
|
|
11
|
+
* Autogenerated by current cli tool
|
|
12
|
+
*/
|
|
13
|
+
export const BUILD_BASE_HREF = '';
|
|
14
|
+
/**
|
|
15
|
+
* This value can be change in taon.jsonc (overrideNpmName)
|
|
16
|
+
*/
|
|
17
|
+
export const PROJECT_NPM_NAME = 'typescript-class-helpers';
|
|
18
|
+
/**
|
|
19
|
+
* Taon version from you project taon.json
|
|
20
|
+
*/
|
|
21
|
+
export const CURRENT_PACKAGE_TAON_VERSION = 'v21';
|
|
22
|
+
/**
|
|
23
|
+
* Autogenerated by current cli tool. Use *tnp release* to bump version.
|
|
24
|
+
*/
|
|
25
|
+
export const CURRENT_PACKAGE_VERSION = '21.0.27';
|
|
26
|
+
// THIS FILE IS GENERATED - DO NOT MODIFY
|
package/lib-prod/classname.js
CHANGED
|
@@ -1,155 +1,185 @@
|
|
|
1
|
-
import { ___NS__first, ___NS__isFunction, ___NS__isNil, ___NS__isString, UtilsOs__NS__isBrowser } from
|
|
2
|
-
import {
|
|
3
|
-
import { SYMBOL } from
|
|
4
|
-
import { TchHelpers } from
|
|
5
|
-
import { Helpers__NS__log } from
|
|
6
|
-
import { getStorage } from
|
|
7
|
-
import { setClassName } from
|
|
8
|
-
import { registerd } from
|
|
9
|
-
import { ERROR_MSG_CLASS_WITHOUT_DECORATOR } from
|
|
10
|
-
|
|
1
|
+
import { ___NS__first, ___NS__isFunction, ___NS__isNil, ___NS__isString, UtilsOs__NS__isBrowser } from 'tnp-core/lib-prod';
|
|
2
|
+
import { Models } from './models';
|
|
3
|
+
import { SYMBOL } from './symbols';
|
|
4
|
+
import { TchHelpers } from './index';
|
|
5
|
+
import { Helpers__NS__log } from 'tnp-core/lib-prod';
|
|
6
|
+
import { getStorage } from './storage';
|
|
7
|
+
import { setClassName } from './set-class-name';
|
|
8
|
+
import { registerd } from './registerd-db';
|
|
9
|
+
import { ERROR_MSG_CLASS_WITHOUT_DECORATOR } from './errors-messages';
|
|
10
|
+
//#region @backend
|
|
11
|
+
import * as FormData from 'form-data';
|
|
12
|
+
//#endregion
|
|
11
13
|
function getClasses() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
const s = getStorage();
|
|
15
|
+
return s[SYMBOL.CLASSES];
|
|
14
16
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
let config;
|
|
20
|
-
const parentClass = Object.getPrototypeOf(target);
|
|
21
|
-
const isValidParent = ___NS__isFunction(parentClass) && parentClass.name !== "";
|
|
22
|
-
if (registerd.classes.includes(target)) {
|
|
23
|
-
config = registerd.configs[registerd.classes.findIndex((c) => c === target)];
|
|
24
|
-
} else {
|
|
25
|
-
config = new Models__NS__ClassConfig();
|
|
26
|
-
config.classReference = target;
|
|
27
|
-
registerd.classes.push(target);
|
|
28
|
-
}
|
|
29
|
-
registerd.configs[registerd.classes.findIndex((c) => c === target)] = config;
|
|
30
|
-
if (callerTarget) {
|
|
31
|
-
const callerTargetConfig = registerd.configs[registerd.classes.findIndex((c) => c === callerTarget)];
|
|
32
|
-
if (!config.vChildren.includes(callerTargetConfig)) {
|
|
33
|
-
config.vChildren.push(callerTargetConfig);
|
|
17
|
+
//namespace CLASSNAME
|
|
18
|
+
export function CLASSNAME__NS__getClassConfig(target, configs = [], callerTarget) {
|
|
19
|
+
if (!___NS__isFunction(target)) {
|
|
20
|
+
throw `[typescript-class-helper][getClassConfig] Cannot get class config from: ${target}`;
|
|
34
21
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
22
|
+
let config;
|
|
23
|
+
const parentClass = Object.getPrototypeOf(target);
|
|
24
|
+
const isValidParent = ___NS__isFunction(parentClass) && parentClass.name !== '';
|
|
25
|
+
if (registerd.classes.includes(target)) {
|
|
26
|
+
config =
|
|
27
|
+
registerd.configs[registerd.classes.findIndex(c => c === target)];
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
config = new Models.ClassConfig();
|
|
31
|
+
config.classReference = target;
|
|
32
|
+
registerd.classes.push(target);
|
|
33
|
+
}
|
|
34
|
+
registerd.configs[registerd.classes.findIndex(c => c === target)] = config;
|
|
35
|
+
if (callerTarget) {
|
|
36
|
+
const callerTargetConfig = registerd.configs[registerd.classes.findIndex(c => c === callerTarget)];
|
|
37
|
+
if (!config.vChildren.includes(callerTargetConfig)) {
|
|
38
|
+
config.vChildren.push(callerTargetConfig);
|
|
39
|
+
}
|
|
40
|
+
callerTargetConfig.vParent = config;
|
|
41
|
+
}
|
|
42
|
+
configs.push(config);
|
|
43
|
+
return isValidParent
|
|
44
|
+
? CLASSNAME__NS__getClassConfig(parentClass, configs, target)
|
|
45
|
+
: configs;
|
|
39
46
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
/**
|
|
48
|
+
* PLEASE PROVIDE NAME AS TYPED STRING, NOT VARIABLE
|
|
49
|
+
* Decorator requred for production mode
|
|
50
|
+
* @param name Name of class
|
|
51
|
+
*/
|
|
52
|
+
export function CLASSNAME__NS__CLASSNAME(className, options) {
|
|
53
|
+
return function (target) {
|
|
54
|
+
// console.log(`CLASSNAME Inited ${className}`)
|
|
55
|
+
return setClassName(target, className, options);
|
|
56
|
+
};
|
|
44
57
|
}
|
|
45
|
-
function CLASSNAME__NS__getClassName(target, production = false) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
58
|
+
export function CLASSNAME__NS__getClassName(target, production = false) {
|
|
59
|
+
if (___NS__isNil(target)) {
|
|
60
|
+
// console.log(target);
|
|
61
|
+
// Helpers__NS__warn(`[typescript-class-helpers][getClassName] target is nil`)
|
|
62
|
+
return void 0;
|
|
63
|
+
}
|
|
64
|
+
if (___NS__isString(target)) {
|
|
65
|
+
// console.log(target);
|
|
66
|
+
Helpers__NS__log(`[typescript-class-helpers][getClassName] target is string: '${target}', produciton: ${production}`);
|
|
67
|
+
return target;
|
|
68
|
+
}
|
|
69
|
+
if (target === Date) {
|
|
70
|
+
return 'Date';
|
|
71
|
+
}
|
|
72
|
+
if (target === FormData) {
|
|
73
|
+
return 'FormData';
|
|
74
|
+
}
|
|
75
|
+
if (!___NS__isFunction(target)) {
|
|
76
|
+
// console.log(target);
|
|
77
|
+
Helpers__NS__log(`[typescript-class-helpers][getClassName] target is not a class`);
|
|
78
|
+
return void 0;
|
|
79
|
+
}
|
|
80
|
+
if (target[SYMBOL.ClassNameStaticProperty]) {
|
|
81
|
+
return target[SYMBOL.ClassNameStaticProperty];
|
|
82
|
+
}
|
|
83
|
+
const configs = CLASSNAME__NS__getClassConfig(target);
|
|
84
|
+
const config = ___NS__first(configs);
|
|
85
|
+
const classNameInBrowser = config?.classNameInBrowser;
|
|
86
|
+
if (UtilsOs__NS__isBrowser && ___NS__isString(classNameInBrowser)) {
|
|
87
|
+
return classNameInBrowser;
|
|
88
|
+
}
|
|
89
|
+
const className = config?.className;
|
|
90
|
+
if (typeof className === 'string') {
|
|
91
|
+
return className;
|
|
92
|
+
}
|
|
93
|
+
if (production) {
|
|
94
|
+
console.log('class without @CLASS.NAME deocrator', target);
|
|
95
|
+
throw new Error(ERROR_MSG_CLASS_WITHOUT_DECORATOR);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// Helpers__NS__log('check for ' + target.name)
|
|
99
|
+
// setTimeout(() => {
|
|
100
|
+
// // Helpers__NS__log('check for ' + target.name + ' === ' + config.className)/
|
|
101
|
+
// // TODO this may work, but not yet in singleton/morphi
|
|
102
|
+
// if (!config.className) {
|
|
103
|
+
// if (target?.name && target.name !== 'Object') {
|
|
104
|
+
// ConfigHelpers.log(`[typescript-class-helpers] Please use @CLASS.NAME`
|
|
105
|
+
// + `('${(target?.name && !!target.name) ? target.name : '...'}') decorator for class ${target?.name}`)
|
|
106
|
+
// }
|
|
107
|
+
// }
|
|
108
|
+
// })
|
|
109
|
+
}
|
|
110
|
+
// special thing when cloning classes
|
|
111
|
+
if (target.name?.startsWith('class_')) {
|
|
112
|
+
return '';
|
|
113
|
+
}
|
|
114
|
+
return target.name;
|
|
89
115
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
116
|
+
// @ts-ignore
|
|
117
|
+
export function CLASSNAME__NS__getObjectIndexPropertyValue(obj) {
|
|
118
|
+
const className = TchHelpers.getNameFromObject(obj);
|
|
119
|
+
// console.log('className',className)
|
|
120
|
+
let c = getClasses().find(c => c.className === className);
|
|
121
|
+
// console.log('c',c)
|
|
122
|
+
if (c) {
|
|
123
|
+
return c.uniqueKey;
|
|
124
|
+
}
|
|
96
125
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
126
|
+
// @ts-ignore
|
|
127
|
+
export function CLASSNAME__NS__getClassFamilyByClassName(className) {
|
|
128
|
+
let c = getClasses().find(c => c.className === className);
|
|
129
|
+
// console.log('getClasses()', getClasses())
|
|
130
|
+
if (c) {
|
|
131
|
+
return c.classFamily;
|
|
132
|
+
}
|
|
102
133
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
134
|
+
// @ts-ignore
|
|
135
|
+
export function CLASSNAME__NS__getObjectClassFamily(obj) {
|
|
136
|
+
const className = TchHelpers.getNameFromObject(obj);
|
|
137
|
+
// console.log('className',className)
|
|
138
|
+
let c = getClasses().find(c => c.className === className);
|
|
139
|
+
// console.log('c',c)
|
|
140
|
+
if (c) {
|
|
141
|
+
return c.classFamily;
|
|
142
|
+
}
|
|
109
143
|
}
|
|
110
|
-
function CLASSNAME__NS__getObjectIndexValue(obj) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
144
|
+
export function CLASSNAME__NS__getObjectIndexValue(obj) {
|
|
145
|
+
const className = TchHelpers.getNameFromObject(obj);
|
|
146
|
+
// console.log('className',className)
|
|
147
|
+
let c = getClasses().find(c => c.className === className);
|
|
148
|
+
// console.log('c',c)
|
|
149
|
+
if (c && ___NS__isString(c.uniqueKey)) {
|
|
150
|
+
return obj[c.uniqueKey];
|
|
151
|
+
}
|
|
116
152
|
}
|
|
117
|
-
function CLASSNAME__NS__getClassBy(className) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
153
|
+
export function CLASSNAME__NS__getClassBy(className) {
|
|
154
|
+
let res;
|
|
155
|
+
if (Array.isArray(className)) {
|
|
156
|
+
if (className.length !== 1) {
|
|
157
|
+
throw `Mapping error... please use proper class names:
|
|
122
158
|
{
|
|
123
159
|
propertyObject: 'MyClassName',
|
|
124
160
|
propertyWithArray: ['MyClassName']
|
|
125
161
|
}
|
|
126
162
|
|
|
127
163
|
`;
|
|
164
|
+
}
|
|
165
|
+
className = className[0];
|
|
128
166
|
}
|
|
129
|
-
className
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
167
|
+
if (typeof className === 'function') {
|
|
168
|
+
// TODO QUICK_FIX
|
|
169
|
+
res = className;
|
|
170
|
+
}
|
|
171
|
+
if (className === 'Date') {
|
|
172
|
+
res = Date;
|
|
173
|
+
}
|
|
174
|
+
if (className === 'FormData') {
|
|
175
|
+
res = FormData;
|
|
176
|
+
}
|
|
177
|
+
let c = getClasses().find(c => c.className === className);
|
|
178
|
+
if (c) {
|
|
179
|
+
res = c.target;
|
|
180
|
+
}
|
|
181
|
+
// console.log(`getClassBy "${className} return \n\n ${res} \n\n`)
|
|
182
|
+
// @ts-ignore
|
|
183
|
+
return res;
|
|
145
184
|
}
|
|
146
|
-
|
|
147
|
-
CLASSNAME__NS__CLASSNAME,
|
|
148
|
-
CLASSNAME__NS__getClassBy,
|
|
149
|
-
CLASSNAME__NS__getClassConfig,
|
|
150
|
-
CLASSNAME__NS__getClassFamilyByClassName,
|
|
151
|
-
CLASSNAME__NS__getClassName,
|
|
152
|
-
CLASSNAME__NS__getObjectClassFamily,
|
|
153
|
-
CLASSNAME__NS__getObjectIndexPropertyValue,
|
|
154
|
-
CLASSNAME__NS__getObjectIndexValue
|
|
155
|
-
};
|
|
185
|
+
//end of namespace CLASSNAME
|
|
@@ -1,49 +1,72 @@
|
|
|
1
|
-
import { ___NS__isArray, ___NS__isFunction } from
|
|
2
|
-
import { SYMBOL } from
|
|
1
|
+
import { ___NS__isArray, ___NS__isFunction } from 'tnp-core/lib-prod';
|
|
2
|
+
import { SYMBOL } from './symbols';
|
|
3
|
+
/**
|
|
4
|
+
* @DEPRECATED
|
|
5
|
+
* Describe fields assigned in class
|
|
6
|
+
*/
|
|
3
7
|
const FRegEx = new RegExp(/(?:this\.)(.+?(?= ))/g);
|
|
4
|
-
function describeFromClassStringify(target, parent = false) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
export function describeFromClassStringify(target, parent = false) {
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
var result = [];
|
|
11
|
+
if (parent) {
|
|
12
|
+
var proto = Object.getPrototypeOf(target.prototype);
|
|
13
|
+
if (proto) {
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
result = result.concat(describeFromClassStringify(proto.constructor, parent));
|
|
16
|
+
}
|
|
10
17
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
const classString = target.toString();
|
|
19
|
+
const matches = classString.match(FRegEx) || [];
|
|
20
|
+
// console.log({
|
|
21
|
+
// classString,
|
|
22
|
+
// });
|
|
23
|
+
result = result.concat(matches);
|
|
24
|
+
return result.map(prop => prop
|
|
25
|
+
.replace('this.', '')
|
|
26
|
+
.replace('.', '')
|
|
27
|
+
.replace(')', '')
|
|
28
|
+
.replace('(', ''));
|
|
18
29
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Describe fields assigne through @DefaultModelWithMapping decorator
|
|
32
|
+
* without functions
|
|
33
|
+
*/
|
|
34
|
+
export function describeByDefaultModelsAndMapping(target) {
|
|
35
|
+
let res = {};
|
|
36
|
+
if (target) {
|
|
37
|
+
// @ts-ignore
|
|
38
|
+
if (target[SYMBOL.DEFAULT_MODEL]) {
|
|
39
|
+
// @ts-ignore
|
|
40
|
+
Object.keys(target[SYMBOL.DEFAULT_MODEL])
|
|
41
|
+
.filter(key => {
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
return !___NS__isFunction(target[SYMBOL.DEFAULT_MODEL][key]);
|
|
44
|
+
})
|
|
45
|
+
.forEach(key => {
|
|
46
|
+
// @ts-ignore
|
|
47
|
+
return res[key] = null;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// @ts-ignore
|
|
51
|
+
let mapping = target[SYMBOL.MODELS_MAPPING];
|
|
52
|
+
if (___NS__isArray(mapping)) {
|
|
53
|
+
mapping.forEach(m => {
|
|
54
|
+
Object.keys(m)
|
|
55
|
+
.forEach(key => {
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
res[key] = null;
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else if (mapping) {
|
|
62
|
+
Object.keys(mapping)
|
|
63
|
+
.forEach(key => {
|
|
64
|
+
// @ts-ignore
|
|
65
|
+
res[key] = null;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
28
68
|
}
|
|
29
|
-
let
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
Object.keys(m).forEach((key) => {
|
|
33
|
-
res[key] = null;
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
} else if (mapping) {
|
|
37
|
-
Object.keys(mapping).forEach((key) => {
|
|
38
|
-
res[key] = null;
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
let propNames = Object.keys(res).filter((f) => !!f);
|
|
43
|
-
propNames = (!propNames.includes("id") ? ["id"] : []).concat(propNames);
|
|
44
|
-
return propNames;
|
|
69
|
+
let propNames = Object.keys(res).filter(f => !!f);
|
|
70
|
+
propNames = (!propNames.includes('id') ? ['id'] : []).concat(propNames);
|
|
71
|
+
return propNames;
|
|
45
72
|
}
|
|
46
|
-
export {
|
|
47
|
-
describeByDefaultModelsAndMapping,
|
|
48
|
-
describeFromClassStringify
|
|
49
|
-
};
|