@adaas/a-utils 0.3.5 → 0.3.7
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/.conf/tsconfig.browser.json +4 -1
- package/.conf/tsconfig.node.json +5 -2
- package/dist/browser/a-service.mjs +12 -12
- package/dist/browser/a-service.mjs.map +1 -1
- package/dist/browser/a-signal.d.mts +51 -30
- package/dist/browser/a-signal.mjs +100 -65
- package/dist/browser/a-signal.mjs.map +1 -1
- package/dist/browser/chunk-S2RSPZXR.mjs +143 -0
- package/dist/browser/chunk-S2RSPZXR.mjs.map +1 -0
- package/dist/browser/helpers.d.mts +56 -0
- package/dist/browser/helpers.mjs +5 -0
- package/dist/browser/helpers.mjs.map +1 -0
- package/dist/node/{A-Signal.types-P5VKMKMs.d.mts → A-Signal.types-DxQHmPm6.d.mts} +23 -27
- package/dist/node/{A-Signal.types-P5VKMKMs.d.ts → A-Signal.types-DxQHmPm6.d.ts} +23 -27
- package/dist/node/helpers/A-Utils.helper.d.mts +56 -0
- package/dist/node/helpers/A-Utils.helper.d.ts +56 -0
- package/dist/node/helpers/A-Utils.helper.js +153 -0
- package/dist/node/helpers/A-Utils.helper.js.map +1 -0
- package/dist/node/helpers/A-Utils.helper.mjs +143 -0
- package/dist/node/helpers/A-Utils.helper.mjs.map +1 -0
- package/dist/node/helpers/index.d.mts +3 -0
- package/dist/node/helpers/index.d.ts +3 -0
- package/dist/node/helpers/index.js +12 -0
- package/dist/node/helpers/index.js.map +1 -0
- package/dist/node/helpers/index.mjs +4 -0
- package/dist/node/helpers/index.mjs.map +1 -0
- package/dist/node/lib/A-Service/A-Service.container.js +12 -12
- package/dist/node/lib/A-Service/A-Service.container.js.map +1 -1
- package/dist/node/lib/A-Service/A-Service.container.mjs +12 -12
- package/dist/node/lib/A-Service/A-Service.container.mjs.map +1 -1
- package/dist/node/lib/A-Signal/A-Signal.types.d.mts +1 -1
- package/dist/node/lib/A-Signal/A-Signal.types.d.ts +1 -1
- package/dist/node/lib/A-Signal/components/A-SignalBus.component.d.mts +1 -1
- package/dist/node/lib/A-Signal/components/A-SignalBus.component.d.ts +1 -1
- package/dist/node/lib/A-Signal/context/A-SignalConfig.context.d.mts +1 -1
- package/dist/node/lib/A-Signal/context/A-SignalConfig.context.d.ts +1 -1
- package/dist/node/lib/A-Signal/context/A-SignalState.context.d.mts +1 -1
- package/dist/node/lib/A-Signal/context/A-SignalState.context.d.ts +1 -1
- package/dist/node/lib/A-Signal/entities/A-Signal.entity.d.mts +1 -1
- package/dist/node/lib/A-Signal/entities/A-Signal.entity.d.ts +1 -1
- package/dist/node/lib/A-Signal/entities/A-Signal.entity.js +35 -59
- package/dist/node/lib/A-Signal/entities/A-Signal.entity.js.map +1 -1
- package/dist/node/lib/A-Signal/entities/A-Signal.entity.mjs +35 -59
- package/dist/node/lib/A-Signal/entities/A-Signal.entity.mjs.map +1 -1
- package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.d.mts +29 -4
- package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.d.ts +29 -4
- package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.js +64 -5
- package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.js.map +1 -1
- package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.mjs +65 -6
- package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.mjs.map +1 -1
- package/dist/node/lib/A-Signal/index.d.mts +1 -1
- package/dist/node/lib/A-Signal/index.d.ts +1 -1
- package/jest.config.ts +3 -1
- package/package.json +19 -3
- package/src/helpers/A-Utils.helper.ts +186 -0
- package/src/helpers/index.ts +1 -0
- package/src/lib/A-Service/A-Service.container.ts +12 -12
- package/src/lib/A-Signal/A-Signal.types.ts +2 -2
- package/src/lib/A-Signal/entities/A-Signal.entity.ts +44 -84
- package/src/lib/A-Signal/entities/A-SignalVector.entity.ts +80 -11
- package/tests/A-Signal.test.ts +16 -12
- package/tsconfig.json +4 -1
- package/tsup.config.ts +2 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A_Entity, A_TYPES__Entity_Constructor } from '@adaas/a-concept';
|
|
2
|
-
import { A as A_Signal, d as A_SignalVector_Init, h as A_Signal_TSignalsConstructors, e as A_SignalVector_Serialized, c as A_SignalTValueArray } from '../../../A-Signal.types-
|
|
2
|
+
import { A as A_Signal, d as A_SignalVector_Init, h as A_Signal_TSignalsConstructors, e as A_SignalVector_Serialized, c as A_SignalTValueArray } from '../../../A-Signal.types-DxQHmPm6.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* A Signal Vector Entity is a collection of signals structured in a specific way.
|
|
@@ -46,14 +46,39 @@ declare class A_SignalVector<TSignals extends A_Signal[] = A_Signal[]> extends A
|
|
|
46
46
|
* @returns
|
|
47
47
|
*/
|
|
48
48
|
[Symbol.iterator](): Iterator<TSignals[number]>;
|
|
49
|
+
/**
|
|
50
|
+
* Checks that 2 vectors are identical by types and data
|
|
51
|
+
*
|
|
52
|
+
* e.g. [UserSignInSignal, UserStatusSignal] is equal to [UserSignInSignal, UserStatusSignal] with the same data,
|
|
53
|
+
* but not equal to [UserStatusSignal, UserSignInSignal] or [UserSignInSignal, UserStatusSignal] with different data.
|
|
54
|
+
*
|
|
55
|
+
* @param other
|
|
56
|
+
* @returns
|
|
57
|
+
*/
|
|
58
|
+
equals(other: A_SignalVector<TSignals>): boolean;
|
|
49
59
|
/**
|
|
50
60
|
* Allows to match the current Signal Vector with another Signal Vector by comparing each signal in the structure.
|
|
51
|
-
* This method returns true if all signals in the vector match the corresponding signals in
|
|
61
|
+
* This method returns true if all signals in the vector A match the corresponding signals in vector B, and false otherwise.
|
|
62
|
+
*
|
|
63
|
+
*
|
|
64
|
+
* e.g. [UserSignInSignal, UserStatusSignal] matches [UserStatusSignal, UserSignInSignal] with the same data,
|
|
65
|
+
*
|
|
66
|
+
* but not matches [UserSignInSignal, UserStatusSignal] with different data or [UserSignInSignal] or [UserSignInSignal, UserStatusSignal, UserActivitySignal].
|
|
67
|
+
*
|
|
52
68
|
*
|
|
53
69
|
* @param other
|
|
54
70
|
* @returns
|
|
55
71
|
*/
|
|
56
72
|
match(other: A_SignalVector<TSignals>): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Checks if the current Signal Vector includes all signals from another Signal Vector, regardless of order.
|
|
75
|
+
*
|
|
76
|
+
* e.g. [UserSignInSignal, UserStatusSignal] includes [UserStatusSignal] with the same data,
|
|
77
|
+
* but not includes [UserStatusSignal] with different data or [UserActivitySignal].
|
|
78
|
+
*
|
|
79
|
+
* @param other
|
|
80
|
+
*/
|
|
81
|
+
includes(other: A_SignalVector<TSignals>): boolean;
|
|
57
82
|
/**
|
|
58
83
|
* This method should ensure that the current Signal Vector contains all signals from the provided Signal Vector.
|
|
59
84
|
*
|
|
@@ -81,7 +106,7 @@ declare class A_SignalVector<TSignals extends A_Signal[] = A_Signal[]> extends A
|
|
|
81
106
|
* @param structure - Optional structure to override the default ordering
|
|
82
107
|
* @returns Array of signal instances in the specified order
|
|
83
108
|
*/
|
|
84
|
-
toVector<T extends Array<A_Signal> = TSignals>(structure?: A_Signal_TSignalsConstructors<T>):
|
|
109
|
+
toVector<T extends Array<A_Signal> = TSignals>(structure?: A_Signal_TSignalsConstructors<T>): T;
|
|
85
110
|
/**
|
|
86
111
|
* Converts to Array of data of signals in the vector
|
|
87
112
|
* Maintains the order specified in the structure/generic type
|
|
@@ -89,7 +114,7 @@ declare class A_SignalVector<TSignals extends A_Signal[] = A_Signal[]> extends A
|
|
|
89
114
|
* @param structure - Optional structure to override the default ordering
|
|
90
115
|
* @returns Array of serialized signal data in the specified order
|
|
91
116
|
*/
|
|
92
|
-
toDataVector<T extends A_Signal[] = TSignals>(structure?: A_Signal_TSignalsConstructors<T>):
|
|
117
|
+
toDataVector<T extends A_Signal[] = TSignals>(structure?: A_Signal_TSignalsConstructors<T>): A_SignalTValueArray<T>;
|
|
93
118
|
/**
|
|
94
119
|
* Converts to Object with signal constructor names as keys and their corresponding data values
|
|
95
120
|
* Uses the structure ordering to ensure consistent key ordering
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A_Entity, A_TYPES__Entity_Constructor } from '@adaas/a-concept';
|
|
2
|
-
import { A as A_Signal, d as A_SignalVector_Init, h as A_Signal_TSignalsConstructors, e as A_SignalVector_Serialized, c as A_SignalTValueArray } from '../../../A-Signal.types-
|
|
2
|
+
import { A as A_Signal, d as A_SignalVector_Init, h as A_Signal_TSignalsConstructors, e as A_SignalVector_Serialized, c as A_SignalTValueArray } from '../../../A-Signal.types-DxQHmPm6.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* A Signal Vector Entity is a collection of signals structured in a specific way.
|
|
@@ -46,14 +46,39 @@ declare class A_SignalVector<TSignals extends A_Signal[] = A_Signal[]> extends A
|
|
|
46
46
|
* @returns
|
|
47
47
|
*/
|
|
48
48
|
[Symbol.iterator](): Iterator<TSignals[number]>;
|
|
49
|
+
/**
|
|
50
|
+
* Checks that 2 vectors are identical by types and data
|
|
51
|
+
*
|
|
52
|
+
* e.g. [UserSignInSignal, UserStatusSignal] is equal to [UserSignInSignal, UserStatusSignal] with the same data,
|
|
53
|
+
* but not equal to [UserStatusSignal, UserSignInSignal] or [UserSignInSignal, UserStatusSignal] with different data.
|
|
54
|
+
*
|
|
55
|
+
* @param other
|
|
56
|
+
* @returns
|
|
57
|
+
*/
|
|
58
|
+
equals(other: A_SignalVector<TSignals>): boolean;
|
|
49
59
|
/**
|
|
50
60
|
* Allows to match the current Signal Vector with another Signal Vector by comparing each signal in the structure.
|
|
51
|
-
* This method returns true if all signals in the vector match the corresponding signals in
|
|
61
|
+
* This method returns true if all signals in the vector A match the corresponding signals in vector B, and false otherwise.
|
|
62
|
+
*
|
|
63
|
+
*
|
|
64
|
+
* e.g. [UserSignInSignal, UserStatusSignal] matches [UserStatusSignal, UserSignInSignal] with the same data,
|
|
65
|
+
*
|
|
66
|
+
* but not matches [UserSignInSignal, UserStatusSignal] with different data or [UserSignInSignal] or [UserSignInSignal, UserStatusSignal, UserActivitySignal].
|
|
67
|
+
*
|
|
52
68
|
*
|
|
53
69
|
* @param other
|
|
54
70
|
* @returns
|
|
55
71
|
*/
|
|
56
72
|
match(other: A_SignalVector<TSignals>): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Checks if the current Signal Vector includes all signals from another Signal Vector, regardless of order.
|
|
75
|
+
*
|
|
76
|
+
* e.g. [UserSignInSignal, UserStatusSignal] includes [UserStatusSignal] with the same data,
|
|
77
|
+
* but not includes [UserStatusSignal] with different data or [UserActivitySignal].
|
|
78
|
+
*
|
|
79
|
+
* @param other
|
|
80
|
+
*/
|
|
81
|
+
includes(other: A_SignalVector<TSignals>): boolean;
|
|
57
82
|
/**
|
|
58
83
|
* This method should ensure that the current Signal Vector contains all signals from the provided Signal Vector.
|
|
59
84
|
*
|
|
@@ -81,7 +106,7 @@ declare class A_SignalVector<TSignals extends A_Signal[] = A_Signal[]> extends A
|
|
|
81
106
|
* @param structure - Optional structure to override the default ordering
|
|
82
107
|
* @returns Array of signal instances in the specified order
|
|
83
108
|
*/
|
|
84
|
-
toVector<T extends Array<A_Signal> = TSignals>(structure?: A_Signal_TSignalsConstructors<T>):
|
|
109
|
+
toVector<T extends Array<A_Signal> = TSignals>(structure?: A_Signal_TSignalsConstructors<T>): T;
|
|
85
110
|
/**
|
|
86
111
|
* Converts to Array of data of signals in the vector
|
|
87
112
|
* Maintains the order specified in the structure/generic type
|
|
@@ -89,7 +114,7 @@ declare class A_SignalVector<TSignals extends A_Signal[] = A_Signal[]> extends A
|
|
|
89
114
|
* @param structure - Optional structure to override the default ordering
|
|
90
115
|
* @returns Array of serialized signal data in the specified order
|
|
91
116
|
*/
|
|
92
|
-
toDataVector<T extends A_Signal[] = TSignals>(structure?: A_Signal_TSignalsConstructors<T>):
|
|
117
|
+
toDataVector<T extends A_Signal[] = TSignals>(structure?: A_Signal_TSignalsConstructors<T>): A_SignalTValueArray<T>;
|
|
93
118
|
/**
|
|
94
119
|
* Converts to Object with signal constructor names as keys and their corresponding data values
|
|
95
120
|
* Uses the structure ordering to ensure consistent key ordering
|
|
@@ -67,9 +67,51 @@ exports.A_SignalVector = class A_SignalVector extends aConcept.A_Entity {
|
|
|
67
67
|
}
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Checks that 2 vectors are identical by types and data
|
|
72
|
+
*
|
|
73
|
+
* e.g. [UserSignInSignal, UserStatusSignal] is equal to [UserSignInSignal, UserStatusSignal] with the same data,
|
|
74
|
+
* but not equal to [UserStatusSignal, UserSignInSignal] or [UserSignInSignal, UserStatusSignal] with different data.
|
|
75
|
+
*
|
|
76
|
+
* @param other
|
|
77
|
+
* @returns
|
|
78
|
+
*/
|
|
79
|
+
equals(other) {
|
|
80
|
+
if (this.structure.length !== other.structure.length) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
for (let i = 0; i < this.structure.length; i++) {
|
|
84
|
+
const thisSignalConstructor = this.structure[i];
|
|
85
|
+
const otherSignalConstructor = other.structure[i];
|
|
86
|
+
if (thisSignalConstructor !== otherSignalConstructor) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
const thisSignalIndex = this._signals.findIndex((s) => s.constructor === thisSignalConstructor);
|
|
90
|
+
const otherSignalIndex = other._signals.findIndex((s) => s.constructor === otherSignalConstructor);
|
|
91
|
+
if (thisSignalIndex !== otherSignalIndex) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
const thisSignal = thisSignalIndex !== -1 ? this._signals[thisSignalIndex] : void 0;
|
|
95
|
+
const otherSignal = otherSignalIndex !== -1 ? other._signals[otherSignalIndex] : void 0;
|
|
96
|
+
if (thisSignal && otherSignal) {
|
|
97
|
+
if (!thisSignal.compare(otherSignal)) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
} else if (thisSignal || otherSignal) {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
70
106
|
/**
|
|
71
107
|
* Allows to match the current Signal Vector with another Signal Vector by comparing each signal in the structure.
|
|
72
|
-
* This method returns true if all signals in the vector match the corresponding signals in
|
|
108
|
+
* This method returns true if all signals in the vector A match the corresponding signals in vector B, and false otherwise.
|
|
109
|
+
*
|
|
110
|
+
*
|
|
111
|
+
* e.g. [UserSignInSignal, UserStatusSignal] matches [UserStatusSignal, UserSignInSignal] with the same data,
|
|
112
|
+
*
|
|
113
|
+
* but not matches [UserSignInSignal, UserStatusSignal] with different data or [UserSignInSignal] or [UserSignInSignal, UserStatusSignal, UserActivitySignal].
|
|
114
|
+
*
|
|
73
115
|
*
|
|
74
116
|
* @param other
|
|
75
117
|
* @returns
|
|
@@ -98,6 +140,23 @@ exports.A_SignalVector = class A_SignalVector extends aConcept.A_Entity {
|
|
|
98
140
|
}
|
|
99
141
|
return true;
|
|
100
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Checks if the current Signal Vector includes all signals from another Signal Vector, regardless of order.
|
|
145
|
+
*
|
|
146
|
+
* e.g. [UserSignInSignal, UserStatusSignal] includes [UserStatusSignal] with the same data,
|
|
147
|
+
* but not includes [UserStatusSignal] with different data or [UserActivitySignal].
|
|
148
|
+
*
|
|
149
|
+
* @param other
|
|
150
|
+
*/
|
|
151
|
+
includes(other) {
|
|
152
|
+
for (const signalConstructor of other.structure) {
|
|
153
|
+
const signalIndex = this._signals.findIndex((s) => s.constructor === signalConstructor);
|
|
154
|
+
if (signalIndex === -1) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
101
160
|
/**
|
|
102
161
|
* This method should ensure that the current Signal Vector contains all signals from the provided Signal Vector.
|
|
103
162
|
*
|
|
@@ -114,7 +173,7 @@ exports.A_SignalVector = class A_SignalVector extends aConcept.A_Entity {
|
|
|
114
173
|
}
|
|
115
174
|
has(param1) {
|
|
116
175
|
let signalConstructor;
|
|
117
|
-
if (
|
|
176
|
+
if (aConcept.A_TypeGuards.isEntityInstance(param1)) {
|
|
118
177
|
signalConstructor = param1.constructor;
|
|
119
178
|
} else {
|
|
120
179
|
signalConstructor = param1;
|
|
@@ -141,7 +200,7 @@ exports.A_SignalVector = class A_SignalVector extends aConcept.A_Entity {
|
|
|
141
200
|
* @param structure - Optional structure to override the default ordering
|
|
142
201
|
* @returns Array of signal instances in the specified order
|
|
143
202
|
*/
|
|
144
|
-
|
|
203
|
+
toVector(structure) {
|
|
145
204
|
const usedStructure = structure || this.structure;
|
|
146
205
|
return usedStructure.map((signalConstructor) => {
|
|
147
206
|
const signalIndex = this._signals.findIndex((s) => s.constructor === signalConstructor);
|
|
@@ -155,14 +214,14 @@ exports.A_SignalVector = class A_SignalVector extends aConcept.A_Entity {
|
|
|
155
214
|
* @param structure - Optional structure to override the default ordering
|
|
156
215
|
* @returns Array of serialized signal data in the specified order
|
|
157
216
|
*/
|
|
158
|
-
|
|
217
|
+
toDataVector(structure) {
|
|
159
218
|
const usedStructure = structure || this.structure;
|
|
160
219
|
const results = [];
|
|
161
220
|
for (const signalConstructor of usedStructure) {
|
|
162
221
|
const signalIndex = this._signals.findIndex((s) => s.constructor === signalConstructor);
|
|
163
222
|
let data;
|
|
164
223
|
if (signalIndex === -1) {
|
|
165
|
-
data =
|
|
224
|
+
data = new signalConstructor();
|
|
166
225
|
} else {
|
|
167
226
|
const signal = this._signals[signalIndex];
|
|
168
227
|
data = signal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/A-Signal/entities/A-SignalVector.entity.ts"],"names":["A_SignalVector","A_Entity","A_Frame"],"mappings":"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","file":"A-SignalVector.entity.js","sourcesContent":["import { A_Entity, A_Scope, A_TYPES__Component_Constructor, A_TYPES__Entity_Constructor } from \"@adaas/a-concept\";\nimport { A_SignalVector_Serialized, A_SignalVector_Init, A_Signal_TSignalsConstructors, A_SignalTValue, A_SignalTValueArray } from \"../A-Signal.types\";\nimport { A_Signal } from \"./A-Signal.entity\";\nimport { A_Frame } from \"@adaas/a-frame\";\n\n\n/**\n * A Signal Vector Entity is a collection of signals structured in a specific way.\n * It allows grouping multiple signals together for batch processing or transmission.\n * \n * Signal Vectors are useful in scenarios where multiple related signals need to be handled together,\n * as a state of the system or a snapshot of various parameters at a given time.\n * \n * @template TSignalsConstructors - Array of signal constructor types (e.g., [typeof MySignal, typeof CustomSignal])\n * @template TSignals - Array of signal instances derived from constructors\n */\n@A_Frame.Entity({\n namespace: 'A-Utils',\n name: 'A-SignalVector',\n description: 'A Signal Vector Entity represents a collection of signals structured in a specific way, allowing for batch processing and transmission of related signals as a unified state representation.'\n})\nexport class A_SignalVector<\n TSignals extends A_Signal[] = A_Signal[],\n> extends A_Entity<A_SignalVector_Init<TSignals>> {\n\n /**\n * The structure of the signal vector, defining the types of signals it contains.\n * \n * For example:\n * [UserSignInSignal, UserStatusSignal, UserActivitySignal]\n * \n * [!] if not provided, it will be derived from the signals values.\n */\n protected _structure?: A_Signal_TSignalsConstructors<TSignals>;\n /**\n * It's actual vector Values of Signals like :\n * [UserActionSignal, UserMousePositionSignal, ExternalDependencySignal]\n */\n protected _signals!: TSignals\n\n constructor(values: TSignals, structure?: { [K in keyof TSignals]: TSignals[K] extends A_Signal ? A_TYPES__Entity_Constructor<TSignals[K]> : never })\n constructor(serialized: A_SignalVector_Serialized)\n constructor(param1: TSignals | A_SignalVector_Serialized, param2?: A_Signal_TSignalsConstructors<TSignals>) {\n\n if ('aseid' in param1) {\n // Handle serialized case\n super(param1 as A_SignalVector_Serialized);\n } else {\n // Handle init case \n super({\n structure: param2 ? param2 : (param1 as TSignals).map(s => s.constructor as A_TYPES__Entity_Constructor<TSignals[number]>) as A_Signal_TSignalsConstructors<TSignals>,\n values: param1 as TSignals\n } as A_SignalVector_Init<TSignals>);\n }\n }\n\n\n fromNew(newEntity: A_SignalVector_Init<TSignals>): void {\n super.fromNew(newEntity);\n this._structure = newEntity.structure;\n this._signals = newEntity.values;\n }\n\n /**\n * The structure of the signal vector, defining the types of signals it contains.\n * \n * For example:\n * [UserSignInSignal, UserStatusSignal, UserActivitySignal]\n * \n */\n get structure(): A_Signal_TSignalsConstructors<TSignals> {\n return this._structure || this._signals.map(s => s.constructor as A_TYPES__Entity_Constructor<TSignals[number]>) as A_Signal_TSignalsConstructors<TSignals>;\n }\n\n\n get length(): number {\n return this.structure.length;\n }\n\n\n /**\n * Enables iteration over the signals in the vector.\n * \n * @returns \n */\n [Symbol.iterator](): Iterator<TSignals[number]> {\n let pointer = 0;\n const signals = this.structure.map((signalConstructor) => {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n return signalIndex !== -1 ? this._signals[signalIndex] : undefined;\n }) as TSignals[number][];\n\n return {\n next(): IteratorResult<TSignals[number]> {\n if (pointer < signals.length) {\n return {\n done: false,\n value: signals[pointer++]\n };\n } else {\n return {\n done: true,\n value: undefined as any\n };\n }\n }\n };\n }\n\n\n /**\n * Allows to match the current Signal Vector with another Signal Vector by comparing each signal in the structure.\n * This method returns true if all signals in the vector match the corresponding signals in the other vector.\n * \n * @param other \n * @returns \n */\n match(other: A_SignalVector<TSignals>): boolean {\n if (this.length !== other.length) {\n return false;\n }\n\n for (let i = 0; i < this.length; i++) {\n const thisSignalConstructor = this.structure[i];\n const otherSignalConstructor = other.structure[i];\n\n if (thisSignalConstructor !== otherSignalConstructor) {\n return false;\n }\n\n const thisSignalIndex = this._signals.findIndex(s => s.constructor === thisSignalConstructor);\n const otherSignalIndex = other._signals.findIndex(s => s.constructor === otherSignalConstructor);\n\n const thisSignal = thisSignalIndex !== -1 ? this._signals[thisSignalIndex] : undefined;\n const otherSignal = otherSignalIndex !== -1 ? other._signals[otherSignalIndex] : undefined;\n\n if (thisSignal && otherSignal) {\n if (!thisSignal.compare(otherSignal)) {\n return false;\n }\n } else if (thisSignal || otherSignal) {\n return false;\n }\n }\n\n return true;\n }\n\n \n /**\n * This method should ensure that the current Signal Vector contains all signals from the provided Signal Vector.\n * \n * @param signal \n */\n contains(signal: A_SignalVector): boolean{\n for (const signalConstructor of signal.structure) {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n if (signalIndex === -1) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Checks if the vector contains a signal of the specified type.\n * \n * @param signal \n */\n has(signal: A_Signal): boolean\n has(signalConstructor: A_TYPES__Entity_Constructor<A_Signal>): boolean\n has(param1: A_Signal | A_TYPES__Entity_Constructor<A_Signal>): boolean {\n let signalConstructor: A_TYPES__Entity_Constructor<A_Signal>;\n if (param1 instanceof A_Entity) {\n signalConstructor = param1.constructor as A_TYPES__Entity_Constructor<A_Signal>;\n } else {\n signalConstructor = param1;\n }\n return this.structure.includes(signalConstructor as any);\n }\n\n /**\n * Retrieves the signal of the specified type from the vector.\n * \n * @param signal \n */\n get<T extends A_Signal>(signal: T): T | undefined\n get<T extends A_Signal>(signalConstructor: A_TYPES__Entity_Constructor<T>): T | undefined\n get<T extends A_Signal>(param1: T | A_TYPES__Entity_Constructor<T>): T | undefined {\n let signalConstructor: A_TYPES__Entity_Constructor<A_Signal>;\n\n if (param1 instanceof A_Entity) {\n signalConstructor = param1.constructor as A_TYPES__Entity_Constructor<A_Signal>;\n } else {\n signalConstructor = param1 as A_TYPES__Entity_Constructor<A_Signal>;\n }\n\n const index = this._signals.findIndex(s => s.constructor === signalConstructor);\n if (index === -1) {\n return undefined;\n }\n return this._signals[index] as T;\n }\n\n\n /**\n * Converts to Array of values of signals in the vector\n * Maintains the order specified in the structure/generic type\n * \n * @param structure - Optional structure to override the default ordering\n * @returns Array of signal instances in the specified order\n */\n async toVector<\n T extends Array<A_Signal> = TSignals,\n >(\n structure?: A_Signal_TSignalsConstructors<T>\n ): Promise<T> {\n const usedStructure = structure || this.structure;\n\n return usedStructure.map((signalConstructor) => {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n return signalIndex !== -1 ? this._signals[signalIndex] : undefined;\n }) as T;\n }\n\n\n /**\n * Converts to Array of data of signals in the vector\n * Maintains the order specified in the structure/generic type\n * \n * @param structure - Optional structure to override the default ordering\n * @returns Array of serialized signal data in the specified order\n */\n async toDataVector<\n T extends A_Signal[] = TSignals,\n >(\n structure?: A_Signal_TSignalsConstructors<T>\n ): Promise<A_SignalTValueArray<T>> {\n\n const usedStructure = structure || this.structure;\n\n const results: Array<any> = [];\n\n for (const signalConstructor of usedStructure) {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n let data: any;\n if (signalIndex === -1) {\n\n data = await (signalConstructor as typeof A_Signal).default()\n\n } else {\n const signal = this._signals[signalIndex];\n data = signal;\n }\n\n\n results.push(data?.toJSON().data);\n }\n\n return results as A_SignalTValueArray<T>;\n }\n\n /**\n * Converts to Object with signal constructor names as keys and their corresponding data values\n * Uses the structure ordering to ensure consistent key ordering\n * \n * @returns Object with signal constructor names as keys and signal data as values\n */\n async toObject<\n T extends Array<A_Signal> = TSignals,\n >(\n structure?: { [K in keyof T]: T[K] extends A_Signal ? A_TYPES__Entity_Constructor<T[K]> : never }\n ): Promise<{ [key: string]: T[number] extends A_Signal<infer D> ? D | undefined : never }> {\n\n const usedStructure = structure || this.structure;\n\n const obj: { [key: string]: T[number] extends A_Signal<infer D> ? D | undefined : never } = {};\n usedStructure.forEach((signalConstructor) => {\n const signalName = signalConstructor.name;\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n\n if (signalIndex !== -1) {\n const signal = this._signals[signalIndex];\n obj[signalName] = signal.toJSON().data as any;\n } else {\n obj[signalName] = undefined as any;\n }\n });\n\n return obj;\n }\n\n\n /**\n * Serializes the Signal Vector to a JSON-compatible format.\n * \n * \n * @returns \n */\n toJSON(): A_SignalVector_Serialized {\n return {\n ...super.toJSON(),\n structure: this.structure.map(s => s.name),\n values: this._signals.map(s => s.toJSON())\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/A-Signal/entities/A-SignalVector.entity.ts"],"names":["A_SignalVector","A_Entity","A_TypeGuards","A_Frame"],"mappings":"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","file":"A-SignalVector.entity.js","sourcesContent":["import { A_Entity, A_Scope, A_TypeGuards, A_TYPES__Component_Constructor, A_TYPES__Entity_Constructor } from \"@adaas/a-concept\";\nimport { A_SignalVector_Serialized, A_SignalVector_Init, A_Signal_TSignalsConstructors, A_SignalTValue, A_SignalTValueArray } from \"../A-Signal.types\";\nimport { A_Signal } from \"./A-Signal.entity\";\nimport { A_Frame } from \"@adaas/a-frame\";\n\n\n/**\n * A Signal Vector Entity is a collection of signals structured in a specific way.\n * It allows grouping multiple signals together for batch processing or transmission.\n * \n * Signal Vectors are useful in scenarios where multiple related signals need to be handled together,\n * as a state of the system or a snapshot of various parameters at a given time.\n * \n * @template TSignalsConstructors - Array of signal constructor types (e.g., [typeof MySignal, typeof CustomSignal])\n * @template TSignals - Array of signal instances derived from constructors\n */\n@A_Frame.Entity({\n namespace: 'A-Utils',\n name: 'A-SignalVector',\n description: 'A Signal Vector Entity represents a collection of signals structured in a specific way, allowing for batch processing and transmission of related signals as a unified state representation.'\n})\nexport class A_SignalVector<\n TSignals extends A_Signal[] = A_Signal[],\n> extends A_Entity<A_SignalVector_Init<TSignals>> {\n\n /**\n * The structure of the signal vector, defining the types of signals it contains.\n * \n * For example:\n * [UserSignInSignal, UserStatusSignal, UserActivitySignal]\n * \n * [!] if not provided, it will be derived from the signals values.\n */\n protected _structure?: A_Signal_TSignalsConstructors<TSignals>;\n /**\n * It's actual vector Values of Signals like :\n * [UserActionSignal, UserMousePositionSignal, ExternalDependencySignal]\n */\n protected _signals!: TSignals\n\n constructor(values: TSignals, structure?: { [K in keyof TSignals]: TSignals[K] extends A_Signal ? A_TYPES__Entity_Constructor<TSignals[K]> : never })\n constructor(serialized: A_SignalVector_Serialized)\n constructor(param1: TSignals | A_SignalVector_Serialized, param2?: A_Signal_TSignalsConstructors<TSignals>) {\n\n if ('aseid' in param1) {\n // Handle serialized case\n super(param1 as A_SignalVector_Serialized);\n } else {\n // Handle init case \n super({\n structure: param2 ? param2 : (param1 as TSignals).map(s => s.constructor as A_TYPES__Entity_Constructor<TSignals[number]>) as A_Signal_TSignalsConstructors<TSignals>,\n values: param1 as TSignals\n } as A_SignalVector_Init<TSignals>);\n }\n }\n\n\n fromNew(newEntity: A_SignalVector_Init<TSignals>): void {\n super.fromNew(newEntity);\n this._structure = newEntity.structure;\n this._signals = newEntity.values;\n }\n\n /**\n * The structure of the signal vector, defining the types of signals it contains.\n * \n * For example:\n * [UserSignInSignal, UserStatusSignal, UserActivitySignal]\n * \n */\n get structure(): A_Signal_TSignalsConstructors<TSignals> {\n return this._structure || this._signals.map(s => s.constructor as A_TYPES__Entity_Constructor<TSignals[number]>) as A_Signal_TSignalsConstructors<TSignals>;\n }\n\n\n get length(): number {\n return this.structure.length;\n }\n\n\n /**\n * Enables iteration over the signals in the vector.\n * \n * @returns \n */\n [Symbol.iterator](): Iterator<TSignals[number]> {\n let pointer = 0;\n const signals = this.structure.map((signalConstructor) => {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n return signalIndex !== -1 ? this._signals[signalIndex] : undefined;\n }) as TSignals[number][];\n\n return {\n next(): IteratorResult<TSignals[number]> {\n if (pointer < signals.length) {\n return {\n done: false,\n value: signals[pointer++]\n };\n } else {\n return {\n done: true,\n value: undefined as any\n };\n }\n }\n };\n }\n\n /**\n * Checks that 2 vectors are identical by types and data \n * \n * e.g. [UserSignInSignal, UserStatusSignal] is equal to [UserSignInSignal, UserStatusSignal] with the same data, \n * but not equal to [UserStatusSignal, UserSignInSignal] or [UserSignInSignal, UserStatusSignal] with different data.\n * \n * @param other \n * @returns \n */\n equals(other: A_SignalVector<TSignals>): boolean {\n if (this.structure.length !== other.structure.length) {\n return false;\n }\n\n for (let i = 0; i < this.structure.length; i++) {\n const thisSignalConstructor = this.structure[i];\n const otherSignalConstructor = other.structure[i];\n\n if (thisSignalConstructor !== otherSignalConstructor) {\n return false;\n }\n\n const thisSignalIndex = this._signals.findIndex(s => s.constructor === thisSignalConstructor);\n const otherSignalIndex = other._signals.findIndex(s => s.constructor === otherSignalConstructor);\n\n if (thisSignalIndex !== otherSignalIndex) {\n return false;\n }\n\n const thisSignal = thisSignalIndex !== -1 ? this._signals[thisSignalIndex] : undefined;\n const otherSignal = otherSignalIndex !== -1 ? other._signals[otherSignalIndex] : undefined;\n\n if (thisSignal && otherSignal) {\n if (!thisSignal.compare(otherSignal)) {\n return false;\n }\n } else if (thisSignal || otherSignal) {\n return false;\n }\n }\n\n return true;\n }\n\n\n /**\n * Allows to match the current Signal Vector with another Signal Vector by comparing each signal in the structure.\n * This method returns true if all signals in the vector A match the corresponding signals in vector B, and false otherwise.\n * \n * \n * e.g. [UserSignInSignal, UserStatusSignal] matches [UserStatusSignal, UserSignInSignal] with the same data,\n * \n * but not matches [UserSignInSignal, UserStatusSignal] with different data or [UserSignInSignal] or [UserSignInSignal, UserStatusSignal, UserActivitySignal].\n * \n * \n * @param other \n * @returns \n */\n match(other: A_SignalVector<TSignals>): boolean {\n if (this.length !== other.length) {\n return false;\n }\n\n for (let i = 0; i < this.length; i++) {\n const thisSignalConstructor = this.structure[i];\n const otherSignalConstructor = other.structure[i];\n\n if (thisSignalConstructor !== otherSignalConstructor) {\n return false;\n }\n\n const thisSignalIndex = this._signals.findIndex(s => s.constructor === thisSignalConstructor);\n const otherSignalIndex = other._signals.findIndex(s => s.constructor === otherSignalConstructor);\n\n const thisSignal = thisSignalIndex !== -1 ? this._signals[thisSignalIndex] : undefined;\n const otherSignal = otherSignalIndex !== -1 ? other._signals[otherSignalIndex] : undefined;\n\n if (thisSignal && otherSignal) {\n if (!thisSignal.compare(otherSignal)) {\n return false;\n }\n } else if (thisSignal || otherSignal) {\n return false;\n }\n }\n\n return true;\n }\n\n\n /**\n * Checks if the current Signal Vector includes all signals from another Signal Vector, regardless of order.\n * \n * e.g. [UserSignInSignal, UserStatusSignal] includes [UserStatusSignal] with the same data,\n * but not includes [UserStatusSignal] with different data or [UserActivitySignal].\n * \n * @param other \n */\n includes(other: A_SignalVector<TSignals>): boolean {\n for (const signalConstructor of other.structure) {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n if (signalIndex === -1) {\n return false;\n }\n }\n return true;\n }\n\n\n /**\n * This method should ensure that the current Signal Vector contains all signals from the provided Signal Vector.\n * \n * @param signal \n */\n contains(signal: A_SignalVector): boolean {\n for (const signalConstructor of signal.structure) {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n if (signalIndex === -1) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Checks if the vector contains a signal of the specified type.\n * \n * @param signal \n */\n has(signal: A_Signal): boolean\n has(signalConstructor: A_TYPES__Entity_Constructor<A_Signal>): boolean\n has(param1: A_Signal | A_TYPES__Entity_Constructor<A_Signal>): boolean {\n let signalConstructor: A_TYPES__Entity_Constructor<A_Signal>;\n if (A_TypeGuards.isEntityInstance(param1)) {\n signalConstructor = param1.constructor as A_TYPES__Entity_Constructor<A_Signal>;\n } else {\n signalConstructor = param1;\n }\n return this.structure.includes(signalConstructor);\n }\n\n /**\n * Retrieves the signal of the specified type from the vector.\n * \n * @param signal \n */\n get<T extends A_Signal>(signal: T): T | undefined\n get<T extends A_Signal>(signalConstructor: A_TYPES__Entity_Constructor<T>): T | undefined\n get<T extends A_Signal>(param1: T | A_TYPES__Entity_Constructor<T>): T | undefined {\n let signalConstructor: A_TYPES__Entity_Constructor<A_Signal>;\n\n if (param1 instanceof A_Entity) {\n signalConstructor = param1.constructor as A_TYPES__Entity_Constructor<A_Signal>;\n } else {\n signalConstructor = param1 as A_TYPES__Entity_Constructor<A_Signal>;\n }\n\n const index = this._signals.findIndex(s => s.constructor === signalConstructor);\n if (index === -1) {\n return undefined;\n }\n return this._signals[index] as T;\n }\n\n\n /**\n * Converts to Array of values of signals in the vector\n * Maintains the order specified in the structure/generic type\n * \n * @param structure - Optional structure to override the default ordering\n * @returns Array of signal instances in the specified order\n */\n toVector<\n T extends Array<A_Signal> = TSignals,\n >(\n structure?: A_Signal_TSignalsConstructors<T>\n ): T {\n const usedStructure = structure || this.structure;\n\n return usedStructure.map((signalConstructor) => {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n return signalIndex !== -1 ? this._signals[signalIndex] : undefined;\n }) as T;\n }\n\n\n /**\n * Converts to Array of data of signals in the vector\n * Maintains the order specified in the structure/generic type\n * \n * @param structure - Optional structure to override the default ordering\n * @returns Array of serialized signal data in the specified order\n */\n toDataVector<\n T extends A_Signal[] = TSignals,\n >(\n structure?: A_Signal_TSignalsConstructors<T>\n ): A_SignalTValueArray<T> {\n\n const usedStructure = structure || this.structure;\n\n const results: Array<any> = [];\n\n for (const signalConstructor of usedStructure) {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n let data: any;\n if (signalIndex === -1) {\n\n data = new (signalConstructor as typeof A_Signal)()\n\n } else {\n const signal = this._signals[signalIndex];\n data = signal;\n }\n\n\n results.push(data?.toJSON().data);\n }\n\n return results as A_SignalTValueArray<T>;\n }\n\n /**\n * Converts to Object with signal constructor names as keys and their corresponding data values\n * Uses the structure ordering to ensure consistent key ordering\n * \n * @returns Object with signal constructor names as keys and signal data as values\n */\n async toObject<\n T extends Array<A_Signal> = TSignals,\n >(\n structure?: { [K in keyof T]: T[K] extends A_Signal ? A_TYPES__Entity_Constructor<T[K]> : never }\n ): Promise<{ [key: string]: T[number] extends A_Signal<infer D> ? D | undefined : never }> {\n\n const usedStructure = structure || this.structure;\n\n const obj: { [key: string]: T[number] extends A_Signal<infer D> ? D | undefined : never } = {};\n usedStructure.forEach((signalConstructor) => {\n const signalName = signalConstructor.name;\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n\n if (signalIndex !== -1) {\n const signal = this._signals[signalIndex];\n obj[signalName] = signal.toJSON().data as any;\n } else {\n obj[signalName] = undefined as any;\n }\n });\n\n return obj;\n }\n\n\n /**\n * Serializes the Signal Vector to a JSON-compatible format.\n * \n * \n * @returns \n */\n toJSON(): A_SignalVector_Serialized {\n return {\n ...super.toJSON(),\n structure: this.structure.map(s => s.name),\n values: this._signals.map(s => s.toJSON())\n };\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __decorateClass } from '../../../chunk-EQQGB2QZ.mjs';
|
|
2
|
-
import { A_Entity } from '@adaas/a-concept';
|
|
2
|
+
import { A_Entity, A_TypeGuards } from '@adaas/a-concept';
|
|
3
3
|
import { A_Frame } from '@adaas/a-frame';
|
|
4
4
|
|
|
5
5
|
let A_SignalVector = class extends A_Entity {
|
|
@@ -58,9 +58,51 @@ let A_SignalVector = class extends A_Entity {
|
|
|
58
58
|
}
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Checks that 2 vectors are identical by types and data
|
|
63
|
+
*
|
|
64
|
+
* e.g. [UserSignInSignal, UserStatusSignal] is equal to [UserSignInSignal, UserStatusSignal] with the same data,
|
|
65
|
+
* but not equal to [UserStatusSignal, UserSignInSignal] or [UserSignInSignal, UserStatusSignal] with different data.
|
|
66
|
+
*
|
|
67
|
+
* @param other
|
|
68
|
+
* @returns
|
|
69
|
+
*/
|
|
70
|
+
equals(other) {
|
|
71
|
+
if (this.structure.length !== other.structure.length) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
for (let i = 0; i < this.structure.length; i++) {
|
|
75
|
+
const thisSignalConstructor = this.structure[i];
|
|
76
|
+
const otherSignalConstructor = other.structure[i];
|
|
77
|
+
if (thisSignalConstructor !== otherSignalConstructor) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
const thisSignalIndex = this._signals.findIndex((s) => s.constructor === thisSignalConstructor);
|
|
81
|
+
const otherSignalIndex = other._signals.findIndex((s) => s.constructor === otherSignalConstructor);
|
|
82
|
+
if (thisSignalIndex !== otherSignalIndex) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
const thisSignal = thisSignalIndex !== -1 ? this._signals[thisSignalIndex] : void 0;
|
|
86
|
+
const otherSignal = otherSignalIndex !== -1 ? other._signals[otherSignalIndex] : void 0;
|
|
87
|
+
if (thisSignal && otherSignal) {
|
|
88
|
+
if (!thisSignal.compare(otherSignal)) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
} else if (thisSignal || otherSignal) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
61
97
|
/**
|
|
62
98
|
* Allows to match the current Signal Vector with another Signal Vector by comparing each signal in the structure.
|
|
63
|
-
* This method returns true if all signals in the vector match the corresponding signals in
|
|
99
|
+
* This method returns true if all signals in the vector A match the corresponding signals in vector B, and false otherwise.
|
|
100
|
+
*
|
|
101
|
+
*
|
|
102
|
+
* e.g. [UserSignInSignal, UserStatusSignal] matches [UserStatusSignal, UserSignInSignal] with the same data,
|
|
103
|
+
*
|
|
104
|
+
* but not matches [UserSignInSignal, UserStatusSignal] with different data or [UserSignInSignal] or [UserSignInSignal, UserStatusSignal, UserActivitySignal].
|
|
105
|
+
*
|
|
64
106
|
*
|
|
65
107
|
* @param other
|
|
66
108
|
* @returns
|
|
@@ -89,6 +131,23 @@ let A_SignalVector = class extends A_Entity {
|
|
|
89
131
|
}
|
|
90
132
|
return true;
|
|
91
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Checks if the current Signal Vector includes all signals from another Signal Vector, regardless of order.
|
|
136
|
+
*
|
|
137
|
+
* e.g. [UserSignInSignal, UserStatusSignal] includes [UserStatusSignal] with the same data,
|
|
138
|
+
* but not includes [UserStatusSignal] with different data or [UserActivitySignal].
|
|
139
|
+
*
|
|
140
|
+
* @param other
|
|
141
|
+
*/
|
|
142
|
+
includes(other) {
|
|
143
|
+
for (const signalConstructor of other.structure) {
|
|
144
|
+
const signalIndex = this._signals.findIndex((s) => s.constructor === signalConstructor);
|
|
145
|
+
if (signalIndex === -1) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
92
151
|
/**
|
|
93
152
|
* This method should ensure that the current Signal Vector contains all signals from the provided Signal Vector.
|
|
94
153
|
*
|
|
@@ -105,7 +164,7 @@ let A_SignalVector = class extends A_Entity {
|
|
|
105
164
|
}
|
|
106
165
|
has(param1) {
|
|
107
166
|
let signalConstructor;
|
|
108
|
-
if (param1
|
|
167
|
+
if (A_TypeGuards.isEntityInstance(param1)) {
|
|
109
168
|
signalConstructor = param1.constructor;
|
|
110
169
|
} else {
|
|
111
170
|
signalConstructor = param1;
|
|
@@ -132,7 +191,7 @@ let A_SignalVector = class extends A_Entity {
|
|
|
132
191
|
* @param structure - Optional structure to override the default ordering
|
|
133
192
|
* @returns Array of signal instances in the specified order
|
|
134
193
|
*/
|
|
135
|
-
|
|
194
|
+
toVector(structure) {
|
|
136
195
|
const usedStructure = structure || this.structure;
|
|
137
196
|
return usedStructure.map((signalConstructor) => {
|
|
138
197
|
const signalIndex = this._signals.findIndex((s) => s.constructor === signalConstructor);
|
|
@@ -146,14 +205,14 @@ let A_SignalVector = class extends A_Entity {
|
|
|
146
205
|
* @param structure - Optional structure to override the default ordering
|
|
147
206
|
* @returns Array of serialized signal data in the specified order
|
|
148
207
|
*/
|
|
149
|
-
|
|
208
|
+
toDataVector(structure) {
|
|
150
209
|
const usedStructure = structure || this.structure;
|
|
151
210
|
const results = [];
|
|
152
211
|
for (const signalConstructor of usedStructure) {
|
|
153
212
|
const signalIndex = this._signals.findIndex((s) => s.constructor === signalConstructor);
|
|
154
213
|
let data;
|
|
155
214
|
if (signalIndex === -1) {
|
|
156
|
-
data =
|
|
215
|
+
data = new signalConstructor();
|
|
157
216
|
} else {
|
|
158
217
|
const signal = this._signals[signalIndex];
|
|
159
218
|
data = signal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/A-Signal/entities/A-SignalVector.entity.ts"],"names":[],"mappings":";;;;AAqBO,IAAM,cAAA,GAAN,cAEG,QAAA,CAAwC;AAAA,EAmB9C,WAAA,CAAY,QAA8C,MAAA,EAAkD;AAExG,IAAA,IAAI,WAAW,MAAA,EAAQ;AAEnB,MAAA,KAAA,CAAM,MAAmC,CAAA;AAAA,IAC7C,CAAA,MAAO;AAEH,MAAA,KAAA,CAAM;AAAA,QACF,WAAW,MAAA,GAAS,MAAA,GAAU,OAAoB,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,WAA4D,CAAA;AAAA,QACzH,MAAA,EAAQ;AAAA,OACsB,CAAA;AAAA,IACtC;AAAA,EACJ;AAAA,EAGA,QAAQ,SAAA,EAAgD;AACpD,IAAA,KAAA,CAAM,QAAQ,SAAS,CAAA;AACvB,IAAA,IAAA,CAAK,aAAa,SAAA,CAAU,SAAA;AAC5B,IAAA,IAAA,CAAK,WAAW,SAAA,CAAU,MAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,SAAA,GAAqD;AACrD,IAAA,OAAO,KAAK,UAAA,IAAc,IAAA,CAAK,SAAS,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,WAA4D,CAAA;AAAA,EACnH;AAAA,EAGA,IAAI,MAAA,GAAiB;AACjB,IAAA,OAAO,KAAK,SAAA,CAAU,MAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,CAAC,MAAA,CAAO,QAAQ,CAAA,GAAgC;AAC5C,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,CAAC,iBAAA,KAAsB;AACtD,MAAA,MAAM,cAAc,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,gBAAgB,iBAAiB,CAAA;AACpF,MAAA,OAAO,WAAA,KAAgB,EAAA,GAAK,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,GAAI,MAAA;AAAA,IAC7D,CAAC,CAAA;AAED,IAAA,OAAO;AAAA,MACH,IAAA,GAAyC;AACrC,QAAA,IAAI,OAAA,GAAU,QAAQ,MAAA,EAAQ;AAC1B,UAAA,OAAO;AAAA,YACH,IAAA,EAAM,KAAA;AAAA,YACN,KAAA,EAAO,QAAQ,OAAA,EAAS;AAAA,WAC5B;AAAA,QACJ,CAAA,MAAO;AACH,UAAA,OAAO;AAAA,YACH,IAAA,EAAM,IAAA;AAAA,YACN,KAAA,EAAO;AAAA,WACX;AAAA,QACJ;AAAA,MACJ;AAAA,KACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,KAAA,EAA0C;AAC5C,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ;AAC9B,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AAClC,MAAA,MAAM,qBAAA,GAAwB,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA;AAC9C,MAAA,MAAM,sBAAA,GAAyB,KAAA,CAAM,SAAA,CAAU,CAAC,CAAA;AAEhD,MAAA,IAAI,0BAA0B,sBAAA,EAAwB;AAClD,QAAA,OAAO,KAAA;AAAA,MACX;AAEA,MAAA,MAAM,kBAAkB,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,gBAAgB,qBAAqB,CAAA;AAC5F,MAAA,MAAM,mBAAmB,KAAA,CAAM,QAAA,CAAS,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,gBAAgB,sBAAsB,CAAA;AAE/F,MAAA,MAAM,aAAa,eAAA,KAAoB,EAAA,GAAK,IAAA,CAAK,QAAA,CAAS,eAAe,CAAA,GAAI,MAAA;AAC7E,MAAA,MAAM,cAAc,gBAAA,KAAqB,EAAA,GAAK,KAAA,CAAM,QAAA,CAAS,gBAAgB,CAAA,GAAI,MAAA;AAEjF,MAAA,IAAI,cAAc,WAAA,EAAa;AAC3B,QAAA,IAAI,CAAC,UAAA,CAAW,OAAA,CAAQ,WAAW,CAAA,EAAG;AAClC,UAAA,OAAO,KAAA;AAAA,QACX;AAAA,MACJ,CAAA,MAAA,IAAW,cAAc,WAAA,EAAa;AAClC,QAAA,OAAO,KAAA;AAAA,MACX;AAAA,IACJ;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,MAAA,EAAgC;AACrC,IAAA,KAAA,MAAW,iBAAA,IAAqB,OAAO,SAAA,EAAW;AAC9C,MAAA,MAAM,cAAc,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,gBAAgB,iBAAiB,CAAA;AACpF,MAAA,IAAI,gBAAgB,EAAA,EAAI;AACpB,QAAA,OAAO,KAAA;AAAA,MACX;AAAA,IACJ;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EASA,IAAI,MAAA,EAAmE;AACnE,IAAA,IAAI,iBAAA;AACJ,IAAA,IAAI,kBAAkB,QAAA,EAAU;AAC5B,MAAA,iBAAA,GAAoB,MAAA,CAAO,WAAA;AAAA,IAC/B,CAAA,MAAO;AACH,MAAA,iBAAA,GAAoB,MAAA;AAAA,IACxB;AACA,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,iBAAwB,CAAA;AAAA,EAC3D;AAAA,EASA,IAAwB,MAAA,EAA2D;AAC/E,IAAA,IAAI,iBAAA;AAEJ,IAAA,IAAI,kBAAkB,QAAA,EAAU;AAC5B,MAAA,iBAAA,GAAoB,MAAA,CAAO,WAAA;AAAA,IAC/B,CAAA,MAAO;AACH,MAAA,iBAAA,GAAoB,MAAA;AAAA,IACxB;AAEA,IAAA,MAAM,QAAQ,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,gBAAgB,iBAAiB,CAAA;AAC9E,IAAA,IAAI,UAAU,EAAA,EAAI;AACd,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,SAGF,SAAA,EACU;AACV,IAAA,MAAM,aAAA,GAAgB,aAAa,IAAA,CAAK,SAAA;AAExC,IAAA,OAAO,aAAA,CAAc,GAAA,CAAI,CAAC,iBAAA,KAAsB;AAC5C,MAAA,MAAM,cAAc,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,gBAAgB,iBAAiB,CAAA;AACpF,MAAA,OAAO,WAAA,KAAgB,EAAA,GAAK,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,GAAI,MAAA;AAAA,IAC7D,CAAC,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,aAGF,SAAA,EAC+B;AAE/B,IAAA,MAAM,aAAA,GAAgB,aAAa,IAAA,CAAK,SAAA;AAExC,IAAA,MAAM,UAAsB,EAAC;AAE7B,IAAA,KAAA,MAAW,qBAAqB,aAAA,EAAe;AAC3C,MAAA,MAAM,cAAc,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,gBAAgB,iBAAiB,CAAA;AACpF,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI,gBAAgB,EAAA,EAAI;AAEpB,QAAA,IAAA,GAAO,MAAO,kBAAsC,OAAA,EAAQ;AAAA,MAEhE,CAAA,MAAO;AACH,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA;AACxC,QAAA,IAAA,GAAO,MAAA;AAAA,MACX;AAGA,MAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,MAAA,EAAO,CAAE,IAAI,CAAA;AAAA,IACpC;AAEA,IAAA,OAAO,OAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SAGF,SAAA,EACuF;AAEvF,IAAA,MAAM,aAAA,GAAgB,aAAa,IAAA,CAAK,SAAA;AAExC,IAAA,MAAM,MAAsF,EAAC;AAC7F,IAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,iBAAA,KAAsB;AACzC,MAAA,MAAM,aAAa,iBAAA,CAAkB,IAAA;AACrC,MAAA,MAAM,cAAc,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAA,KAAK,CAAA,CAAE,gBAAgB,iBAAiB,CAAA;AAEpF,MAAA,IAAI,gBAAgB,EAAA,EAAI;AACpB,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA;AACxC,QAAA,GAAA,CAAI,UAAU,CAAA,GAAI,MAAA,CAAO,MAAA,EAAO,CAAE,IAAA;AAAA,MACtC,CAAA,MAAO;AACH,QAAA,GAAA,CAAI,UAAU,CAAA,GAAI,MAAA;AAAA,MACtB;AAAA,IACJ,CAAC,CAAA;AAED,IAAA,OAAO,GAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAA,GAAoC;AAChC,IAAA,OAAO;AAAA,MACH,GAAG,MAAM,MAAA,EAAO;AAAA,MAChB,WAAW,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA;AAAA,MACzC,QAAQ,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,QAAQ;AAAA,KAC7C;AAAA,EACJ;AACJ;AA7Ra,cAAA,GAAN,eAAA,CAAA;AAAA,EALN,QAAQ,MAAA,CAAO;AAAA,IACZ,SAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAM,gBAAA;AAAA,IACN,WAAA,EAAa;AAAA,GAChB;AAAA,CAAA,EACY,cAAA,CAAA","file":"A-SignalVector.entity.mjs","sourcesContent":["import { A_Entity, A_Scope, A_TYPES__Component_Constructor, A_TYPES__Entity_Constructor } from \"@adaas/a-concept\";\nimport { A_SignalVector_Serialized, A_SignalVector_Init, A_Signal_TSignalsConstructors, A_SignalTValue, A_SignalTValueArray } from \"../A-Signal.types\";\nimport { A_Signal } from \"./A-Signal.entity\";\nimport { A_Frame } from \"@adaas/a-frame\";\n\n\n/**\n * A Signal Vector Entity is a collection of signals structured in a specific way.\n * It allows grouping multiple signals together for batch processing or transmission.\n * \n * Signal Vectors are useful in scenarios where multiple related signals need to be handled together,\n * as a state of the system or a snapshot of various parameters at a given time.\n * \n * @template TSignalsConstructors - Array of signal constructor types (e.g., [typeof MySignal, typeof CustomSignal])\n * @template TSignals - Array of signal instances derived from constructors\n */\n@A_Frame.Entity({\n namespace: 'A-Utils',\n name: 'A-SignalVector',\n description: 'A Signal Vector Entity represents a collection of signals structured in a specific way, allowing for batch processing and transmission of related signals as a unified state representation.'\n})\nexport class A_SignalVector<\n TSignals extends A_Signal[] = A_Signal[],\n> extends A_Entity<A_SignalVector_Init<TSignals>> {\n\n /**\n * The structure of the signal vector, defining the types of signals it contains.\n * \n * For example:\n * [UserSignInSignal, UserStatusSignal, UserActivitySignal]\n * \n * [!] if not provided, it will be derived from the signals values.\n */\n protected _structure?: A_Signal_TSignalsConstructors<TSignals>;\n /**\n * It's actual vector Values of Signals like :\n * [UserActionSignal, UserMousePositionSignal, ExternalDependencySignal]\n */\n protected _signals!: TSignals\n\n constructor(values: TSignals, structure?: { [K in keyof TSignals]: TSignals[K] extends A_Signal ? A_TYPES__Entity_Constructor<TSignals[K]> : never })\n constructor(serialized: A_SignalVector_Serialized)\n constructor(param1: TSignals | A_SignalVector_Serialized, param2?: A_Signal_TSignalsConstructors<TSignals>) {\n\n if ('aseid' in param1) {\n // Handle serialized case\n super(param1 as A_SignalVector_Serialized);\n } else {\n // Handle init case \n super({\n structure: param2 ? param2 : (param1 as TSignals).map(s => s.constructor as A_TYPES__Entity_Constructor<TSignals[number]>) as A_Signal_TSignalsConstructors<TSignals>,\n values: param1 as TSignals\n } as A_SignalVector_Init<TSignals>);\n }\n }\n\n\n fromNew(newEntity: A_SignalVector_Init<TSignals>): void {\n super.fromNew(newEntity);\n this._structure = newEntity.structure;\n this._signals = newEntity.values;\n }\n\n /**\n * The structure of the signal vector, defining the types of signals it contains.\n * \n * For example:\n * [UserSignInSignal, UserStatusSignal, UserActivitySignal]\n * \n */\n get structure(): A_Signal_TSignalsConstructors<TSignals> {\n return this._structure || this._signals.map(s => s.constructor as A_TYPES__Entity_Constructor<TSignals[number]>) as A_Signal_TSignalsConstructors<TSignals>;\n }\n\n\n get length(): number {\n return this.structure.length;\n }\n\n\n /**\n * Enables iteration over the signals in the vector.\n * \n * @returns \n */\n [Symbol.iterator](): Iterator<TSignals[number]> {\n let pointer = 0;\n const signals = this.structure.map((signalConstructor) => {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n return signalIndex !== -1 ? this._signals[signalIndex] : undefined;\n }) as TSignals[number][];\n\n return {\n next(): IteratorResult<TSignals[number]> {\n if (pointer < signals.length) {\n return {\n done: false,\n value: signals[pointer++]\n };\n } else {\n return {\n done: true,\n value: undefined as any\n };\n }\n }\n };\n }\n\n\n /**\n * Allows to match the current Signal Vector with another Signal Vector by comparing each signal in the structure.\n * This method returns true if all signals in the vector match the corresponding signals in the other vector.\n * \n * @param other \n * @returns \n */\n match(other: A_SignalVector<TSignals>): boolean {\n if (this.length !== other.length) {\n return false;\n }\n\n for (let i = 0; i < this.length; i++) {\n const thisSignalConstructor = this.structure[i];\n const otherSignalConstructor = other.structure[i];\n\n if (thisSignalConstructor !== otherSignalConstructor) {\n return false;\n }\n\n const thisSignalIndex = this._signals.findIndex(s => s.constructor === thisSignalConstructor);\n const otherSignalIndex = other._signals.findIndex(s => s.constructor === otherSignalConstructor);\n\n const thisSignal = thisSignalIndex !== -1 ? this._signals[thisSignalIndex] : undefined;\n const otherSignal = otherSignalIndex !== -1 ? other._signals[otherSignalIndex] : undefined;\n\n if (thisSignal && otherSignal) {\n if (!thisSignal.compare(otherSignal)) {\n return false;\n }\n } else if (thisSignal || otherSignal) {\n return false;\n }\n }\n\n return true;\n }\n\n \n /**\n * This method should ensure that the current Signal Vector contains all signals from the provided Signal Vector.\n * \n * @param signal \n */\n contains(signal: A_SignalVector): boolean{\n for (const signalConstructor of signal.structure) {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n if (signalIndex === -1) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Checks if the vector contains a signal of the specified type.\n * \n * @param signal \n */\n has(signal: A_Signal): boolean\n has(signalConstructor: A_TYPES__Entity_Constructor<A_Signal>): boolean\n has(param1: A_Signal | A_TYPES__Entity_Constructor<A_Signal>): boolean {\n let signalConstructor: A_TYPES__Entity_Constructor<A_Signal>;\n if (param1 instanceof A_Entity) {\n signalConstructor = param1.constructor as A_TYPES__Entity_Constructor<A_Signal>;\n } else {\n signalConstructor = param1;\n }\n return this.structure.includes(signalConstructor as any);\n }\n\n /**\n * Retrieves the signal of the specified type from the vector.\n * \n * @param signal \n */\n get<T extends A_Signal>(signal: T): T | undefined\n get<T extends A_Signal>(signalConstructor: A_TYPES__Entity_Constructor<T>): T | undefined\n get<T extends A_Signal>(param1: T | A_TYPES__Entity_Constructor<T>): T | undefined {\n let signalConstructor: A_TYPES__Entity_Constructor<A_Signal>;\n\n if (param1 instanceof A_Entity) {\n signalConstructor = param1.constructor as A_TYPES__Entity_Constructor<A_Signal>;\n } else {\n signalConstructor = param1 as A_TYPES__Entity_Constructor<A_Signal>;\n }\n\n const index = this._signals.findIndex(s => s.constructor === signalConstructor);\n if (index === -1) {\n return undefined;\n }\n return this._signals[index] as T;\n }\n\n\n /**\n * Converts to Array of values of signals in the vector\n * Maintains the order specified in the structure/generic type\n * \n * @param structure - Optional structure to override the default ordering\n * @returns Array of signal instances in the specified order\n */\n async toVector<\n T extends Array<A_Signal> = TSignals,\n >(\n structure?: A_Signal_TSignalsConstructors<T>\n ): Promise<T> {\n const usedStructure = structure || this.structure;\n\n return usedStructure.map((signalConstructor) => {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n return signalIndex !== -1 ? this._signals[signalIndex] : undefined;\n }) as T;\n }\n\n\n /**\n * Converts to Array of data of signals in the vector\n * Maintains the order specified in the structure/generic type\n * \n * @param structure - Optional structure to override the default ordering\n * @returns Array of serialized signal data in the specified order\n */\n async toDataVector<\n T extends A_Signal[] = TSignals,\n >(\n structure?: A_Signal_TSignalsConstructors<T>\n ): Promise<A_SignalTValueArray<T>> {\n\n const usedStructure = structure || this.structure;\n\n const results: Array<any> = [];\n\n for (const signalConstructor of usedStructure) {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n let data: any;\n if (signalIndex === -1) {\n\n data = await (signalConstructor as typeof A_Signal).default()\n\n } else {\n const signal = this._signals[signalIndex];\n data = signal;\n }\n\n\n results.push(data?.toJSON().data);\n }\n\n return results as A_SignalTValueArray<T>;\n }\n\n /**\n * Converts to Object with signal constructor names as keys and their corresponding data values\n * Uses the structure ordering to ensure consistent key ordering\n * \n * @returns Object with signal constructor names as keys and signal data as values\n */\n async toObject<\n T extends Array<A_Signal> = TSignals,\n >(\n structure?: { [K in keyof T]: T[K] extends A_Signal ? A_TYPES__Entity_Constructor<T[K]> : never }\n ): Promise<{ [key: string]: T[number] extends A_Signal<infer D> ? D | undefined : never }> {\n\n const usedStructure = structure || this.structure;\n\n const obj: { [key: string]: T[number] extends A_Signal<infer D> ? D | undefined : never } = {};\n usedStructure.forEach((signalConstructor) => {\n const signalName = signalConstructor.name;\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n\n if (signalIndex !== -1) {\n const signal = this._signals[signalIndex];\n obj[signalName] = signal.toJSON().data as any;\n } else {\n obj[signalName] = undefined as any;\n }\n });\n\n return obj;\n }\n\n\n /**\n * Serializes the Signal Vector to a JSON-compatible format.\n * \n * \n * @returns \n */\n toJSON(): A_SignalVector_Serialized {\n return {\n ...super.toJSON(),\n structure: this.structure.map(s => s.name),\n values: this._signals.map(s => s.toJSON())\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/A-Signal/entities/A-SignalVector.entity.ts"],"names":[],"mappings":"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","file":"A-SignalVector.entity.mjs","sourcesContent":["import { A_Entity, A_Scope, A_TypeGuards, A_TYPES__Component_Constructor, A_TYPES__Entity_Constructor } from \"@adaas/a-concept\";\nimport { A_SignalVector_Serialized, A_SignalVector_Init, A_Signal_TSignalsConstructors, A_SignalTValue, A_SignalTValueArray } from \"../A-Signal.types\";\nimport { A_Signal } from \"./A-Signal.entity\";\nimport { A_Frame } from \"@adaas/a-frame\";\n\n\n/**\n * A Signal Vector Entity is a collection of signals structured in a specific way.\n * It allows grouping multiple signals together for batch processing or transmission.\n * \n * Signal Vectors are useful in scenarios where multiple related signals need to be handled together,\n * as a state of the system or a snapshot of various parameters at a given time.\n * \n * @template TSignalsConstructors - Array of signal constructor types (e.g., [typeof MySignal, typeof CustomSignal])\n * @template TSignals - Array of signal instances derived from constructors\n */\n@A_Frame.Entity({\n namespace: 'A-Utils',\n name: 'A-SignalVector',\n description: 'A Signal Vector Entity represents a collection of signals structured in a specific way, allowing for batch processing and transmission of related signals as a unified state representation.'\n})\nexport class A_SignalVector<\n TSignals extends A_Signal[] = A_Signal[],\n> extends A_Entity<A_SignalVector_Init<TSignals>> {\n\n /**\n * The structure of the signal vector, defining the types of signals it contains.\n * \n * For example:\n * [UserSignInSignal, UserStatusSignal, UserActivitySignal]\n * \n * [!] if not provided, it will be derived from the signals values.\n */\n protected _structure?: A_Signal_TSignalsConstructors<TSignals>;\n /**\n * It's actual vector Values of Signals like :\n * [UserActionSignal, UserMousePositionSignal, ExternalDependencySignal]\n */\n protected _signals!: TSignals\n\n constructor(values: TSignals, structure?: { [K in keyof TSignals]: TSignals[K] extends A_Signal ? A_TYPES__Entity_Constructor<TSignals[K]> : never })\n constructor(serialized: A_SignalVector_Serialized)\n constructor(param1: TSignals | A_SignalVector_Serialized, param2?: A_Signal_TSignalsConstructors<TSignals>) {\n\n if ('aseid' in param1) {\n // Handle serialized case\n super(param1 as A_SignalVector_Serialized);\n } else {\n // Handle init case \n super({\n structure: param2 ? param2 : (param1 as TSignals).map(s => s.constructor as A_TYPES__Entity_Constructor<TSignals[number]>) as A_Signal_TSignalsConstructors<TSignals>,\n values: param1 as TSignals\n } as A_SignalVector_Init<TSignals>);\n }\n }\n\n\n fromNew(newEntity: A_SignalVector_Init<TSignals>): void {\n super.fromNew(newEntity);\n this._structure = newEntity.structure;\n this._signals = newEntity.values;\n }\n\n /**\n * The structure of the signal vector, defining the types of signals it contains.\n * \n * For example:\n * [UserSignInSignal, UserStatusSignal, UserActivitySignal]\n * \n */\n get structure(): A_Signal_TSignalsConstructors<TSignals> {\n return this._structure || this._signals.map(s => s.constructor as A_TYPES__Entity_Constructor<TSignals[number]>) as A_Signal_TSignalsConstructors<TSignals>;\n }\n\n\n get length(): number {\n return this.structure.length;\n }\n\n\n /**\n * Enables iteration over the signals in the vector.\n * \n * @returns \n */\n [Symbol.iterator](): Iterator<TSignals[number]> {\n let pointer = 0;\n const signals = this.structure.map((signalConstructor) => {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n return signalIndex !== -1 ? this._signals[signalIndex] : undefined;\n }) as TSignals[number][];\n\n return {\n next(): IteratorResult<TSignals[number]> {\n if (pointer < signals.length) {\n return {\n done: false,\n value: signals[pointer++]\n };\n } else {\n return {\n done: true,\n value: undefined as any\n };\n }\n }\n };\n }\n\n /**\n * Checks that 2 vectors are identical by types and data \n * \n * e.g. [UserSignInSignal, UserStatusSignal] is equal to [UserSignInSignal, UserStatusSignal] with the same data, \n * but not equal to [UserStatusSignal, UserSignInSignal] or [UserSignInSignal, UserStatusSignal] with different data.\n * \n * @param other \n * @returns \n */\n equals(other: A_SignalVector<TSignals>): boolean {\n if (this.structure.length !== other.structure.length) {\n return false;\n }\n\n for (let i = 0; i < this.structure.length; i++) {\n const thisSignalConstructor = this.structure[i];\n const otherSignalConstructor = other.structure[i];\n\n if (thisSignalConstructor !== otherSignalConstructor) {\n return false;\n }\n\n const thisSignalIndex = this._signals.findIndex(s => s.constructor === thisSignalConstructor);\n const otherSignalIndex = other._signals.findIndex(s => s.constructor === otherSignalConstructor);\n\n if (thisSignalIndex !== otherSignalIndex) {\n return false;\n }\n\n const thisSignal = thisSignalIndex !== -1 ? this._signals[thisSignalIndex] : undefined;\n const otherSignal = otherSignalIndex !== -1 ? other._signals[otherSignalIndex] : undefined;\n\n if (thisSignal && otherSignal) {\n if (!thisSignal.compare(otherSignal)) {\n return false;\n }\n } else if (thisSignal || otherSignal) {\n return false;\n }\n }\n\n return true;\n }\n\n\n /**\n * Allows to match the current Signal Vector with another Signal Vector by comparing each signal in the structure.\n * This method returns true if all signals in the vector A match the corresponding signals in vector B, and false otherwise.\n * \n * \n * e.g. [UserSignInSignal, UserStatusSignal] matches [UserStatusSignal, UserSignInSignal] with the same data,\n * \n * but not matches [UserSignInSignal, UserStatusSignal] with different data or [UserSignInSignal] or [UserSignInSignal, UserStatusSignal, UserActivitySignal].\n * \n * \n * @param other \n * @returns \n */\n match(other: A_SignalVector<TSignals>): boolean {\n if (this.length !== other.length) {\n return false;\n }\n\n for (let i = 0; i < this.length; i++) {\n const thisSignalConstructor = this.structure[i];\n const otherSignalConstructor = other.structure[i];\n\n if (thisSignalConstructor !== otherSignalConstructor) {\n return false;\n }\n\n const thisSignalIndex = this._signals.findIndex(s => s.constructor === thisSignalConstructor);\n const otherSignalIndex = other._signals.findIndex(s => s.constructor === otherSignalConstructor);\n\n const thisSignal = thisSignalIndex !== -1 ? this._signals[thisSignalIndex] : undefined;\n const otherSignal = otherSignalIndex !== -1 ? other._signals[otherSignalIndex] : undefined;\n\n if (thisSignal && otherSignal) {\n if (!thisSignal.compare(otherSignal)) {\n return false;\n }\n } else if (thisSignal || otherSignal) {\n return false;\n }\n }\n\n return true;\n }\n\n\n /**\n * Checks if the current Signal Vector includes all signals from another Signal Vector, regardless of order.\n * \n * e.g. [UserSignInSignal, UserStatusSignal] includes [UserStatusSignal] with the same data,\n * but not includes [UserStatusSignal] with different data or [UserActivitySignal].\n * \n * @param other \n */\n includes(other: A_SignalVector<TSignals>): boolean {\n for (const signalConstructor of other.structure) {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n if (signalIndex === -1) {\n return false;\n }\n }\n return true;\n }\n\n\n /**\n * This method should ensure that the current Signal Vector contains all signals from the provided Signal Vector.\n * \n * @param signal \n */\n contains(signal: A_SignalVector): boolean {\n for (const signalConstructor of signal.structure) {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n if (signalIndex === -1) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Checks if the vector contains a signal of the specified type.\n * \n * @param signal \n */\n has(signal: A_Signal): boolean\n has(signalConstructor: A_TYPES__Entity_Constructor<A_Signal>): boolean\n has(param1: A_Signal | A_TYPES__Entity_Constructor<A_Signal>): boolean {\n let signalConstructor: A_TYPES__Entity_Constructor<A_Signal>;\n if (A_TypeGuards.isEntityInstance(param1)) {\n signalConstructor = param1.constructor as A_TYPES__Entity_Constructor<A_Signal>;\n } else {\n signalConstructor = param1;\n }\n return this.structure.includes(signalConstructor);\n }\n\n /**\n * Retrieves the signal of the specified type from the vector.\n * \n * @param signal \n */\n get<T extends A_Signal>(signal: T): T | undefined\n get<T extends A_Signal>(signalConstructor: A_TYPES__Entity_Constructor<T>): T | undefined\n get<T extends A_Signal>(param1: T | A_TYPES__Entity_Constructor<T>): T | undefined {\n let signalConstructor: A_TYPES__Entity_Constructor<A_Signal>;\n\n if (param1 instanceof A_Entity) {\n signalConstructor = param1.constructor as A_TYPES__Entity_Constructor<A_Signal>;\n } else {\n signalConstructor = param1 as A_TYPES__Entity_Constructor<A_Signal>;\n }\n\n const index = this._signals.findIndex(s => s.constructor === signalConstructor);\n if (index === -1) {\n return undefined;\n }\n return this._signals[index] as T;\n }\n\n\n /**\n * Converts to Array of values of signals in the vector\n * Maintains the order specified in the structure/generic type\n * \n * @param structure - Optional structure to override the default ordering\n * @returns Array of signal instances in the specified order\n */\n toVector<\n T extends Array<A_Signal> = TSignals,\n >(\n structure?: A_Signal_TSignalsConstructors<T>\n ): T {\n const usedStructure = structure || this.structure;\n\n return usedStructure.map((signalConstructor) => {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n return signalIndex !== -1 ? this._signals[signalIndex] : undefined;\n }) as T;\n }\n\n\n /**\n * Converts to Array of data of signals in the vector\n * Maintains the order specified in the structure/generic type\n * \n * @param structure - Optional structure to override the default ordering\n * @returns Array of serialized signal data in the specified order\n */\n toDataVector<\n T extends A_Signal[] = TSignals,\n >(\n structure?: A_Signal_TSignalsConstructors<T>\n ): A_SignalTValueArray<T> {\n\n const usedStructure = structure || this.structure;\n\n const results: Array<any> = [];\n\n for (const signalConstructor of usedStructure) {\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n let data: any;\n if (signalIndex === -1) {\n\n data = new (signalConstructor as typeof A_Signal)()\n\n } else {\n const signal = this._signals[signalIndex];\n data = signal;\n }\n\n\n results.push(data?.toJSON().data);\n }\n\n return results as A_SignalTValueArray<T>;\n }\n\n /**\n * Converts to Object with signal constructor names as keys and their corresponding data values\n * Uses the structure ordering to ensure consistent key ordering\n * \n * @returns Object with signal constructor names as keys and signal data as values\n */\n async toObject<\n T extends Array<A_Signal> = TSignals,\n >(\n structure?: { [K in keyof T]: T[K] extends A_Signal ? A_TYPES__Entity_Constructor<T[K]> : never }\n ): Promise<{ [key: string]: T[number] extends A_Signal<infer D> ? D | undefined : never }> {\n\n const usedStructure = structure || this.structure;\n\n const obj: { [key: string]: T[number] extends A_Signal<infer D> ? D | undefined : never } = {};\n usedStructure.forEach((signalConstructor) => {\n const signalName = signalConstructor.name;\n const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);\n\n if (signalIndex !== -1) {\n const signal = this._signals[signalIndex];\n obj[signalName] = signal.toJSON().data as any;\n } else {\n obj[signalName] = undefined as any;\n }\n });\n\n return obj;\n }\n\n\n /**\n * Serializes the Signal Vector to a JSON-compatible format.\n * \n * \n * @returns \n */\n toJSON(): A_SignalVector_Serialized {\n return {\n ...super.toJSON(),\n structure: this.structure.map(s => s.name),\n values: this._signals.map(s => s.toJSON())\n };\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as A_Signal, a as A_SignalConfig_Init, b as A_SignalTValue, c as A_SignalTValueArray, d as A_SignalVector_Init, e as A_SignalVector_Serialized, f as A_Signal_Init, g as A_Signal_Serialized, h as A_Signal_TSignalsConstructors } from '../../A-Signal.types-
|
|
1
|
+
export { A as A_Signal, a as A_SignalConfig_Init, b as A_SignalTValue, c as A_SignalTValueArray, d as A_SignalVector_Init, e as A_SignalVector_Serialized, f as A_Signal_Init, g as A_Signal_Serialized, h as A_Signal_TSignalsConstructors } from '../../A-Signal.types-DxQHmPm6.mjs';
|
|
2
2
|
export { A_SignalVector } from './entities/A-SignalVector.entity.mjs';
|
|
3
3
|
export { A_SignalBus } from './components/A-SignalBus.component.mjs';
|
|
4
4
|
export { A_SignalBusError } from './components/A-SignalBus.error.mjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as A_Signal, a as A_SignalConfig_Init, b as A_SignalTValue, c as A_SignalTValueArray, d as A_SignalVector_Init, e as A_SignalVector_Serialized, f as A_Signal_Init, g as A_Signal_Serialized, h as A_Signal_TSignalsConstructors } from '../../A-Signal.types-
|
|
1
|
+
export { A as A_Signal, a as A_SignalConfig_Init, b as A_SignalTValue, c as A_SignalTValueArray, d as A_SignalVector_Init, e as A_SignalVector_Serialized, f as A_Signal_Init, g as A_Signal_Serialized, h as A_Signal_TSignalsConstructors } from '../../A-Signal.types-DxQHmPm6.js';
|
|
2
2
|
export { A_SignalVector } from './entities/A-SignalVector.entity.js';
|
|
3
3
|
export { A_SignalBus } from './components/A-SignalBus.component.js';
|
|
4
4
|
export { A_SignalBusError } from './components/A-SignalBus.error.js';
|
package/jest.config.ts
CHANGED
|
@@ -26,7 +26,9 @@ const config: Config.InitialOptions = {
|
|
|
26
26
|
'^@adaas/a-utils/a-schedule$': '<rootDir>/src/lib/A-Schedule',
|
|
27
27
|
'^@adaas/a-utils/a-service$': '<rootDir>/src/lib/A-Service',
|
|
28
28
|
'^@adaas/a-utils/a-signal$': '<rootDir>/src/lib/A-Signal',
|
|
29
|
-
'^@adaas/a-utils/a-state-machine$': '<rootDir>/src/lib/A-StateMachine'
|
|
29
|
+
'^@adaas/a-utils/a-state-machine$': '<rootDir>/src/lib/A-StateMachine',
|
|
30
|
+
|
|
31
|
+
'^@adaas/a-utils/helpers/(.*)$': '<rootDir>/src/helpers/$1',
|
|
30
32
|
}
|
|
31
33
|
};
|
|
32
34
|
export default config;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adaas/a-utils",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.7",
|
|
4
4
|
"description": "A-Utils is a set of utilities that are used across the ADAAS ecosystem. This package is designed to be a collection of utilities that are used across the ADAAS ecosystem.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": {
|
|
@@ -231,6 +231,22 @@
|
|
|
231
231
|
"import": "./dist/node/lib/A-StateMachine/index.mjs",
|
|
232
232
|
"require": "./dist/node/lib/A-StateMachine/index.js"
|
|
233
233
|
}
|
|
234
|
+
},
|
|
235
|
+
"./helpers": {
|
|
236
|
+
"browser": {
|
|
237
|
+
"types": "./dist/browser/helpers/index.d.ts",
|
|
238
|
+
"import": "./dist/browser/helpers/index.mjs"
|
|
239
|
+
},
|
|
240
|
+
"node": {
|
|
241
|
+
"types": "./dist/node/helpers/index.d.ts",
|
|
242
|
+
"import": "./dist/node/helpers/index.mjs",
|
|
243
|
+
"require": "./dist/node/helpers/index.js"
|
|
244
|
+
},
|
|
245
|
+
"default": {
|
|
246
|
+
"types": "./dist/node/helpers/index.d.ts",
|
|
247
|
+
"import": "./dist/node/helpers/index.mjs",
|
|
248
|
+
"require": "./dist/node/helpers/index.js"
|
|
249
|
+
}
|
|
234
250
|
}
|
|
235
251
|
},
|
|
236
252
|
"keywords": [
|
|
@@ -289,8 +305,8 @@
|
|
|
289
305
|
"build": "tsup --config tsup.config.ts"
|
|
290
306
|
},
|
|
291
307
|
"dependencies": {
|
|
292
|
-
"@adaas/a-concept": "^0.3.
|
|
293
|
-
"@adaas/a-frame": "^0.0.
|
|
308
|
+
"@adaas/a-concept": "^0.3.4",
|
|
309
|
+
"@adaas/a-frame": "^0.0.13"
|
|
294
310
|
},
|
|
295
311
|
"devDependencies": {
|
|
296
312
|
"@types/chai": "^4.3.14",
|