taon 21.0.53 → 21.0.55

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.
Files changed (115) hide show
  1. package/bin/taon +5 -5
  2. package/bin/taon-debug +5 -5
  3. package/bin/taon-debug-brk +4 -4
  4. package/browser/package.json +1 -1
  5. package/browser-prod/package.json +1 -1
  6. package/icon-menu-taon.svg +15 -15
  7. package/lib/build-info._auto-generated_.d.ts +1 -1
  8. package/lib/build-info._auto-generated_.js +1 -1
  9. package/lib/package.json +1 -1
  10. package/lib/ui/index.js +2 -2
  11. package/lib/ui/taon-admin-mode-configuration/index.js +2 -2
  12. package/lib-prod/base-classes/base-abstract-entity.js +17 -31
  13. package/lib-prod/base-classes/base-angular-service.js +83 -55
  14. package/lib-prod/base-classes/base-class.js +33 -35
  15. package/lib-prod/base-classes/base-context.js +17 -19
  16. package/lib-prod/base-classes/base-controller.js +146 -154
  17. package/lib-prod/base-classes/base-crud-controller.js +250 -221
  18. package/lib-prod/base-classes/base-custom-repository.js +7 -18
  19. package/lib-prod/base-classes/base-electron-service.js +49 -0
  20. package/lib-prod/base-classes/base-entity.js +20 -30
  21. package/lib-prod/base-classes/base-file-upload.middleware.js +72 -75
  22. package/lib-prod/base-classes/base-injector.js +176 -194
  23. package/lib-prod/base-classes/base-middleware.js +8 -5
  24. package/lib-prod/base-classes/base-migration.js +19 -22
  25. package/lib-prod/base-classes/base-provider.js +7 -5
  26. package/lib-prod/base-classes/base-repository.js +601 -573
  27. package/lib-prod/base-classes/base-subscriber-for-entity.js +143 -152
  28. package/lib-prod/base-classes/base.js +18 -0
  29. package/lib-prod/build-info._auto-generated_.js +26 -14
  30. package/lib-prod/config/controller-config.js +24 -24
  31. package/lib-prod/config/controller-options.js +2 -5
  32. package/lib-prod/config/method-config.js +6 -8
  33. package/lib-prod/config/param-config.js +2 -8
  34. package/lib-prod/constants.js +29 -25
  35. package/lib-prod/context-db-migrations.js +328 -324
  36. package/lib-prod/create-context.js +211 -146
  37. package/lib-prod/decorators/classes/controller-decorator.js +16 -20
  38. package/lib-prod/decorators/classes/entity-decorator.js +26 -47
  39. package/lib-prod/decorators/classes/middleware-decorator.js +14 -24
  40. package/lib-prod/decorators/classes/migration-decorator.js +13 -22
  41. package/lib-prod/decorators/classes/provider-decorator.js +13 -23
  42. package/lib-prod/decorators/classes/repository-decorator.js +13 -22
  43. package/lib-prod/decorators/classes/subscriber-decorator.js +13 -23
  44. package/lib-prod/decorators/decorator-abstract-opt.js +1 -4
  45. package/lib-prod/decorators/http/http-decorators.js +20 -5
  46. package/lib-prod/decorators/http/http-methods-decorators.js +91 -133
  47. package/lib-prod/decorators/http/http-params-decorators.js +36 -62
  48. package/lib-prod/dependency-injection/di-container.js +28 -29
  49. package/lib-prod/endpoint-context-storage.js +27 -32
  50. package/lib-prod/endpoint-context.js +2294 -1930
  51. package/lib-prod/entity-process.js +209 -198
  52. package/lib-prod/env/env.angular-node-app.js +66 -130
  53. package/lib-prod/env/env.docs-webapp.js +66 -130
  54. package/lib-prod/env/env.electron-app.js +66 -130
  55. package/lib-prod/env/env.mobile-app.js +66 -130
  56. package/lib-prod/env/env.npm-lib-and-cli-tool.js +66 -130
  57. package/lib-prod/env/env.vscode-plugin.js +66 -130
  58. package/lib-prod/env/index.js +6 -6
  59. package/lib-prod/express-types.js +1 -0
  60. package/lib-prod/formly/formly.models.js +1 -0
  61. package/lib-prod/formly/fromly.js +196 -175
  62. package/lib-prod/formly/type-from-entity.js +45 -52
  63. package/lib-prod/get-response-value.js +21 -18
  64. package/lib-prod/global-state/taon-global-state/index.js +6 -5
  65. package/lib-prod/global-state/taon-global-state/taon-global-state.abstract.context.js +18 -19
  66. package/lib-prod/global-state/taon-global-state/taon-global-state.constants.js +6 -9
  67. package/lib-prod/global-state/taon-global-state/taon-global-state.controller.js +40 -46
  68. package/lib-prod/global-state/taon-global-state/taon-global-state.entity.js +33 -46
  69. package/lib-prod/global-state/taon-global-state/taon-global-state.middleware.js +10 -20
  70. package/lib-prod/global-state/taon-global-state/taon-global-state.models.js +43 -33
  71. package/lib-prod/global-state/taon-global-state/taon-global-state.provider.js +10 -20
  72. package/lib-prod/global-state/taon-global-state/taon-global-state.repository.js +43 -44
  73. package/lib-prod/global-state/taon-global-state/taon-global-state.subscriber.js +20 -27
  74. package/lib-prod/global-state/taon-global-state/taon-global-state.utils.js +10 -10
  75. package/lib-prod/global-state/taon-transaction-registry/index.js +11 -10
  76. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.abstract.context.js +20 -21
  77. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.constants.js +4 -7
  78. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.controller.js +34 -39
  79. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.entity.js +34 -54
  80. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.middleware.js +10 -20
  81. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.models.js +7 -10
  82. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.provider.js +10 -20
  83. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.repository.js +29 -34
  84. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.subscriber.js +20 -27
  85. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.utils.js +4 -5
  86. package/lib-prod/helpers/class-helpers.js +210 -177
  87. package/lib-prod/helpers/clone-obj.js +16 -20
  88. package/lib-prod/helpers/taon-helpers.js +132 -114
  89. package/lib-prod/index._auto-generated_.js +5 -0
  90. package/lib-prod/index.js +248 -227
  91. package/lib-prod/inject.js +88 -33
  92. package/lib-prod/migrations/index.js +2 -1
  93. package/lib-prod/migrations/migrations_index._auto-generated_.js +3 -0
  94. package/lib-prod/models.js +72 -103
  95. package/lib-prod/orm/columns.js +58 -118
  96. package/lib-prod/orm/index.js +56 -1
  97. package/lib-prod/package.json +1 -1
  98. package/lib-prod/realtime/realtime-client.js +188 -186
  99. package/lib-prod/realtime/realtime-core.js +77 -78
  100. package/lib-prod/realtime/realtime-server.js +225 -240
  101. package/lib-prod/realtime/realtime-strategy/index.js +4 -4
  102. package/lib-prod/realtime/realtime-strategy/realtime-strategy-ipc.js +273 -219
  103. package/lib-prod/realtime/realtime-strategy/realtime-strategy-mock.js +267 -240
  104. package/lib-prod/realtime/realtime-strategy/realtime-strategy-socket-io.js +26 -20
  105. package/lib-prod/realtime/realtime-strategy/realtime-strategy.js +10 -13
  106. package/lib-prod/realtime/realtime-subs-manager.js +82 -90
  107. package/lib-prod/realtime/realtime.models.js +2 -0
  108. package/lib-prod/symbols.js +104 -105
  109. package/lib-prod/ui/index.js +1 -5
  110. package/lib-prod/ui/taon-admin-mode-configuration/index.js +1 -5
  111. package/lib-prod/validators.js +43 -37
  112. package/lib-prod.split-namespaces.json +32 -86
  113. package/package.json +1 -1
  114. package/websql/package.json +1 -1
  115. package/websql-prod/package.json +1 -1
