UNPKG

2.45 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const unknown_element_exception_1 = require("../errors/exceptions/unknown-element.exception");
4const container_scanner_1 = require("./container-scanner");
5const injector_1 = require("./injector");
6const instance_wrapper_1 = require("./instance-wrapper");
7class ModuleRef {
8 constructor(container) {
9 this.container = container;
10 this.injector = new injector_1.Injector();
11 this.containerScanner = new container_scanner_1.ContainerScanner(container);
12 }
13 find(typeOrToken) {
14 return this.containerScanner.find(typeOrToken);
15 }
16 async instantiateClass(type, moduleRef) {
17 const wrapper = new instance_wrapper_1.InstanceWrapper({
18 name: type && type.name,
19 metatype: type,
20 instance: undefined,
21 isResolved: false,
22 host: moduleRef,
23 });
24 return new Promise(async (resolve, reject) => {
25 try {
26 const callback = async (instances) => {
27 const properties = await this.injector.resolveProperties(wrapper, moduleRef);
28 const instance = new type(...instances);
29 this.injector.applyProperties(instance, properties);
30 resolve(instance);
31 };
32 await this.injector.resolveConstructorParams(wrapper, moduleRef, undefined, callback);
33 }
34 catch (err) {
35 reject(err);
36 }
37 });
38 }
39 findInstanceByToken(metatypeOrToken, contextModule) {
40 return this.containerScanner.findInstanceByToken(metatypeOrToken, contextModule);
41 }
42 async resolvePerContext(typeOrToken, contextModule, contextId, options) {
43 let wrapper, collection;
44 if (!(options && options.strict)) {
45 [wrapper, collection] = this.containerScanner.getWrapperCollectionPair(typeOrToken);
46 }
47 else {
48 [
49 wrapper,
50 collection,
51 ] = this.containerScanner.getWrapperCollectionPairByHost(typeOrToken, contextModule);
52 }
53 const instance = await this.injector.loadPerContext(wrapper.instance, wrapper.host, collection, contextId);
54 if (!instance) {
55 throw new unknown_element_exception_1.UnknownElementException();
56 }
57 return instance;
58 }
59}
60exports.ModuleRef = ModuleRef;