@adaas/a-concept 0.1.60 → 0.2.1

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 (48) hide show
  1. package/dist/index.cjs +2 -2
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.mts +1584 -1456
  4. package/dist/index.d.ts +1584 -1456
  5. package/dist/index.mjs +2 -2
  6. package/dist/index.mjs.map +1 -1
  7. package/package.json +1 -1
  8. package/src/global/A-Abstraction/A-Abstraction.types.ts +2 -3
  9. package/src/global/A-Caller/A_Caller.types.ts +2 -1
  10. package/src/global/A-Component/A-Component.types.ts +2 -1
  11. package/src/global/A-Concept/A-Concept.types.ts +2 -1
  12. package/src/global/A-Container/A-Container.types.ts +2 -1
  13. package/src/global/A-Context/A-Context.class.ts +56 -25
  14. package/src/global/A-Dependency/A-Dependency-All.decorator.ts +77 -0
  15. package/src/global/A-Dependency/A-Dependency-Default.decorator.ts +4 -4
  16. package/src/global/A-Dependency/A-Dependency-Flat.decorator.ts +3 -2
  17. package/src/global/A-Dependency/A-Dependency-Load.decorator.ts +9 -13
  18. package/src/global/A-Dependency/A-Dependency-Parent.decorator.ts +2 -3
  19. package/src/global/A-Dependency/A-Dependency-Require.decorator.ts +1 -2
  20. package/src/global/A-Dependency/A-Dependency.class.ts +144 -5
  21. package/src/global/A-Dependency/A-Dependency.error.ts +3 -0
  22. package/src/global/A-Dependency/A-Dependency.types.ts +124 -3
  23. package/src/global/A-Entity/A-Entity.types.ts +2 -1
  24. package/src/global/A-Error/A_Error.types.ts +2 -1
  25. package/src/global/A-Feature/A-Feature-Define.decorator.ts +0 -1
  26. package/src/global/A-Feature/A-Feature-Extend.decorator.ts +1 -5
  27. package/src/global/A-Feature/A-Feature.types.ts +3 -3
  28. package/src/global/A-Fragment/A-Fragment.types.ts +2 -1
  29. package/src/global/A-Inject/A-Inject.decorator.ts +70 -42
  30. package/src/global/A-Inject/A-Inject.types.ts +2 -42
  31. package/src/global/A-Meta/A-Meta.decorator.ts +5 -3
  32. package/src/global/A-Meta/A-Meta.types.ts +2 -1
  33. package/src/global/A-Scope/A-Scope.class.ts +409 -389
  34. package/src/global/A-Scope/A-Scope.error.ts +2 -0
  35. package/src/global/A-Scope/A-Scope.types.ts +4 -8
  36. package/src/global/A-Stage/A-Stage.class.ts +19 -86
  37. package/src/global/A-Stage/A-Stage.types.ts +3 -1
  38. package/src/global/A-StepManager/A-StepManager.class.ts +1 -1
  39. package/src/global/ASEID/ASEID.class.ts +20 -0
  40. package/src/helpers/A_Common.helper.ts +4 -0
  41. package/src/helpers/A_TypeGuards.helper.ts +28 -3
  42. package/src/types/A_Common.types.ts +4 -0
  43. package/tests/A-Abstraction.test.ts +2 -0
  44. package/tests/A-Dependency.test.ts +49 -5
  45. package/tests/A-Feature.test.ts +44 -19
  46. package/tests/A-Meta.test.ts +4 -0
  47. package/tests/A-Scope.test.ts +38 -9
  48. package/tests/A-StepManager.test.ts +40 -39
@@ -7,7 +7,7 @@ import { A_Feature } from '@adaas/a-concept/global/A-Feature/A-Feature.class';
7
7
  import { A_Fragment } from '@adaas/a-concept/global/A-Fragment/A-Fragment.class';
8
8
  import { A_Scope } from "@adaas/a-concept/global/A-Scope/A-Scope.class";
9
9
  import { ASEID } from '@adaas/a-concept/global/ASEID/ASEID.class';
10
- import { A_Error } from '../src';
10
+ import { A_Dependency, A_Error } from '../src';
11
11
 
12
12
  jest.retryTimes(0);
13
13
 
