@adaas/a-utils 0.3.5 → 0.3.6
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/dist/browser/a-service.mjs +12 -12
- package/dist/browser/a-service.mjs.map +1 -1
- package/dist/browser/a-signal.d.mts +34 -9
- package/dist/browser/a-signal.mjs +66 -7
- package/dist/browser/a-signal.mjs.map +1 -1
- package/dist/node/{A-Signal.types-P5VKMKMs.d.mts → A-Signal.types-C0Ta5Unp.d.mts} +6 -6
- package/dist/node/{A-Signal.types-P5VKMKMs.d.ts → A-Signal.types-C0Ta5Unp.d.ts} +6 -6
- 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 +1 -1
- 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 +1 -1
- 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/package.json +3 -3
- 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 +9 -8
- package/src/lib/A-Signal/entities/A-SignalVector.entity.ts +80 -11
- package/tests/A-Signal.test.ts +11 -11
|
@@ -21,8 +21,9 @@ import { A_Frame } from "@adaas/a-frame";
|
|
|
21
21
|
description: 'A Signal Entity represents an individual signal instance that carries data, used for managing state within an application context. Signals are designed to reflect the current state rather than individual events, making them suitable for scenarios where state monitoring and real-time updates are essential.'
|
|
22
22
|
})
|
|
23
23
|
export class A_Signal<
|
|
24
|
-
_TSignalDataType extends
|
|
25
|
-
|
|
24
|
+
_TSignalDataType extends any = any,
|
|
25
|
+
_TSignalSerializedDataType extends any = _TSignalDataType,
|
|
26
|
+
> extends A_Entity<A_Signal_Init<_TSignalDataType>, A_Signal_Serialized<_TSignalSerializedDataType>> {
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
// ========================================================================
|
|
@@ -35,7 +36,7 @@ export class A_Signal<
|
|
|
35
36
|
*
|
|
36
37
|
* @returns
|
|
37
38
|
*/
|
|
38
|
-
static
|
|
39
|
+
static default(): A_Signal | undefined {
|
|
39
40
|
return undefined;
|
|
40
41
|
}
|
|
41
42
|
|
|
@@ -131,12 +132,12 @@ export class A_Signal<
|
|
|
131
132
|
|
|
132
133
|
return true;
|
|
133
134
|
}
|
|
134
|
-
|
|
135
135
|
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
|
|
138
|
+
fromJSON(serializedEntity: A_Signal_Serialized<_TSignalSerializedDataType>): void {
|
|
138
139
|
super.fromJSON(serializedEntity);
|
|
139
|
-
this.data = serializedEntity.data;
|
|
140
|
+
this.data = serializedEntity.data as unknown as _TSignalDataType;
|
|
140
141
|
}
|
|
141
142
|
|
|
142
143
|
|
|
@@ -157,10 +158,10 @@ export class A_Signal<
|
|
|
157
158
|
}
|
|
158
159
|
|
|
159
160
|
|
|
160
|
-
toJSON(): A_Signal_Serialized<
|
|
161
|
+
toJSON(): A_Signal_Serialized<_TSignalSerializedDataType> {
|
|
161
162
|
return {
|
|
162
163
|
...super.toJSON(),
|
|
163
|
-
data: this.data
|
|
164
|
+
data: this.data as unknown as _TSignalSerializedDataType
|
|
164
165
|
};
|
|
165
166
|
}
|
|
166
167
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A_Entity, A_Scope, A_TYPES__Component_Constructor, A_TYPES__Entity_Constructor } from "@adaas/a-concept";
|
|
1
|
+
import { A_Entity, A_Scope, A_TypeGuards, A_TYPES__Component_Constructor, A_TYPES__Entity_Constructor } from "@adaas/a-concept";
|
|
2
2
|
import { A_SignalVector_Serialized, A_SignalVector_Init, A_Signal_TSignalsConstructors, A_SignalTValue, A_SignalTValueArray } from "../A-Signal.types";
|
|
3
3
|
import { A_Signal } from "./A-Signal.entity";
|
|
4
4
|
import { A_Frame } from "@adaas/a-frame";
|
|
@@ -107,10 +107,60 @@ export class A_SignalVector<
|
|
|
107
107
|
};
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Checks that 2 vectors are identical by types and data
|
|
112
|
+
*
|
|
113
|
+
* e.g. [UserSignInSignal, UserStatusSignal] is equal to [UserSignInSignal, UserStatusSignal] with the same data,
|
|
114
|
+
* but not equal to [UserStatusSignal, UserSignInSignal] or [UserSignInSignal, UserStatusSignal] with different data.
|
|
115
|
+
*
|
|
116
|
+
* @param other
|
|
117
|
+
* @returns
|
|
118
|
+
*/
|
|
119
|
+
equals(other: A_SignalVector<TSignals>): boolean {
|
|
120
|
+
if (this.structure.length !== other.structure.length) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
for (let i = 0; i < this.structure.length; i++) {
|
|
125
|
+
const thisSignalConstructor = this.structure[i];
|
|
126
|
+
const otherSignalConstructor = other.structure[i];
|
|
127
|
+
|
|
128
|
+
if (thisSignalConstructor !== otherSignalConstructor) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const thisSignalIndex = this._signals.findIndex(s => s.constructor === thisSignalConstructor);
|
|
133
|
+
const otherSignalIndex = other._signals.findIndex(s => s.constructor === otherSignalConstructor);
|
|
134
|
+
|
|
135
|
+
if (thisSignalIndex !== otherSignalIndex) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const thisSignal = thisSignalIndex !== -1 ? this._signals[thisSignalIndex] : undefined;
|
|
140
|
+
const otherSignal = otherSignalIndex !== -1 ? other._signals[otherSignalIndex] : undefined;
|
|
141
|
+
|
|
142
|
+
if (thisSignal && otherSignal) {
|
|
143
|
+
if (!thisSignal.compare(otherSignal)) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
} else if (thisSignal || otherSignal) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
|
|
110
154
|
|
|
111
155
|
/**
|
|
112
156
|
* Allows to match the current Signal Vector with another Signal Vector by comparing each signal in the structure.
|
|
113
|
-
* This method returns true if all signals in the vector match the corresponding signals in
|
|
157
|
+
* This method returns true if all signals in the vector A match the corresponding signals in vector B, and false otherwise.
|
|
158
|
+
*
|
|
159
|
+
*
|
|
160
|
+
* e.g. [UserSignInSignal, UserStatusSignal] matches [UserStatusSignal, UserSignInSignal] with the same data,
|
|
161
|
+
*
|
|
162
|
+
* but not matches [UserSignInSignal, UserStatusSignal] with different data or [UserSignInSignal] or [UserSignInSignal, UserStatusSignal, UserActivitySignal].
|
|
163
|
+
*
|
|
114
164
|
*
|
|
115
165
|
* @param other
|
|
116
166
|
* @returns
|
|
@@ -146,13 +196,32 @@ export class A_SignalVector<
|
|
|
146
196
|
return true;
|
|
147
197
|
}
|
|
148
198
|
|
|
149
|
-
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Checks if the current Signal Vector includes all signals from another Signal Vector, regardless of order.
|
|
202
|
+
*
|
|
203
|
+
* e.g. [UserSignInSignal, UserStatusSignal] includes [UserStatusSignal] with the same data,
|
|
204
|
+
* but not includes [UserStatusSignal] with different data or [UserActivitySignal].
|
|
205
|
+
*
|
|
206
|
+
* @param other
|
|
207
|
+
*/
|
|
208
|
+
includes(other: A_SignalVector<TSignals>): boolean {
|
|
209
|
+
for (const signalConstructor of other.structure) {
|
|
210
|
+
const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);
|
|
211
|
+
if (signalIndex === -1) {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
|
|
150
219
|
/**
|
|
151
220
|
* This method should ensure that the current Signal Vector contains all signals from the provided Signal Vector.
|
|
152
221
|
*
|
|
153
222
|
* @param signal
|
|
154
223
|
*/
|
|
155
|
-
contains(signal: A_SignalVector): boolean{
|
|
224
|
+
contains(signal: A_SignalVector): boolean {
|
|
156
225
|
for (const signalConstructor of signal.structure) {
|
|
157
226
|
const signalIndex = this._signals.findIndex(s => s.constructor === signalConstructor);
|
|
158
227
|
if (signalIndex === -1) {
|
|
@@ -171,12 +240,12 @@ export class A_SignalVector<
|
|
|
171
240
|
has(signalConstructor: A_TYPES__Entity_Constructor<A_Signal>): boolean
|
|
172
241
|
has(param1: A_Signal | A_TYPES__Entity_Constructor<A_Signal>): boolean {
|
|
173
242
|
let signalConstructor: A_TYPES__Entity_Constructor<A_Signal>;
|
|
174
|
-
if (param1
|
|
243
|
+
if (A_TypeGuards.isEntityInstance(param1)) {
|
|
175
244
|
signalConstructor = param1.constructor as A_TYPES__Entity_Constructor<A_Signal>;
|
|
176
245
|
} else {
|
|
177
246
|
signalConstructor = param1;
|
|
178
247
|
}
|
|
179
|
-
return this.structure.includes(signalConstructor
|
|
248
|
+
return this.structure.includes(signalConstructor);
|
|
180
249
|
}
|
|
181
250
|
|
|
182
251
|
/**
|
|
@@ -210,11 +279,11 @@ export class A_SignalVector<
|
|
|
210
279
|
* @param structure - Optional structure to override the default ordering
|
|
211
280
|
* @returns Array of signal instances in the specified order
|
|
212
281
|
*/
|
|
213
|
-
|
|
282
|
+
toVector<
|
|
214
283
|
T extends Array<A_Signal> = TSignals,
|
|
215
284
|
>(
|
|
216
285
|
structure?: A_Signal_TSignalsConstructors<T>
|
|
217
|
-
):
|
|
286
|
+
): T {
|
|
218
287
|
const usedStructure = structure || this.structure;
|
|
219
288
|
|
|
220
289
|
return usedStructure.map((signalConstructor) => {
|
|
@@ -231,11 +300,11 @@ export class A_SignalVector<
|
|
|
231
300
|
* @param structure - Optional structure to override the default ordering
|
|
232
301
|
* @returns Array of serialized signal data in the specified order
|
|
233
302
|
*/
|
|
234
|
-
|
|
303
|
+
toDataVector<
|
|
235
304
|
T extends A_Signal[] = TSignals,
|
|
236
305
|
>(
|
|
237
306
|
structure?: A_Signal_TSignalsConstructors<T>
|
|
238
|
-
):
|
|
307
|
+
): A_SignalTValueArray<T> {
|
|
239
308
|
|
|
240
309
|
const usedStructure = structure || this.structure;
|
|
241
310
|
|
|
@@ -246,7 +315,7 @@ export class A_SignalVector<
|
|
|
246
315
|
let data: any;
|
|
247
316
|
if (signalIndex === -1) {
|
|
248
317
|
|
|
249
|
-
data =
|
|
318
|
+
data = (signalConstructor as typeof A_Signal).default()
|
|
250
319
|
|
|
251
320
|
} else {
|
|
252
321
|
const signal = this._signals[signalIndex];
|
package/tests/A-Signal.test.ts
CHANGED
|
@@ -29,8 +29,8 @@ describe('A-Signal tests', () => {
|
|
|
29
29
|
expect(vector).toBeDefined();
|
|
30
30
|
expect(vector).toBeInstanceOf(A_SignalVector);
|
|
31
31
|
expect(vector.length).toBe(2);
|
|
32
|
-
expect((
|
|
33
|
-
expect((
|
|
32
|
+
expect((vector.toDataVector())[0]?.buttonId).toBe('submit-order');
|
|
33
|
+
expect((vector.toDataVector())[1]?.pageId).toBe('home-page');
|
|
34
34
|
});
|
|
35
35
|
it('Should Allow to match Signal Vector', async () => {
|
|
36
36
|
class MySignalA extends A_Signal<{ buttonId: string }> { }
|
|
@@ -57,7 +57,7 @@ describe('A-Signal tests', () => {
|
|
|
57
57
|
class MySignalA extends A_Signal<{ buttonId: string }> { }
|
|
58
58
|
class MySignalB extends A_Signal<{ pageId: string }> { }
|
|
59
59
|
class MySignalC extends A_Signal<{ userId: string }> { }
|
|
60
|
-
|
|
60
|
+
|
|
61
61
|
const vector = new A_SignalVector<[MySignalA, MySignalB, MySignalC]>([
|
|
62
62
|
new MySignalA({ data: { buttonId: 'submit-order' } }),
|
|
63
63
|
new MySignalB({ data: { pageId: 'home-page' } }),
|
|
@@ -142,7 +142,7 @@ describe('A-Signal tests', () => {
|
|
|
142
142
|
expect(result).toBeDefined();
|
|
143
143
|
expect(result).toBeInstanceOf(A_SignalVector);
|
|
144
144
|
expect(result!.length).toBe(1);
|
|
145
|
-
expect((
|
|
145
|
+
expect((result!.toDataVector())[0]?.buttonId).toBe('submit-order');
|
|
146
146
|
|
|
147
147
|
});
|
|
148
148
|
it('Should Allow to work with custom Signals', async () => {
|
|
@@ -150,10 +150,10 @@ describe('A-Signal tests', () => {
|
|
|
150
150
|
class UserIntentionSignal extends A_Signal<{ buttonId: string }> { }
|
|
151
151
|
|
|
152
152
|
class UserMousePositionSignal extends A_Signal<{ x: number, y: number }> {
|
|
153
|
-
static
|
|
154
|
-
return
|
|
153
|
+
static default(): A_Signal | undefined {
|
|
154
|
+
return new UserMousePositionSignal({
|
|
155
155
|
data: { x: 0, y: 0 }
|
|
156
|
-
})
|
|
156
|
+
});
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
159
|
class UserElementHoverSignal extends A_Signal<{ elementId: string }> { }
|
|
@@ -208,10 +208,10 @@ describe('A-Signal tests', () => {
|
|
|
208
208
|
expect(result).toBeInstanceOf(A_SignalVector);
|
|
209
209
|
expect(result!.length).toBe(3);
|
|
210
210
|
|
|
211
|
-
expect((
|
|
212
|
-
expect((
|
|
213
|
-
expect((
|
|
214
|
-
expect((
|
|
211
|
+
expect((result!.toDataVector())[0]?.buttonId).toBe('submit-order');
|
|
212
|
+
expect((result!.toDataVector())[1]?.x).toBe(0);
|
|
213
|
+
expect((result!.toDataVector())[1]?.y).toBe(0);
|
|
214
|
+
expect((result!.toDataVector())[2]).toBeUndefined();
|
|
215
215
|
|
|
216
216
|
});
|
|
217
217
|
|