@adaas/a-utils 0.3.6 → 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-signal.d.mts +19 -23
- package/dist/browser/a-signal.mjs +36 -60
- 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-C0Ta5Unp.d.mts → A-Signal.types-DxQHmPm6.d.mts} +19 -23
- package/dist/node/{A-Signal.types-C0Ta5Unp.d.ts → A-Signal.types-DxQHmPm6.d.ts} +19 -23
- 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-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 +1 -1
- package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.d.ts +1 -1
- package/dist/node/lib/A-Signal/entities/A-SignalVector.entity.js +1 -1
- 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 +1 -1
- 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 +17 -1
- package/src/helpers/A-Utils.helper.ts +186 -0
- package/src/helpers/index.ts +1 -0
- package/src/lib/A-Signal/entities/A-Signal.entity.ts +38 -79
- package/src/lib/A-Signal/entities/A-SignalVector.entity.ts +1 -1
- package/tests/A-Signal.test.ts +8 -4
- package/tsconfig.json +4 -1
- package/tsup.config.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/helpers/A-Utils.helper.ts"],"names":[],"mappings":"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","file":"A-Utils.helper.mjs","sourcesContent":["import { A_Caller, A_Component, A_Feature, A_Inject } from \"@adaas/a-concept\";\nimport { A_Frame } from \"@adaas/a-frame\";\nimport { A_ExecutionContext } from \"@adaas/a-utils/a-execution\";\n\n\n\n@A_Frame.Component({\n namespace: 'A-Utils',\n name: 'A-UtilsHelper',\n description: 'Utility helper class providing common functions for A-Utils library, such as hashing and serialization.'\n})\nexport class A_UtilsHelper extends A_Component {\n\n // ─────────────────────────────────────────────────────────────────────────────\n // ── Hashing ──────────────────────────────────────────────────────────────────\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Produces a deterministic, collision-resistant hash string for any JS value.\n * \n * Improvements over the legacy `createHash`:\n * - **Null-safe** — handles `null` without throwing \n * - **Function-aware serialization** — functions inside objects / arrays are\n * serialized via `.toString()` so `{ fn: () => 1 }` ≠ `{}` \n * - **FNV-1a 52-bit** — better avalanche / distribution than DJB2-32,\n * and uses the safe JS integer range so the result is always positive \n * - **Hex output** — compact, URL-safe, fixed-width (13 chars)\n * \n * @param value Any value: string, number, boolean, null, undefined,\n * object, array, Map, Set, function, or a mix of these.\n * @returns A 13-character lower-hex string (52-bit FNV-1a).\n */\n static hash(value?: any): string {\n const source = A_UtilsHelper.serialize(value);\n return A_UtilsHelper.fnv1a52(source);\n }\n\n\n // ─────────────────────────────────────────────────────────────────────────────\n // ── Serialization ────────────────────────────────────────────────────────────\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Converts any JS value into a deterministic string representation\n * suitable for hashing.\n * \n * Key properties:\n * - **Deterministic**: same logical value → same string every time\n * - **Injective-ish**: structurally different values produce different\n * strings (type tags prevent `\"3\"` vs `3` collisions)\n * - **Recursive**: handles nested objects, arrays, Maps, Sets\n * - **Function-aware**: serializes functions via `.toString()`\n * \n * @param value Anything.\n * @returns A deterministic string.\n */\n static serialize(value: any): string {\n // Primitives & null/undefined\n if (value === null) return '<null>';\n if (value === undefined) return '<undefined>';\n\n switch (typeof value) {\n case 'string':\n return `s:${value}`;\n case 'number':\n return `n:${value}`;\n case 'boolean':\n return `b:${value}`;\n case 'bigint':\n return `bi:${value}`;\n case 'symbol':\n return `sym:${value.toString()}`;\n case 'function':\n return `fn:${value.toString()}`;\n }\n\n // Map\n if (value instanceof Map) {\n const entries = Array.from(value.entries())\n .map(([k, v]) => `${A_UtilsHelper.serialize(k)}=>${A_UtilsHelper.serialize(v)}`)\n .sort()\n .join(',');\n return `Map{${entries}}`;\n }\n\n // Set\n if (value instanceof Set) {\n const items = Array.from(value.values())\n .map(v => A_UtilsHelper.serialize(v))\n .sort()\n .join(',');\n return `Set{${items}}`;\n }\n\n // Date\n if (value instanceof Date) {\n return `Date:${value.toISOString()}`;\n }\n\n // RegExp\n if (value instanceof RegExp) {\n return `RegExp:${value.toString()}`;\n }\n\n // Array\n if (Array.isArray(value)) {\n const items = value.map(v => A_UtilsHelper.serialize(v)).join(',');\n return `[${items}]`;\n }\n\n // toJSON support (e.g. custom entities, ASEID, etc.)\n if (typeof value.toJSON === 'function') {\n return `json:${A_UtilsHelper.serialize(value.toJSON())}`;\n }\n\n // Plain object — sort keys for determinism, serialize functions too\n const keys = Object.keys(value).sort();\n const pairs = keys.map(k => `${k}:${A_UtilsHelper.serialize(value[k])}`).join(',');\n return `{${pairs}}`;\n }\n\n\n // ─────────────────────────────────────────────────────────────────────────────\n // ── FNV-1a (pure Number, no BigInt) ──────────────────────────────────────────\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * FNV-1a hash using two 32-bit halves to simulate a 52-bit space,\n * without requiring BigInt.\n * \n * Works identically in:\n * - All browsers (including Safari 13, IE11 polyfill targets, React Native)\n * - Node.js (any version)\n * - Web Workers, Service Workers, Deno, Bun\n * \n * - Better avalanche than DJB2 (each input bit affects many output bits)\n * - ~52-bit effective space — vastly fewer collisions than 32-bit\n * - Always produces a **positive** hex string of 13 characters\n * \n * @param input Pre-serialized string.\n * @returns 13-character lower-hex string.\n */\n private static fnv1a52(input: string): string {\n // FNV-1a offset basis split into two 32-bit halves\n let h1 = 0x811c9dc5; // low 32 bits\n let h2 = 0x00000842; // high 20 bits (keeps us in 52-bit range)\n\n // FNV prime = 0x01000193\n const PRIME = 0x01000193;\n\n for (let i = 0; i < input.length; i++) {\n h1 ^= input.charCodeAt(i);\n\n // Multiply h1 by prime (32-bit, unsigned)\n const product = Math.imul(h1, PRIME);\n h1 = product >>> 0;\n\n // Carry overflow into h2, keep h2 within 20 bits\n h2 = ((Math.imul(h2, PRIME) + (product / 0x100000000 >>> 0)) & 0xFFFFF) >>> 0;\n }\n\n // Combine: h2 (20 bits) << 32 | h1 (32 bits) → 52-bit number\n // Since 2^52 fits in Number.MAX_SAFE_INTEGER, this is exact.\n const combined = h2 * 0x100000000 + h1;\n\n return combined.toString(16).padStart(13, '0');\n }\n\n\n\n // ==============================================================================\n // =============== Instance methods for used for Injection ======================\n // ==============================================================================\n @A_Frame.Method({\n description: 'Instance method wrapper for the static hash function, allowing it to be injected as a dependency.'\n })\n hash(\n @A_Inject(A_Caller) caller: any,\n @A_Inject(A_ExecutionContext) context: A_ExecutionContext,\n @A_Inject(A_Feature) feature: A_Feature\n ) {\n const hash = A_UtilsHelper.hash(caller);\n\n context.set(feature.name, hash);\n }\n}"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var AUtils_helper = require('./A-Utils.helper');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "A_UtilsHelper", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () { return AUtils_helper.A_UtilsHelper; }
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs","sourcesContent":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import '@adaas/a-concept';
|
|
2
|
-
export { 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-
|
|
2
|
+
export { 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';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import '@adaas/a-concept';
|
|
2
|
-
export { 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-
|
|
2
|
+
export { 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';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { A_Component, A_Error, A_Scope } from '@adaas/a-concept';
|
|
2
2
|
import { A_SignalState } from '../context/A-SignalState.context.mjs';
|
|
3
3
|
import { A_SignalConfig } from '../context/A-SignalConfig.context.mjs';
|
|
4
|
-
import { A as A_Signal } from '../../../A-Signal.types-
|
|
4
|
+
import { A as A_Signal } from '../../../A-Signal.types-DxQHmPm6.mjs';
|
|
5
5
|
import { A_Logger } from '../../A-Logger/A-Logger.component.mjs';
|
|
6
6
|
import { A_Config } from '../../A-Config/A-Config.context.mjs';
|
|
7
7
|
import { A_SignalBusFeatures } from './A-SignalBus.constants.mjs';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { A_Component, A_Error, A_Scope } from '@adaas/a-concept';
|
|
2
2
|
import { A_SignalState } from '../context/A-SignalState.context.js';
|
|
3
3
|
import { A_SignalConfig } from '../context/A-SignalConfig.context.js';
|
|
4
|
-
import { A as A_Signal } from '../../../A-Signal.types-
|
|
4
|
+
import { A as A_Signal } from '../../../A-Signal.types-DxQHmPm6.js';
|
|
5
5
|
import { A_Logger } from '../../A-Logger/A-Logger.component.js';
|
|
6
6
|
import { A_Config } from '../../A-Config/A-Config.context.js';
|
|
7
7
|
import { A_SignalBusFeatures } from './A-SignalBus.constants.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A_Fragment, A_TYPES__Entity_Constructor } from '@adaas/a-concept';
|
|
2
|
-
import { A as A_Signal, a as A_SignalConfig_Init } from '../../../A-Signal.types-
|
|
2
|
+
import { A as A_Signal, a as A_SignalConfig_Init } from '../../../A-Signal.types-DxQHmPm6.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* This component should dictate a structure of the vector for all signals within a given scope.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A_Fragment, A_TYPES__Entity_Constructor } from '@adaas/a-concept';
|
|
2
|
-
import { A as A_Signal, a as A_SignalConfig_Init } from '../../../A-Signal.types-
|
|
2
|
+
import { A as A_Signal, a as A_SignalConfig_Init } from '../../../A-Signal.types-DxQHmPm6.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* This component should dictate a structure of the vector for all signals within a given scope.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A_Fragment, A_TYPES__Component_Constructor } from '@adaas/a-concept';
|
|
2
|
-
import { A as A_Signal } from '../../../A-Signal.types-
|
|
2
|
+
import { A as A_Signal } from '../../../A-Signal.types-DxQHmPm6.mjs';
|
|
3
3
|
import { A_SignalVector } from '../entities/A-SignalVector.entity.mjs';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A_Fragment, A_TYPES__Component_Constructor } from '@adaas/a-concept';
|
|
2
|
-
import { A as A_Signal } from '../../../A-Signal.types-
|
|
2
|
+
import { A as A_Signal } from '../../../A-Signal.types-DxQHmPm6.js';
|
|
3
3
|
import { A_SignalVector } from '../entities/A-SignalVector.entity.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import '@adaas/a-concept';
|
|
2
|
-
export { A as A_Signal } from '../../../A-Signal.types-
|
|
2
|
+
export { A as A_Signal } from '../../../A-Signal.types-DxQHmPm6.mjs';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import '@adaas/a-concept';
|
|
2
|
-
export { A as A_Signal } from '../../../A-Signal.types-
|
|
2
|
+
export { A as A_Signal } from '../../../A-Signal.types-DxQHmPm6.js';
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var aConcept = require('@adaas/a-concept');
|
|
4
4
|
var aFrame = require('@adaas/a-frame');
|
|
5
|
+
var helpers = require('@adaas/a-utils/helpers');
|
|
5
6
|
|
|
6
7
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
8
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
@@ -12,61 +13,6 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
12
13
|
return result;
|
|
13
14
|
};
|
|
14
15
|
exports.A_Signal = class A_Signal extends aConcept.A_Entity {
|
|
15
|
-
// ========================================================================
|
|
16
|
-
// ========================== Static Methods ==============================
|
|
17
|
-
// ========================================================================
|
|
18
|
-
/**
|
|
19
|
-
* Allows to define default data for the signal.
|
|
20
|
-
*
|
|
21
|
-
* If no data is provided during initialization, the default data will be used.
|
|
22
|
-
*
|
|
23
|
-
* @returns
|
|
24
|
-
*/
|
|
25
|
-
static default() {
|
|
26
|
-
return void 0;
|
|
27
|
-
}
|
|
28
|
-
createHash(str) {
|
|
29
|
-
let hashSource;
|
|
30
|
-
if (str instanceof Map) {
|
|
31
|
-
hashSource = JSON.stringify(Array.from(str.entries()));
|
|
32
|
-
} else if (str instanceof Set) {
|
|
33
|
-
hashSource = JSON.stringify(Array.from(str.values()));
|
|
34
|
-
} else {
|
|
35
|
-
switch (typeof str) {
|
|
36
|
-
case "string":
|
|
37
|
-
hashSource = str;
|
|
38
|
-
break;
|
|
39
|
-
case "undefined":
|
|
40
|
-
hashSource = "undefined";
|
|
41
|
-
break;
|
|
42
|
-
case "object":
|
|
43
|
-
if ("toJSON" in str)
|
|
44
|
-
hashSource = JSON.stringify(str.toJSON());
|
|
45
|
-
else
|
|
46
|
-
hashSource = JSON.stringify(str);
|
|
47
|
-
break;
|
|
48
|
-
case "number":
|
|
49
|
-
hashSource = str.toString();
|
|
50
|
-
break;
|
|
51
|
-
case "boolean":
|
|
52
|
-
hashSource = str ? "true" : "false";
|
|
53
|
-
break;
|
|
54
|
-
case "function":
|
|
55
|
-
hashSource = str.toString();
|
|
56
|
-
break;
|
|
57
|
-
default:
|
|
58
|
-
hashSource = String(str);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
let hash = 0, i, chr;
|
|
62
|
-
for (i = 0; i < hashSource.length; i++) {
|
|
63
|
-
chr = hashSource.charCodeAt(i);
|
|
64
|
-
hash = (hash << 5) - hash + chr;
|
|
65
|
-
hash |= 0;
|
|
66
|
-
}
|
|
67
|
-
const hashString = hash.toString();
|
|
68
|
-
return hashString;
|
|
69
|
-
}
|
|
70
16
|
/**
|
|
71
17
|
* This method compares the current signal with another signal instance by deduplication ID
|
|
72
18
|
* this id can be configured during initialization with the "id" property.
|
|
@@ -86,22 +32,52 @@ exports.A_Signal = class A_Signal extends aConcept.A_Entity {
|
|
|
86
32
|
}
|
|
87
33
|
return true;
|
|
88
34
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Allows to define default data for the signal.
|
|
37
|
+
*
|
|
38
|
+
* If no data is provided during initialization, the default data will be used.
|
|
39
|
+
*
|
|
40
|
+
* @returns
|
|
41
|
+
*/
|
|
42
|
+
fromUndefined() {
|
|
43
|
+
const name = this.constructor.entity;
|
|
44
|
+
this.data = void 0;
|
|
45
|
+
const identity = {
|
|
46
|
+
name,
|
|
47
|
+
data: this.data
|
|
48
|
+
};
|
|
49
|
+
const id = helpers.A_UtilsHelper.hash(identity);
|
|
50
|
+
this.aseid = this.generateASEID({
|
|
51
|
+
entity: name,
|
|
52
|
+
id
|
|
53
|
+
});
|
|
92
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Allows to initialize the signal from a new signal entity. This is useful for example when we want to create a new instance of the signal entity with the same data as another instance, but with a different ASEID.
|
|
57
|
+
*
|
|
58
|
+
* @param newEntity
|
|
59
|
+
*/
|
|
93
60
|
fromNew(newEntity) {
|
|
94
61
|
this.data = newEntity.data;
|
|
95
62
|
const identity = newEntity.id || {
|
|
96
63
|
name: newEntity.name,
|
|
97
64
|
data: this.data
|
|
98
65
|
};
|
|
99
|
-
const id =
|
|
66
|
+
const id = helpers.A_UtilsHelper.hash(identity);
|
|
100
67
|
this.aseid = this.generateASEID({
|
|
101
68
|
entity: newEntity.name,
|
|
102
69
|
id
|
|
103
70
|
});
|
|
104
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Allows to initialize the signal from a serialized version of the signal. This is useful for example when we receive a signal from the server and we want to create an instance of the signal entity from the received data.
|
|
74
|
+
*
|
|
75
|
+
* @param serializedEntity
|
|
76
|
+
*/
|
|
77
|
+
fromJSON(serializedEntity) {
|
|
78
|
+
super.fromJSON(serializedEntity);
|
|
79
|
+
this.data = serializedEntity.data;
|
|
80
|
+
}
|
|
105
81
|
toJSON() {
|
|
106
82
|
return {
|
|
107
83
|
...super.toJSON(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/A-Signal/entities/A-Signal.entity.ts"],"names":["A_Signal","A_Entity","A_Frame"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/A-Signal/entities/A-Signal.entity.ts"],"names":["A_Signal","A_Entity","A_UtilsHelper","A_Frame"],"mappings":";;;;;;;;;;;;;;AAuBaA,gBAAA,GAAN,uBAGGC,iBAAA,CAA2F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BjG,QAAQ,KAAA,EAA4C;AAChD,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,EAAA,KAAO,KAAA,CAAM,MAAM,EAAA,EAAI;AAClC,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAA,GAAsB;AAClB,IAAA,MAAM,IAAA,GAAQ,KAAK,WAAA,CAAgC,MAAA;AAEnD,IAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AAEZ,IAAA,MAAM,QAAA,GAAW;AAAA,MACb,IAAA;AAAA,MACA,MAAM,IAAA,CAAK;AAAA,KACf;AAEA,IAAA,MAAM,EAAA,GAAKC,qBAAA,CAAc,IAAA,CAAK,QAAQ,CAAA;AAEtC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,aAAA,CAAc;AAAA,MAC5B,MAAA,EAAQ,IAAA;AAAA,MACR;AAAA,KACH,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,SAAA,EAAkD;AACtD,IAAA,IAAA,CAAK,OAAO,SAAA,CAAU,IAAA;AAEtB,IAAA,MAAM,QAAA,GAAW,UAAU,EAAA,IAAM;AAAA,MAC7B,MAAM,SAAA,CAAU,IAAA;AAAA,MAChB,MAAM,IAAA,CAAK;AAAA,KACf;AAEA,IAAA,MAAM,EAAA,GAAKA,qBAAA,CAAc,IAAA,CAAK,QAAQ,CAAA;AAEtC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,aAAA,CAAc;AAAA,MAC5B,QAAQ,SAAA,CAAU,IAAA;AAAA,MAClB;AAAA,KACH,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,gBAAA,EAAyE;AAC9E,IAAA,KAAA,CAAM,SAAS,gBAAgB,CAAA;AAC/B,IAAA,IAAA,CAAK,OAAO,gBAAA,CAAiB,IAAA;AAAA,EACjC;AAAA,EAEA,MAAA,GAA0D;AACtD,IAAA,OAAO;AAAA,MACH,GAAG,MAAM,MAAA,EAAO;AAAA,MAChB,MAAM,IAAA,CAAK;AAAA,KACf;AAAA,EACJ;AAEJ;AAvGaF,gBAAA,GAAN,eAAA,CAAA;AAAA,EALNG,eAAQ,MAAA,CAAO;AAAA,IACZ,SAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa;AAAA,GAChB;AAAA,CAAA,EACYH,gBAAA,CAAA","file":"A-Signal.entity.js","sourcesContent":["import { A_Entity } from \"@adaas/a-concept\";\nimport { A_Signal_Init, A_Signal_Serialized } from \"../A-Signal.types\";\nimport { A_Frame } from \"@adaas/a-frame\";\nimport { A_UtilsHelper } from \"@adaas/a-utils/helpers\";\n\n/**\n * A Signal Entity is an individual signal instance that carries data.\n * Signals is a event types that uses for vectors of signals to be used for further processing. \n * \n * Comparing to standard events, signals should be used in case when the event impacts some \"state\" \n * and the state should be used instead of the event itself.\n * \n * For example, a signal can represent the current status of a user (online/offline/away), \n * while an event would represent a single action (user logged in/logged out).\n * \n * Signals are typically used in scenarios where the current state is more important than individual events, \n * such as monitoring systems, real-time dashboards, or stateful applications.\n */\n@A_Frame.Entity({\n namespace: 'A-Utils',\n name: 'A-Signal',\n 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.'\n})\nexport class A_Signal<\n _TSignalDataType extends any = any,\n _TSignalSerializedDataType extends any = _TSignalDataType,\n> extends A_Entity<A_Signal_Init<_TSignalDataType>, A_Signal_Serialized<_TSignalSerializedDataType>> {\n\n\n // ========================================================================\n // ========================== Static Methods ==============================\n // ========================================================================\n\n // ========================================================================\n // ========================== Instance Properties ========================\n // ========================================================================\n\n /**\n * The actual data carried by the signal.\n */\n data!: _TSignalDataType;\n\n /**\n * This method compares the current signal with another signal instance by deduplication ID\n * this id can be configured during initialization with the \"id\" property.\n * \n * example: \n * * const signalA = new A_Signal({ id: ['user-status', 'user123'], data: { status: 'online' } });\n * * const signalB = new A_Signal({ id: ['user-status', 'user123'], data: { status: 'offline' } });\n * \n * signalA.compare(signalB) // true because both signals have the same deduplication ID\n * \n * @param other \n * @returns \n */\n compare(other: A_Signal<_TSignalDataType>): boolean {\n if (this.aseid.id !== other.aseid.id) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Allows to define default data for the signal.\n * \n * If no data is provided during initialization, the default data will be used.\n * \n * @returns \n */\n fromUndefined(): void {\n const name = (this.constructor as typeof A_Entity).entity;\n\n this.data = undefined as unknown as _TSignalDataType;\n\n const identity = {\n name: name,\n data: this.data\n };\n\n const id = A_UtilsHelper.hash(identity);\n\n this.aseid = this.generateASEID({\n entity: name,\n id: id,\n });\n }\n\n /**\n * Allows to initialize the signal from a new signal entity. This is useful for example when we want to create a new instance of the signal entity with the same data as another instance, but with a different ASEID.\n * \n * @param newEntity \n */\n fromNew(newEntity: A_Signal_Init<_TSignalDataType>): void {\n this.data = newEntity.data;\n\n const identity = newEntity.id || {\n name: newEntity.name,\n data: this.data\n };\n\n const id = A_UtilsHelper.hash(identity);\n\n this.aseid = this.generateASEID({\n entity: newEntity.name,\n id: id,\n });\n }\n\n /**\n * Allows to initialize the signal from a serialized version of the signal. This is useful for example when we receive a signal from the server and we want to create an instance of the signal entity from the received data.\n * \n * @param serializedEntity \n */\n fromJSON(serializedEntity: A_Signal_Serialized<_TSignalSerializedDataType>): void {\n super.fromJSON(serializedEntity);\n this.data = serializedEntity.data as unknown as _TSignalDataType;\n }\n\n toJSON(): A_Signal_Serialized<_TSignalSerializedDataType> {\n return {\n ...super.toJSON(),\n data: this.data as unknown as _TSignalSerializedDataType\n };\n }\n\n}"]}
|
|
@@ -1,63 +1,9 @@
|
|
|
1
1
|
import { __decorateClass } from '../../../chunk-EQQGB2QZ.mjs';
|
|
2
2
|
import { A_Entity } from '@adaas/a-concept';
|
|
3
3
|
import { A_Frame } from '@adaas/a-frame';
|
|
4
|
+
import { A_UtilsHelper } from '@adaas/a-utils/helpers';
|
|
4
5
|
|
|
5
6
|
let A_Signal = class extends A_Entity {
|
|
6
|
-
// ========================================================================
|
|
7
|
-
// ========================== Static Methods ==============================
|
|
8
|
-
// ========================================================================
|
|
9
|
-
/**
|
|
10
|
-
* Allows to define default data for the signal.
|
|
11
|
-
*
|
|
12
|
-
* If no data is provided during initialization, the default data will be used.
|
|
13
|
-
*
|
|
14
|
-
* @returns
|
|
15
|
-
*/
|
|
16
|
-
static default() {
|
|
17
|
-
return void 0;
|
|
18
|
-
}
|
|
19
|
-
createHash(str) {
|
|
20
|
-
let hashSource;
|
|
21
|
-
if (str instanceof Map) {
|
|
22
|
-
hashSource = JSON.stringify(Array.from(str.entries()));
|
|
23
|
-
} else if (str instanceof Set) {
|
|
24
|
-
hashSource = JSON.stringify(Array.from(str.values()));
|
|
25
|
-
} else {
|
|
26
|
-
switch (typeof str) {
|
|
27
|
-
case "string":
|
|
28
|
-
hashSource = str;
|
|
29
|
-
break;
|
|
30
|
-
case "undefined":
|
|
31
|
-
hashSource = "undefined";
|
|
32
|
-
break;
|
|
33
|
-
case "object":
|
|
34
|
-
if ("toJSON" in str)
|
|
35
|
-
hashSource = JSON.stringify(str.toJSON());
|
|
36
|
-
else
|
|
37
|
-
hashSource = JSON.stringify(str);
|
|
38
|
-
break;
|
|
39
|
-
case "number":
|
|
40
|
-
hashSource = str.toString();
|
|
41
|
-
break;
|
|
42
|
-
case "boolean":
|
|
43
|
-
hashSource = str ? "true" : "false";
|
|
44
|
-
break;
|
|
45
|
-
case "function":
|
|
46
|
-
hashSource = str.toString();
|
|
47
|
-
break;
|
|
48
|
-
default:
|
|
49
|
-
hashSource = String(str);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
let hash = 0, i, chr;
|
|
53
|
-
for (i = 0; i < hashSource.length; i++) {
|
|
54
|
-
chr = hashSource.charCodeAt(i);
|
|
55
|
-
hash = (hash << 5) - hash + chr;
|
|
56
|
-
hash |= 0;
|
|
57
|
-
}
|
|
58
|
-
const hashString = hash.toString();
|
|
59
|
-
return hashString;
|
|
60
|
-
}
|
|
61
7
|
/**
|
|
62
8
|
* This method compares the current signal with another signal instance by deduplication ID
|
|
63
9
|
* this id can be configured during initialization with the "id" property.
|
|
@@ -77,22 +23,52 @@ let A_Signal = class extends A_Entity {
|
|
|
77
23
|
}
|
|
78
24
|
return true;
|
|
79
25
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Allows to define default data for the signal.
|
|
28
|
+
*
|
|
29
|
+
* If no data is provided during initialization, the default data will be used.
|
|
30
|
+
*
|
|
31
|
+
* @returns
|
|
32
|
+
*/
|
|
33
|
+
fromUndefined() {
|
|
34
|
+
const name = this.constructor.entity;
|
|
35
|
+
this.data = void 0;
|
|
36
|
+
const identity = {
|
|
37
|
+
name,
|
|
38
|
+
data: this.data
|
|
39
|
+
};
|
|
40
|
+
const id = A_UtilsHelper.hash(identity);
|
|
41
|
+
this.aseid = this.generateASEID({
|
|
42
|
+
entity: name,
|
|
43
|
+
id
|
|
44
|
+
});
|
|
83
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Allows to initialize the signal from a new signal entity. This is useful for example when we want to create a new instance of the signal entity with the same data as another instance, but with a different ASEID.
|
|
48
|
+
*
|
|
49
|
+
* @param newEntity
|
|
50
|
+
*/
|
|
84
51
|
fromNew(newEntity) {
|
|
85
52
|
this.data = newEntity.data;
|
|
86
53
|
const identity = newEntity.id || {
|
|
87
54
|
name: newEntity.name,
|
|
88
55
|
data: this.data
|
|
89
56
|
};
|
|
90
|
-
const id =
|
|
57
|
+
const id = A_UtilsHelper.hash(identity);
|
|
91
58
|
this.aseid = this.generateASEID({
|
|
92
59
|
entity: newEntity.name,
|
|
93
60
|
id
|
|
94
61
|
});
|
|
95
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Allows to initialize the signal from a serialized version of the signal. This is useful for example when we receive a signal from the server and we want to create an instance of the signal entity from the received data.
|
|
65
|
+
*
|
|
66
|
+
* @param serializedEntity
|
|
67
|
+
*/
|
|
68
|
+
fromJSON(serializedEntity) {
|
|
69
|
+
super.fromJSON(serializedEntity);
|
|
70
|
+
this.data = serializedEntity.data;
|
|
71
|
+
}
|
|
96
72
|
toJSON() {
|
|
97
73
|
return {
|
|
98
74
|
...super.toJSON(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/A-Signal/entities/A-Signal.entity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/A-Signal/entities/A-Signal.entity.ts"],"names":[],"mappings":";;;;;AAuBO,IAAM,QAAA,GAAN,cAGG,QAAA,CAA2F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BjG,QAAQ,KAAA,EAA4C;AAChD,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,EAAA,KAAO,KAAA,CAAM,MAAM,EAAA,EAAI;AAClC,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAA,GAAsB;AAClB,IAAA,MAAM,IAAA,GAAQ,KAAK,WAAA,CAAgC,MAAA;AAEnD,IAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AAEZ,IAAA,MAAM,QAAA,GAAW;AAAA,MACb,IAAA;AAAA,MACA,MAAM,IAAA,CAAK;AAAA,KACf;AAEA,IAAA,MAAM,EAAA,GAAK,aAAA,CAAc,IAAA,CAAK,QAAQ,CAAA;AAEtC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,aAAA,CAAc;AAAA,MAC5B,MAAA,EAAQ,IAAA;AAAA,MACR;AAAA,KACH,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,SAAA,EAAkD;AACtD,IAAA,IAAA,CAAK,OAAO,SAAA,CAAU,IAAA;AAEtB,IAAA,MAAM,QAAA,GAAW,UAAU,EAAA,IAAM;AAAA,MAC7B,MAAM,SAAA,CAAU,IAAA;AAAA,MAChB,MAAM,IAAA,CAAK;AAAA,KACf;AAEA,IAAA,MAAM,EAAA,GAAK,aAAA,CAAc,IAAA,CAAK,QAAQ,CAAA;AAEtC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,aAAA,CAAc;AAAA,MAC5B,QAAQ,SAAA,CAAU,IAAA;AAAA,MAClB;AAAA,KACH,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,gBAAA,EAAyE;AAC9E,IAAA,KAAA,CAAM,SAAS,gBAAgB,CAAA;AAC/B,IAAA,IAAA,CAAK,OAAO,gBAAA,CAAiB,IAAA;AAAA,EACjC;AAAA,EAEA,MAAA,GAA0D;AACtD,IAAA,OAAO;AAAA,MACH,GAAG,MAAM,MAAA,EAAO;AAAA,MAChB,MAAM,IAAA,CAAK;AAAA,KACf;AAAA,EACJ;AAEJ;AAvGa,QAAA,GAAN,eAAA,CAAA;AAAA,EALN,QAAQ,MAAA,CAAO;AAAA,IACZ,SAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa;AAAA,GAChB;AAAA,CAAA,EACY,QAAA,CAAA","file":"A-Signal.entity.mjs","sourcesContent":["import { A_Entity } from \"@adaas/a-concept\";\nimport { A_Signal_Init, A_Signal_Serialized } from \"../A-Signal.types\";\nimport { A_Frame } from \"@adaas/a-frame\";\nimport { A_UtilsHelper } from \"@adaas/a-utils/helpers\";\n\n/**\n * A Signal Entity is an individual signal instance that carries data.\n * Signals is a event types that uses for vectors of signals to be used for further processing. \n * \n * Comparing to standard events, signals should be used in case when the event impacts some \"state\" \n * and the state should be used instead of the event itself.\n * \n * For example, a signal can represent the current status of a user (online/offline/away), \n * while an event would represent a single action (user logged in/logged out).\n * \n * Signals are typically used in scenarios where the current state is more important than individual events, \n * such as monitoring systems, real-time dashboards, or stateful applications.\n */\n@A_Frame.Entity({\n namespace: 'A-Utils',\n name: 'A-Signal',\n 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.'\n})\nexport class A_Signal<\n _TSignalDataType extends any = any,\n _TSignalSerializedDataType extends any = _TSignalDataType,\n> extends A_Entity<A_Signal_Init<_TSignalDataType>, A_Signal_Serialized<_TSignalSerializedDataType>> {\n\n\n // ========================================================================\n // ========================== Static Methods ==============================\n // ========================================================================\n\n // ========================================================================\n // ========================== Instance Properties ========================\n // ========================================================================\n\n /**\n * The actual data carried by the signal.\n */\n data!: _TSignalDataType;\n\n /**\n * This method compares the current signal with another signal instance by deduplication ID\n * this id can be configured during initialization with the \"id\" property.\n * \n * example: \n * * const signalA = new A_Signal({ id: ['user-status', 'user123'], data: { status: 'online' } });\n * * const signalB = new A_Signal({ id: ['user-status', 'user123'], data: { status: 'offline' } });\n * \n * signalA.compare(signalB) // true because both signals have the same deduplication ID\n * \n * @param other \n * @returns \n */\n compare(other: A_Signal<_TSignalDataType>): boolean {\n if (this.aseid.id !== other.aseid.id) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Allows to define default data for the signal.\n * \n * If no data is provided during initialization, the default data will be used.\n * \n * @returns \n */\n fromUndefined(): void {\n const name = (this.constructor as typeof A_Entity).entity;\n\n this.data = undefined as unknown as _TSignalDataType;\n\n const identity = {\n name: name,\n data: this.data\n };\n\n const id = A_UtilsHelper.hash(identity);\n\n this.aseid = this.generateASEID({\n entity: name,\n id: id,\n });\n }\n\n /**\n * Allows to initialize the signal from a new signal entity. This is useful for example when we want to create a new instance of the signal entity with the same data as another instance, but with a different ASEID.\n * \n * @param newEntity \n */\n fromNew(newEntity: A_Signal_Init<_TSignalDataType>): void {\n this.data = newEntity.data;\n\n const identity = newEntity.id || {\n name: newEntity.name,\n data: this.data\n };\n\n const id = A_UtilsHelper.hash(identity);\n\n this.aseid = this.generateASEID({\n entity: newEntity.name,\n id: id,\n });\n }\n\n /**\n * Allows to initialize the signal from a serialized version of the signal. This is useful for example when we receive a signal from the server and we want to create an instance of the signal entity from the received data.\n * \n * @param serializedEntity \n */\n fromJSON(serializedEntity: A_Signal_Serialized<_TSignalSerializedDataType>): void {\n super.fromJSON(serializedEntity);\n this.data = serializedEntity.data as unknown as _TSignalDataType;\n }\n\n toJSON(): A_Signal_Serialized<_TSignalSerializedDataType> {\n return {\n ...super.toJSON(),\n data: this.data as unknown as _TSignalSerializedDataType\n };\n }\n\n}"]}
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -221,7 +221,7 @@ exports.A_SignalVector = class A_SignalVector extends aConcept.A_Entity {
|
|
|
221
221
|
const signalIndex = this._signals.findIndex((s) => s.constructor === signalConstructor);
|
|
222
222
|
let data;
|
|
223
223
|
if (signalIndex === -1) {
|
|
224
|
-
data = signalConstructor
|
|
224
|
+
data = new signalConstructor();
|
|
225
225
|
} else {
|
|
226
226
|
const signal = this._signals[signalIndex];
|
|
227
227
|
data = signal;
|
|
@@ -1 +1 @@
|
|
|
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 = (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"]}
|
|
@@ -212,7 +212,7 @@ let A_SignalVector = class extends A_Entity {
|
|
|
212
212
|
const signalIndex = this._signals.findIndex((s) => s.constructor === signalConstructor);
|
|
213
213
|
let data;
|
|
214
214
|
if (signalIndex === -1) {
|
|
215
|
-
data = signalConstructor
|
|
215
|
+
data = new signalConstructor();
|
|
216
216
|
} else {
|
|
217
217
|
const signal = this._signals[signalIndex];
|
|
218
218
|
data = signal;
|