@adaas/a-concept 0.1.44 → 0.1.46

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.
@@ -11,7 +11,6 @@ describe('A-Fragment Tests', () => {
11
11
 
12
12
  expect(fragment).toBeDefined();
13
13
  expect(fragment.name).toBe('A_Fragment');
14
- expect(fragment.size()).toBe(0);
15
14
  });
16
15
 
17
16
  it('It Should be possible to create an A_Fragment instance with custom name', async () => {
@@ -20,309 +19,5 @@ describe('A-Fragment Tests', () => {
20
19
 
21
20
  expect(fragment).toBeDefined();
22
21
  expect(fragment.name).toBe('CustomFragment');
23
- expect(fragment.size()).toBe(0);
24
- });
25
-
26
- it('It Should be possible to create a typed A_Fragment instance', async () => {
27
-
28
- const fragment = new A_Fragment<{ userId: string; role: string }>({
29
- name: 'UserFragment'
30
- });
31
-
32
- expect(fragment).toBeDefined();
33
- expect(fragment.name).toBe('UserFragment');
34
- expect(fragment.size()).toBe(0);
35
- });
36
-
37
- it('It Should be possible to store and retrieve data from fragment meta', async () => {
38
-
39
- const fragment = new A_Fragment<{ userId: string; role: string }>({
40
- name: 'UserFragment'
41
- });
42
-
43
- fragment.set('userId', '12345');
44
- fragment.set('role', 'admin');
45
-
46
- expect(fragment.get('userId')).toBe('12345');
47
- expect(fragment.get('role')).toBe('admin');
48
- expect(fragment.has('userId')).toBe(true);
49
- expect(fragment.has('role')).toBe(true);
50
- expect(fragment.size()).toBe(2);
51
- });
52
-
53
- it('It Should be possible to check if keys exist in fragment meta', async () => {
54
-
55
- const fragment = new A_Fragment<{ test: string; value: number }>();
56
-
57
- expect(fragment.has('test')).toBe(false);
58
- expect(fragment.has('value')).toBe(false);
59
-
60
- fragment.set('test', 'hello');
61
-
62
- expect(fragment.has('test')).toBe(true);
63
- expect(fragment.has('value')).toBe(false);
64
- });
65
-
66
- it('It Should be possible to get all keys from fragment meta', async () => {
67
-
68
- const fragment = new A_Fragment<{ userId: string; role: string; lastLogin: Date }>();
69
-
70
- fragment.set('userId', '12345');
71
- fragment.set('role', 'admin');
72
-
73
- const keys = fragment.keys();
74
-
75
- expect(keys).toContain('userId');
76
- expect(keys).toContain('role');
77
- expect(keys).not.toContain('lastLogin');
78
- expect(keys.length).toBe(2);
79
- });
80
-
81
- it('It Should be possible to set multiple values at once', async () => {
82
-
83
- const fragment = new A_Fragment<{ userId: string; role: string; isActive: boolean }>();
84
-
85
- fragment.setMultiple({
86
- userId: '12345',
87
- role: 'admin',
88
- isActive: true
89
- });
90
-
91
- expect(fragment.get('userId')).toBe('12345');
92
- expect(fragment.get('role')).toBe('admin');
93
- expect(fragment.get('isActive')).toBe(true);
94
- expect(fragment.size()).toBe(3);
95
- });
96
-
97
- it('It Should be possible to drop specific keys from fragment meta', async () => {
98
-
99
- const fragment = new A_Fragment<{ userId: string; role: string; temp: string }>();
100
-
101
- fragment.set('userId', '12345');
102
- fragment.set('role', 'admin');
103
- fragment.set('temp', 'temporary');
104
-
105
- expect(fragment.size()).toBe(3);
106
-
107
- fragment.drop('temp');
108
-
109
- expect(fragment.has('temp')).toBe(false);
110
- expect(fragment.has('userId')).toBe(true);
111
- expect(fragment.has('role')).toBe(true);
112
- expect(fragment.size()).toBe(2);
113
- });
114
-
115
- it('It Should be possible to clear all data from fragment meta', async () => {
116
-
117
- const fragment = new A_Fragment<{ userId: string; role: string }>();
118
-
119
- fragment.set('userId', '12345');
120
- fragment.set('role', 'admin');
121
-
122
- expect(fragment.size()).toBe(2);
123
-
124
- fragment.clear();
125
-
126
- expect(fragment.size()).toBe(0);
127
- expect(fragment.has('userId')).toBe(false);
128
- expect(fragment.has('role')).toBe(false);
129
- });
130
-
131
- it('It Should be possible to clone a fragment with its data', async () => {
132
-
133
- const original = new A_Fragment<{ userId: string; role: string }>({
134
- name: 'OriginalFragment'
135
- });
136
-
137
- original.set('userId', '12345');
138
- original.set('role', 'admin');
139
-
140
- const clone = original.clone('ClonedFragment');
141
-
142
- expect(clone).toBeDefined();
143
- expect(clone.name).toBe('ClonedFragment');
144
- expect(clone.get('userId')).toBe('12345');
145
- expect(clone.get('role')).toBe('admin');
146
- expect(clone.size()).toBe(2);
147
-
148
- // Verify they are separate instances
149
- clone.set('userId', '67890');
150
- expect(original.get('userId')).toBe('12345');
151
- expect(clone.get('userId')).toBe('67890');
152
- });
153
-
154
- it('It Should be possible to clone a fragment with auto-generated name', async () => {
155
-
156
- const original = new A_Fragment<{ test: string }>({
157
- name: 'TestFragment'
158
- });
159
-
160
- original.set('test', 'value');
161
-
162
- const clone = original.clone();
163
-
164
- expect(clone.name).toBe('TestFragment_copy');
165
- expect(clone.get('test')).toBe('value');
166
- });
167
-
168
- it('It Should be possible to serialize a fragment to JSON', async () => {
169
-
170
- const fragment = new A_Fragment<{ userId: string; role: string }>({
171
- name: 'UserFragment'
172
- });
173
-
174
- fragment.set('userId', '12345');
175
- fragment.set('role', 'admin');
176
-
177
- const json = fragment.toJSON();
178
-
179
- expect(json).toBeDefined();
180
- expect(json.name).toBe('UserFragment');
181
- expect(json.userId).toBe('12345');
182
- expect(json.role).toBe('admin');
183
- });
184
-
185
- it('It Should be possible to create an inherited A_Fragment instance', async () => {
186
-
187
- class CustomFragment extends A_Fragment<{ sessionId: string; timestamp: number }> {
188
- constructor() {
189
- super({ name: 'CustomFragment' });
190
- }
191
-
192
- getSessionInfo(): string {
193
- const sessionId = this.get('sessionId') || 'unknown';
194
- const timestamp = this.get('timestamp') || 0;
195
- return `${sessionId}-${timestamp}`;
196
- }
197
- }
198
-
199
- const fragment = new CustomFragment();
200
-
201
- expect(fragment).toBeDefined();
202
- expect(fragment.name).toBe('CustomFragment');
203
- expect(fragment instanceof A_Fragment).toBe(true);
204
- expect(fragment instanceof CustomFragment).toBe(true);
205
-
206
- fragment.set('sessionId', 'sess123');
207
- fragment.set('timestamp', 1698765432);
208
-
209
- expect(fragment.getSessionInfo()).toBe('sess123-1698765432');
210
- });
211
-
212
- it('It Should be possible to create a fragment with custom serialization', async () => {
213
-
214
- class SessionFragment extends A_Fragment<
215
- { sessionId: string; timestamp: number },
216
- { name: string; sessionData: string }
217
- > {
218
- constructor() {
219
- super({ name: 'SessionFragment' });
220
- }
221
-
222
- toJSON(): { name: string; sessionData: string } {
223
- const sessionId = this.get('sessionId') || 'unknown';
224
- const timestamp = this.get('timestamp') || 0;
225
- return {
226
- name: this.name,
227
- sessionData: `${sessionId}-${timestamp}`
228
- };
229
- }
230
- }
231
-
232
- const fragment = new SessionFragment();
233
- fragment.set('sessionId', 'sess123');
234
- fragment.set('timestamp', 1698765432);
235
-
236
- const json = fragment.toJSON();
237
-
238
- expect(json).toBeDefined();
239
- expect(json.name).toBe('SessionFragment');
240
- expect(json.sessionData).toBe('sess123-1698765432');
241
- expect(json).not.toHaveProperty('sessionId');
242
- expect(json).not.toHaveProperty('timestamp');
243
- });
244
-
245
- it('It Should be possible to access the underlying meta object', async () => {
246
-
247
- const fragment = new A_Fragment<{ test: string; value: number }>();
248
-
249
- expect(fragment.meta).toBeDefined();
250
- expect(fragment.meta.size()).toBe(0);
251
-
252
- fragment.set('test', 'hello');
253
- fragment.set('value', 42);
254
-
255
- expect(fragment.meta.size()).toBe(2);
256
- expect(fragment.meta.has('test')).toBe(true);
257
- expect(fragment.meta.get('test')).toBe('hello');
258
- });
259
-
260
- it('It Should handle undefined values correctly', async () => {
261
-
262
- const fragment = new A_Fragment<{ optional?: string; required: string }>();
263
-
264
- expect(fragment.get('optional')).toBeUndefined();
265
- expect(fragment.get('required')).toBeUndefined();
266
-
267
- fragment.set('required', 'value');
268
-
269
- expect(fragment.get('required')).toBe('value');
270
- expect(fragment.get('optional')).toBeUndefined();
271
- expect(fragment.has('required')).toBe(true);
272
- expect(fragment.has('optional')).toBe(false);
273
- });
274
-
275
- it('It Should handle setMultiple with undefined values correctly', async () => {
276
-
277
- const fragment = new A_Fragment<{ a?: string; b?: number; c: boolean }>();
278
-
279
- fragment.setMultiple({
280
- a: 'test',
281
- b: undefined, // Should be ignored
282
- c: true
283
- });
284
-
285
- expect(fragment.has('a')).toBe(true);
286
- expect(fragment.has('b')).toBe(false);
287
- expect(fragment.has('c')).toBe(true);
288
- expect(fragment.size()).toBe(2);
289
- });
290
- it('It Should allow override get method correctly', async () => {
291
-
292
- const scope = new A_Scope();
293
-
294
- class CustomFragment<T extends string[]> extends A_Fragment<{
295
- [key in T[number]]: any
296
- }> {
297
-
298
- constructor(properties: T) {
299
- super({ name: 'CustomFragment' });
300
- properties.forEach((prop) => {
301
- this.set(prop, `value_of_${prop}`);
302
- });
303
- }
304
- get<K extends T[number]>(param: K): { [key in T[number]]: any; }[K] | undefined {
305
- const originalValue = super.get(param);
306
- if (originalValue !== undefined) {
307
- return `custom_${originalValue}`;
308
- }
309
- return undefined;
310
- }
311
-
312
-
313
- }
314
-
315
-
316
- const fragment = new CustomFragment<['key1', 'key2']>(['key1', 'key2']);
317
-
318
- scope.register(fragment);
319
-
320
-
321
- expect(fragment.get('key1')).toBe('custom_value_of_key1');
322
- expect(fragment.get('key2')).toBe('custom_value_of_key2');
323
- expect(fragment.get('key3' as any)).toBeUndefined();
324
-
325
- scope.destroy();
326
-
327
22
  });
328
23
  });
