@alterior/runtime 3.5.2 → 3.5.5
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/package.json +5 -4
- package/src/app-options.ts +72 -0
- package/src/application.ts +207 -0
- package/src/args.ts +9 -0
- package/src/expose.ts +46 -0
- package/src/index.ts +9 -0
- package/src/lifecycle.ts +26 -0
- package/src/modules.ts +325 -0
- package/src/reflector.ts +433 -0
- package/src/roles.service.ts +171 -0
- package/src/service.ts +34 -0
- package/dist.esm/module.test.js +0 -374
- package/dist.esm/test.js +0 -7
package/dist.esm/module.test.js
DELETED
|
@@ -1,374 +0,0 @@
|
|
|
1
|
-
import { __awaiter, __decorate, __metadata, __param } from "tslib";
|
|
2
|
-
import { describe, it } from 'razmin';
|
|
3
|
-
import { Module, Injector, Inject, Injectable, Optional, InjectionToken } from '@alterior/di';
|
|
4
|
-
import { Application } from './application';
|
|
5
|
-
import { expect } from 'chai';
|
|
6
|
-
import { Time, Environment } from '@alterior/common';
|
|
7
|
-
describe("Modules", () => {
|
|
8
|
-
it('allows injection of the Injector', () => {
|
|
9
|
-
let sawInjector = null;
|
|
10
|
-
let TestModule = class TestModule {
|
|
11
|
-
constructor(injector) {
|
|
12
|
-
sawInjector = injector;
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
TestModule = __decorate([
|
|
16
|
-
Module({}),
|
|
17
|
-
__metadata("design:paramtypes", [Injector])
|
|
18
|
-
], TestModule);
|
|
19
|
-
Application.bootstrap(TestModule);
|
|
20
|
-
expect(sawInjector).not.to.be.null;
|
|
21
|
-
let directInjectedInjector = sawInjector.get(Injector);
|
|
22
|
-
expect(directInjectedInjector).not.to.be.null;
|
|
23
|
-
expect(directInjectedInjector).to.equal(sawInjector);
|
|
24
|
-
});
|
|
25
|
-
it('uses providers for dependency injection', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
26
|
-
let sawFoo = null;
|
|
27
|
-
let TestModule = class TestModule {
|
|
28
|
-
constructor(foo) {
|
|
29
|
-
sawFoo = foo;
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
TestModule = __decorate([
|
|
33
|
-
Module({
|
|
34
|
-
providers: [
|
|
35
|
-
{ provide: "foo", useValue: 123 }
|
|
36
|
-
]
|
|
37
|
-
}),
|
|
38
|
-
__param(0, Inject('foo')),
|
|
39
|
-
__metadata("design:paramtypes", [Number])
|
|
40
|
-
], TestModule);
|
|
41
|
-
yield Application.bootstrap(TestModule);
|
|
42
|
-
expect(sawFoo).to.eq(123);
|
|
43
|
-
}));
|
|
44
|
-
it('provides providers of imported modules', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
45
|
-
let sawFoo = null;
|
|
46
|
-
let SubModule = class SubModule {
|
|
47
|
-
};
|
|
48
|
-
SubModule = __decorate([
|
|
49
|
-
Module({
|
|
50
|
-
providers: [
|
|
51
|
-
{ provide: "foo", useValue: 123456 }
|
|
52
|
-
]
|
|
53
|
-
})
|
|
54
|
-
], SubModule);
|
|
55
|
-
let TestModule = class TestModule {
|
|
56
|
-
constructor(foo) {
|
|
57
|
-
sawFoo = foo;
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
TestModule = __decorate([
|
|
61
|
-
Module({
|
|
62
|
-
imports: [SubModule]
|
|
63
|
-
}),
|
|
64
|
-
__param(0, Inject('foo')),
|
|
65
|
-
__metadata("design:paramtypes", [Number])
|
|
66
|
-
], TestModule);
|
|
67
|
-
let application = yield Application.bootstrap(TestModule);
|
|
68
|
-
expect(application.runtime).to.exist;
|
|
69
|
-
expect(application.runtime.instances.find(x => x.definition.target === SubModule)).to.exist;
|
|
70
|
-
expect(sawFoo).to.eq(123456);
|
|
71
|
-
}));
|
|
72
|
-
it('does not fail with multiple instances of the same shared dependency', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
73
|
-
let sawFoo = null;
|
|
74
|
-
let DependencyModule = class DependencyModule {
|
|
75
|
-
};
|
|
76
|
-
DependencyModule = __decorate([
|
|
77
|
-
Module({
|
|
78
|
-
providers: [
|
|
79
|
-
{ provide: "foo", useValue: 123456 }
|
|
80
|
-
]
|
|
81
|
-
})
|
|
82
|
-
], DependencyModule);
|
|
83
|
-
let SubModule = class SubModule {
|
|
84
|
-
};
|
|
85
|
-
SubModule = __decorate([
|
|
86
|
-
Module({
|
|
87
|
-
imports: [DependencyModule]
|
|
88
|
-
})
|
|
89
|
-
], SubModule);
|
|
90
|
-
let TestModule = class TestModule {
|
|
91
|
-
constructor(foo) {
|
|
92
|
-
sawFoo = foo;
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
TestModule = __decorate([
|
|
96
|
-
Module({
|
|
97
|
-
imports: [SubModule, DependencyModule]
|
|
98
|
-
}),
|
|
99
|
-
__param(0, Inject('foo')),
|
|
100
|
-
__metadata("design:paramtypes", [Number])
|
|
101
|
-
], TestModule);
|
|
102
|
-
let application = yield Application.bootstrap(TestModule);
|
|
103
|
-
expect(application.runtime).to.exist;
|
|
104
|
-
expect(application.runtime.instances.filter(x => x.definition.target === SubModule).length).to.eq(1);
|
|
105
|
-
expect(sawFoo).to.eq(123456);
|
|
106
|
-
}));
|
|
107
|
-
it('does not fail with multiple differently configured instances of the same shared dependency', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
108
|
-
var DependencyModule_1;
|
|
109
|
-
let sawFoo = null;
|
|
110
|
-
let sawBar = null;
|
|
111
|
-
let DependencyConfig = class DependencyConfig {
|
|
112
|
-
constructor(config) {
|
|
113
|
-
this.foo = 'abcdef';
|
|
114
|
-
this.bar = 98765;
|
|
115
|
-
Object.assign(this, config);
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
DependencyConfig = __decorate([
|
|
119
|
-
Injectable(),
|
|
120
|
-
__metadata("design:paramtypes", [Object])
|
|
121
|
-
], DependencyConfig);
|
|
122
|
-
let DependencyService = class DependencyService {
|
|
123
|
-
constructor(config) {
|
|
124
|
-
this.config = config;
|
|
125
|
-
}
|
|
126
|
-
getFoo() {
|
|
127
|
-
return this.config.foo;
|
|
128
|
-
}
|
|
129
|
-
getBar() {
|
|
130
|
-
return this.config.bar;
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
DependencyService = __decorate([
|
|
134
|
-
Injectable(),
|
|
135
|
-
__param(0, Optional()),
|
|
136
|
-
__metadata("design:paramtypes", [DependencyConfig])
|
|
137
|
-
], DependencyService);
|
|
138
|
-
let DependencyModule = DependencyModule_1 = class DependencyModule {
|
|
139
|
-
static configure(config) {
|
|
140
|
-
return {
|
|
141
|
-
$module: DependencyModule_1,
|
|
142
|
-
providers: [
|
|
143
|
-
{ provide: DependencyConfig, useValue: new DependencyConfig(config) }
|
|
144
|
-
]
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
DependencyModule = DependencyModule_1 = __decorate([
|
|
149
|
-
Module({
|
|
150
|
-
providers: [DependencyService]
|
|
151
|
-
})
|
|
152
|
-
], DependencyModule);
|
|
153
|
-
let SubModule = class SubModule {
|
|
154
|
-
};
|
|
155
|
-
SubModule = __decorate([
|
|
156
|
-
Module({
|
|
157
|
-
imports: [DependencyModule]
|
|
158
|
-
})
|
|
159
|
-
], SubModule);
|
|
160
|
-
let TestModule = class TestModule {
|
|
161
|
-
constructor(service) {
|
|
162
|
-
sawFoo = service.getFoo();
|
|
163
|
-
sawBar = service.getBar();
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
TestModule = __decorate([
|
|
167
|
-
Module({
|
|
168
|
-
imports: [SubModule, DependencyModule.configure({ bar: 999 })]
|
|
169
|
-
}),
|
|
170
|
-
__metadata("design:paramtypes", [DependencyService])
|
|
171
|
-
], TestModule);
|
|
172
|
-
let application = yield Application.bootstrap(TestModule);
|
|
173
|
-
expect(application.runtime).to.exist;
|
|
174
|
-
expect(application.runtime.instances.filter(x => x.definition.target === SubModule).length).to.eq(1);
|
|
175
|
-
expect(sawFoo).to.eq('abcdef');
|
|
176
|
-
expect(sawBar).to.eq(999);
|
|
177
|
-
}));
|
|
178
|
-
it('runs the constructors of all modules in dependency-order', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
179
|
-
let log = '';
|
|
180
|
-
let DependencyModule = class DependencyModule {
|
|
181
|
-
constructor() { log += 'dependency;'; }
|
|
182
|
-
};
|
|
183
|
-
DependencyModule = __decorate([
|
|
184
|
-
Module(),
|
|
185
|
-
__metadata("design:paramtypes", [])
|
|
186
|
-
], DependencyModule);
|
|
187
|
-
let SubModule = class SubModule {
|
|
188
|
-
constructor() { log += 'sub;'; }
|
|
189
|
-
};
|
|
190
|
-
SubModule = __decorate([
|
|
191
|
-
Module({
|
|
192
|
-
imports: [DependencyModule]
|
|
193
|
-
}),
|
|
194
|
-
__metadata("design:paramtypes", [])
|
|
195
|
-
], SubModule);
|
|
196
|
-
let TestModule = class TestModule {
|
|
197
|
-
constructor() { log += 'test;'; }
|
|
198
|
-
};
|
|
199
|
-
TestModule = __decorate([
|
|
200
|
-
Module({
|
|
201
|
-
imports: [SubModule, DependencyModule]
|
|
202
|
-
}),
|
|
203
|
-
__metadata("design:paramtypes", [])
|
|
204
|
-
], TestModule);
|
|
205
|
-
let application = yield Application.bootstrap(TestModule);
|
|
206
|
-
expect(application.runtime).to.exist;
|
|
207
|
-
expect(application.runtime.instances.filter(x => x.definition.target === SubModule).length).to.eq(1);
|
|
208
|
-
expect(log).to.eq('dependency;sub;test;');
|
|
209
|
-
}));
|
|
210
|
-
it('runs the altOnInit of all modules in dependency-order', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
211
|
-
let log = '';
|
|
212
|
-
let DependencyModule = class DependencyModule {
|
|
213
|
-
altOnInit() { log += 'dependency;'; }
|
|
214
|
-
};
|
|
215
|
-
DependencyModule = __decorate([
|
|
216
|
-
Module()
|
|
217
|
-
], DependencyModule);
|
|
218
|
-
let SubModule = class SubModule {
|
|
219
|
-
altOnInit() { log += 'sub;'; }
|
|
220
|
-
};
|
|
221
|
-
SubModule = __decorate([
|
|
222
|
-
Module({
|
|
223
|
-
imports: [DependencyModule]
|
|
224
|
-
})
|
|
225
|
-
], SubModule);
|
|
226
|
-
let TestModule = class TestModule {
|
|
227
|
-
altOnInit() { log += 'test;'; }
|
|
228
|
-
};
|
|
229
|
-
TestModule = __decorate([
|
|
230
|
-
Module({
|
|
231
|
-
imports: [SubModule, DependencyModule]
|
|
232
|
-
})
|
|
233
|
-
], TestModule);
|
|
234
|
-
let application = yield Application.bootstrap(TestModule);
|
|
235
|
-
expect(application.runtime).to.exist;
|
|
236
|
-
expect(application.runtime.instances.filter(x => x.definition.target === SubModule).length).to.eq(1);
|
|
237
|
-
expect(log).to.eq('dependency;sub;test;');
|
|
238
|
-
}));
|
|
239
|
-
it('injects Time', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
240
|
-
let observedTime;
|
|
241
|
-
let baseTime = Date.now();
|
|
242
|
-
let TestModule = class TestModule {
|
|
243
|
-
constructor(time) {
|
|
244
|
-
observedTime = time;
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
TestModule = __decorate([
|
|
248
|
-
Module(),
|
|
249
|
-
__metadata("design:paramtypes", [Time])
|
|
250
|
-
], TestModule);
|
|
251
|
-
let application = yield Application.bootstrap(TestModule);
|
|
252
|
-
expect(observedTime).to.exist;
|
|
253
|
-
expect(observedTime).to.be.instanceOf(Time);
|
|
254
|
-
expect(typeof observedTime.now() === 'number');
|
|
255
|
-
expect(observedTime.now()).to.be.at.least(baseTime);
|
|
256
|
-
}));
|
|
257
|
-
it('allows Time to be overridden', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
258
|
-
let observedTime;
|
|
259
|
-
let specialDate = new Date();
|
|
260
|
-
class FakeTime extends Time {
|
|
261
|
-
now() {
|
|
262
|
-
return 123;
|
|
263
|
-
}
|
|
264
|
-
current() {
|
|
265
|
-
return specialDate;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
let TestModule = class TestModule {
|
|
269
|
-
constructor(time) {
|
|
270
|
-
observedTime = time;
|
|
271
|
-
}
|
|
272
|
-
};
|
|
273
|
-
TestModule = __decorate([
|
|
274
|
-
Module({
|
|
275
|
-
providers: [{ provide: Time, useClass: FakeTime }]
|
|
276
|
-
}),
|
|
277
|
-
__metadata("design:paramtypes", [Time])
|
|
278
|
-
], TestModule);
|
|
279
|
-
let application = yield Application.bootstrap(TestModule);
|
|
280
|
-
expect(observedTime).to.exist;
|
|
281
|
-
expect(observedTime).to.be.instanceOf(FakeTime);
|
|
282
|
-
expect(observedTime.now()).to.equal(123);
|
|
283
|
-
expect(observedTime.current()).to.equal(specialDate);
|
|
284
|
-
}));
|
|
285
|
-
it('injects Environment', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
286
|
-
let observedEnv;
|
|
287
|
-
let TestModule = class TestModule {
|
|
288
|
-
constructor(env) {
|
|
289
|
-
observedEnv = env;
|
|
290
|
-
}
|
|
291
|
-
};
|
|
292
|
-
TestModule = __decorate([
|
|
293
|
-
Module(),
|
|
294
|
-
__metadata("design:paramtypes", [Environment])
|
|
295
|
-
], TestModule);
|
|
296
|
-
let application = yield Application.bootstrap(TestModule);
|
|
297
|
-
expect(observedEnv).to.exist;
|
|
298
|
-
expect(observedEnv).to.be.instanceOf(Environment);
|
|
299
|
-
}));
|
|
300
|
-
it('allows Environment to be overridden', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
301
|
-
let observedEnv;
|
|
302
|
-
class FakeEnvironment extends Environment {
|
|
303
|
-
}
|
|
304
|
-
let TestModule = class TestModule {
|
|
305
|
-
constructor(env) {
|
|
306
|
-
observedEnv = env;
|
|
307
|
-
}
|
|
308
|
-
};
|
|
309
|
-
TestModule = __decorate([
|
|
310
|
-
Module({ providers: [{ provide: Environment, useClass: FakeEnvironment }] }),
|
|
311
|
-
__metadata("design:paramtypes", [Environment])
|
|
312
|
-
], TestModule);
|
|
313
|
-
let application = yield Application.bootstrap(TestModule);
|
|
314
|
-
expect(observedEnv).to.exist;
|
|
315
|
-
expect(observedEnv).to.be.instanceOf(FakeEnvironment);
|
|
316
|
-
}));
|
|
317
|
-
it('allows an injection token within a module', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
318
|
-
var DependencyModule_2;
|
|
319
|
-
let log = '';
|
|
320
|
-
const ITEM = new InjectionToken('A THING');
|
|
321
|
-
let Options = class Options {
|
|
322
|
-
constructor(options) {
|
|
323
|
-
this.options = options;
|
|
324
|
-
}
|
|
325
|
-
};
|
|
326
|
-
Options = __decorate([
|
|
327
|
-
Injectable(),
|
|
328
|
-
__param(0, Inject(ITEM)),
|
|
329
|
-
__metadata("design:paramtypes", [Object])
|
|
330
|
-
], Options);
|
|
331
|
-
let MyService = class MyService {
|
|
332
|
-
constructor(options) {
|
|
333
|
-
this.options = options;
|
|
334
|
-
}
|
|
335
|
-
};
|
|
336
|
-
MyService = __decorate([
|
|
337
|
-
Injectable(),
|
|
338
|
-
__metadata("design:paramtypes", [Options])
|
|
339
|
-
], MyService);
|
|
340
|
-
let DependencyModule = DependencyModule_2 = class DependencyModule {
|
|
341
|
-
static configure() {
|
|
342
|
-
return {
|
|
343
|
-
$module: DependencyModule_2,
|
|
344
|
-
providers: [
|
|
345
|
-
{ provide: ITEM, useValue: { foo: 123 } },
|
|
346
|
-
Options,
|
|
347
|
-
MyService
|
|
348
|
-
]
|
|
349
|
-
};
|
|
350
|
-
}
|
|
351
|
-
};
|
|
352
|
-
DependencyModule = DependencyModule_2 = __decorate([
|
|
353
|
-
Module()
|
|
354
|
-
], DependencyModule);
|
|
355
|
-
let TestModule = class TestModule {
|
|
356
|
-
constructor(service) {
|
|
357
|
-
this.service = service;
|
|
358
|
-
}
|
|
359
|
-
altOnInit() {
|
|
360
|
-
log += this.service.options.options.foo;
|
|
361
|
-
}
|
|
362
|
-
};
|
|
363
|
-
TestModule = __decorate([
|
|
364
|
-
Module({
|
|
365
|
-
imports: [DependencyModule.configure()]
|
|
366
|
-
}),
|
|
367
|
-
__metadata("design:paramtypes", [MyService])
|
|
368
|
-
], TestModule);
|
|
369
|
-
let application = yield Application.bootstrap(TestModule);
|
|
370
|
-
expect(application.runtime).to.exist;
|
|
371
|
-
expect(log).to.eq('123');
|
|
372
|
-
}));
|
|
373
|
-
});
|
|
374
|
-
//# sourceMappingURL=module.test.js.map
|