@@ -149,7 +149,7 @@ describe('A-Scope tests', () => {
149
149
  const entity2 = new MyEntity({ bar: 'baz' });
150
150
  scope.register(entity1);
151
151
  scope.register(entity2);
152
- const resolved = scope.resolve(MyEntity, { query: { bar: 'baz' } });
152
+ const resolved = scope.resolve(new A_Dependency(MyEntity, { query: { bar: 'baz' } }));
153
153
  expect(resolved).toBe(entity2);
154
154
 
155
155
 
@@ -168,11 +168,11 @@ describe('A-Scope tests', () => {
168
168
  }
169
169
  }
170
170
  const scope = new A_Scope({ name: 'TestScope' });
171
- for (let i = 0; i < 10; i++) {
171
+ for (let i = 0; i < 15; i++) {
172
172
  const entity = new MyEntity({ foo: 'bar' });
173
173
  scope.register(entity);
174
174
  }
175
- const resolved = scope.resolve(MyEntity, { pagination: { count: 10 } });
175
+ const resolved = scope.resolveDependency(new A_Dependency(MyEntity, { pagination: { count: 10 } }));
176
176
  expect(Array.isArray(resolved)).toBe(true);
177
177
  });
178
178
  it('Should return array with pagination.count and provided filter', async () => {
@@ -197,7 +197,7 @@ describe('A-Scope tests', () => {
197
197
  const entity = new MyEntity({ foo: 'baz' });
198
198
  scope.register(entity);
199
199
  }
200
- const resolved = scope.resolve(MyEntity, { query: { foo: 'baz' }, pagination: { count: 10 } });
200
+ const resolved = scope.resolve(new A_Dependency(MyEntity, { query: { foo: 'baz' }, pagination: { count: 10, from: 'start' } }));
201
201
  expect(Array.isArray(resolved)).toBe(true);
202
202
  expect((resolved as Array<MyEntity>).length).toBe(5);
203
203
  (resolved as Array<MyEntity>).forEach(r => {
@@ -369,7 +369,7 @@ describe('A-Scope tests', () => {
369
369
 
370
370
  container.scope.register(new A_Error('Test Error'));
371
371
 
372
- const resolved = container.scope.resolve(A_Error);
372
+ const resolved = container.scope.resolve(A_Error) as A_Error;
373
373
  expect(resolved).toBeInstanceOf(A_Error);
374
374
  expect(resolved?.message).toBe('Test Error');
375
375
 
@@ -619,7 +619,7 @@ describe('A-Scope tests', () => {
619
619
  entities: [new MyEntity_A({ name: 'Entity2' })]
620
620
  }).inherit(parentScope);
621
621
 
622
- const resolvedByNameA = scope.resolve<MyEntity_A>('MyEntity_A');
622
+ const resolvedByNameA = scope.resolve<MyEntity_A>('MyEntity_A') as MyEntity_A;
623
623
  expect(resolvedByNameA).toBeInstanceOf(MyEntity_A);
624
624
  expect(resolvedByNameA?.name).toBe('Entity2');
625
625
  });
@@ -646,9 +646,9 @@ describe('A-Scope tests', () => {
646
646
  entities: [new MyEntity_A({ name: 'Entity2' })]
647
647
  }).inherit(parentScope);
648
648
 
649
- const resolvedByName = scope.resolve<MyEntity_B>('MyEntity_B');
649
+ const resolvedByName = scope.resolve<MyEntity_B>('MyEntity_B') as MyEntity_B;
650
650
  expect(resolvedByName).toBeInstanceOf(MyEntity_B);
651
- expect(resolvedByName?.name).toBe('Entity1');
651
+ expect(resolvedByName?.name).toBe('Entity1')
652
652
  });
653
653
 
654
654
  it('Should not resolve entity by class name from parent scope with resolveFlat', async () => {
@@ -676,4 +676,33 @@ describe('A-Scope tests', () => {
676
676
  const resolveByNameFlat = scope.resolveFlat<MyEntity_A>('MyEntity_B');
677
677
  expect(resolveByNameFlat).toBeUndefined();
678
678
  });
679
+
680
+ it('Should allow to extend scope with imports', async () => {
681
+ class MyEntity_A extends A_Entity<{ name: string }> {
682
+ name!: string;
683
+
684
+ fromNew(newEntity: { name: string; }): void {
685
+ super.fromNew(newEntity);
686
+ this.name = newEntity.name;
687
+ }
688
+ }
689
+
690
+ class MyEntity_B extends MyEntity_A { }
691
+
692
+ const scopeA = new A_Scope({
693
+ name: 'ParentScope',
694
+ entities: [new MyEntity_B({ name: 'Entity1' })]
695
+ });
696
+
697
+ const scopeB = new A_Scope({
698
+ name: 'TestScope',
699
+ entities: [new MyEntity_A({ name: 'Entity2' })]
700
+ });
701
+
702
+ scopeB.import(scopeA);
703
+
704
+ const resolvedA = scopeB.resolve<MyEntity_B>(MyEntity_B);
705
+ expect(resolvedA).toBeInstanceOf(MyEntity_B);
706
+ expect(resolvedA?.name).toBe('Entity1');
707
+ });
679
708
  });
@@ -1,4 +1,5 @@
1
1
  import { A_Component } from "@adaas/a-concept/global/A-Component/A-Component.class";
2
+ import { A_Dependency } from "@adaas/a-concept/global/A-Dependency/A-Dependency.class";
2
3
  import { A_StepsManager } from "@adaas/a-concept/global/A-StepManager/A-StepManager.class";
3
4
 
4
5
  describe('A-StepManager tests', () => {
@@ -20,32 +21,32 @@ describe('A-StepManager tests', () => {
20
21
  const sm = new A_StepsManager([
21
22
  {
22
23
  name: 'step1',
23
- component: ComponentA,
24
+ dependency: new A_Dependency(ComponentA),
24
25
  handler: 'step1',
25
26
  },
26
27
  {
27
28
  name: 'step2',
28
- component: ComponentA,
29
+ dependency: new A_Dependency(ComponentA),
29
30
  handler: 'step2',
30
31
  },
31
32
  {
32
33
  name: 'step3',
33
- component: ComponentA,
34
+ dependency: new A_Dependency(ComponentA),
34
35
  handler: 'step3',
35
36
  },
36
37
  {
37
38
  name: 'step4',
38
- component: ComponentA,
39
+ dependency: new A_Dependency(ComponentA),
39
40
  handler: 'step4',
40
41
  },
41
42
  {
42
43
  name: 'step5',
43
- component: ComponentA,
44
+ dependency: new A_Dependency(ComponentA),
44
45
  handler: 'step5',
45
46
  },
46
47
  {
47
48
  name: 'step6',
48
- component: ComponentA,
49
+ dependency: new A_Dependency(ComponentA),
49
50
  handler: 'step6',
50
51
  },
51
52
  ]);
@@ -76,34 +77,34 @@ describe('A-StepManager tests', () => {
76
77
  const sm = new A_StepsManager([
77
78
  {
78
79
  name: 'step1',
79
- component: ComponentA,
80
+ dependency: new A_Dependency(ComponentA),
80
81
  handler: 'step1',
81
82
  },
82
83
  {
83
84
  name: 'step2',
84
- component: ComponentA,
85
+ dependency: new A_Dependency(ComponentA),
85
86
  handler: 'step2',
86
87
  },
87
88
  {
88
89
  name: 'step3',
89
- component: ComponentA,
90
+ dependency: new A_Dependency(ComponentA),
90
91
  handler: 'step3',
91
92
  },
92
93
  {
93
94
  name: 'step4',
94
- component: ComponentA,
95
+ dependency: new A_Dependency(ComponentA),
95
96
  handler: 'step4',
96
97
  },
97
98
  {
98
99
  name: 'step5',
99
- component: ComponentA,
100
+ dependency: new A_Dependency(ComponentA),
100
101
  handler: 'step5',
101
102
  before: /^.*\.*step2$/.source,
102
103
  after: /^.*\.*step6$/.source
103
104
  },
104
105
  {
105
106
  name: 'step6',
106
- component: ComponentA,
107
+ dependency: new A_Dependency(ComponentA),
107
108
  handler: 'step6',
108
109
  before: /^ComponentA\.step2$/.source
109
110
  },
@@ -135,32 +136,32 @@ describe('A-StepManager tests', () => {
135
136
  const sm = new A_StepsManager([
136
137
  {
137
138
  name: 'step1',
138
- component: ComponentA,
139
+ dependency: new A_Dependency(ComponentA),
139
140
  handler: 'step1',
140
141
  },
141
142
  {
142
143
  name: 'step2',
143
- component: ComponentA,
144
+ dependency: new A_Dependency(ComponentA),
144
145
  handler: 'step2',
145
146
  },
146
147
  {
147
148
  name: 'step3',
148
- component: ComponentA,
149
+ dependency: new A_Dependency(ComponentA),
149
150
  handler: 'step3',
150
151
  },
151
152
  {
152
153
  name: 'step4',
153
- component: ComponentA,
154
+ dependency: new A_Dependency(ComponentA),
154
155
  handler: 'step4',
155
156
  },
156
157
  {
157
158
  name: 'step5',
158
- component: ComponentA,
159
+ dependency: new A_Dependency(ComponentA),
159
160
  handler: 'step5',
160
161
  },
161
162
  {
162
163
  name: 'step6',
163
- component: ComponentA,
164
+ dependency: new A_Dependency(ComponentA),
164
165
  handler: 'step6',
165
166
  before: /.*/.source,
166
167
  },
@@ -191,33 +192,33 @@ describe('A-StepManager tests', () => {
191
192
  const sm = new A_StepsManager([
192
193
  {
193
194
  name: 'step1',
194
- component: ComponentA,
195
+ dependency: new A_Dependency(ComponentA),
195
196
  handler: 'step1',
196
197
  },
197
198
  {
198
199
  name: 'step2',
199
- component: ComponentA,
200
+ dependency: new A_Dependency(ComponentA),
200
201
  handler: 'step2',
201
202
  },
202
203
  {
203
204
  name: 'step3',
204
- component: ComponentA,
205
+ dependency: new A_Dependency(ComponentA),
205
206
  handler: 'step3',
206
207
  },
207
208
  {
208
209
  name: 'step4',
209
- component: ComponentA,
210
+ dependency: new A_Dependency(ComponentA),
210
211
  handler: 'step4',
211
212
  },
212
213
  {
213
214
  name: 'step5',
214
- component: ComponentA,
215
+ dependency: new A_Dependency(ComponentA),
215
216
  handler: 'step5',
216
217
  before: new RegExp('.*').source,
217
218
  },
218
219
  {
219
220
  name: 'step6',
220
- component: ComponentA,
221
+ dependency: new A_Dependency(ComponentA),
221
222
  handler: 'step6',
222
223
  before: new RegExp('.*').source,
223
224
  },
@@ -249,32 +250,32 @@ describe('A-StepManager tests', () => {
249
250
  const sm = new A_StepsManager([
250
251
  {
251
252
  name: 'step1',
252
- component: ComponentA,
253
+ dependency: new A_Dependency(ComponentA),
253
254
  handler: 'step1',
254
255
  },
255
256
  {
256
257
  name: 'step2',
257
- component: ComponentA,
258
+ dependency: new A_Dependency(ComponentA),
258
259
  handler: 'step2',
259
260
  },
260
261
  {
261
262
  name: 'step3',
262
- component: ComponentA,
263
+ dependency: new A_Dependency(ComponentA),
263
264
  handler: 'step3',
264
265
  },
265
266
  {
266
267
  name: 'step4',
267
- component: ComponentA,
268
+ dependency: new A_Dependency(ComponentA),
268
269
  handler: 'step4',
269
270
  },
270
271
  {
271
272
  name: 'step5',
272
- component: ComponentA,
273
+ dependency: new A_Dependency(ComponentA),
273
274
  handler: 'step5',
274
275
  },
275
276
  {
276
277
  name: 'test',
277
- component: ComponentA,
278
+ dependency: new A_Dependency(ComponentA),
278
279
  handler: 'test',
279
280
  before: /^.*\.step(4|5)$/.source,
280
281
  after: /^.*\.step(1|2)$/.source,
@@ -309,22 +310,22 @@ describe('A-StepManager tests', () => {
309
310
  const sm = new A_StepsManager([
310
311
  {
311
312
  name: 'readFromEnv',
312
- component: ComponentB,
313
+ dependency: new A_Dependency(ComponentB),
313
314
  handler: 'readFromEnv',
314
315
  },
315
316
  {
316
317
  name: 'readFromFile',
317
- component: ComponentB,
318
+ dependency: new A_Dependency(ComponentB),
318
319
  handler: 'readFromFile',
319
320
  },
320
321
  {
321
322
  name: 'initialize',
322
- component: ComponentA,
323
+ dependency: new A_Dependency(ComponentA),
323
324
  handler: 'initialize',
324
325
  },
325
326
  {
326
327
  name: 'inject',
327
- component: ComponentA,
328
+ dependency: new A_Dependency(ComponentA),
328
329
  handler: 'inject',
329
330
  before: /ComponentB\.read.+/ig.source,
330
331
  after: 'ComponentA.initialize'
@@ -356,28 +357,28 @@ describe('A-StepManager tests', () => {
356
357
  const sm = new A_StepsManager([
357
358
  {
358
359
  name: 'step1',
359
- component: ComponentA,
360
+ dependency: new A_Dependency(ComponentA),
360
361
  handler: 'step1',
361
362
  },
362
363
  {
363
364
  name: 'step2',
364
- component: ComponentA,
365
+ dependency: new A_Dependency(ComponentA),
365
366
  handler: 'step2',
366
367
  },
367
368
  {
368
369
  name: 'step3',
369
- component: ComponentA,
370
+ dependency: new A_Dependency(ComponentA),
370
371
  handler: 'step3',
371
372
  override: /^.*\.step(4|5)$/.source
372
373
  },
373
374
  {
374
375
  name: 'step4',
375
- component: ComponentA,
376
+ dependency: new A_Dependency(ComponentA),
376
377
  handler: 'step4',
377
378
  },
378
379
  {
379
380
  name: 'step5',
380
- component: ComponentA,
381
+ dependency: new A_Dependency(ComponentA),
381
382
  handler: 'step5',
382
383
  }
383
384
  ]);