taon 21.0.52 → 21.0.54
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/icon-menu-taon.svg +15 -15
- 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/ui/index.js +2 -2
- package/lib/ui/taon-admin-mode-configuration/index.js +2 -2
- package/lib-prod/base-classes/base-abstract-entity.js +19 -0
- package/lib-prod/base-classes/base-angular-service.js +84 -0
- package/lib-prod/base-classes/base-class.js +35 -0
- package/lib-prod/base-classes/{base-context.ts → base-context.js} +13 -15
- package/lib-prod/base-classes/base-controller.js +154 -0
- package/lib-prod/base-classes/base-crud-controller.js +264 -0
- package/lib-prod/base-classes/base-custom-repository.js +9 -0
- package/lib-prod/base-classes/{base-electron-service.ts → base-electron-service.js} +1 -12
- package/lib-prod/base-classes/base-entity.js +22 -0
- package/lib-prod/base-classes/base-file-upload.middleware.js +75 -0
- package/lib-prod/base-classes/base-injector.js +184 -0
- package/lib-prod/base-classes/base-middleware.js +9 -0
- package/lib-prod/base-classes/base-migration.js +20 -0
- package/lib-prod/base-classes/{base-provider.ts → base-provider.js} +2 -2
- package/lib-prod/base-classes/base-repository.js +617 -0
- package/lib-prod/base-classes/base-subscriber-for-entity.js +145 -0
- package/lib-prod/base-classes/{base.ts → base.js} +2 -15
- package/lib-prod/{build-info._auto-generated_.ts → build-info._auto-generated_.js} +1 -2
- package/lib-prod/config/controller-config.js +28 -0
- package/lib-prod/config/controller-options.js +3 -0
- package/lib-prod/config/method-config.js +7 -0
- package/lib-prod/config/param-config.js +3 -0
- package/lib-prod/constants.js +33 -0
- package/lib-prod/context-db-migrations.js +342 -0
- package/lib-prod/create-context.js +217 -0
- package/lib-prod/decorators/classes/controller-decorator.js +17 -0
- package/lib-prod/decorators/classes/entity-decorator.js +28 -0
- package/lib-prod/decorators/classes/middleware-decorator.js +16 -0
- package/lib-prod/decorators/classes/migration-decorator.js +15 -0
- package/lib-prod/decorators/classes/provider-decorator.js +15 -0
- package/lib-prod/decorators/classes/repository-decorator.js +15 -0
- package/lib-prod/decorators/classes/subscriber-decorator.js +15 -0
- package/lib-prod/decorators/decorator-abstract-opt.js +2 -0
- package/lib-prod/decorators/http/http-decorators.js +20 -0
- package/lib-prod/decorators/http/http-methods-decorators.js +102 -0
- package/lib-prod/decorators/http/http-params-decorators.js +42 -0
- package/lib-prod/dependency-injection/di-container.js +30 -0
- package/lib-prod/endpoint-context-storage.js +31 -0
- package/lib-prod/endpoint-context.js +2397 -0
- package/lib-prod/entity-process.js +225 -0
- package/lib-prod/env/{env.angular-node-app.ts → env.angular-node-app.js} +1 -1
- package/lib-prod/env/{env.docs-webapp.ts → env.docs-webapp.js} +1 -1
- package/lib-prod/env/{env.electron-app.ts → env.electron-app.js} +1 -1
- package/lib-prod/env/{env.mobile-app.ts → env.mobile-app.js} +1 -1
- package/lib-prod/env/{env.npm-lib-and-cli-tool.ts → env.npm-lib-and-cli-tool.js} +1 -1
- package/lib-prod/env/{env.vscode-plugin.ts → env.vscode-plugin.js} +1 -1
- package/lib-prod/express-types.js +1 -0
- package/lib-prod/formly/formly.models.js +1 -0
- package/lib-prod/formly/fromly.js +205 -0
- package/lib-prod/formly/type-from-entity.js +51 -0
- package/lib-prod/get-response-value.js +22 -0
- package/lib-prod/global-state/taon-global-state/{index.ts → index.js} +2 -2
- package/lib-prod/global-state/taon-global-state/{taon-global-state.abstract.context.ts → taon-global-state.abstract.context.js} +9 -11
- package/lib-prod/global-state/taon-global-state/taon-global-state.constants.js +7 -0
- package/lib-prod/global-state/taon-global-state/taon-global-state.controller.js +42 -0
- package/lib-prod/global-state/taon-global-state/taon-global-state.entity.js +35 -0
- package/lib-prod/global-state/taon-global-state/taon-global-state.middleware.js +12 -0
- package/lib-prod/global-state/taon-global-state/taon-global-state.models.js +44 -0
- package/lib-prod/global-state/taon-global-state/taon-global-state.provider.js +12 -0
- package/lib-prod/global-state/taon-global-state/taon-global-state.repository.js +46 -0
- package/lib-prod/global-state/taon-global-state/taon-global-state.subscriber.js +22 -0
- package/lib-prod/global-state/taon-global-state/taon-global-state.utils.js +11 -0
- package/lib-prod/global-state/taon-transaction-registry/{index.ts → index.js} +2 -2
- package/lib-prod/global-state/taon-transaction-registry/{taon-transaction-registry.abstract.context.ts → taon-transaction-registry.abstract.context.js} +10 -12
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.constants.js +5 -0
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.controller.js +36 -0
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.entity.js +36 -0
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.middleware.js +12 -0
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.models.js +7 -0
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.provider.js +12 -0
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.repository.js +31 -0
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.subscriber.js +22 -0
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.utils.js +5 -0
- package/lib-prod/helpers/class-helpers.js +228 -0
- package/lib-prod/helpers/clone-obj.js +17 -0
- package/lib-prod/helpers/taon-helpers.js +147 -0
- package/lib-prod/{index._auto-generated_.ts → index._auto-generated_.js} +1 -1
- package/lib-prod/index.js +252 -0
- package/lib-prod/{inject.ts → inject.js} +35 -57
- package/lib-prod/migrations/index.js +2 -0
- package/lib-prod/migrations/{migrations_index._auto-generated_.ts → migrations_index._auto-generated_.js} +0 -2
- package/lib-prod/models.js +78 -0
- package/lib-prod/orm/columns.js +64 -0
- package/lib-prod/orm/index.js +56 -0
- package/lib-prod/package.json +1 -1
- package/lib-prod/realtime/realtime-client.js +198 -0
- package/lib-prod/realtime/realtime-core.js +81 -0
- package/lib-prod/realtime/realtime-server.js +237 -0
- package/lib-prod/realtime/realtime-strategy/{index.ts → index.js} +1 -1
- package/lib-prod/realtime/realtime-strategy/realtime-strategy-ipc.js +280 -0
- package/lib-prod/realtime/realtime-strategy/realtime-strategy-mock.js +289 -0
- package/lib-prod/realtime/realtime-strategy/realtime-strategy-socket-io.js +27 -0
- package/lib-prod/realtime/realtime-strategy/realtime-strategy.js +11 -0
- package/lib-prod/realtime/realtime-subs-manager.js +88 -0
- package/lib-prod/realtime/realtime.models.js +2 -0
- package/lib-prod/symbols.js +108 -0
- package/lib-prod/ui/index.js +1 -0
- package/lib-prod/ui/taon-admin-mode-configuration/index.js +1 -0
- package/lib-prod/validators.js +80 -0
- package/lib-prod.split-namespaces.json +31 -91
- package/package.json +1 -1
- package/websql/package.json +1 -1
- package/websql-prod/package.json +1 -1
- package/lib-prod/base-classes/base-abstract-entity.ts +0 -34
- package/lib-prod/base-classes/base-angular-service.ts +0 -107
- package/lib-prod/base-classes/base-class.ts +0 -46
- package/lib-prod/base-classes/base-controller.ts +0 -240
- package/lib-prod/base-classes/base-crud-controller.ts +0 -298
- package/lib-prod/base-classes/base-custom-repository.ts +0 -10
- package/lib-prod/base-classes/base-entity.ts +0 -28
- package/lib-prod/base-classes/base-file-upload.middleware.ts +0 -92
- package/lib-prod/base-classes/base-injector.ts +0 -278
- package/lib-prod/base-classes/base-middleware.ts +0 -71
- package/lib-prod/base-classes/base-migration.ts +0 -26
- package/lib-prod/base-classes/base-repository.ts +0 -942
- package/lib-prod/base-classes/base-subscriber-for-entity.ts +0 -196
- package/lib-prod/config/controller-config.ts +0 -58
- package/lib-prod/config/controller-options.ts +0 -19
- package/lib-prod/config/method-config.ts +0 -55
- package/lib-prod/config/param-config.ts +0 -16
- package/lib-prod/constants.ts +0 -63
- package/lib-prod/context-db-migrations.ts +0 -488
- package/lib-prod/create-context.ts +0 -345
- package/lib-prod/decorators/classes/controller-decorator.ts +0 -25
- package/lib-prod/decorators/classes/entity-decorator.ts +0 -57
- package/lib-prod/decorators/classes/middleware-decorator.ts +0 -29
- package/lib-prod/decorators/classes/migration-decorator.ts +0 -27
- package/lib-prod/decorators/classes/provider-decorator.ts +0 -28
- package/lib-prod/decorators/classes/repository-decorator.ts +0 -26
- package/lib-prod/decorators/classes/subscriber-decorator.ts +0 -28
- package/lib-prod/decorators/decorator-abstract-opt.ts +0 -4
- package/lib-prod/decorators/http/http-decorators.ts +0 -26
- package/lib-prod/decorators/http/http-methods-decorators.ts +0 -275
- package/lib-prod/decorators/http/http-params-decorators.ts +0 -105
- package/lib-prod/dependency-injection/di-container.ts +0 -39
- package/lib-prod/endpoint-context-storage.ts +0 -47
- package/lib-prod/endpoint-context.ts +0 -3110
- package/lib-prod/entity-process.ts +0 -286
- package/lib-prod/express-types.ts +0 -4
- package/lib-prod/formly/formly.models.ts +0 -7
- package/lib-prod/formly/fromly.ts +0 -261
- package/lib-prod/formly/type-from-entity.ts +0 -80
- package/lib-prod/get-response-value.ts +0 -30
- package/lib-prod/global-state/taon-global-state/taon-global-state.constants.ts +0 -9
- package/lib-prod/global-state/taon-global-state/taon-global-state.controller.ts +0 -44
- package/lib-prod/global-state/taon-global-state/taon-global-state.entity.ts +0 -40
- package/lib-prod/global-state/taon-global-state/taon-global-state.middleware.ts +0 -12
- package/lib-prod/global-state/taon-global-state/taon-global-state.models.ts +0 -48
- package/lib-prod/global-state/taon-global-state/taon-global-state.provider.ts +0 -16
- package/lib-prod/global-state/taon-global-state/taon-global-state.repository.ts +0 -47
- package/lib-prod/global-state/taon-global-state/taon-global-state.subscriber.ts +0 -18
- package/lib-prod/global-state/taon-global-state/taon-global-state.utils.ts +0 -21
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.constants.ts +0 -7
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.controller.ts +0 -38
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.entity.ts +0 -54
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.middleware.ts +0 -12
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.models.ts +0 -6
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.provider.ts +0 -16
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.repository.ts +0 -29
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.subscriber.ts +0 -20
- package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.utils.ts +0 -9
- package/lib-prod/helpers/class-helpers.ts +0 -315
- package/lib-prod/helpers/clone-obj.ts +0 -24
- package/lib-prod/helpers/taon-helpers.ts +0 -181
- package/lib-prod/index.ts +0 -323
- package/lib-prod/lib-info.md +0 -8
- package/lib-prod/migrations/index.ts +0 -2
- package/lib-prod/migrations/migrations-info.md +0 -6
- package/lib-prod/models.ts +0 -427
- package/lib-prod/orm/columns.ts +0 -121
- package/lib-prod/orm/index.ts +0 -62
- package/lib-prod/realtime/realtime-client.ts +0 -288
- package/lib-prod/realtime/realtime-core.ts +0 -134
- package/lib-prod/realtime/realtime-server.ts +0 -398
- package/lib-prod/realtime/realtime-strategy/realtime-strategy-ipc.ts +0 -344
- package/lib-prod/realtime/realtime-strategy/realtime-strategy-mock.ts +0 -349
- package/lib-prod/realtime/realtime-strategy/realtime-strategy-socket-io.ts +0 -30
- package/lib-prod/realtime/realtime-strategy/realtime-strategy.ts +0 -21
- package/lib-prod/realtime/realtime-subs-manager.ts +0 -127
- package/lib-prod/realtime/realtime.models.ts +0 -33
- package/lib-prod/symbols.ts +0 -136
- package/lib-prod/ui/index.ts +0 -1
- package/lib-prod/ui/taon-admin-mode-configuration/index.ts +0 -1
- package/lib-prod/validators.ts +0 -103
- /package/lib-prod/env/{index.ts → index.js} +0 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import * as JSON5 from 'json5';
|
|
2
|
+
import { ___NS__cloneDeep, ___NS__first, ___NS__isObject, ___NS__times } from 'tnp-core/lib-prod';
|
|
3
|
+
import { ClassHelpers__NS__getName } from './class-helpers';
|
|
4
|
+
//namespace TaonHelpers
|
|
5
|
+
//#region fillUpTo string
|
|
6
|
+
export const TaonHelpers__NS__fillUpTo = (s, nCharacters) => {
|
|
7
|
+
return ___NS__times(nCharacters, n => {
|
|
8
|
+
if (s.charAt(n)) {
|
|
9
|
+
return s.charAt(n);
|
|
10
|
+
}
|
|
11
|
+
return ' ';
|
|
12
|
+
}).join('');
|
|
13
|
+
};
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region is good path
|
|
16
|
+
export const TaonHelpers__NS__isGoodPath = (p) => {
|
|
17
|
+
return p && typeof p === 'string' && p.trim() !== '';
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
20
|
+
export const TaonHelpers__NS__firstStringOrElemFromArray = (stringOrArrayOfString) => {
|
|
21
|
+
if (Array.isArray(stringOrArrayOfString)) {
|
|
22
|
+
return ___NS__first(stringOrArrayOfString);
|
|
23
|
+
}
|
|
24
|
+
return stringOrArrayOfString;
|
|
25
|
+
};
|
|
26
|
+
//#region try transform params
|
|
27
|
+
export const TaonHelpers__NS__tryTransformParam = param => {
|
|
28
|
+
if (typeof param === 'string') {
|
|
29
|
+
let n = Number(param);
|
|
30
|
+
if (!isNaN(n))
|
|
31
|
+
return n;
|
|
32
|
+
const bool = param.trim().toLowerCase();
|
|
33
|
+
if (bool === 'true') {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
if (bool === 'false') {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const t = JSON5.parse(param);
|
|
41
|
+
return t;
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
return param;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return param;
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
//#region get expores path
|
|
51
|
+
export const TaonHelpers__NS__getExpressPath = (c, pathOrClassConfig) => {
|
|
52
|
+
if (typeof pathOrClassConfig === 'string')
|
|
53
|
+
return `${c.calculatedPath}${pathOrClassConfig}`.replace(/\/$/, '');
|
|
54
|
+
return `${c.calculatedPath}${pathOrClassConfig.path}`.replace(/\/$/, '');
|
|
55
|
+
};
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region get default value tyep
|
|
58
|
+
export const TaonHelpers__NS__defaultType = value => {
|
|
59
|
+
if (typeof value === 'string')
|
|
60
|
+
return '';
|
|
61
|
+
if (typeof value === 'boolean')
|
|
62
|
+
return false;
|
|
63
|
+
if (Array.isArray(value))
|
|
64
|
+
return {};
|
|
65
|
+
if (typeof value === 'object')
|
|
66
|
+
return {};
|
|
67
|
+
};
|
|
68
|
+
//#endregion
|
|
69
|
+
//#region parse json with string jsons
|
|
70
|
+
export const TaonHelpers__NS__parseJSONwithStringJSONs = (object, waring = false) => {
|
|
71
|
+
// console.log('checking object', object)
|
|
72
|
+
if (!___NS__isObject(object)) {
|
|
73
|
+
if (waring) {
|
|
74
|
+
console.error(`
|
|
75
|
+
parseJSONwithStringJSONs(...)
|
|
76
|
+
Parameter should be a object, but is ${typeof object}
|
|
77
|
+
`, object);
|
|
78
|
+
}
|
|
79
|
+
return object;
|
|
80
|
+
}
|
|
81
|
+
let res = ___NS__cloneDeep(object);
|
|
82
|
+
Object.keys(res).forEach(key => {
|
|
83
|
+
let isJson = false;
|
|
84
|
+
try {
|
|
85
|
+
const possibleJSON = JSON.parse(res[key]);
|
|
86
|
+
res[key] = possibleJSON;
|
|
87
|
+
isJson = true;
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
isJson = false;
|
|
91
|
+
}
|
|
92
|
+
// console.log(`key ${key} is json `, isJson)
|
|
93
|
+
if (isJson) {
|
|
94
|
+
res[key] = TaonHelpers__NS__parseJSONwithStringJSONs(res[key], false);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return res;
|
|
98
|
+
};
|
|
99
|
+
//#endregion
|
|
100
|
+
//#region is plain file or folder
|
|
101
|
+
export const TaonHelpers__NS__isPlainFileOrFolder = filePath => {
|
|
102
|
+
return /^([a-zA-Z]|\-|\_|\@|\#|\$|\!|\^|\&|\*|\(|\))+$/.test(filePath);
|
|
103
|
+
};
|
|
104
|
+
//#endregion
|
|
105
|
+
//#region ips key name repsonse
|
|
106
|
+
export const TaonHelpers__NS__ipcKeyNameResponse = (target, methodConfig, expressPath) => {
|
|
107
|
+
return [
|
|
108
|
+
'response',
|
|
109
|
+
ClassHelpers__NS__getName(target),
|
|
110
|
+
methodConfig.methodName,
|
|
111
|
+
methodConfig.type,
|
|
112
|
+
expressPath,
|
|
113
|
+
].join('--');
|
|
114
|
+
};
|
|
115
|
+
//#endregion
|
|
116
|
+
//#region ipc key name request
|
|
117
|
+
export const TaonHelpers__NS__ipcKeyNameRequest = (target, methodConfig, expressPath) => {
|
|
118
|
+
return [
|
|
119
|
+
'request',
|
|
120
|
+
ClassHelpers__NS__getName(target),
|
|
121
|
+
methodConfig.methodName,
|
|
122
|
+
methodConfig.type,
|
|
123
|
+
expressPath,
|
|
124
|
+
].join('--');
|
|
125
|
+
};
|
|
126
|
+
//#endregion
|
|
127
|
+
//#region websql mocks
|
|
128
|
+
export const TaonHelpers__NS__websqlMocks = headers => {
|
|
129
|
+
const response = {
|
|
130
|
+
status(status) {
|
|
131
|
+
// console.log({status})
|
|
132
|
+
return {
|
|
133
|
+
send(send) {
|
|
134
|
+
// console.log({status})
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
},
|
|
138
|
+
setHeader(key, value) {
|
|
139
|
+
// console.log('Dummy set header', arguments)
|
|
140
|
+
headers[key] = value;
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
const request = {};
|
|
144
|
+
return { request, response };
|
|
145
|
+
};
|
|
146
|
+
//#endregion
|
|
147
|
+
//end of namespace TaonHelpers
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import 'reflect-metadata'; // TODO this is needed for my decorators to work
|
|
2
|
+
import { UtilsOs__NS__isBrowser, UtilsOs__NS__isElectron, UtilsOs__NS__isNode, UtilsOs__NS__isWebSQL } from 'tnp-core/lib-prod';
|
|
3
|
+
import * as createContextFn from './create-context';
|
|
4
|
+
import * as getResponse from './get-response-value';
|
|
5
|
+
import * as injectFn from './inject';
|
|
6
|
+
// import * as allSymbols from './symbols';
|
|
7
|
+
// export * from './build-info._auto-generated_';
|
|
8
|
+
export * from './constants';
|
|
9
|
+
export * from './context-db-migrations';
|
|
10
|
+
export * from './create-context';
|
|
11
|
+
export * from './endpoint-context-storage';
|
|
12
|
+
export * from './endpoint-context';
|
|
13
|
+
export * from './entity-process';
|
|
14
|
+
export * from './get-response-value';
|
|
15
|
+
// export * from './index';
|
|
16
|
+
export * from './inject';
|
|
17
|
+
export * from './models';
|
|
18
|
+
export * from './symbols';
|
|
19
|
+
export * from './validators';
|
|
20
|
+
export * from './base-classes/base-abstract-entity';
|
|
21
|
+
export * from './base-classes/base-angular-service';
|
|
22
|
+
export * from './base-classes/base-class';
|
|
23
|
+
export * from './base-classes/base-context';
|
|
24
|
+
export * from './base-classes/base-controller';
|
|
25
|
+
export * from './base-classes/base-crud-controller';
|
|
26
|
+
export * from './base-classes/base-custom-repository';
|
|
27
|
+
export * from './base-classes/base-entity';
|
|
28
|
+
export * from './base-classes/base-file-upload.middleware';
|
|
29
|
+
export * from './base-classes/base-injector';
|
|
30
|
+
export * from './base-classes/base-middleware';
|
|
31
|
+
export * from './base-classes/base-migration';
|
|
32
|
+
export * from './base-classes/base-provider';
|
|
33
|
+
export * from './base-classes/base-repository';
|
|
34
|
+
export * from './base-classes/base-subscriber-for-entity';
|
|
35
|
+
export * from './config/controller-config';
|
|
36
|
+
export * from './config/controller-options';
|
|
37
|
+
export * from './config/method-config';
|
|
38
|
+
export * from './config/param-config';
|
|
39
|
+
export * from './decorators/decorator-abstract-opt';
|
|
40
|
+
export * from './dependency-injection/di-container';
|
|
41
|
+
/* */
|
|
42
|
+
/* */
|
|
43
|
+
/* */
|
|
44
|
+
/* */
|
|
45
|
+
/* */
|
|
46
|
+
export * from './helpers/class-helpers';
|
|
47
|
+
export * from './helpers/clone-obj';
|
|
48
|
+
export * from './helpers/taon-helpers';
|
|
49
|
+
export * from './orm/columns';
|
|
50
|
+
export * from './realtime/realtime-client';
|
|
51
|
+
export * from './realtime/realtime-core';
|
|
52
|
+
export * from './realtime/realtime-server';
|
|
53
|
+
export * from './realtime/realtime-subs-manager';
|
|
54
|
+
export * from './realtime/realtime.models';
|
|
55
|
+
export * from './decorators/classes/controller-decorator';
|
|
56
|
+
export * from './decorators/classes/entity-decorator';
|
|
57
|
+
export * from './decorators/classes/middleware-decorator';
|
|
58
|
+
export * from './decorators/classes/migration-decorator';
|
|
59
|
+
export * from './decorators/classes/provider-decorator';
|
|
60
|
+
export * from './decorators/classes/repository-decorator';
|
|
61
|
+
export * from './decorators/classes/subscriber-decorator';
|
|
62
|
+
export * from './decorators/http/http-methods-decorators';
|
|
63
|
+
export * from './decorators/http/http-params-decorators';
|
|
64
|
+
export * from './realtime/realtime-strategy/realtime-strategy-ipc';
|
|
65
|
+
export * from './realtime/realtime-strategy/realtime-strategy-mock';
|
|
66
|
+
export * from './realtime/realtime-strategy/realtime-strategy-socket-io';
|
|
67
|
+
export * from './realtime/realtime-strategy/realtime-strategy';
|
|
68
|
+
// TODO export all things
|
|
69
|
+
//namespace Taon
|
|
70
|
+
/**
|
|
71
|
+
* Remove global taon loader from env.ts [loading.preAngularBootstrap]
|
|
72
|
+
*/
|
|
73
|
+
export const Taon__NS__removeLoader = (afterMS = 0) => {
|
|
74
|
+
return new Promise(resolve => {
|
|
75
|
+
setTimeout(() => {
|
|
76
|
+
globalThis?.window?.document
|
|
77
|
+
?.getElementById('taonpreloadertoremove')
|
|
78
|
+
?.remove();
|
|
79
|
+
const body = globalThis?.window?.document?.body;
|
|
80
|
+
if (body && body.style) {
|
|
81
|
+
body.style.backgroundColor = '';
|
|
82
|
+
}
|
|
83
|
+
resolve();
|
|
84
|
+
}, afterMS);
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
export const Taon__NS__error = (opt) => {
|
|
88
|
+
throw () => {
|
|
89
|
+
if (typeof opt === 'string') {
|
|
90
|
+
opt = {
|
|
91
|
+
message: opt,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return opt;
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
export const Taon__NS__getResponseValue = getResponse.getResponseValue;
|
|
98
|
+
//#region class decorators
|
|
99
|
+
// TODO new 5.8 typescript is not allowing this
|
|
100
|
+
// export import Controller = controllerDecorator.TaonController;
|
|
101
|
+
// export import Entity = entityDecorator.TaonEntity;
|
|
102
|
+
// export import Provider = providerDecorator.TaonProvider;
|
|
103
|
+
// export import Repository = repositoryDecorator.TaonRepository;
|
|
104
|
+
// export import Subscriber = subscriberDecorator.TaonSubscriber;
|
|
105
|
+
// export import Migration = migrationDecorator.TaonMigration;
|
|
106
|
+
// export import Middleware = middlewareDecorator.TaonMiddleware;
|
|
107
|
+
//#endregion
|
|
108
|
+
//#region aliases to helpers
|
|
109
|
+
export const Taon__NS__isBrowser = UtilsOs__NS__isBrowser;
|
|
110
|
+
export const Taon__NS__isNode = UtilsOs__NS__isNode;
|
|
111
|
+
export const Taon__NS__isWebSQL = UtilsOs__NS__isWebSQL;
|
|
112
|
+
export const Taon__NS__isElectron = UtilsOs__NS__isElectron;
|
|
113
|
+
//#endregion
|
|
114
|
+
export const Taon__NS__createContext = createContextFn.createContext;
|
|
115
|
+
export const Taon__NS__createContextTemplate = createContextFn.createContextTemplate;
|
|
116
|
+
export const Taon__NS__inject = injectFn.inject;
|
|
117
|
+
/**
|
|
118
|
+
* @deprecated
|
|
119
|
+
* use createContext instead
|
|
120
|
+
*/
|
|
121
|
+
export const Taon__NS__init = async (options) => {
|
|
122
|
+
const TaonBaseContext = (await import('./base-classes/base-context'))
|
|
123
|
+
.TaonBaseContext;
|
|
124
|
+
const context = Taon__NS__createContext(() => ({
|
|
125
|
+
appId: 'default-app-not-used-anymore',
|
|
126
|
+
contextName: 'default',
|
|
127
|
+
host: options.host,
|
|
128
|
+
contexts: { TaonBaseContext },
|
|
129
|
+
database: true,
|
|
130
|
+
entities: Array.from(options.entities),
|
|
131
|
+
controllers: Array.from(options.controllers),
|
|
132
|
+
}));
|
|
133
|
+
await context.initialize();
|
|
134
|
+
return context;
|
|
135
|
+
};
|
|
136
|
+
//end of namespace Taon
|
|
137
|
+
//#region taon flattening map
|
|
138
|
+
export const TAON_FLATTEN_MAPPING = {
|
|
139
|
+
'taon/src': {
|
|
140
|
+
// =====================
|
|
141
|
+
// Taon.Http.*
|
|
142
|
+
// =====================
|
|
143
|
+
'Taon.Http.GET': 'GET',
|
|
144
|
+
'Taon.Http.POST': 'POST',
|
|
145
|
+
'Taon.Http.PUT': 'PUT',
|
|
146
|
+
'Taon.Http.DELETE': 'DELETE',
|
|
147
|
+
'Taon.Http.PATCH': 'PATCH',
|
|
148
|
+
'Taon.Http.HEAD': 'HEAD',
|
|
149
|
+
'Taon.Http.HTML': 'HTML',
|
|
150
|
+
'Taon.Http.Response': 'HttpResponse',
|
|
151
|
+
'Taon.Http.Param.Query': 'Query',
|
|
152
|
+
'Taon.Http.Param.Path': 'Path',
|
|
153
|
+
'Taon.Http.Param.Body': 'Body',
|
|
154
|
+
'Taon.Http.Param.Cookie': 'Cookie',
|
|
155
|
+
'Taon.Http.Param.Header': 'Header',
|
|
156
|
+
// =====================
|
|
157
|
+
// Taon.Base.*
|
|
158
|
+
// =====================
|
|
159
|
+
'Taon.Base.Controller': 'TaonBaseController',
|
|
160
|
+
'Taon.Base.CrudController': 'TaonBaseCrudController',
|
|
161
|
+
'Taon.Base.Entity': 'TaonBaseEntity',
|
|
162
|
+
'Taon.Base.AbstractEntity': 'TaonBaseAbstractEntity',
|
|
163
|
+
'Taon.Base.AbstractEntityOmitKeys': 'AbstractEntityOmitKeys',
|
|
164
|
+
'Taon.Base.Provider': 'TaonBaseProvider',
|
|
165
|
+
'Taon.Base.Class': 'TaonBaseClass',
|
|
166
|
+
'Taon.Base.Repository': 'TaonBaseRepository',
|
|
167
|
+
'Taon.Base.CustomRepository': 'TaonBaseCustomRepository',
|
|
168
|
+
'Taon.Base.SubscriberForEntity': 'TaonBaseSubscriberForEntity',
|
|
169
|
+
'Taon.Base.Migration': 'TaonBaseMigration',
|
|
170
|
+
'Taon.Base.Middleware': 'TaonBaseMiddleware',
|
|
171
|
+
'Taon.Base.AngularService': 'TaonBaseAngularService',
|
|
172
|
+
'Taon.Base.Context': 'TaonBaseContext',
|
|
173
|
+
// =====================
|
|
174
|
+
// Taon.Controller.* (decorators)
|
|
175
|
+
// =====================
|
|
176
|
+
'Taon.Controller': 'TaonController',
|
|
177
|
+
'Taon.Entity': 'TaonEntity',
|
|
178
|
+
'Taon.Provider': 'TaonProvider',
|
|
179
|
+
'Taon.Repository': 'TaonRepository',
|
|
180
|
+
'Taon.Subscriber': 'TaonSubscriber',
|
|
181
|
+
'Taon.Migration': 'TaonMigration',
|
|
182
|
+
'Taon.Middleware': 'TaonMiddleware',
|
|
183
|
+
// =====================
|
|
184
|
+
// Taon.Orm.*
|
|
185
|
+
// =====================
|
|
186
|
+
'Taon.Orm.Repository': 'Repository',
|
|
187
|
+
'Taon.Orm.Connection': 'Connection',
|
|
188
|
+
// ListenEvent
|
|
189
|
+
'Taon.Orm.ListenEvent.AfterInsert': 'AfterInsert',
|
|
190
|
+
'Taon.Orm.ListenEvent.AfterLoad': 'AfterLoad',
|
|
191
|
+
'Taon.Orm.ListenEvent.AfterRecover': 'AfterRecover',
|
|
192
|
+
'Taon.Orm.ListenEvent.AfterRemove': 'AfterRemove',
|
|
193
|
+
'Taon.Orm.ListenEvent.AfterSoftRemove': 'AfterSoftRemove',
|
|
194
|
+
'Taon.Orm.ListenEvent.AfterUpdate': 'AfterUpdate',
|
|
195
|
+
'Taon.Orm.ListenEvent.BeforeInsert': 'BeforeInsert',
|
|
196
|
+
'Taon.Orm.ListenEvent.BeforeRecover': 'BeforeRecover',
|
|
197
|
+
'Taon.Orm.ListenEvent.BeforeRemove': 'BeforeRemove',
|
|
198
|
+
'Taon.Orm.ListenEvent.BeforeSoftRemove': 'BeforeSoftRemove',
|
|
199
|
+
'Taon.Orm.ListenEvent.BeforeUpdate': 'BeforeUpdate',
|
|
200
|
+
// Tree
|
|
201
|
+
'Taon.Orm.Tree.Children': 'TreeChildren',
|
|
202
|
+
'Taon.Orm.Tree.Parent': 'TreeParent',
|
|
203
|
+
// Column
|
|
204
|
+
'Taon.Orm.Column.Generated': 'Generated',
|
|
205
|
+
'Taon.Orm.Column.Primary': 'PrimaryColumn',
|
|
206
|
+
'Taon.Orm.Column.Index': 'Index',
|
|
207
|
+
'Taon.Orm.Column.CreateDate': 'CreateDateColumn',
|
|
208
|
+
'Taon.Orm.Column.UpdateDate': 'UpdateDateColumn',
|
|
209
|
+
'Taon.Orm.Column.DeleteDate': 'DeleteDateColumn',
|
|
210
|
+
'Taon.Orm.Column.Custom': 'Column',
|
|
211
|
+
'Taon.Orm.Column.String': 'StringColumn',
|
|
212
|
+
'Taon.Orm.Column.String100': 'String100Column',
|
|
213
|
+
'Taon.Orm.Column.String45': 'String45Column',
|
|
214
|
+
'Taon.Orm.Column.String500': 'String500Column',
|
|
215
|
+
'Taon.Orm.Column.String200': 'String200Column',
|
|
216
|
+
'Taon.Orm.Column.Number': 'NumberColumn',
|
|
217
|
+
'Taon.Orm.Column.DecimalNumber': 'DecimalNumberColumn',
|
|
218
|
+
'Taon.Orm.Column.SimpleJson': 'SimpleJsonColumn',
|
|
219
|
+
'Taon.Orm.Column.Boolean': 'BooleanColumn',
|
|
220
|
+
'Taon.Orm.Column.DateTIme': 'DateTimeColumn',
|
|
221
|
+
'Taon.Orm.Column.Version': 'VersionColumn',
|
|
222
|
+
'Taon.Orm.Column.Virtual': 'VirtualColumn',
|
|
223
|
+
// Join
|
|
224
|
+
'Taon.Orm.Join.Table': 'JoinTable',
|
|
225
|
+
'Taon.Orm.Join.Column': 'JoinColumn',
|
|
226
|
+
// Relation
|
|
227
|
+
'Taon.Orm.Relation.OneToMany': 'OneToMany',
|
|
228
|
+
'Taon.Orm.Relation.OneToOne': 'OneToOne',
|
|
229
|
+
'Taon.Orm.Relation.ManyToMany': 'ManyToMany',
|
|
230
|
+
'Taon.Orm.Relation.ManyToOne': 'ManyToOne',
|
|
231
|
+
},
|
|
232
|
+
'taon-storage/src': {
|
|
233
|
+
// =====================
|
|
234
|
+
// Stor.* (new clean API)
|
|
235
|
+
// =====================
|
|
236
|
+
'Stor.Property.In.LocalStorage': 'StorPropertyInLocalStorage',
|
|
237
|
+
'Stor.Property.In.IndexedDb': 'StorPropertyInIndexedDb',
|
|
238
|
+
// short alias style (if you prefer this pattern in some codebases)
|
|
239
|
+
'Stor.In.LocalStorage': 'StorPropertyInLocalStorage',
|
|
240
|
+
'Stor.In.IndexedDb': 'StorPropertyInIndexedDb',
|
|
241
|
+
// =====================
|
|
242
|
+
// Stor.property.in.* (back-compat chain you mentioned)
|
|
243
|
+
// =====================
|
|
244
|
+
'Stor.property.in.localstorage': 'StorPropertyInLocalStorage',
|
|
245
|
+
'Stor.property.in.indexedb': 'StorPropertyInIndexedDb',
|
|
246
|
+
'Stor.property.in.indexedDb': 'StorPropertyInIndexedDb',
|
|
247
|
+
// Optional: if your old code had Stor.proper... (typo)
|
|
248
|
+
'Stor.proper.in.localstorage': 'StorPropertyInLocalStorage',
|
|
249
|
+
'Stor.proper.in.indexedb': 'StorPropertyInIndexedDb',
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
//#endregion
|
|
@@ -1,59 +1,43 @@
|
|
|
1
|
-
import
|
|
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
|
-
const methodOrProperty = isMethods
|
|
36
|
-
? instance[propName].bind(instance)
|
|
37
|
-
: instance[propName];
|
|
38
|
-
|
|
39
|
-
// console.log(
|
|
40
|
-
// `methodOrProperty from proxy ${propName?.toString()} = isMethods:${isMethods}`,
|
|
41
|
-
// methods,
|
|
42
|
-
// );
|
|
43
|
-
return methodOrProperty;
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
) as T;
|
|
1
|
+
import { Symbols__NS__classMethodsNames, Symbols__NS__ctxInClassOrClassObj } from './symbols';
|
|
2
|
+
export const inject = (entity) => {
|
|
3
|
+
return new Proxy({}, {
|
|
4
|
+
get: (_, propName) => {
|
|
5
|
+
if (propName === 'hasOwnProperty') {
|
|
6
|
+
return () => false;
|
|
7
|
+
}
|
|
8
|
+
const ctor = entity();
|
|
9
|
+
const contextFromClass = ctor[Symbols__NS__ctxInClassOrClassObj];
|
|
10
|
+
const resultContext = contextFromClass;
|
|
11
|
+
if (resultContext) {
|
|
12
|
+
let instance = resultContext.inject(ctor, {
|
|
13
|
+
parentInstanceThatWillGetInjectedStuff: this,
|
|
14
|
+
});
|
|
15
|
+
// console.log('instance', instance);
|
|
16
|
+
if (propName === 'getOriginalPrototype') {
|
|
17
|
+
return () => Object.getPrototypeOf(instance);
|
|
18
|
+
}
|
|
19
|
+
if (propName === 'getOriginalConstructor') {
|
|
20
|
+
return () => instance.constructor;
|
|
21
|
+
}
|
|
22
|
+
const methods = ctor[Symbols__NS__classMethodsNames] || [];
|
|
23
|
+
const isMethods = methods.includes(propName);
|
|
24
|
+
const methodOrProperty = isMethods
|
|
25
|
+
? instance[propName].bind(instance)
|
|
26
|
+
: instance[propName];
|
|
27
|
+
// console.log(
|
|
28
|
+
// `methodOrProperty from proxy ${propName?.toString()} = isMethods:${isMethods}`,
|
|
29
|
+
// methods,
|
|
30
|
+
// );
|
|
31
|
+
return methodOrProperty;
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
});
|
|
48
35
|
};
|
|
49
|
-
|
|
50
36
|
// export const injectController = inject;
|
|
51
|
-
|
|
52
37
|
// export type SubscriptionEvent<T> = {
|
|
53
38
|
// name: keyof T;
|
|
54
39
|
// data: any;
|
|
55
40
|
// };
|
|
56
|
-
|
|
57
41
|
/**
|
|
58
42
|
* TODO
|
|
59
43
|
*/
|
|
@@ -63,9 +47,7 @@ export const inject = <T>(entity: () => new (...args: any[]) => T): T => {
|
|
|
63
47
|
// ): Observable<SubscriptionEvent<T>> => {
|
|
64
48
|
// const eventsSrc = new Subject<SubscriptionEvent<T>>();
|
|
65
49
|
// const obs = eventsSrc.asObservable();
|
|
66
|
-
|
|
67
50
|
// let isFirstSubscription = true;
|
|
68
|
-
|
|
69
51
|
// const proxyObservable = new Proxy(obs, {
|
|
70
52
|
// get(target, prop, receiver) {
|
|
71
53
|
// if (prop === 'subscribe') {
|
|
@@ -80,15 +62,12 @@ export const inject = <T>(entity: () => new (...args: any[]) => T): T => {
|
|
|
80
62
|
// if (!ctx) {
|
|
81
63
|
// throw new Error(
|
|
82
64
|
// `You are trying to inject class without context. Use context like this:
|
|
83
|
-
|
|
84
65
|
// class MyClassSubscriber extends BaseSubscriber {
|
|
85
66
|
// ${eventName as any}() {
|
|
86
67
|
// \/\/ your code here
|
|
87
68
|
// }
|
|
88
69
|
// }
|
|
89
|
-
|
|
90
70
|
// Taon.injectSubscriberEvents( MyContext.getInstance(()=> MyClassSubscriber), '${eventName as any}' )
|
|
91
|
-
|
|
92
71
|
// `,
|
|
93
72
|
// );
|
|
94
73
|
// }
|
|
@@ -106,6 +85,5 @@ export const inject = <T>(entity: () => new (...args: any[]) => T): T => {
|
|
|
106
85
|
// return Reflect.get(target, prop, receiver);
|
|
107
86
|
// },
|
|
108
87
|
// });
|
|
109
|
-
|
|
110
88
|
// return proxyObservable as Observable<SubscriptionEvent<T>>;
|
|
111
|
-
// };
|
|
89
|
+
// };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { RestResponseWrapper, } from 'ng2-rest/lib-prod';
|
|
2
|
+
import { ___NS__cloneDeep, ___NS__merge } from 'tnp-core/lib-prod';
|
|
3
|
+
// ! TODO make it as a nice way to wrap normal request
|
|
4
|
+
export class TaonRestResponseWrapper extends RestResponseWrapper {
|
|
5
|
+
}
|
|
6
|
+
export const BaseTaonClassesNames = [
|
|
7
|
+
'BaseCrudController',
|
|
8
|
+
'BaseController',
|
|
9
|
+
'BaseAbstractEntity',
|
|
10
|
+
'BaseEntity',
|
|
11
|
+
'BaseContext',
|
|
12
|
+
'BaseCustomRepository',
|
|
13
|
+
'BaseFileUploadMiddleware',
|
|
14
|
+
'BaseMiddleware',
|
|
15
|
+
'BaseClass',
|
|
16
|
+
'BaseInjector',
|
|
17
|
+
'BaseMigration',
|
|
18
|
+
'BaseProvider',
|
|
19
|
+
'BaseRepository',
|
|
20
|
+
'BaseSubscriberForEntity',
|
|
21
|
+
'BaseCliWorkerController',
|
|
22
|
+
'PortsController',
|
|
23
|
+
'PortsContext',
|
|
24
|
+
];
|
|
25
|
+
export const TaonTempDatabasesFolder = 'databases';
|
|
26
|
+
export const TaonTempRoutesFolder = 'routes';
|
|
27
|
+
//namespace Models
|
|
28
|
+
export const Models__NS__DatabasesFolder = TaonTempDatabasesFolder;
|
|
29
|
+
//#region models / class types
|
|
30
|
+
export var Models__NS__ClassType;
|
|
31
|
+
(function (Models__NS__ClassType) {
|
|
32
|
+
Models__NS__ClassType["ENTITY"] = "ENTITY";
|
|
33
|
+
Models__NS__ClassType["CONTROLLER"] = "CONTROLLER";
|
|
34
|
+
Models__NS__ClassType["REPOSITORY"] = "REPOSITORY";
|
|
35
|
+
Models__NS__ClassType["PROVIDER"] = "PROVIDER";
|
|
36
|
+
Models__NS__ClassType["SUBSCRIBER"] = "SUBSCRIBER";
|
|
37
|
+
Models__NS__ClassType["MIGRATION"] = "MIGRATION";
|
|
38
|
+
Models__NS__ClassType["MIDDLEWARE"] = "MIDDLEWARE";
|
|
39
|
+
})(Models__NS__ClassType || (Models__NS__ClassType = {}));
|
|
40
|
+
export const Models__NS__ClassTypeKey = {
|
|
41
|
+
[Models__NS__ClassType.ENTITY]: 'entities',
|
|
42
|
+
[Models__NS__ClassType.CONTROLLER]: 'controllers',
|
|
43
|
+
[Models__NS__ClassType.REPOSITORY]: 'repositories',
|
|
44
|
+
[Models__NS__ClassType.PROVIDER]: 'providers',
|
|
45
|
+
[Models__NS__ClassType.SUBSCRIBER]: 'subscribers',
|
|
46
|
+
[Models__NS__ClassType.MIGRATION]: 'migrations',
|
|
47
|
+
[Models__NS__ClassType.MIDDLEWARE]: 'middlewares',
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
//#region models / database connection options
|
|
51
|
+
export class Models__NS__DatabaseConfigTypeOrm {
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
//#region models / database config
|
|
55
|
+
export class Models__NS__DatabaseConfig extends Models__NS__DatabaseConfigTypeOrm {
|
|
56
|
+
static from(databasePartialConfig) {
|
|
57
|
+
return ___NS__merge(new Models__NS__DatabaseConfig(), databasePartialConfig);
|
|
58
|
+
}
|
|
59
|
+
get databaseConfigTypeORM() {
|
|
60
|
+
//#region @websqlFunc
|
|
61
|
+
const result = ___NS__cloneDeep(this);
|
|
62
|
+
if (result.recreateMode) {
|
|
63
|
+
if (result.recreateMode === 'DROP_DB+MIGRATIONS') {
|
|
64
|
+
result.synchronize = true;
|
|
65
|
+
result.dropSchema = true;
|
|
66
|
+
}
|
|
67
|
+
else if (result.recreateMode === 'PRESERVE_DATA+MIGRATIONS') {
|
|
68
|
+
result.synchronize = false;
|
|
69
|
+
result.dropSchema = false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
delete result.recreateMode;
|
|
73
|
+
return result;
|
|
74
|
+
//#endregion
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
//end of namespace Models
|