UNPKG

1.86 kBJavaScriptView Raw
1const _forEach = require('lodash.foreach');
2const Dependency = require('./Dependency');
3
4const rall = /.+/;
5
6module.exports = {
7
8 warnIfNeeded(name) {
9 if (this.hasDependency(name)) {
10 this.logger.warn(`warning: ${name} dependency is being overwritten in ${this.name} injector`);
11 }
12 },
13
14 addResolvableDependency(name, dependency, suppressWarning = false) {
15 if (!suppressWarning) {
16 this.warnIfNeeded(name);
17 }
18 this.dependencies[name] = Dependency.resolvableDependency(name, dependency);
19 return this;
20 },
21
22 addDependency(name, dependency, suppressWarning = false) {
23 if (!suppressWarning) {
24 this.warnIfNeeded(name);
25 }
26 this.dependencies[name] = Dependency.dependency(name, dependency);
27 return this;
28 },
29
30 addConstructedDependency(name, dependency, suppressWarning = false) {
31 if (!suppressWarning) {
32 this.warnIfNeeded(name);
33 }
34 this.dependencies[name] = dependency;
35 return this;
36 },
37
38 removeDependency(name) {
39 delete this.dependencies[name];
40 return this;
41 },
42
43 getDependency(name) {
44 return this.dependencies[name];
45 },
46
47 hasDependency(name) {
48 return !!this.dependencies[name];
49 },
50
51 merge(otherInjector, suppressWarning = false) {
52 const dependencies = otherInjector.dependencies;
53
54 _forEach(dependencies, (value, name) => {
55 const dependency = dependencies[name];
56 this.addConstructedDependency(name, dependency, suppressWarning);
57 });
58 return this;
59 },
60
61 use(otherInjector, suppressWarning = false) {
62 return this.merge(otherInjector, suppressWarning);
63 },
64
65 exposeAll() {
66 return this.expose(rall);
67 },
68
69 expose(exposedDeps) {
70 this.exposedDeps = exposedDeps;
71 return this;
72 },
73
74 link(otherInjector) {
75 const deps = otherInjector.resolveExposedDependencies();
76 return this.registerDependencies(deps);
77 }
78};