@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.
Files changed (39) hide show
  1. package/dist/browser/a-service.mjs +12 -12
  2. package/dist/browser/a-service.mjs.map +1 -1
  3. package/dist/browser/a-signal.d.mts +34 -9
  4. package/dist/browser/a-signal.mjs +66 -7
  5. package/dist/browser/a-signal.mjs.map +1 -1
  6. package/dist/node/{A-Signal.types-P5VKMKMs.d.mts → A-Signal.types-C0Ta5Unp.d.mts} +6 -6
  7. package/dist/node/{A-Signal.types-P5VKMKMs.d.ts → A-Signal.types-C0Ta5Unp.d.ts} +6 -6
  8. package/dist/node/lib/A-Service/A-Service.container.js +12 -12
  9. package/dist/node/lib/A-Service/A-Service.container.js.map +1 -1
  10. package/dist/node/lib/A-Service/A-Service.container.mjs +12 -12
  11. package/dist/node/lib/A-Service/A-Service.container.mjs.map +1 -1
  12. package/dist/node/lib/A-Signal/A-Signal.types.d.mts +1 -1
  13. package/dist/node/lib/A-Signal/A-Signal.types.d.ts +1 -1
  14. package/dist/node/lib/A-Signal/components/A-SignalBus.component.d.mts +1 -1
  15. package/dist/node/lib/A-Signal/components/A-SignalBus.component.d.ts +1 -1
  16. package/dist/node/lib/A-Signal/context/A-SignalConfig.context.d.mts +1 -1
  17. package/dist/node/lib/A-Signal/context/A-SignalConfig.context.d.ts +1 -1
  18. package/dist/node/lib/A-Signal/context/A-SignalState.context.d.mts +1 -1
  19. package/dist/node/lib/A-Signal/context/A-SignalState.context.d.ts +1 -1
  20. package/dist/node/lib/A-Signal/entities/A-Signal.entity.d.mts +1 -1
  21. package/dist/node/lib/A-Signal/entities/A-Signal.entity.d.ts +1 -1
  22. package/dist/node/lib/A-Signal/entities/A-Signal.entity.js +1 -1
  23. package/dist/node/lib/A-Signal/entities/A-Signal.entity.js.map +1 -1
  24. package/dist/node/lib/A-Signal/entities/A-Signal.entity.mjs +1 -1
  25. package/dist/node/lib/A-Signal/entities/A-Signal.entity.mjs.map +1 -1
  26. package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.d.mts +29 -4
  27. package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.d.ts +29 -4
  28. package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.js +64 -5
  29. package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.js.map +1 -1
  30. package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.mjs +65 -6
  31. package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.mjs.map +1 -1
  32. package/dist/node/lib/A-Signal/index.d.mts +1 -1
  33. package/dist/node/lib/A-Signal/index.d.ts +1 -1
  34. package/package.json +3 -3
  35. package/src/lib/A-Service/A-Service.container.ts +12 -12
  36. package/src/lib/A-Signal/A-Signal.types.ts +2 -2
  37. package/src/lib/A-Signal/entities/A-Signal.entity.ts +9 -8
  38. package/src/lib/A-Signal/entities/A-SignalVector.entity.ts +80 -11
  39. 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 Record<string, any> = Record<string, any>
25
- > extends A_Entity<A_Signal_Init<_TSignalDataType>, A_Signal_Serialized<_TSignalDataType>> {
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 async default(): Promise<A_Signal | undefined> {
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
- fromJSON(serializedEntity: A_Signal_Serialized<_TSignalDataType>): void {
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<_TSignalDataType> {
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 the other vector.
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 instanceof A_Entity) {
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 as any);
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
- async toVector<
282
+ toVector<
214
283
  T extends Array<A_Signal> = TSignals,
215
284
  >(
216
285
  structure?: A_Signal_TSignalsConstructors<T>
217
- ): Promise<T> {
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
- async toDataVector<
303
+ toDataVector<
235
304
  T extends A_Signal[] = TSignals,
236
305
  >(
237
306
  structure?: A_Signal_TSignalsConstructors<T>
238
- ): Promise<A_SignalTValueArray<T>> {
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 = await (signalConstructor as typeof A_Signal).default()
318
+ data = (signalConstructor as typeof A_Signal).default()
250
319
 
251
320
  } else {
252
321
  const signal = this._signals[signalIndex];
@@ -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((await vector.toDataVector())[0]?.buttonId).toBe('submit-order');
33
- expect((await vector.toDataVector())[1]?.pageId).toBe('home-page');
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((await result!.toDataVector())[0]?.buttonId).toBe('submit-order');
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 async default(): Promise<A_Signal | undefined> {
154
- return Promise.resolve(new UserMousePositionSignal({
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((await result!.toDataVector())[0]?.buttonId).toBe('submit-order');
212
- expect((await result!.toDataVector())[1]?.x).toBe(0);
213
- expect((await result!.toDataVector())[1]?.y).toBe(0);
214
- expect((await result!.toDataVector())[2]).toBeUndefined();
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