@alterior/runtime 3.0.0-rc.5 → 3.0.0
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/app-options.js +11 -14
- package/dist/app-options.js.map +1 -1
- package/dist/application.js +85 -115
- package/dist/application.js.map +1 -1
- package/dist/args.js +4 -7
- package/dist/args.js.map +1 -1
- package/dist/expose.js +13 -15
- package/dist/expose.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/module.test.js.map +1 -1
- package/dist/modules.js +118 -167
- package/dist/modules.js.map +1 -1
- package/dist/reflector.js +244 -431
- package/dist/reflector.js.map +1 -1
- package/dist/roles.service.d.ts +2 -3
- package/dist/roles.service.d.ts.map +1 -1
- package/dist/roles.service.js +72 -144
- package/dist/roles.service.js.map +1 -1
- package/dist/service.js +12 -17
- package/dist/service.js.map +1 -1
- package/dist/test.js.map +1 -1
- package/dist.esm/roles.service.d.ts +2 -3
- package/dist.esm/roles.service.d.ts.map +1 -1
- package/dist.esm/roles.service.js +7 -11
- package/dist.esm/roles.service.js.map +1 -1
- package/package.json +5 -5
package/dist/modules.js
CHANGED
|
@@ -1,41 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Runtime = exports.ModuleInstance = exports.ModuleDefinition = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const di_1 = require("@alterior/di");
|
|
6
|
+
const di_2 = require("@alterior/di");
|
|
7
|
+
const common_1 = require("@alterior/common");
|
|
8
|
+
const roles_service_1 = require("./roles.service");
|
|
9
9
|
/**
|
|
10
10
|
* Combines a module annotation and a target class into a single
|
|
11
11
|
* object for storage purposes in Runtime and related objects.
|
|
12
12
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
return ModuleDefinition;
|
|
17
|
-
}());
|
|
13
|
+
class ModuleDefinition {
|
|
14
|
+
}
|
|
18
15
|
exports.ModuleDefinition = ModuleDefinition;
|
|
19
16
|
/**
|
|
20
17
|
* Represents a live instance of a module.
|
|
21
18
|
* Contains both the module definition as well
|
|
22
19
|
* as a reference to the module instance itself.
|
|
23
20
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
class ModuleInstance {
|
|
22
|
+
constructor(definition, instance) {
|
|
26
23
|
this.definition = definition;
|
|
27
24
|
this.instance = instance;
|
|
28
25
|
}
|
|
29
|
-
|
|
30
|
-
}());
|
|
26
|
+
}
|
|
31
27
|
exports.ModuleInstance = ModuleInstance;
|
|
32
28
|
/**
|
|
33
29
|
* Used to construct a runtime environment for a given entry module.
|
|
34
30
|
* Handles resolving the module tree into an injector as well as constructing
|
|
35
31
|
* the module instances and running lifecycle events.
|
|
36
32
|
*/
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
class Runtime {
|
|
34
|
+
constructor(entryModule) {
|
|
39
35
|
this.definitions = [];
|
|
40
36
|
this.visited = [];
|
|
41
37
|
this.instances = null;
|
|
@@ -52,9 +48,9 @@ var Runtime = /** @class */ (function () {
|
|
|
52
48
|
* Get a specific service from the dependency injector.
|
|
53
49
|
* @param ctor
|
|
54
50
|
*/
|
|
55
|
-
|
|
51
|
+
getService(ctor) {
|
|
56
52
|
return this.injector.get(ctor);
|
|
57
|
-
}
|
|
53
|
+
}
|
|
58
54
|
/**
|
|
59
55
|
* Iterate over the module definitions which are part of this
|
|
60
56
|
* runtime and append to the given array the set of dependency injection
|
|
@@ -62,117 +58,98 @@ var Runtime = /** @class */ (function () {
|
|
|
62
58
|
*
|
|
63
59
|
* @param providers An array which will be populated
|
|
64
60
|
*/
|
|
65
|
-
|
|
61
|
+
contributeProviders(providers) {
|
|
66
62
|
providers.push({ provide: Runtime, useValue: this });
|
|
67
63
|
this.definitions
|
|
68
|
-
.filter(
|
|
69
|
-
.forEach(
|
|
70
|
-
}
|
|
64
|
+
.filter(defn => defn.metadata && defn.metadata.providers)
|
|
65
|
+
.forEach(defn => providers.push(...defn.metadata.providers));
|
|
66
|
+
}
|
|
71
67
|
/**
|
|
72
68
|
* Perform runtime configuration steps
|
|
73
69
|
*/
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
70
|
+
configure() {
|
|
71
|
+
let environment = this.injector.get(common_1.Environment);
|
|
72
|
+
let rolesService = this.injector.get(roles_service_1.RolesService);
|
|
73
|
+
let allRoles = rolesService.roles;
|
|
78
74
|
if (environment.get().ALT_ROLES_ONLY) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
.map(
|
|
82
|
-
.map(
|
|
83
|
-
rolesService.configure({ mode: 'only', roles
|
|
75
|
+
let value = environment.get().ALT_ROLES_ONLY;
|
|
76
|
+
let roles = value.split(',')
|
|
77
|
+
.map(x => allRoles.find(y => y.identifier == x))
|
|
78
|
+
.map(x => x.class);
|
|
79
|
+
rolesService.configure({ mode: 'only', roles });
|
|
84
80
|
}
|
|
85
81
|
else if (environment.get().ALT_ROLES_ALL_EXCEPT) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
.map(
|
|
89
|
-
.map(
|
|
90
|
-
rolesService.configure({ mode: 'all-except', roles
|
|
82
|
+
let value = environment.get().ALT_ROLES_ALL_EXCEPT;
|
|
83
|
+
let roles = value.split(',')
|
|
84
|
+
.map(x => allRoles.find(y => y.identifier == x))
|
|
85
|
+
.map(x => x.class);
|
|
86
|
+
rolesService.configure({ mode: 'all-except', roles });
|
|
91
87
|
}
|
|
92
88
|
if (typeof process !== 'undefined' && process.argv) {
|
|
93
89
|
this.processCommandLine(process.argv.slice(2));
|
|
94
90
|
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
var rolesService = this.injector.get(roles_service_1.RolesService);
|
|
108
|
-
var argIndex = 0;
|
|
109
|
-
var getArgumentValue = function () {
|
|
110
|
-
var arg = args[argIndex];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* True if the `--self-test` option was used to launch the application.
|
|
94
|
+
*/
|
|
95
|
+
get selfTest() {
|
|
96
|
+
return this._selfTest;
|
|
97
|
+
}
|
|
98
|
+
processCommandLine(args) {
|
|
99
|
+
let rolesService = this.injector.get(roles_service_1.RolesService);
|
|
100
|
+
let argIndex = 0;
|
|
101
|
+
let getArgumentValue = () => {
|
|
102
|
+
let arg = args[argIndex];
|
|
111
103
|
if (argIndex + 1 >= args.length)
|
|
112
|
-
throw new Error(
|
|
113
|
-
|
|
104
|
+
throw new Error(`You must specify a value for option ${arg}`);
|
|
105
|
+
let value = args[++argIndex];
|
|
114
106
|
if (value.startsWith('-')) {
|
|
115
|
-
throw new Error(
|
|
107
|
+
throw new Error(`You must specify a value for option ${arg} (encountered option '${value}' instead)`);
|
|
116
108
|
}
|
|
117
109
|
return value;
|
|
118
110
|
};
|
|
119
|
-
|
|
111
|
+
let allRoles = rolesService.roles;
|
|
120
112
|
for (; argIndex < args.length; ++argIndex) {
|
|
121
|
-
|
|
113
|
+
let arg = args[argIndex];
|
|
122
114
|
if (arg === '--self-test') {
|
|
123
115
|
this._selfTest = true;
|
|
124
116
|
}
|
|
125
117
|
else if (arg == '-r' || arg == '--roles-only') {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
.map(
|
|
129
|
-
.filter(
|
|
130
|
-
.map(
|
|
131
|
-
rolesService.configure({ mode: 'only', roles
|
|
118
|
+
let value = getArgumentValue();
|
|
119
|
+
let roles = value.split(',')
|
|
120
|
+
.map(x => allRoles.find(y => y.identifier == x))
|
|
121
|
+
.filter(x => x)
|
|
122
|
+
.map(x => x.class);
|
|
123
|
+
rolesService.configure({ mode: 'only', roles });
|
|
132
124
|
}
|
|
133
125
|
else if (arg == '-R' || arg == '--roles-all-except') {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
.map(
|
|
137
|
-
.filter(
|
|
138
|
-
.map(
|
|
139
|
-
rolesService.configure({ mode: 'all-except', roles
|
|
126
|
+
let value = getArgumentValue();
|
|
127
|
+
let roles = value.split(',')
|
|
128
|
+
.map(x => allRoles.find(y => y.identifier == x))
|
|
129
|
+
.filter(x => x)
|
|
130
|
+
.map(x => x.class);
|
|
131
|
+
rolesService.configure({ mode: 'all-except', roles });
|
|
140
132
|
}
|
|
141
133
|
}
|
|
142
|
-
}
|
|
134
|
+
}
|
|
143
135
|
/**
|
|
144
136
|
* Fire an event to all modules which understand it. Should be upper-camel-case, meaning
|
|
145
137
|
* to fire the altOnStart() method, send "OnStart".
|
|
146
138
|
* @param eventName
|
|
147
139
|
*/
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
var modInstance = _c.value;
|
|
153
|
-
if (modInstance.instance["alt" + eventName])
|
|
154
|
-
modInstance.instance["alt" + eventName]();
|
|
155
|
-
}
|
|
140
|
+
fireEvent(eventName) {
|
|
141
|
+
for (let modInstance of this.instances) {
|
|
142
|
+
if (modInstance.instance[`alt${eventName}`])
|
|
143
|
+
modInstance.instance[`alt${eventName}`]();
|
|
156
144
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}
|
|
165
|
-
Object.defineProperty(Runtime.prototype, "injector", {
|
|
166
|
-
/**
|
|
167
|
-
* Get the runtime's dependency injector. This injector can provide all dependencies specified
|
|
168
|
-
* in the imported modules' `providers` definitions.
|
|
169
|
-
*/
|
|
170
|
-
get: function () {
|
|
171
|
-
return this._injector;
|
|
172
|
-
},
|
|
173
|
-
enumerable: false,
|
|
174
|
-
configurable: true
|
|
175
|
-
});
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get the runtime's dependency injector. This injector can provide all dependencies specified
|
|
148
|
+
* in the imported modules' `providers` definitions.
|
|
149
|
+
*/
|
|
150
|
+
get injector() {
|
|
151
|
+
return this._injector;
|
|
152
|
+
}
|
|
176
153
|
/**
|
|
177
154
|
* Instantiate the modules of this runtime using the given dependency injector.
|
|
178
155
|
* The injector will be inherited into an injector that provides the dependencies
|
|
@@ -180,27 +157,27 @@ var Runtime = /** @class */ (function () {
|
|
|
180
157
|
*
|
|
181
158
|
* @param injector
|
|
182
159
|
*/
|
|
183
|
-
|
|
160
|
+
load(injector) {
|
|
184
161
|
if (this.instances)
|
|
185
162
|
return;
|
|
186
|
-
|
|
187
|
-
|
|
163
|
+
let ownInjector;
|
|
164
|
+
let providers = this.definitions.map(x => x.target);
|
|
188
165
|
try {
|
|
189
166
|
ownInjector = di_2.ReflectiveInjector.resolveAndCreate(providers, injector);
|
|
190
167
|
}
|
|
191
168
|
catch (e) {
|
|
192
|
-
console.error(
|
|
193
|
-
console.error(
|
|
169
|
+
console.error(`Failed to construct injector:`);
|
|
170
|
+
console.error(`Providers:`);
|
|
194
171
|
console.dir(providers);
|
|
195
|
-
console.error(
|
|
172
|
+
console.error(`Definitions:`);
|
|
196
173
|
console.dir(this.definitions);
|
|
197
174
|
throw e;
|
|
198
175
|
}
|
|
199
176
|
this._injector = ownInjector;
|
|
200
|
-
|
|
177
|
+
let moduleInstances = this.definitions.map(defn => new ModuleInstance(defn, ownInjector.get(defn.target)));
|
|
201
178
|
this.instances = moduleInstances;
|
|
202
179
|
return this.instances;
|
|
203
|
-
}
|
|
180
|
+
}
|
|
204
181
|
/**
|
|
205
182
|
* Stop any services, as defined by imported modules of this runtime. For instance, if you import WebServerModule
|
|
206
183
|
* from @alterior/web-server, calling this will instruct the module to stop serving on the configured port.
|
|
@@ -210,17 +187,13 @@ var Runtime = /** @class */ (function () {
|
|
|
210
187
|
* which implements it to be called. It also instructs the RolesService to stop any roles which are currently running.
|
|
211
188
|
* For more information about Roles, see the documentation for RolesService.
|
|
212
189
|
*/
|
|
213
|
-
|
|
214
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
rolesService = this.injector.get(roles_service_1.RolesService);
|
|
219
|
-
rolesService.stopAll();
|
|
220
|
-
return [2 /*return*/];
|
|
221
|
-
});
|
|
190
|
+
stop() {
|
|
191
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
192
|
+
this.fireEvent('OnStop');
|
|
193
|
+
let rolesService = this.injector.get(roles_service_1.RolesService);
|
|
194
|
+
rolesService.stopAll();
|
|
222
195
|
});
|
|
223
|
-
}
|
|
196
|
+
}
|
|
224
197
|
/**
|
|
225
198
|
* Start any services, as defined by modules. For instance, if you import WebServerModule from @alterior/web-server,
|
|
226
199
|
* calling this will instruct the module to begin serving on the configured port.
|
|
@@ -229,27 +202,20 @@ var Runtime = /** @class */ (function () {
|
|
|
229
202
|
* which implements it to be called. It also instructs the RolesService to start roles as per it's configuration.
|
|
230
203
|
* For more information about Roles, see the documentation for RolesService.
|
|
231
204
|
*/
|
|
232
|
-
|
|
205
|
+
start() {
|
|
233
206
|
this.fireEvent('OnStart');
|
|
234
|
-
|
|
207
|
+
let rolesService = this.injector.get(roles_service_1.RolesService);
|
|
235
208
|
rolesService.startAll();
|
|
236
|
-
}
|
|
209
|
+
}
|
|
237
210
|
/**
|
|
238
211
|
* Stop all running services and shut down the process
|
|
239
212
|
*/
|
|
240
|
-
|
|
241
|
-
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
case 0: return [4 /*yield*/, this.stop()];
|
|
245
|
-
case 1:
|
|
246
|
-
_a.sent();
|
|
247
|
-
process.exit();
|
|
248
|
-
return [2 /*return*/];
|
|
249
|
-
}
|
|
250
|
-
});
|
|
213
|
+
shutdown() {
|
|
214
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () {
|
|
215
|
+
yield this.stop();
|
|
216
|
+
process.exit();
|
|
251
217
|
});
|
|
252
|
-
}
|
|
218
|
+
}
|
|
253
219
|
/**
|
|
254
220
|
* Retrieve the ModuleAnnotation for a given Module definition, whether it be a class annotated
|
|
255
221
|
* with `@Module()` or a plain object with `$module` which configures a module class.
|
|
@@ -258,72 +224,57 @@ var Runtime = /** @class */ (function () {
|
|
|
258
224
|
*
|
|
259
225
|
* @param module
|
|
260
226
|
*/
|
|
261
|
-
|
|
227
|
+
getMetadataForModule(module) {
|
|
262
228
|
return di_1.ModuleAnnotation.getForClass(module);
|
|
263
|
-
}
|
|
229
|
+
}
|
|
264
230
|
/**
|
|
265
231
|
* Resolves the given module, adding it to this runtime.
|
|
266
232
|
* Calls itself for all imports. Visited modules are tracked per runtime,
|
|
267
233
|
* so resolveModule() on the same runtime object will not work, preventing
|
|
268
234
|
* loops.
|
|
269
235
|
*/
|
|
270
|
-
|
|
236
|
+
resolveModule(module) {
|
|
271
237
|
// Prevent infinite recursion
|
|
272
|
-
var e_2, _a;
|
|
273
238
|
if (this.visited.includes(module))
|
|
274
239
|
return;
|
|
275
240
|
this.visited.push(module);
|
|
276
241
|
// Construct this compilation unit
|
|
277
|
-
|
|
242
|
+
let isExtension = false;
|
|
278
243
|
if (module['$module']) {
|
|
279
244
|
isExtension = true;
|
|
280
245
|
// This is a mask
|
|
281
246
|
module = Object.assign({}, module);
|
|
282
|
-
|
|
283
|
-
|
|
247
|
+
let parentModule = module['$module'];
|
|
248
|
+
let options = Object.assign({}, module);
|
|
284
249
|
delete module['$module'];
|
|
285
250
|
if (!options.imports)
|
|
286
251
|
options.imports = [];
|
|
287
252
|
options.imports.push(parentModule);
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
], subModule);
|
|
294
|
-
return subModule;
|
|
295
|
-
}());
|
|
253
|
+
let subModule = class subModule {
|
|
254
|
+
};
|
|
255
|
+
subModule = (0, tslib_1.__decorate)([
|
|
256
|
+
(0, di_1.Module)(options)
|
|
257
|
+
], subModule);
|
|
296
258
|
;
|
|
297
259
|
module = subModule;
|
|
298
|
-
|
|
260
|
+
let metadata = this.getMetadataForModule(module);
|
|
299
261
|
}
|
|
300
|
-
|
|
262
|
+
let metadata = this.getMetadataForModule(module);
|
|
301
263
|
if (metadata && metadata.imports) {
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
if (!importedModule) {
|
|
307
|
-
throw new Error("Failed to resolve module referenced in position " + position + " by " + module.toString());
|
|
308
|
-
}
|
|
309
|
-
this.resolveModule(importedModule);
|
|
310
|
-
++position;
|
|
264
|
+
let position = 0;
|
|
265
|
+
for (let importedModule of metadata.imports) {
|
|
266
|
+
if (!importedModule) {
|
|
267
|
+
throw new Error(`Failed to resolve module referenced in position ${position} by ${module.toString()}`);
|
|
311
268
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
finally {
|
|
315
|
-
try {
|
|
316
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
317
|
-
}
|
|
318
|
-
finally { if (e_2) throw e_2.error; }
|
|
269
|
+
this.resolveModule(importedModule);
|
|
270
|
+
++position;
|
|
319
271
|
}
|
|
320
272
|
}
|
|
321
273
|
this.definitions.push({
|
|
322
274
|
target: module,
|
|
323
|
-
metadata
|
|
275
|
+
metadata,
|
|
324
276
|
});
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
}());
|
|
277
|
+
}
|
|
278
|
+
}
|
|
328
279
|
exports.Runtime = Runtime;
|
|
329
280
|
//# sourceMappingURL=modules.js.map
|
package/dist/modules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"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"}
|