@@ -1,195 +1,228 @@
1
- import * as FormData from "form-data";
2
- import { ___NS__isArray, ___NS__isArrayBuffer, ___NS__isBuffer, ___NS__isDate, ___NS__isFunction, ___NS__isNull, ___NS__isObject, ___NS__isRegExp, ___NS__isString, ___NS__isUndefined, ___NS__uniq, Utils__NS__uniqArray } from "tnp-core/lib-prod";
3
- import { CLASS } from "typescript-class-helpers/lib-prod";
4
- import {
5
- controllerConfigFrom
6
- } from "../config/controller-config";
7
- import { Symbols__NS__classNameStaticProperty, Symbols__NS__fullClassNameStaticProperty, Symbols__NS__metadata, Symbols__NS__orignalClass } from "../symbols";
8
- import { Validators__NS__classNameVlidation } from "../validators";
9
- const ClassHelpers__NS__getClassFnFromObject = (json) => {
10
- if (___NS__isUndefined(json) || ___NS__isNull(json)) {
11
- return;
12
- }
13
- if (json.constructor) {
14
- return json.constructor;
15
- }
16
- const p = Object.getPrototypeOf(json);
17
- return p && p.constructor && p.constructor.name !== "Object" ? p.constructor : void 0;
1
+ //#region imports
2
+ import * as FormData from 'form-data'; // @backend
3
+ import { ___NS__isArray, ___NS__isArrayBuffer, ___NS__isBuffer, ___NS__isDate, ___NS__isFunction, ___NS__isNull, ___NS__isObject, ___NS__isRegExp, ___NS__isString, ___NS__isUndefined, ___NS__uniq, Utils__NS__uniqArray } from 'tnp-core/lib-prod';
4
+ import { CLASS } from 'typescript-class-helpers/lib-prod';
5
+ import { controllerConfigFrom, } from '../config/controller-config';
6
+ import { Symbols__NS__classNameStaticProperty, Symbols__NS__fullClassNameStaticProperty, Symbols__NS__metadata, Symbols__NS__orignalClass } from '../symbols';
7
+ import { Validators__NS__classNameVlidation } from '../validators';
8
+ //#endregion
9
+ //namespace ClassHelpers
10
+ //#region get class from name
11
+ /**
12
+ * TODO - repalce in every place when getting class fn from object
13
+ */
14
+ export const ClassHelpers__NS__getClassFnFromObject = (json) => {
15
+ if (___NS__isUndefined(json) || ___NS__isNull(json)) {
16
+ return;
17
+ }
18
+ if (json.constructor) {
19
+ return json.constructor;
20
+ }
21
+ const p = Object.getPrototypeOf(json);
22
+ return p && p.constructor && p.constructor.name !== 'Object'
23
+ ? p.constructor
24
+ : void 0;
18
25
  };
19
- const ClassHelpers__NS__getName = (classFnOrObject) => {
20
- if (classFnOrObject instanceof FormData) {
21
- return "FormData";
22
- }
23
- if (!classFnOrObject) {
24
- console.error("OBJECT OR CLASS", classFnOrObject);
25
- throw new Error(`Cannot get name from this object or class.`);
26
- }
27
- return (classFnOrObject[Symbols__NS__classNameStaticProperty] ? classFnOrObject[Symbols__NS__classNameStaticProperty] : classFnOrObject?.constructor[Symbols__NS__classNameStaticProperty]) || (___NS__isFunction(classFnOrObject) ? CLASS.getName(classFnOrObject) : void 0);
26
+ //#endregion
27
+ //#region get name
28
+ export const ClassHelpers__NS__getName = (classFnOrObject) => {
29
+ // exception for FormData
30
+ if (classFnOrObject instanceof FormData) {
31
+ return 'FormData';
32
+ }
33
+ if (!classFnOrObject) {
34
+ console.error('OBJECT OR CLASS', classFnOrObject);
35
+ throw new Error(`Cannot get name from this object or class.`);
36
+ }
37
+ return ((classFnOrObject[Symbols__NS__classNameStaticProperty]
38
+ ? classFnOrObject[Symbols__NS__classNameStaticProperty]
39
+ : classFnOrObject?.constructor[Symbols__NS__classNameStaticProperty]) ||
40
+ (___NS__isFunction(classFnOrObject) ? CLASS.getName(classFnOrObject) : void 0));
28
41
  };
29
- const ClassHelpers__NS__getOrginalClass = (classFnOrObject) => {
30
- const org = classFnOrObject[Symbols__NS__orignalClass];
31
- if (!org) {
32
- return classFnOrObject;
33
- }
34
- return ClassHelpers__NS__getOrginalClass(org);
42
+ //#endregion
43
+ export const ClassHelpers__NS__getOrginalClass = (classFnOrObject) => {
44
+ const org = classFnOrObject[Symbols__NS__orignalClass];
45
+ if (!org) {
46
+ return classFnOrObject;
47
+ }
48
+ return ClassHelpers__NS__getOrginalClass(org);
35
49
  };
36
- const ClassHelpers__NS__getFullInternalName = (classFnOrObject) => {
37
- if (!classFnOrObject) {
38
- throw new Error(`Cannot get name from: ${classFnOrObject}`);
39
- }
40
- return (classFnOrObject[Symbols__NS__fullClassNameStaticProperty] ? classFnOrObject[Symbols__NS__fullClassNameStaticProperty] : classFnOrObject?.constructor[Symbols__NS__fullClassNameStaticProperty]) || void 0;
50
+ //#region get full internal name
51
+ export const ClassHelpers__NS__getFullInternalName = (classFnOrObject) => {
52
+ // exception for FormData
53
+ if (!classFnOrObject) {
54
+ throw new Error(`Cannot get name from: ${classFnOrObject}`);
55
+ }
56
+ return ((classFnOrObject[Symbols__NS__fullClassNameStaticProperty]
57
+ ? classFnOrObject[Symbols__NS__fullClassNameStaticProperty]
58
+ : classFnOrObject?.constructor[Symbols__NS__fullClassNameStaticProperty]) ||
59
+ void 0);
41
60
  };
42
- const ClassHelpers__NS__getUniqueKey = (classFnOrObject) => {
43
- const classFn = ___NS__isFunction(classFnOrObject) ? classFnOrObject : classFnOrObject.constructor;
44
- const config = Reflect.getMetadata(
45
- Symbols__NS__metadata.options.entity,
46
- classFn
47
- );
48
- return config.uniqueKeyProp;
61
+ //#endregion
62
+ //#region get unique key
63
+ export const ClassHelpers__NS__getUniqueKey = (classFnOrObject) => {
64
+ const classFn = ___NS__isFunction(classFnOrObject)
65
+ ? classFnOrObject
66
+ : classFnOrObject.constructor;
67
+ const config = Reflect.getMetadata(Symbols__NS__metadata.options.entity, classFn);
68
+ return config.uniqueKeyProp;
49
69
  };
50
- const ClassHelpers__NS__isContextClassObject = (obj) => {
51
- if (!___NS__isObject(obj) || ___NS__isArray(obj) || ___NS__isRegExp(obj) || ___NS__isBuffer(obj) || ___NS__isArrayBuffer(obj)) {
52
- return false;
53
- }
54
- if (___NS__isDate(obj)) {
55
- return true;
56
- }
57
- const className = ClassHelpers__NS__getName(obj);
58
- return ___NS__isString(className) && className !== "Object";
70
+ //#endregion
71
+ //#region is class object
72
+ export const ClassHelpers__NS__isContextClassObject = (obj) => {
73
+ if (!___NS__isObject(obj) ||
74
+ ___NS__isArray(obj) ||
75
+ ___NS__isRegExp(obj) ||
76
+ ___NS__isBuffer(obj) ||
77
+ ___NS__isArrayBuffer(obj)) {
78
+ return false;
79
+ }
80
+ if (___NS__isDate(obj)) {
81
+ return true;
82
+ }
83
+ const className = ClassHelpers__NS__getName(obj);
84
+ return ___NS__isString(className) && className !== 'Object';
59
85
  };
60
- const ClassHelpers__NS__setName = (target, className) => {
61
- Validators__NS__classNameVlidation(className, target);
62
- target[Symbols__NS__classNameStaticProperty] = className;
86
+ //#endregion
87
+ //#region get name
88
+ export const ClassHelpers__NS__setName = (target, className) => {
89
+ // console.log('setName', className, target.name)
90
+ Validators__NS__classNameVlidation(className, target);
91
+ target[Symbols__NS__classNameStaticProperty] = className;
63
92
  };
64
- const ClassHelpers__NS__hasParentClassWithName = (target, className, targets = []) => {
65
- if (!target) {
66
- return false;
67
- }
68
- targets.push(target);
69
- let targetProto = Object.getPrototypeOf(target);
70
- if (___NS__isFunction(targetProto) && ClassHelpers__NS__getName(targetProto) === className) {
71
- return true;
72
- }
73
- return ClassHelpers__NS__hasParentClassWithName(targetProto, className, targets);
93
+ //#endregion
94
+ //#region has parent with class name
95
+ export const ClassHelpers__NS__hasParentClassWithName = (target, className, targets = []) => {
96
+ if (!target) {
97
+ return false;
98
+ }
99
+ targets.push(target);
100
+ let targetProto = Object.getPrototypeOf(target);
101
+ if (___NS__isFunction(targetProto) &&
102
+ ClassHelpers__NS__getName(targetProto) === className) {
103
+ // console.log(`true "${___NS__first(targets).name}" for ${targets.map(d => d.name).join(',')}`)
104
+ return true;
105
+ }
106
+ return ClassHelpers__NS__hasParentClassWithName(targetProto, className, targets);
74
107
  };
108
+ //#endregion
109
+ //#region get methods name
110
+ //#region not allowed as method name
75
111
  const notAllowedAsMethodName = [
76
- "length",
77
- "name",
78
- "arguments",
79
- "caller",
80
- "constructor",
81
- "apply",
82
- "bind",
83
- "call",
84
- "toString",
85
- "__defineGetter__",
86
- "__defineSetter__",
87
- "hasOwnProperty",
88
- "__lookupGetter__",
89
- "__lookupSetter__",
90
- "isPrototypeOf",
91
- "propertyIsEnumerable",
92
- "valueOf",
93
- "__proto__",
94
- "toLocaleString"
112
+ 'length',
113
+ 'name',
114
+ 'arguments',
115
+ 'caller',
116
+ 'constructor',
117
+ 'apply',
118
+ 'bind',
119
+ 'call',
120
+ 'toString',
121
+ '__defineGetter__',
122
+ '__defineSetter__',
123
+ 'hasOwnProperty',
124
+ '__lookupGetter__',
125
+ '__lookupSetter__',
126
+ 'isPrototypeOf',
127
+ 'propertyIsEnumerable',
128
+ 'valueOf',
129
+ '__proto__',
130
+ 'toLocaleString',
95
131
  ];
96
- const ClassHelpers__NS__asyncHandler = (fn) => (req, res, next) => {
97
- Promise.resolve(fn(req, res, next)).catch(next);
132
+ //#endregion
133
+ /**
134
+ * Express async handler for middleware functions.
135
+ */
136
+ export const ClassHelpers__NS__asyncHandler = fn => (req, res, next) => {
137
+ Promise.resolve(fn(req, res, next)).catch(next);
98
138
  };
99
- const ClassHelpers__NS__getMethodsNames = (classOrClassInstance, allMethodsNames = []) => {
100
- if (!classOrClassInstance) {
101
- return Utils__NS__uniqArray(allMethodsNames);
102
- }
103
- const isClassFunction = ___NS__isFunction(classOrClassInstance);
104
- const classFun = isClassFunction ? classOrClassInstance : Object.getPrototypeOf(classOrClassInstance);
105
- const objectToCheck = isClassFunction ? classOrClassInstance?.prototype : classOrClassInstance;
106
- const prototypeObj = Object.getPrototypeOf(objectToCheck || {});
107
- const properties = ___NS__uniq([
108
- ...Object.getOwnPropertyNames(objectToCheck || {}),
109
- ...Object.getOwnPropertyNames(prototypeObj || {}),
110
- ...Object.keys(objectToCheck || {}),
111
- ...Object.keys(prototypeObj || {})
112
- ]).filter((f) => !!f && !notAllowedAsMethodName.includes(f));
113
- properties.filter((methodName) => typeof objectToCheck[methodName] === "function").forEach((p) => allMethodsNames.push(p));
114
- if (!classFun || !classFun.constructor || classFun?.constructor?.name === "Object") {
115
- return Utils__NS__uniqArray(allMethodsNames);
116
- }
117
- return ClassHelpers__NS__getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);
139
+ export const ClassHelpers__NS__getMethodsNames = (classOrClassInstance, allMethodsNames = []) => {
140
+ if (!classOrClassInstance) {
141
+ return Utils__NS__uniqArray(allMethodsNames);
142
+ }
143
+ const isClassFunction = ___NS__isFunction(classOrClassInstance);
144
+ const classFun = isClassFunction
145
+ ? classOrClassInstance
146
+ : Object.getPrototypeOf(classOrClassInstance);
147
+ const objectToCheck = isClassFunction
148
+ ? classOrClassInstance?.prototype
149
+ : classOrClassInstance;
150
+ const prototypeObj = Object.getPrototypeOf(objectToCheck || {});
151
+ const properties = ___NS__uniq([
152
+ ...Object.getOwnPropertyNames(objectToCheck || {}),
153
+ ...Object.getOwnPropertyNames(prototypeObj || {}),
154
+ ...Object.keys(objectToCheck || {}),
155
+ ...Object.keys(prototypeObj || {}),
156
+ ]).filter(f => !!f && !notAllowedAsMethodName.includes(f));
157
+ properties
158
+ .filter(methodName => typeof objectToCheck[methodName] === 'function')
159
+ .forEach(p => allMethodsNames.push(p));
160
+ if (!classFun ||
161
+ !classFun.constructor ||
162
+ classFun?.constructor?.name === 'Object') {
163
+ return Utils__NS__uniqArray(allMethodsNames);
164
+ }
165
+ return ClassHelpers__NS__getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);
118
166
  };
119
- const ClassHelpers__NS__getControllerConfigs = (target, configs = [], callerTarget) => {
120
- if (!___NS__isFunction(target)) {
121
- throw `[typescript-class-helper][getControllerConfigs] Cannot get class config from: ${target}`;
122
- }
123
- let config;
124
- const parentClass = Object.getPrototypeOf(target);
125
- const parentName = parentClass ? ClassHelpers__NS__getName(parentClass) : void 0;
126
- const isValidParent = ___NS__isFunction(parentClass) && parentName !== "";
127
- config = controllerConfigFrom(ClassHelpers__NS__getClassConfig(target));
128
- configs.push(config);
129
- return isValidParent ? ClassHelpers__NS__getControllerConfigs(parentClass, configs, target) : configs;
167
+ //#endregion
168
+ //#region get controller configs
169
+ export const ClassHelpers__NS__getControllerConfigs = (target, configs = [], callerTarget) => {
170
+ if (!___NS__isFunction(target)) {
171
+ throw `[typescript-class-helper][getControllerConfigs] Cannot get class config from: ${target}`;
172
+ }
173
+ let config;
174
+ const parentClass = Object.getPrototypeOf(target);
175
+ const parentName = parentClass ? ClassHelpers__NS__getName(parentClass) : void 0;
176
+ const isValidParent = ___NS__isFunction(parentClass) && parentName !== '';
177
+ config = controllerConfigFrom(ClassHelpers__NS__getClassConfig(target));
178
+ configs.push(config);
179
+ return isValidParent
180
+ ? ClassHelpers__NS__getControllerConfigs(parentClass, configs, target)
181
+ : configs;
130
182
  };
131
- const ClassHelpers__NS__ensureClassConfig = (target) => {
132
- let cfg = Reflect.getOwnMetadata(
133
- Symbols__NS__metadata.options.controller,
134
- // META_KEYS.class,
135
- target
136
- );
137
- if (!cfg) {
138
- cfg = { methods: {} };
139
- const parent = Object.getPrototypeOf(target);
140
- if (parent && parent !== Function.prototype) {
141
- const parentCfg = Reflect.getMetadata(
142
- Symbols__NS__metadata.options.controller,
143
- // META_KEYS.class,
144
- parent
145
- );
146
- if (parentCfg) {
147
- const clonedMethods = {};
148
- for (const [k, v] of Object.entries(parentCfg.methods)) {
149
- clonedMethods[k] = {
150
- ...v,
151
- parameters: { ...v.parameters }
152
- // shallow clone parameters too
153
- };
183
+ //#endregion
184
+ //#region ensure configs
185
+ // Ensure ClassConfig on constructor, clone parent if needed
186
+ export const ClassHelpers__NS__ensureClassConfig = (target) => {
187
+ let cfg = Reflect.getOwnMetadata(Symbols__NS__metadata.options.controller, // META_KEYS.class,
188
+ target);
189
+ if (!cfg) {
190
+ cfg = { methods: {} };
191
+ const parent = Object.getPrototypeOf(target);
192
+ if (parent && parent !== Function.prototype) {
193
+ const parentCfg = Reflect.getMetadata(Symbols__NS__metadata.options.controller, // META_KEYS.class,
194
+ parent);
195
+ if (parentCfg) {
196
+ // Deep copy each method config so child gets its own objects
197
+ const clonedMethods = {};
198
+ for (const [k, v] of Object.entries(parentCfg.methods)) {
199
+ clonedMethods[k] = {
200
+ ...v,
201
+ parameters: { ...v.parameters }, // shallow clone parameters too
202
+ };
203
+ }
204
+ cfg = {
205
+ ...parentCfg,
206
+ methods: clonedMethods,
207
+ };
208
+ }
154
209
  }
155
- cfg = {
156
- ...parentCfg,
157
- methods: clonedMethods
158
- };
159
- }
210
+ Reflect.defineMetadata(Symbols__NS__metadata.options.controller, cfg, target);
160
211
  }
161
- Reflect.defineMetadata(Symbols__NS__metadata.options.controller, cfg, target);
162
- }
163
- return cfg;
164
- };
165
- const ClassHelpers__NS__ensureMethodConfig = (target, propertyKey) => {
166
- const classCfg = ClassHelpers__NS__ensureClassConfig(target.constructor);
167
- let methodCfg = classCfg.methods[propertyKey?.toString()];
168
- if (!methodCfg) {
169
- methodCfg = { methodName: propertyKey?.toString(), parameters: {} };
170
- classCfg.methods[propertyKey?.toString()] = methodCfg;
171
- }
172
- return methodCfg;
212
+ return cfg;
173
213
  };
174
- const ClassHelpers__NS__getClassConfig = (constructor) => {
175
- return Reflect.getMetadata(
176
- Symbols__NS__metadata.options.controller,
177
- constructor
178
- );
214
+ // Ensure MethodConfig inside ClassConfig
215
+ export const ClassHelpers__NS__ensureMethodConfig = (target, propertyKey) => {
216
+ const classCfg = ClassHelpers__NS__ensureClassConfig(target.constructor);
217
+ let methodCfg = classCfg.methods[propertyKey?.toString()];
218
+ if (!methodCfg) {
219
+ methodCfg = { methodName: propertyKey?.toString(), parameters: {} };
220
+ classCfg.methods[propertyKey?.toString()] = methodCfg;
221
+ }
222
+ return methodCfg;
179
223
  };
180
- export {
181
- ClassHelpers__NS__asyncHandler,
182
- ClassHelpers__NS__ensureClassConfig,
183
- ClassHelpers__NS__ensureMethodConfig,
184
- ClassHelpers__NS__getClassConfig,
185
- ClassHelpers__NS__getClassFnFromObject,
186
- ClassHelpers__NS__getControllerConfigs,
187
- ClassHelpers__NS__getFullInternalName,
188
- ClassHelpers__NS__getMethodsNames,
189
- ClassHelpers__NS__getName,
190
- ClassHelpers__NS__getOrginalClass,
191
- ClassHelpers__NS__getUniqueKey,
192
- ClassHelpers__NS__hasParentClassWithName,
193
- ClassHelpers__NS__isContextClassObject,
194
- ClassHelpers__NS__setName
224
+ export const ClassHelpers__NS__getClassConfig = (constructor) => {
225
+ return Reflect.getMetadata(Symbols__NS__metadata.options.controller, constructor);
195
226
  };
227
+ //#endregion
228
+ //end of namespace ClassHelpers
@@ -1,21 +1,17 @@
1
- import { walk } from "lodash-walk-object/lib-prod";
2
- import { ___NS__cloneDeep, ___NS__isFunction, ___NS__isNil, ___NS__isObject, ___NS__merge, ___NS__set } from "tnp-core/lib-prod";
3
- const cloneObj = (override, classFn) => {
4
- const result = ___NS__merge(new classFn(), ___NS__cloneDeep(void 0));
5
- walk.Object(
6
- override || {},
7
- (value, lodashPath) => {
8
- if (___NS__isNil(value) || ___NS__isFunction(value) || ___NS__isObject(value)) {
9
- } else {
10
- ___NS__set(result, lodashPath, value);
11
- }
12
- },
13
- {
14
- walkGetters: false
15
- }
16
- );
17
- return result;
18
- };
19
- export {
20
- cloneObj
1
+ import { walk } from 'lodash-walk-object/lib-prod';
2
+ import { ___NS__cloneDeep, ___NS__isFunction, ___NS__isNil, ___NS__isObject, ___NS__merge, ___NS__set } from 'tnp-core/lib-prod';
3
+ export const cloneObj = (override, classFn) => {
4
+ const result = ___NS__merge(new classFn(), ___NS__cloneDeep(this));
5
+ walk.Object(override || {}, (value, lodashPath) => {
6
+ if (___NS__isNil(value) || ___NS__isFunction(value) || ___NS__isObject(value)) {
7
+ // skipping
8
+ }
9
+ else {
10
+ ___NS__set(result, lodashPath, value);
11
+ }
12
+ }, {
13
+ walkGetters: false,
14
+ });
15
+ // console.log({result})
16
+ return result;
21
17
  };