@@ -35,6 +35,45 @@ describe('A-Scope tests', () => {
35
35
  const resolved = scope.resolve(A_Component);
36
36
  expect(resolved).toBeUndefined();
37
37
  });
38
+ it('Should be possible to set and get meta variables for scope', async () => {
39
+ const scope = new A_Scope<{ userId: string, role: string }>({ name: 'TestScope' });
40
+
41
+ scope.set('userId', '12345');
42
+ scope.set('role', 'admin');
43
+
44
+ const userId = scope.get('userId');
45
+ const role = scope.get('role');
46
+
47
+ expect(userId).toBe('12345');
48
+ expect(role).toBe('admin');
49
+ });
50
+ it('Should be possible to set meta via constructor', async () => {
51
+ const scope = new A_Scope<{ userId: string, role: string }>({
52
+ name: 'TestScope',
53
+ meta: {
54
+ userId: '12345',
55
+ role: 'admin'
56
+ }
57
+ });
58
+
59
+ const userId = scope.get('userId');
60
+ const role = scope.get('role');
61
+
62
+ expect(userId).toBe('12345');
63
+ expect(role).toBe('admin');
64
+ });
65
+ it('Should properly use types and generics', async () => {
66
+ const scope = new A_Scope<{ userId: string, role: { name: string } }>({ name: 'TestScope' });
67
+
68
+ scope.set('userId', '12345');
69
+ scope.set('role', { name: 'admin' });
70
+
71
+ const userId = scope.get('userId');
72
+ const role = scope.get('role');
73
+
74
+ expect(userId).toBe('12345');
75
+ expect(role).toEqual({ name: 'admin' });
76
+ });
38
77
  it('Should allow to register and resolve a component with dependencies', async () => {
39
78
  class DependentComponent extends A_Component {
40
79
  constructor(