@noego/ioc 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/framework/decorators/Component.d.ts +10 -0
- package/dist/cjs/framework/decorators/Component.js +25 -0
- package/dist/cjs/framework/decorators/Component.js.map +1 -0
- package/dist/cjs/framework/decorators/Inject.d.ts +7 -0
- package/dist/cjs/framework/decorators/Inject.js +22 -0
- package/dist/cjs/framework/decorators/Inject.js.map +1 -0
- package/dist/cjs/framework/decorators/index.d.ts +3 -0
- package/dist/cjs/framework/decorators/index.js +24 -0
- package/dist/cjs/framework/decorators/index.js.map +1 -0
- package/dist/cjs/framework/decorators/metadataKeys.d.ts +3 -0
- package/dist/cjs/framework/decorators/metadataKeys.js +8 -0
- package/dist/cjs/framework/decorators/metadataKeys.js.map +1 -0
- package/dist/cjs/framework/errors/ContainerErrors.d.ts +33 -0
- package/dist/cjs/framework/errors/ContainerErrors.js +52 -0
- package/dist/cjs/framework/errors/ContainerErrors.js.map +1 -0
- package/dist/cjs/framework/implementation/Container.d.ts +31 -0
- package/dist/cjs/framework/implementation/Container.js +448 -0
- package/dist/cjs/framework/implementation/Container.js.map +1 -0
- package/dist/cjs/framework/implementation/Container.test.d.ts +1 -0
- package/dist/cjs/framework/implementation/Container.test.js +184 -0
- package/dist/cjs/framework/implementation/Container.test.js.map +1 -0
- package/dist/cjs/framework/implementation/ContainerAsync.test.d.ts +1 -0
- package/dist/cjs/framework/implementation/ContainerAsync.test.js +178 -0
- package/dist/cjs/framework/implementation/ContainerAsync.test.js.map +1 -0
- package/dist/cjs/framework/implementation/ContainerBasic.test.d.ts +1 -0
- package/dist/cjs/framework/implementation/ContainerBasic.test.js +101 -0
- package/dist/cjs/framework/implementation/ContainerBasic.test.js.map +1 -0
- package/dist/cjs/framework/implementation/ContainerDecorators.test.d.ts +1 -0
- package/dist/cjs/framework/implementation/ContainerDecorators.test.js +517 -0
- package/dist/cjs/framework/implementation/ContainerDecorators.test.js.map +1 -0
- package/dist/cjs/framework/implementation/ContainerExtension.test.d.ts +1 -0
- package/dist/cjs/framework/implementation/ContainerExtension.test.js +169 -0
- package/dist/cjs/framework/implementation/ContainerExtension.test.js.map +1 -0
- package/dist/cjs/framework/implementation/ContainerLifetimes.test.d.ts +1 -0
- package/dist/cjs/framework/implementation/ContainerLifetimes.test.js +154 -0
- package/dist/cjs/framework/implementation/ContainerLifetimes.test.js.map +1 -0
- package/dist/cjs/framework/implementation/DecoratorSupport.d.ts +31 -0
- package/dist/cjs/framework/implementation/DecoratorSupport.js +96 -0
- package/dist/cjs/framework/implementation/DecoratorSupport.js.map +1 -0
- package/dist/cjs/framework/implementation/LoadAs.d.ts +5 -0
- package/dist/cjs/framework/implementation/LoadAs.js +10 -0
- package/dist/cjs/framework/implementation/LoadAs.js.map +1 -0
- package/dist/cjs/framework/implementation/Parameter.d.ts +33 -0
- package/dist/cjs/framework/implementation/Parameter.js +87 -0
- package/dist/cjs/framework/implementation/Parameter.js.map +1 -0
- package/dist/cjs/framework/implementation/Parameter.test.d.ts +1 -0
- package/dist/cjs/framework/implementation/Parameter.test.js +19 -0
- package/dist/cjs/framework/implementation/Parameter.test.js.map +1 -0
- package/dist/cjs/framework/implementation/SimpleDecoratorTest.test.d.ts +1 -0
- package/dist/cjs/framework/implementation/SimpleDecoratorTest.test.js +78 -0
- package/dist/cjs/framework/implementation/SimpleDecoratorTest.test.js.map +1 -0
- package/dist/cjs/framework/implementation/SingletonTest.test.d.ts +1 -0
- package/dist/cjs/framework/implementation/SingletonTest.test.js +85 -0
- package/dist/cjs/framework/implementation/SingletonTest.test.js.map +1 -0
- package/dist/cjs/framework/interface/Container.d.ts +22 -0
- package/dist/cjs/framework/interface/Container.js +3 -0
- package/dist/cjs/framework/interface/Container.js.map +1 -0
- package/dist/esm/framework/decorators/Component.d.ts +10 -0
- package/dist/esm/framework/decorators/Component.js +21 -0
- package/dist/esm/framework/decorators/Component.js.map +1 -0
- package/dist/esm/framework/decorators/Inject.d.ts +7 -0
- package/dist/esm/framework/decorators/Inject.js +19 -0
- package/dist/esm/framework/decorators/Inject.js.map +1 -0
- package/dist/esm/framework/decorators/index.d.ts +3 -0
- package/dist/esm/framework/decorators/index.js +5 -0
- package/dist/esm/framework/decorators/index.js.map +1 -0
- package/dist/esm/framework/decorators/metadataKeys.d.ts +3 -0
- package/dist/esm/framework/decorators/metadataKeys.js +5 -0
- package/dist/esm/framework/decorators/metadataKeys.js.map +1 -0
- package/dist/esm/framework/errors/ContainerErrors.d.ts +33 -0
- package/dist/esm/framework/errors/ContainerErrors.js +44 -0
- package/dist/esm/framework/errors/ContainerErrors.js.map +1 -0
- package/dist/esm/framework/implementation/Container.d.ts +31 -0
- package/dist/esm/framework/implementation/Container.js +432 -0
- package/dist/esm/framework/implementation/Container.js.map +1 -0
- package/dist/esm/framework/implementation/Container.test.d.ts +1 -0
- package/dist/esm/framework/implementation/Container.test.js +173 -0
- package/dist/esm/framework/implementation/Container.test.js.map +1 -0
- package/dist/esm/framework/implementation/ContainerAsync.test.d.ts +1 -0
- package/dist/esm/framework/implementation/ContainerAsync.test.js +151 -0
- package/dist/esm/framework/implementation/ContainerAsync.test.js.map +1 -0
- package/dist/esm/framework/implementation/ContainerBasic.test.d.ts +1 -0
- package/dist/esm/framework/implementation/ContainerBasic.test.js +90 -0
- package/dist/esm/framework/implementation/ContainerBasic.test.js.map +1 -0
- package/dist/esm/framework/implementation/ContainerDecorators.test.d.ts +1 -0
- package/dist/esm/framework/implementation/ContainerDecorators.test.js +498 -0
- package/dist/esm/framework/implementation/ContainerDecorators.test.js.map +1 -0
- package/dist/esm/framework/implementation/ContainerExtension.test.d.ts +1 -0
- package/dist/esm/framework/implementation/ContainerExtension.test.js +158 -0
- package/dist/esm/framework/implementation/ContainerExtension.test.js.map +1 -0
- package/dist/esm/framework/implementation/ContainerLifetimes.test.d.ts +1 -0
- package/dist/esm/framework/implementation/ContainerLifetimes.test.js +143 -0
- package/dist/esm/framework/implementation/ContainerLifetimes.test.js.map +1 -0
- package/dist/esm/framework/implementation/DecoratorSupport.d.ts +31 -0
- package/dist/esm/framework/implementation/DecoratorSupport.js +87 -0
- package/dist/esm/framework/implementation/DecoratorSupport.js.map +1 -0
- package/dist/esm/framework/implementation/LoadAs.d.ts +5 -0
- package/dist/esm/framework/implementation/LoadAs.js +7 -0
- package/dist/esm/framework/implementation/LoadAs.js.map +1 -0
- package/dist/esm/framework/implementation/Parameter.d.ts +33 -0
- package/dist/esm/framework/implementation/Parameter.js +49 -0
- package/dist/esm/framework/implementation/Parameter.js.map +1 -0
- package/dist/esm/framework/implementation/Parameter.test.d.ts +1 -0
- package/dist/esm/framework/implementation/Parameter.test.js +17 -0
- package/dist/esm/framework/implementation/Parameter.test.js.map +1 -0
- package/dist/esm/framework/implementation/SimpleDecoratorTest.test.d.ts +1 -0
- package/dist/esm/framework/implementation/SimpleDecoratorTest.test.js +67 -0
- package/dist/esm/framework/implementation/SimpleDecoratorTest.test.js.map +1 -0
- package/dist/esm/framework/implementation/SingletonTest.test.d.ts +1 -0
- package/dist/esm/framework/implementation/SingletonTest.test.js +74 -0
- package/dist/esm/framework/implementation/SingletonTest.test.js.map +1 -0
- package/dist/esm/framework/interface/Container.d.ts +22 -0
- package/dist/esm/framework/interface/Container.js +2 -0
- package/dist/esm/framework/interface/Container.js.map +1 -0
- package/package.json +12 -2
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const node_test_1 = require("node:test");
|
|
13
|
+
const Container_1 = require("./Container");
|
|
14
|
+
const Parameter_1 = require("./Parameter");
|
|
15
|
+
(0, node_test_1.describe)('Container Extension', () => {
|
|
16
|
+
(0, node_test_1.describe)('Extended Container Inheritance', () => {
|
|
17
|
+
it('should inherit registrations from parent container', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
const container = (0, Container_1.createContainer)();
|
|
19
|
+
class BaseService {
|
|
20
|
+
}
|
|
21
|
+
container.registerClass(BaseService);
|
|
22
|
+
// Create an extended container
|
|
23
|
+
const extendedContainer = container.extend();
|
|
24
|
+
// Should be able to resolve the class from the extended container
|
|
25
|
+
const instance = yield extendedContainer.instance(BaseService);
|
|
26
|
+
expect(instance).toBeInstanceOf(BaseService);
|
|
27
|
+
}));
|
|
28
|
+
it('should inherit function registrations from parent container', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
|
+
const container = (0, Container_1.createContainer)();
|
|
30
|
+
const serviceFunc = () => ({ name: 'service' });
|
|
31
|
+
container.registerFunction('service', serviceFunc);
|
|
32
|
+
// Create an extended container
|
|
33
|
+
const extendedContainer = container.extend();
|
|
34
|
+
// Should be able to resolve the function from the extended container
|
|
35
|
+
const instance = yield extendedContainer.get('service');
|
|
36
|
+
expect(instance).toEqual({ name: 'service' });
|
|
37
|
+
}));
|
|
38
|
+
});
|
|
39
|
+
(0, node_test_1.describe)('Override Registrations', () => {
|
|
40
|
+
it('should allow the extended container to override class registrations from the parent', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
41
|
+
const container = (0, Container_1.createContainer)();
|
|
42
|
+
class BaseService {
|
|
43
|
+
getName() { return 'base'; }
|
|
44
|
+
}
|
|
45
|
+
class OverrideService {
|
|
46
|
+
getName() { return 'override'; }
|
|
47
|
+
}
|
|
48
|
+
container.registerClass(BaseService);
|
|
49
|
+
// Create an extended container and override the registration
|
|
50
|
+
const extendedContainer = container.extend();
|
|
51
|
+
extendedContainer.registerClass(BaseService, { param: [] }); // Overriding with the same class
|
|
52
|
+
// Different instances between parent and child
|
|
53
|
+
const parentInstance = yield container.instance(BaseService);
|
|
54
|
+
const childInstance = yield extendedContainer.instance(BaseService);
|
|
55
|
+
expect(parentInstance).not.toBe(childInstance);
|
|
56
|
+
// Now override with a completely different class
|
|
57
|
+
extendedContainer.registerFunction(BaseService, () => new OverrideService());
|
|
58
|
+
const overrideInstance = yield extendedContainer.instance(BaseService);
|
|
59
|
+
expect(overrideInstance).toBeInstanceOf(OverrideService);
|
|
60
|
+
expect(overrideInstance.getName()).toBe('override');
|
|
61
|
+
}));
|
|
62
|
+
it('should allow the extended container to override function registrations from the parent', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
63
|
+
const container = (0, Container_1.createContainer)();
|
|
64
|
+
const baseFunc = () => ({ name: 'base' });
|
|
65
|
+
const overrideFunc = () => ({ name: 'override' });
|
|
66
|
+
container.registerFunction('service', baseFunc);
|
|
67
|
+
// Create an extended container and override the registration
|
|
68
|
+
const extendedContainer = container.extend();
|
|
69
|
+
extendedContainer.registerFunction('service', overrideFunc);
|
|
70
|
+
// Check that the parent registration is unchanged
|
|
71
|
+
const parentResult = yield container.get('service');
|
|
72
|
+
expect(parentResult).toEqual({ name: 'base' });
|
|
73
|
+
// Check that the child registration is overridden
|
|
74
|
+
const childResult = yield extendedContainer.get('service');
|
|
75
|
+
expect(childResult).toEqual({ name: 'override' });
|
|
76
|
+
}));
|
|
77
|
+
});
|
|
78
|
+
(0, node_test_1.describe)('Isolation of Changes', () => {
|
|
79
|
+
it('should ensure that changes in the extended container do not affect the parent', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
80
|
+
const container = (0, Container_1.createContainer)();
|
|
81
|
+
class BaseService {
|
|
82
|
+
}
|
|
83
|
+
container.registerClass(BaseService);
|
|
84
|
+
// Create an extended container
|
|
85
|
+
const extendedContainer = container.extend();
|
|
86
|
+
// Add a new registration to the extended container
|
|
87
|
+
class ChildOnlyService {
|
|
88
|
+
}
|
|
89
|
+
extendedContainer.registerClass(ChildOnlyService);
|
|
90
|
+
// Parent container should not have access to the new registration
|
|
91
|
+
expect(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
92
|
+
yield container.instance(ChildOnlyService);
|
|
93
|
+
})).rejects.toThrow();
|
|
94
|
+
// Child container should have access to both registrations
|
|
95
|
+
const baseInstance = yield extendedContainer.instance(BaseService);
|
|
96
|
+
const childInstance = yield extendedContainer.instance(ChildOnlyService);
|
|
97
|
+
expect(baseInstance).toBeInstanceOf(BaseService);
|
|
98
|
+
expect(childInstance).toBeInstanceOf(ChildOnlyService);
|
|
99
|
+
}));
|
|
100
|
+
});
|
|
101
|
+
(0, node_test_1.describe)('Parameter Handling in Extended Containers', () => {
|
|
102
|
+
it('should pass parameters correctly in extended containers', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
103
|
+
const container = (0, Container_1.createContainer)();
|
|
104
|
+
class ConfigService {
|
|
105
|
+
constructor(value) {
|
|
106
|
+
this.value = value;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const CONFIG_VALUE = Parameter_1.Parameter.create();
|
|
110
|
+
container.registerClass(ConfigService, { param: [CONFIG_VALUE] });
|
|
111
|
+
// Create an extended container
|
|
112
|
+
const extendedContainer = container.extend();
|
|
113
|
+
// Should be able to resolve with parameters in both containers
|
|
114
|
+
const parentInstance = yield container.instance(ConfigService, [CONFIG_VALUE.value('parent')]);
|
|
115
|
+
const childInstance = yield extendedContainer.instance(ConfigService, [CONFIG_VALUE.value('child')]);
|
|
116
|
+
expect(parentInstance.value).toBe('parent');
|
|
117
|
+
expect(childInstance.value).toBe('child');
|
|
118
|
+
}));
|
|
119
|
+
});
|
|
120
|
+
(0, node_test_1.describe)('Multi-Level Extension', () => {
|
|
121
|
+
it('should support multiple levels of container extension', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
122
|
+
const root = (0, Container_1.createContainer)();
|
|
123
|
+
class RootService {
|
|
124
|
+
getLevel() { return 'root'; }
|
|
125
|
+
}
|
|
126
|
+
root.registerClass(RootService);
|
|
127
|
+
// Level 1 extension
|
|
128
|
+
const level1 = root.extend();
|
|
129
|
+
class Level1Service {
|
|
130
|
+
getLevel() { return 'level1'; }
|
|
131
|
+
}
|
|
132
|
+
level1.registerClass(Level1Service);
|
|
133
|
+
level1.registerFunction(RootService, () => {
|
|
134
|
+
const service = new RootService();
|
|
135
|
+
return {
|
|
136
|
+
getLevel: () => `level1-override-${service.getLevel()}`
|
|
137
|
+
};
|
|
138
|
+
});
|
|
139
|
+
// Level 2 extension
|
|
140
|
+
const level2 = level1.extend();
|
|
141
|
+
class Level2Service {
|
|
142
|
+
getLevel() { return 'level2'; }
|
|
143
|
+
}
|
|
144
|
+
level2.registerClass(Level2Service);
|
|
145
|
+
// Each level has access to its own registrations and parent registrations
|
|
146
|
+
const rootFromRoot = yield root.instance(RootService);
|
|
147
|
+
const rootFromLevel1 = yield level1.instance(RootService);
|
|
148
|
+
const rootFromLevel2 = yield level2.instance(RootService);
|
|
149
|
+
expect(rootFromRoot.getLevel()).toBe('root');
|
|
150
|
+
expect(rootFromLevel1.getLevel()).toBe('level1-override-root');
|
|
151
|
+
expect(rootFromLevel2.getLevel()).toBe('level1-override-root');
|
|
152
|
+
// Lower levels can't access higher level registrations
|
|
153
|
+
yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
154
|
+
yield root.instance(Level1Service);
|
|
155
|
+
})).rejects.toThrow();
|
|
156
|
+
yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
157
|
+
yield level1.instance(Level2Service);
|
|
158
|
+
})).rejects.toThrow();
|
|
159
|
+
// But higher levels can access their own registrations
|
|
160
|
+
const level1FromLevel1 = yield level1.instance(Level1Service);
|
|
161
|
+
const level1FromLevel2 = yield level2.instance(Level1Service);
|
|
162
|
+
const level2FromLevel2 = yield level2.instance(Level2Service);
|
|
163
|
+
expect(level1FromLevel1.getLevel()).toBe('level1');
|
|
164
|
+
expect(level1FromLevel2.getLevel()).toBe('level1');
|
|
165
|
+
expect(level2FromLevel2.getLevel()).toBe('level2');
|
|
166
|
+
}));
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=ContainerExtension.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContainerExtension.test.js","sourceRoot":"","sources":["../../../../framework/implementation/ContainerExtension.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const node_test_1 = require("node:test");
|
|
13
|
+
const Container_1 = require("./Container");
|
|
14
|
+
const LoadAs_1 = require("./LoadAs");
|
|
15
|
+
(0, node_test_1.describe)('Container Lifetime Scopes', () => {
|
|
16
|
+
// Test Transient lifetime (default)
|
|
17
|
+
(0, node_test_1.describe)('Transient Lifetime', () => {
|
|
18
|
+
it('should always create new instances for transient lifetime', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
const container = (0, Container_1.createContainer)();
|
|
20
|
+
class TestTransient {
|
|
21
|
+
}
|
|
22
|
+
container.registerClass(TestTransient); // Default is Transient
|
|
23
|
+
const instance1 = yield container.instance(TestTransient);
|
|
24
|
+
const instance2 = yield container.instance(TestTransient);
|
|
25
|
+
expect(instance1).toBeInstanceOf(TestTransient);
|
|
26
|
+
expect(instance2).toBeInstanceOf(TestTransient);
|
|
27
|
+
expect(instance1).not.toBe(instance2); // Different instances
|
|
28
|
+
}));
|
|
29
|
+
});
|
|
30
|
+
// Test Singleton lifetime
|
|
31
|
+
(0, node_test_1.describe)('Singleton Lifetime', () => {
|
|
32
|
+
it('should reuse the same instance across the container for singleton lifetime', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
33
|
+
const container = (0, Container_1.createContainer)();
|
|
34
|
+
class TestSingleton {
|
|
35
|
+
}
|
|
36
|
+
container.registerClass(TestSingleton, { loadAs: LoadAs_1.LoadAs.Singleton });
|
|
37
|
+
const instance1 = yield container.instance(TestSingleton);
|
|
38
|
+
const instance2 = yield container.instance(TestSingleton);
|
|
39
|
+
expect(instance1).toBeInstanceOf(TestSingleton);
|
|
40
|
+
expect(instance2).toBeInstanceOf(TestSingleton);
|
|
41
|
+
expect(instance1).toBe(instance2); // Same instance
|
|
42
|
+
}));
|
|
43
|
+
it('should reuse the same singleton instance across extended containers', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
44
|
+
const container = (0, Container_1.createContainer)();
|
|
45
|
+
class TestSingleton {
|
|
46
|
+
}
|
|
47
|
+
container.registerClass(TestSingleton, { loadAs: LoadAs_1.LoadAs.Singleton });
|
|
48
|
+
const instance1 = yield container.instance(TestSingleton);
|
|
49
|
+
// Create an extended container
|
|
50
|
+
const extendedContainer = container.extend();
|
|
51
|
+
const instance2 = yield extendedContainer.instance(TestSingleton);
|
|
52
|
+
expect(instance1).toBe(instance2); // Same instance even in extended container
|
|
53
|
+
}));
|
|
54
|
+
});
|
|
55
|
+
// Test Scoped lifetime
|
|
56
|
+
(0, node_test_1.describe)('Scoped Lifetime', () => {
|
|
57
|
+
it('should reuse the same instance within a container for scoped lifetime', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
58
|
+
const container = (0, Container_1.createContainer)();
|
|
59
|
+
class TestScoped {
|
|
60
|
+
}
|
|
61
|
+
container.registerClass(TestScoped, { loadAs: LoadAs_1.LoadAs.Scoped });
|
|
62
|
+
const instance1 = yield container.instance(TestScoped);
|
|
63
|
+
const instance2 = yield container.instance(TestScoped);
|
|
64
|
+
expect(instance1).toBeInstanceOf(TestScoped);
|
|
65
|
+
expect(instance2).toBeInstanceOf(TestScoped);
|
|
66
|
+
expect(instance1).toBe(instance2); // Same instance within the same container
|
|
67
|
+
}));
|
|
68
|
+
it('should create new instances for scoped lifetime in extended containers', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
69
|
+
const container = (0, Container_1.createContainer)();
|
|
70
|
+
class TestScoped {
|
|
71
|
+
}
|
|
72
|
+
container.registerClass(TestScoped, { loadAs: LoadAs_1.LoadAs.Scoped });
|
|
73
|
+
const instance1 = yield container.instance(TestScoped);
|
|
74
|
+
// Create an extended container
|
|
75
|
+
const extendedContainer = container.extend();
|
|
76
|
+
const instance2 = yield extendedContainer.instance(TestScoped);
|
|
77
|
+
expect(instance1).not.toBe(instance2); // Different instances in different containers
|
|
78
|
+
}));
|
|
79
|
+
});
|
|
80
|
+
// Test different lifetime combinations with nested dependencies
|
|
81
|
+
(0, node_test_1.describe)('Mixed Lifetime Dependencies', () => {
|
|
82
|
+
it('should handle a transient class with a singleton dependency', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
83
|
+
const container = (0, Container_1.createContainer)();
|
|
84
|
+
class SingletonDep {
|
|
85
|
+
}
|
|
86
|
+
class TransientWithSingletonDep {
|
|
87
|
+
constructor(dep) {
|
|
88
|
+
this.dep = dep;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
container.registerClass(SingletonDep, { loadAs: LoadAs_1.LoadAs.Singleton });
|
|
92
|
+
container.registerClass(TransientWithSingletonDep, { param: [SingletonDep] });
|
|
93
|
+
const instance1 = yield container.instance(TransientWithSingletonDep);
|
|
94
|
+
const instance2 = yield container.instance(TransientWithSingletonDep);
|
|
95
|
+
expect(instance1).not.toBe(instance2); // Different transient parent instances
|
|
96
|
+
expect(instance1.dep).toBe(instance2.dep); // Same singleton dependency
|
|
97
|
+
}));
|
|
98
|
+
it('should handle a singleton class with a transient dependency', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
99
|
+
const container = (0, Container_1.createContainer)();
|
|
100
|
+
class TransientDep {
|
|
101
|
+
}
|
|
102
|
+
class SingletonWithTransientDep {
|
|
103
|
+
constructor(dep) {
|
|
104
|
+
this.dep = dep;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
container.registerClass(TransientDep);
|
|
108
|
+
container.registerClass(SingletonWithTransientDep, {
|
|
109
|
+
param: [TransientDep],
|
|
110
|
+
loadAs: LoadAs_1.LoadAs.Singleton
|
|
111
|
+
});
|
|
112
|
+
const instance1 = yield container.instance(SingletonWithTransientDep);
|
|
113
|
+
const instance2 = yield container.instance(SingletonWithTransientDep);
|
|
114
|
+
expect(instance1).toBe(instance2); // Same singleton parent instance
|
|
115
|
+
// The transient dependency is instantiated only once when the singleton is created
|
|
116
|
+
expect(instance1.dep).toBe(instance2.dep);
|
|
117
|
+
}));
|
|
118
|
+
it('should handle multi-level dependencies with different lifetimes', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
119
|
+
const container = (0, Container_1.createContainer)();
|
|
120
|
+
class SingletonLeaf {
|
|
121
|
+
}
|
|
122
|
+
class ScopedMiddle {
|
|
123
|
+
constructor(leaf) {
|
|
124
|
+
this.leaf = leaf;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
class TransientRoot {
|
|
128
|
+
constructor(middle) {
|
|
129
|
+
this.middle = middle;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
container.registerClass(SingletonLeaf, { loadAs: LoadAs_1.LoadAs.Singleton });
|
|
133
|
+
container.registerClass(ScopedMiddle, {
|
|
134
|
+
param: [SingletonLeaf],
|
|
135
|
+
loadAs: LoadAs_1.LoadAs.Scoped
|
|
136
|
+
});
|
|
137
|
+
container.registerClass(TransientRoot, {
|
|
138
|
+
param: [ScopedMiddle]
|
|
139
|
+
});
|
|
140
|
+
const instance1 = yield container.instance(TransientRoot);
|
|
141
|
+
const instance2 = yield container.instance(TransientRoot);
|
|
142
|
+
expect(instance1).not.toBe(instance2); // Different transient root instances
|
|
143
|
+
expect(instance1.middle).toBe(instance2.middle); // Same scoped middle instance
|
|
144
|
+
expect(instance1.middle.leaf).toBe(instance2.middle.leaf); // Same singleton leaf instance
|
|
145
|
+
// Create an extended container
|
|
146
|
+
const extendedContainer = container.extend();
|
|
147
|
+
const instance3 = yield extendedContainer.instance(TransientRoot);
|
|
148
|
+
expect(instance1).not.toBe(instance3); // Different transient root instances
|
|
149
|
+
expect(instance1.middle).not.toBe(instance3.middle); // Different scoped middle instances
|
|
150
|
+
expect(instance1.middle.leaf).toBe(instance3.middle.leaf); // Same singleton leaf instance
|
|
151
|
+
}));
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
//# sourceMappingURL=ContainerLifetimes.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContainerLifetimes.test.js","sourceRoot":"","sources":["../../../../framework/implementation/ContainerLifetimes.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { ComponentOptions } from '../decorators/Component';
|
|
3
|
+
import { LoadAs } from './LoadAs';
|
|
4
|
+
/**
|
|
5
|
+
* Gets component options from a class decorated with @Component.
|
|
6
|
+
* Checks both Symbol and string keys for compatibility/debugging.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getComponentOptions(target: any): ComponentOptions | null;
|
|
9
|
+
/**
|
|
10
|
+
* Gets the scope from a class decorated with @Component.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getScope(target: any): LoadAs;
|
|
13
|
+
/**
|
|
14
|
+
* Gets the parameter types for a class constructor using TypeScript metadata.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getParameterTypes(target: any): any[];
|
|
17
|
+
/**
|
|
18
|
+
* Gets the explicitly injected tokens for a class constructor using @Inject.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getInjectTokens(target: any): Map<number, any>;
|
|
21
|
+
/**
|
|
22
|
+
* Gets the final list of dependencies to resolve for a constructor,
|
|
23
|
+
* prioritizing @Inject tokens over reflected types.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getResolvedDependencies(target: any): any[];
|
|
26
|
+
export interface ClassMetadata {
|
|
27
|
+
hasComponent: boolean;
|
|
28
|
+
scope: LoadAs;
|
|
29
|
+
dependencies: any[];
|
|
30
|
+
}
|
|
31
|
+
export declare function getClassMetadata(target: any): ClassMetadata;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getComponentOptions = getComponentOptions;
|
|
4
|
+
exports.getScope = getScope;
|
|
5
|
+
exports.getParameterTypes = getParameterTypes;
|
|
6
|
+
exports.getInjectTokens = getInjectTokens;
|
|
7
|
+
exports.getResolvedDependencies = getResolvedDependencies;
|
|
8
|
+
exports.getClassMetadata = getClassMetadata;
|
|
9
|
+
// framework/implementation/DecoratorSupport.ts
|
|
10
|
+
require("reflect-metadata");
|
|
11
|
+
const metadataKeys_1 = require("../decorators/metadataKeys");
|
|
12
|
+
const LoadAs_1 = require("./LoadAs");
|
|
13
|
+
/**
|
|
14
|
+
* Gets component options from a class decorated with @Component.
|
|
15
|
+
* Checks both Symbol and string keys for compatibility/debugging.
|
|
16
|
+
*/
|
|
17
|
+
function getComponentOptions(target) {
|
|
18
|
+
if (!target || typeof target !== 'function')
|
|
19
|
+
return null;
|
|
20
|
+
// Prioritize the Symbol key
|
|
21
|
+
let options = Reflect.getMetadata(metadataKeys_1.COMPONENT_OPTIONS_METADATA_KEY, target);
|
|
22
|
+
// Fallback to the string key if Symbol key didn't return anything
|
|
23
|
+
if (options === undefined || options === null) { // Check explicitly for undefined/null
|
|
24
|
+
options = Reflect.getMetadata('ComponentOptions', target);
|
|
25
|
+
}
|
|
26
|
+
// console.log(`[DecoratorSupport getComponentOptions] for ${target.name}:`, options);
|
|
27
|
+
return options || null; // Return null if no options found with either key
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Gets the scope from a class decorated with @Component.
|
|
31
|
+
*/
|
|
32
|
+
function getScope(target) {
|
|
33
|
+
var _a;
|
|
34
|
+
const options = getComponentOptions(target);
|
|
35
|
+
// Default to Transient if no options or no scope specified
|
|
36
|
+
const scope = (_a = options === null || options === void 0 ? void 0 : options.scope) !== null && _a !== void 0 ? _a : LoadAs_1.LoadAs.Transient;
|
|
37
|
+
// console.log(`[DecoratorSupport getScope] for ${target.name}:`, scope);
|
|
38
|
+
return scope;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Gets the parameter types for a class constructor using TypeScript metadata.
|
|
42
|
+
*/
|
|
43
|
+
function getParameterTypes(target) {
|
|
44
|
+
if (!target || typeof target !== 'function')
|
|
45
|
+
return [];
|
|
46
|
+
const types = Reflect.getMetadata(metadataKeys_1.PARAM_TYPES_METADATA_KEY, target) || [];
|
|
47
|
+
// console.log(`[DecoratorSupport getParameterTypes] for ${target.name}:`, types);
|
|
48
|
+
return types;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Gets the explicitly injected tokens for a class constructor using @Inject.
|
|
52
|
+
*/
|
|
53
|
+
function getInjectTokens(target) {
|
|
54
|
+
if (!target || typeof target !== 'function')
|
|
55
|
+
return new Map();
|
|
56
|
+
const tokens = Reflect.getOwnMetadata(metadataKeys_1.INJECT_TOKEN_METADATA_KEY, target) || new Map();
|
|
57
|
+
// console.log(`[DecoratorSupport getInjectTokens] for ${target.name}:`, tokens);
|
|
58
|
+
return tokens;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Gets the final list of dependencies to resolve for a constructor,
|
|
62
|
+
* prioritizing @Inject tokens over reflected types.
|
|
63
|
+
*/
|
|
64
|
+
function getResolvedDependencies(target) {
|
|
65
|
+
if (!target || typeof target !== 'function')
|
|
66
|
+
return [];
|
|
67
|
+
const paramTypes = getParameterTypes(target);
|
|
68
|
+
const injectTokens = getInjectTokens(target);
|
|
69
|
+
const size = Math.max(paramTypes.length, injectTokens.size);
|
|
70
|
+
Array.from({ length: size });
|
|
71
|
+
const dependencies = Array.from({ length: size }).map((_, index) => {
|
|
72
|
+
// If an @Inject token exists for this parameter index, use it.
|
|
73
|
+
if (injectTokens.has(index)) {
|
|
74
|
+
return injectTokens.get(index);
|
|
75
|
+
}
|
|
76
|
+
let type = paramTypes.length > index ? paramTypes[index] : undefined;
|
|
77
|
+
// Otherwise, use the reflected type.
|
|
78
|
+
// Handle potential 'undefined' types from reflection if interfaces are used without @Inject
|
|
79
|
+
if (type === undefined) {
|
|
80
|
+
console.warn(`[IOC DecoratorSupport] Reflected parameter type at index ${index} for ${target.name} is undefined. This might indicate an interface used without @Inject.`);
|
|
81
|
+
// Depending on strictness, could throw or return a special marker. Returning undefined for now.
|
|
82
|
+
}
|
|
83
|
+
return type;
|
|
84
|
+
});
|
|
85
|
+
// console.log(`[DecoratorSupport getResolvedDependencies] for ${target.name}:`, dependencies);
|
|
86
|
+
return dependencies;
|
|
87
|
+
}
|
|
88
|
+
function getClassMetadata(target) {
|
|
89
|
+
const options = getComponentOptions(target);
|
|
90
|
+
return {
|
|
91
|
+
hasComponent: !!options,
|
|
92
|
+
scope: getScope(target), // Uses getComponentOptions internally
|
|
93
|
+
dependencies: getResolvedDependencies(target) // Uses helpers internally
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=DecoratorSupport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DecoratorSupport.js","sourceRoot":"","sources":["../../../../framework/implementation/DecoratorSupport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoadAs = void 0;
|
|
4
|
+
var LoadAs;
|
|
5
|
+
(function (LoadAs) {
|
|
6
|
+
LoadAs[LoadAs["Singleton"] = 0] = "Singleton";
|
|
7
|
+
LoadAs[LoadAs["Scoped"] = 1] = "Scoped";
|
|
8
|
+
LoadAs[LoadAs["Transient"] = 2] = "Transient";
|
|
9
|
+
})(LoadAs || (exports.LoadAs = LoadAs = {}));
|
|
10
|
+
//# sourceMappingURL=LoadAs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadAs.js","sourceRoot":"","sources":["../../../../framework/implementation/LoadAs.ts"],"names":[],"mappings":";;;AAKA,IAAY,MAIX;AAJD,WAAY,MAAM;IACd,6CAAS,CAAA;IACT,uCAAM,CAAA;IACN,6CAAS,CAAA;AACb,CAAC,EAJW,MAAM,sBAAN,MAAM,QAIjB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parameter class for dependency injection
|
|
3
|
+
*/
|
|
4
|
+
export declare class Parameter {
|
|
5
|
+
private id;
|
|
6
|
+
private name?;
|
|
7
|
+
private constructor();
|
|
8
|
+
/**
|
|
9
|
+
* Create a new Parameter instance
|
|
10
|
+
* @param name Optional name for the parameter for better error messages
|
|
11
|
+
*/
|
|
12
|
+
static create(name?: string): Parameter;
|
|
13
|
+
/**
|
|
14
|
+
* Create a ParameterValue with the specified value
|
|
15
|
+
*/
|
|
16
|
+
value<T>(value: T): ParameterValue<T>;
|
|
17
|
+
/**
|
|
18
|
+
* String representation for debugging and error messages
|
|
19
|
+
*/
|
|
20
|
+
toString(): string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Holds a value for a specific Parameter
|
|
24
|
+
*/
|
|
25
|
+
export declare class ParameterValue<T> {
|
|
26
|
+
private param;
|
|
27
|
+
value: T;
|
|
28
|
+
constructor(param: Parameter, value: T);
|
|
29
|
+
/**
|
|
30
|
+
* Check if this value belongs to the given parameter
|
|
31
|
+
*/
|
|
32
|
+
belongsTo(param: Parameter): boolean;
|
|
33
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ParameterValue = exports.Parameter = void 0;
|
|
37
|
+
const randomstring = __importStar(require("randomstring"));
|
|
38
|
+
/**
|
|
39
|
+
* Parameter class for dependency injection
|
|
40
|
+
*/
|
|
41
|
+
class Parameter {
|
|
42
|
+
constructor(id) {
|
|
43
|
+
this.id = id;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a new Parameter instance
|
|
47
|
+
* @param name Optional name for the parameter for better error messages
|
|
48
|
+
*/
|
|
49
|
+
static create(name) {
|
|
50
|
+
const id = randomstring.generate(32);
|
|
51
|
+
const param = new Parameter(id);
|
|
52
|
+
if (name) {
|
|
53
|
+
param.name = name;
|
|
54
|
+
}
|
|
55
|
+
return param;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Create a ParameterValue with the specified value
|
|
59
|
+
*/
|
|
60
|
+
value(value) {
|
|
61
|
+
return new ParameterValue(this, value);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* String representation for debugging and error messages
|
|
65
|
+
*/
|
|
66
|
+
toString() {
|
|
67
|
+
return this.name || `Parameter_${this.id.substring(0, 8)}`;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.Parameter = Parameter;
|
|
71
|
+
/**
|
|
72
|
+
* Holds a value for a specific Parameter
|
|
73
|
+
*/
|
|
74
|
+
class ParameterValue {
|
|
75
|
+
constructor(param, value) {
|
|
76
|
+
this.param = param;
|
|
77
|
+
this.value = value;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if this value belongs to the given parameter
|
|
81
|
+
*/
|
|
82
|
+
belongsTo(param) {
|
|
83
|
+
return this.param === param;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.ParameterValue = ParameterValue;
|
|
87
|
+
//# sourceMappingURL=Parameter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Parameter.js","sourceRoot":"","sources":["../../../../framework/implementation/Parameter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2DAA6C;AAE7C;;GAEG;AACH,MAAa,SAAS;IAGlB,YAA4B,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;IACtC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,IAAa;QACvB,MAAM,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,EAAE,CAAC;YACP,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAI,KAAQ;QACb,OAAO,IAAI,cAAc,CAAI,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,OAAO,IAAI,CAAC,IAAI,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC;CACJ;AAhCD,8BAgCC;AAED;;GAEG;AACH,MAAa,cAAc;IACvB,YAAoB,KAAgB,EAAS,KAAQ;QAAjC,UAAK,GAAL,KAAK,CAAW;QAAS,UAAK,GAAL,KAAK,CAAG;IACrD,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAgB;QACtB,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;IAChC,CAAC;CACJ;AAVD,wCAUC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|