@visactor/vrender-core 0.17.0-alpha.1 → 0.17.0-alpha.3
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/cjs/allocator/canvas-allocate.d.ts +2 -0
- package/cjs/allocator/canvas-allocate.js +12 -6
- package/cjs/allocator/canvas-allocate.js.map +1 -1
- package/cjs/common/Reflect-metadata.js +349 -358
- package/cjs/common/Reflect-metadata.js.map +1 -1
- package/cjs/common/inversify/annotation/inject.d.ts +1 -0
- package/cjs/common/inversify/annotation/inject.js +10 -0
- package/cjs/common/inversify/annotation/inject.js.map +1 -0
- package/cjs/common/inversify/annotation/inject_base.d.ts +14 -0
- package/cjs/common/inversify/annotation/inject_base.js +39 -0
- package/cjs/common/inversify/annotation/inject_base.js.map +1 -0
- package/cjs/common/inversify/annotation/injectable.d.ts +1 -0
- package/cjs/common/{inversify-lite/annotation/post_construct.js → inversify/annotation/injectable.js} +15 -5
- package/cjs/common/inversify/annotation/injectable.js.map +1 -0
- package/cjs/common/inversify/annotation/multi_inject.d.ts +1 -0
- package/cjs/common/inversify/annotation/multi_inject.js +10 -0
- package/cjs/common/inversify/annotation/multi_inject.js.map +1 -0
- package/cjs/common/inversify/annotation/named.d.ts +1 -0
- package/cjs/common/inversify/annotation/named.js +14 -0
- package/cjs/common/inversify/annotation/named.js.map +1 -0
- package/cjs/common/inversify/binding.d.ts +18 -0
- package/cjs/common/inversify/binding.js +26 -0
- package/cjs/common/inversify/binding.js.map +1 -0
- package/cjs/common/inversify/container.d.ts +28 -0
- package/cjs/common/inversify/container.js +155 -0
- package/cjs/common/inversify/container.js.map +1 -0
- package/cjs/common/inversify/cotainer-module.d.ts +6 -0
- package/cjs/common/inversify/cotainer-module.js +16 -0
- package/cjs/common/inversify/cotainer-module.js.map +1 -0
- package/cjs/common/inversify/index.d.ts +7 -0
- package/cjs/common/inversify/index.js +75 -0
- package/cjs/common/inversify/index.js.map +1 -0
- package/cjs/common/inversify/interfaces.d.ts +218 -0
- package/cjs/common/inversify/interfaces.js +6 -0
- package/cjs/common/inversify/interfaces.js.map +1 -0
- package/cjs/common/inversify/literal_types.d.ts +5 -0
- package/cjs/common/inversify/literal_types.js +34 -0
- package/cjs/common/inversify/literal_types.js.map +1 -0
- package/cjs/common/inversify/meta-data.d.ts +6 -0
- package/cjs/common/inversify/meta-data.js +19 -0
- package/cjs/common/inversify/meta-data.js.map +1 -0
- package/cjs/common/inversify/metadata_keys.d.ts +12 -0
- package/cjs/common/inversify/metadata_keys.js +15 -0
- package/cjs/common/inversify/metadata_keys.js.map +1 -0
- package/cjs/common/inversify/metadata_reader.d.ts +6 -0
- package/cjs/common/inversify/metadata_reader.js +28 -0
- package/cjs/common/inversify/metadata_reader.js.map +1 -0
- package/cjs/common/inversify/syntax/binding_in_syntax.d.ts +10 -0
- package/cjs/common/inversify/syntax/binding_in_syntax.js +29 -0
- package/cjs/common/inversify/syntax/binding_in_syntax.js.map +1 -0
- package/cjs/common/inversify/syntax/binding_to_syntax.d.ts +12 -0
- package/cjs/common/inversify/syntax/binding_to_syntax.js +40 -0
- package/cjs/common/inversify/syntax/binding_to_syntax.js.map +1 -0
- package/cjs/common/inversify/syntax/constraint_helpers.d.ts +2 -0
- package/cjs/common/inversify/syntax/constraint_helpers.js +18 -0
- package/cjs/common/inversify/syntax/constraint_helpers.js.map +1 -0
- package/cjs/common/inversify-lite/index.d.ts +1 -8
- package/cjs/common/inversify-lite/index.js +1 -64
- package/cjs/common/inversify-lite/index.js.map +1 -1
- package/cjs/common/utils.d.ts +1 -0
- package/cjs/common/utils.js +10 -1
- package/cjs/common/utils.js.map +1 -1
- package/cjs/core/global.d.ts +2 -0
- package/cjs/core/global.js +4 -3
- package/cjs/core/global.js.map +1 -1
- package/cjs/core/graphic-utils.d.ts +5 -2
- package/cjs/core/graphic-utils.js +14 -4
- package/cjs/core/graphic-utils.js.map +1 -1
- package/cjs/core/stage.d.ts +4 -1
- package/cjs/core/stage.js +31 -27
- package/cjs/core/stage.js.map +1 -1
- package/cjs/core/window.js +2 -2
- package/cjs/core/window.js.map +1 -1
- package/cjs/event/event-manager.js +3 -2
- package/cjs/event/event-manager.js.map +1 -1
- package/cjs/graphic/builtin-symbol/index.d.ts +1 -0
- package/cjs/graphic/builtin-symbol/index.js +8 -2
- package/cjs/graphic/builtin-symbol/index.js.map +1 -1
- package/cjs/graphic/config.js +4 -1
- package/cjs/graphic/config.js.map +1 -1
- package/cjs/graphic/richtext/paragraph.js +12 -11
- package/cjs/graphic/richtext/paragraph.js.map +1 -1
- package/cjs/graphic/symbol.js +3 -2
- package/cjs/graphic/symbol.js.map +1 -1
- package/cjs/graphic/text.d.ts +1 -0
- package/cjs/graphic/text.js +93 -7
- package/cjs/graphic/text.js.map +1 -1
- package/cjs/graphic/wrap-text.js +6 -5
- package/cjs/graphic/wrap-text.js.map +1 -1
- package/cjs/interface/global.d.ts +1 -0
- package/cjs/interface/global.js.map +1 -1
- package/cjs/interface/graphic/richText.d.ts +1 -1
- package/cjs/interface/graphic/richText.js.map +1 -1
- package/cjs/interface/graphic/text.d.ts +4 -1
- package/cjs/interface/graphic/text.js.map +1 -1
- package/cjs/render/contributions/render/area-render.d.ts +1 -0
- package/cjs/render/contributions/render/area-render.js +42 -5
- package/cjs/render/contributions/render/area-render.js.map +1 -1
- package/cjs/render/contributions/render/base-render.js +4 -10
- package/cjs/render/contributions/render/base-render.js.map +1 -1
- package/cjs/render/contributions/render/draw-contribution.d.ts +2 -0
- package/cjs/render/contributions/render/draw-contribution.js +18 -9
- package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
- package/cjs/render/contributions/render/line-render.d.ts +1 -0
- package/cjs/render/contributions/render/line-render.js +21 -6
- package/cjs/render/contributions/render/line-render.js.map +1 -1
- package/cjs/render/contributions/render/module.js +7 -7
- package/cjs/render/contributions/render/module.js.map +1 -1
- package/cjs/render/contributions/render/text-render.js +12 -10
- package/cjs/render/contributions/render/text-render.js.map +1 -1
- package/dist/index.js +691 -1548
- package/dist/index.min.js +1 -1
- package/es/allocator/canvas-allocate.d.ts +2 -0
- package/es/allocator/canvas-allocate.js +12 -6
- package/es/allocator/canvas-allocate.js.map +1 -1
- package/es/common/Reflect-metadata.js +349 -358
- package/es/common/Reflect-metadata.js.map +1 -1
- package/es/common/inversify/annotation/inject.d.ts +1 -0
- package/es/common/inversify/annotation/inject.js +6 -0
- package/es/common/inversify/annotation/inject.js.map +1 -0
- package/es/common/inversify/annotation/inject_base.d.ts +14 -0
- package/es/common/inversify/annotation/inject_base.js +29 -0
- package/es/common/inversify/annotation/inject_base.js.map +1 -0
- package/es/common/inversify/annotation/injectable.d.ts +1 -0
- package/es/common/inversify/annotation/injectable.js +10 -0
- package/es/common/inversify/annotation/injectable.js.map +1 -0
- package/es/common/inversify/annotation/multi_inject.d.ts +1 -0
- package/es/common/inversify/annotation/multi_inject.js +6 -0
- package/es/common/inversify/annotation/multi_inject.js.map +1 -0
- package/es/common/inversify/annotation/named.d.ts +1 -0
- package/es/common/inversify/annotation/named.js +10 -0
- package/es/common/inversify/annotation/named.js.map +1 -0
- package/es/common/inversify/binding.d.ts +18 -0
- package/es/common/inversify/binding.js +22 -0
- package/es/common/inversify/binding.js.map +1 -0
- package/es/common/inversify/container.d.ts +28 -0
- package/es/common/inversify/container.js +155 -0
- package/es/common/inversify/container.js.map +1 -0
- package/es/common/inversify/cotainer-module.d.ts +6 -0
- package/es/common/inversify/cotainer-module.js +8 -0
- package/es/common/inversify/cotainer-module.js.map +1 -0
- package/es/common/inversify/index.d.ts +7 -0
- package/es/common/inversify/index.js +14 -0
- package/es/common/inversify/index.js.map +1 -0
- package/es/common/inversify/interfaces.d.ts +218 -0
- package/es/common/inversify/interfaces.js +2 -0
- package/es/common/inversify/interfaces.js.map +1 -0
- package/es/common/inversify/literal_types.d.ts +5 -0
- package/es/common/inversify/literal_types.js +20 -0
- package/es/common/inversify/literal_types.js.map +1 -0
- package/es/common/inversify/meta-data.d.ts +6 -0
- package/es/common/inversify/meta-data.js +11 -0
- package/es/common/inversify/meta-data.js.map +1 -0
- package/es/common/inversify/metadata_keys.d.ts +12 -0
- package/es/common/inversify/metadata_keys.js +28 -0
- package/es/common/inversify/metadata_keys.js.map +1 -0
- package/es/common/inversify/metadata_reader.d.ts +6 -0
- package/es/common/inversify/metadata_reader.js +18 -0
- package/es/common/inversify/metadata_reader.js.map +1 -0
- package/es/common/inversify/syntax/binding_in_syntax.d.ts +10 -0
- package/es/common/inversify/syntax/binding_in_syntax.js +24 -0
- package/es/common/inversify/syntax/binding_in_syntax.js.map +1 -0
- package/es/common/inversify/syntax/binding_to_syntax.d.ts +12 -0
- package/es/common/inversify/syntax/binding_to_syntax.js +36 -0
- package/es/common/inversify/syntax/binding_to_syntax.js.map +1 -0
- package/es/common/inversify/syntax/constraint_helpers.d.ts +2 -0
- package/es/common/inversify/syntax/constraint_helpers.js +16 -0
- package/es/common/inversify/syntax/constraint_helpers.js.map +1 -0
- package/es/common/inversify-lite/index.d.ts +1 -8
- package/es/common/inversify-lite/index.js +1 -15
- package/es/common/inversify-lite/index.js.map +1 -1
- package/es/common/utils.d.ts +1 -0
- package/es/common/utils.js +8 -1
- package/es/common/utils.js.map +1 -1
- package/es/core/global.d.ts +2 -0
- package/es/core/global.js +4 -2
- package/es/core/global.js.map +1 -1
- package/es/core/graphic-utils.d.ts +5 -2
- package/es/core/graphic-utils.js +14 -4
- package/es/core/graphic-utils.js.map +1 -1
- package/es/core/stage.d.ts +4 -1
- package/es/core/stage.js +31 -24
- package/es/core/stage.js.map +1 -1
- package/es/core/window.js +3 -3
- package/es/core/window.js.map +1 -1
- package/es/event/event-manager.js +3 -2
- package/es/event/event-manager.js.map +1 -1
- package/es/graphic/builtin-symbol/index.d.ts +1 -0
- package/es/graphic/builtin-symbol/index.js +8 -0
- package/es/graphic/builtin-symbol/index.js.map +1 -1
- package/es/graphic/config.js +4 -1
- package/es/graphic/config.js.map +1 -1
- package/es/graphic/richtext/paragraph.js +5 -2
- package/es/graphic/richtext/paragraph.js.map +1 -1
- package/es/graphic/symbol.js +4 -3
- package/es/graphic/symbol.js.map +1 -1
- package/es/graphic/text.d.ts +1 -0
- package/es/graphic/text.js +90 -9
- package/es/graphic/text.js.map +1 -1
- package/es/graphic/wrap-text.js +6 -4
- package/es/graphic/wrap-text.js.map +1 -1
- package/es/interface/global.d.ts +1 -0
- package/es/interface/global.js.map +1 -1
- package/es/interface/graphic/richText.d.ts +1 -1
- package/es/interface/graphic/richText.js.map +1 -1
- package/es/interface/graphic/text.d.ts +4 -1
- package/es/interface/graphic/text.js.map +1 -1
- package/es/render/contributions/render/area-render.d.ts +1 -0
- package/es/render/contributions/render/area-render.js +42 -5
- package/es/render/contributions/render/area-render.js.map +1 -1
- package/es/render/contributions/render/base-render.js +2 -14
- package/es/render/contributions/render/base-render.js.map +1 -1
- package/es/render/contributions/render/draw-contribution.d.ts +2 -0
- package/es/render/contributions/render/draw-contribution.js +18 -9
- package/es/render/contributions/render/draw-contribution.js.map +1 -1
- package/es/render/contributions/render/line-render.d.ts +1 -0
- package/es/render/contributions/render/line-render.js +21 -6
- package/es/render/contributions/render/line-render.js.map +1 -1
- package/es/render/contributions/render/module.js +21 -17
- package/es/render/contributions/render/module.js.map +1 -1
- package/es/render/contributions/render/text-render.js +13 -9
- package/es/render/contributions/render/text-render.js.map +1 -1
- package/package.json +4 -2
- package/cjs/common/inversify-lite/annotation/post_construct.d.ts +0 -4
- package/cjs/common/inversify-lite/annotation/post_construct.js.map +0 -1
- package/es/common/inversify-lite/annotation/post_construct.d.ts +0 -4
- package/es/common/inversify-lite/annotation/post_construct.js +0 -10
- package/es/common/inversify-lite/annotation/post_construct.js.map +0 -1
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.Container = void 0;
|
|
6
|
+
|
|
7
|
+
const generator_1 = require("../generator"), binding_1 = require("./binding"), literal_types_1 = require("./literal_types"), metadata_keys_1 = require("./metadata_keys"), metadata_reader_1 = require("./metadata_reader"), binding_to_syntax_1 = require("./syntax/binding_to_syntax");
|
|
8
|
+
|
|
9
|
+
class Container {
|
|
10
|
+
constructor(containerOptions) {
|
|
11
|
+
const options = containerOptions || {};
|
|
12
|
+
options.defaultScope = options.defaultScope || literal_types_1.BindingScopeEnum.Transient,
|
|
13
|
+
this.options = options, this.id = generator_1.Generator.GenAutoIncrementId(), this._bindingDictionary = new Map,
|
|
14
|
+
this._metadataReader = new metadata_reader_1.MetadataReader;
|
|
15
|
+
}
|
|
16
|
+
load(module) {
|
|
17
|
+
const containerModuleHelpers = this._getContainerModuleHelpersFactory()(module.id);
|
|
18
|
+
module.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction);
|
|
19
|
+
}
|
|
20
|
+
get(serviceIdentifier) {
|
|
21
|
+
const getArgs = this._getNotAllArgs(serviceIdentifier, !1);
|
|
22
|
+
return this._get(getArgs);
|
|
23
|
+
}
|
|
24
|
+
getAll(serviceIdentifier) {
|
|
25
|
+
const getArgs = this._getAllArgs(serviceIdentifier);
|
|
26
|
+
return this._get(getArgs);
|
|
27
|
+
}
|
|
28
|
+
getTagged(serviceIdentifier, key, value) {
|
|
29
|
+
const getArgs = this._getNotAllArgs(serviceIdentifier, !1, key, value);
|
|
30
|
+
return this._get(getArgs);
|
|
31
|
+
}
|
|
32
|
+
getNamed(serviceIdentifier, named) {
|
|
33
|
+
return this.getTagged(serviceIdentifier, metadata_keys_1.NAMED_TAG, named);
|
|
34
|
+
}
|
|
35
|
+
isBound(serviceIdentifier) {
|
|
36
|
+
return this._bindingDictionary.has(serviceIdentifier);
|
|
37
|
+
}
|
|
38
|
+
bind(serviceIdentifier) {
|
|
39
|
+
const scope = this.options.defaultScope, binding = new binding_1.Binding(serviceIdentifier, scope), list = this._bindingDictionary.get(serviceIdentifier) || [];
|
|
40
|
+
return list.push(binding), this._bindingDictionary.set(serviceIdentifier, list),
|
|
41
|
+
new binding_to_syntax_1.BindingToSyntax(binding);
|
|
42
|
+
}
|
|
43
|
+
unbind(serviceIdentifier) {
|
|
44
|
+
this._bindingDictionary.delete(serviceIdentifier);
|
|
45
|
+
}
|
|
46
|
+
rebind(serviceIdentifier) {
|
|
47
|
+
return this.unbind(serviceIdentifier), this.bind(serviceIdentifier);
|
|
48
|
+
}
|
|
49
|
+
_getContainerModuleHelpersFactory() {
|
|
50
|
+
const setModuleId = (bindingToSyntax, moduleId) => {
|
|
51
|
+
bindingToSyntax._binding.moduleId = moduleId;
|
|
52
|
+
}, getBindFunction = moduleId => serviceIdentifier => {
|
|
53
|
+
const bindingToSyntax = this.bind(serviceIdentifier);
|
|
54
|
+
return setModuleId(bindingToSyntax, moduleId), bindingToSyntax;
|
|
55
|
+
}, getUnbindFunction = () => serviceIdentifier => this.unbind(serviceIdentifier), getIsboundFunction = () => serviceIdentifier => this.isBound(serviceIdentifier), getRebindFunction = moduleId => serviceIdentifier => {
|
|
56
|
+
const bindingToSyntax = this.rebind(serviceIdentifier);
|
|
57
|
+
return setModuleId(bindingToSyntax, moduleId), bindingToSyntax;
|
|
58
|
+
};
|
|
59
|
+
return mId => ({
|
|
60
|
+
bindFunction: getBindFunction(mId),
|
|
61
|
+
isboundFunction: getIsboundFunction(),
|
|
62
|
+
rebindFunction: getRebindFunction(mId),
|
|
63
|
+
unbindFunction: getUnbindFunction(),
|
|
64
|
+
unbindAsyncFunction: serviceIdentifier => null
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
_getNotAllArgs(serviceIdentifier, isMultiInject, key, value) {
|
|
68
|
+
return {
|
|
69
|
+
avoidConstraints: !1,
|
|
70
|
+
isMultiInject: isMultiInject,
|
|
71
|
+
serviceIdentifier: serviceIdentifier,
|
|
72
|
+
key: key,
|
|
73
|
+
value: value
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
_getAllArgs(serviceIdentifier) {
|
|
77
|
+
return {
|
|
78
|
+
avoidConstraints: !0,
|
|
79
|
+
isMultiInject: !0,
|
|
80
|
+
serviceIdentifier: serviceIdentifier
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
_get(getArgs) {
|
|
84
|
+
const result = [];
|
|
85
|
+
return this._bindingDictionary.get(getArgs.serviceIdentifier).forEach((binding => {
|
|
86
|
+
result.push(this._resolveFromBinding(binding));
|
|
87
|
+
})), getArgs.isMultiInject || 1 !== result.length ? result : result[0];
|
|
88
|
+
}
|
|
89
|
+
_getChildRequest(binding) {
|
|
90
|
+
const constr = binding.implementationType, {userGeneratedMetadata: userGeneratedMetadata} = this._metadataReader.getConstructorMetadata(constr), keys = Object.keys(userGeneratedMetadata), arr = [];
|
|
91
|
+
for (let i = 0; i < keys.length; i++) {
|
|
92
|
+
const constructorArgsMetadata = userGeneratedMetadata[i], targetMetadataMap = {};
|
|
93
|
+
constructorArgsMetadata.forEach((md => {
|
|
94
|
+
targetMetadataMap[md.key] = md.value;
|
|
95
|
+
}));
|
|
96
|
+
const metadata = {
|
|
97
|
+
inject: targetMetadataMap[metadata_keys_1.INJECT_TAG],
|
|
98
|
+
multiInject: targetMetadataMap[metadata_keys_1.MULTI_INJECT_TAG]
|
|
99
|
+
}, injectIdentifier = metadata.inject || metadata.multiInject, target = {
|
|
100
|
+
serviceIdentifier: injectIdentifier,
|
|
101
|
+
constructorArgsMetadata: constructorArgsMetadata
|
|
102
|
+
}, request = {
|
|
103
|
+
injectIdentifier: injectIdentifier,
|
|
104
|
+
metadata: constructorArgsMetadata,
|
|
105
|
+
bindings: this._bindingDictionary.get(injectIdentifier).filter((b => b.constraint(target)))
|
|
106
|
+
};
|
|
107
|
+
arr.push(request);
|
|
108
|
+
}
|
|
109
|
+
return arr;
|
|
110
|
+
}
|
|
111
|
+
_resolveFromBinding(binding) {
|
|
112
|
+
const result = this._getResolvedFromBinding(binding);
|
|
113
|
+
return this._saveToScope(binding, result), result;
|
|
114
|
+
}
|
|
115
|
+
_getResolvedFromBinding(binding) {
|
|
116
|
+
let result;
|
|
117
|
+
switch (binding.type) {
|
|
118
|
+
case literal_types_1.BindingTypeEnum.ConstantValue:
|
|
119
|
+
case literal_types_1.BindingTypeEnum.Function:
|
|
120
|
+
result = binding.cache;
|
|
121
|
+
break;
|
|
122
|
+
|
|
123
|
+
case literal_types_1.BindingTypeEnum.Instance:
|
|
124
|
+
result = this._resolveInstance(binding, binding.implementationType);
|
|
125
|
+
break;
|
|
126
|
+
|
|
127
|
+
default:
|
|
128
|
+
result = binding.dynamicValue({
|
|
129
|
+
container: this
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
_resolveInstance(binding, constr) {
|
|
135
|
+
if (binding.activated) return binding.cache;
|
|
136
|
+
const childRequests = this._getChildRequest(binding);
|
|
137
|
+
return this._createInstance(constr, childRequests);
|
|
138
|
+
}
|
|
139
|
+
_createInstance(constr, childRequests) {
|
|
140
|
+
if (childRequests.length) {
|
|
141
|
+
return new constr(...this._resolveRequests(childRequests));
|
|
142
|
+
}
|
|
143
|
+
return new constr;
|
|
144
|
+
}
|
|
145
|
+
_resolveRequests(childRequests) {
|
|
146
|
+
return childRequests.map((request => request.bindings.length > 1 ? request.bindings.map((binding => this._resolveFromBinding(binding))) : this._resolveFromBinding(request.bindings[0])));
|
|
147
|
+
}
|
|
148
|
+
_saveToScope(binding, result) {
|
|
149
|
+
binding.scope === literal_types_1.BindingScopeEnum.Singleton && (binding.cache = result,
|
|
150
|
+
binding.activated = !0);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
exports.Container = Container;
|
|
155
|
+
//# sourceMappingURL=container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/inversify/container.ts"],"names":[],"mappings":"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","file":"container.js","sourcesContent":["import { Generator } from '../generator';\nimport { Binding } from './binding';\nimport type { interfaces } from './interfaces';\nimport { BindingScopeEnum, BindingTypeEnum } from './literal_types';\nimport { Metadata } from './meta-data';\nimport { INJECT_TAG, MULTI_INJECT_TAG, NAMED_TAG } from './metadata_keys';\nimport { MetadataReader } from './metadata_reader';\nimport { BindingToSyntax } from './syntax/binding_to_syntax';\n\ninterface IChildRequest {\n injectIdentifier: any;\n metadata: interfaces.Metadata<unknown>[];\n bindings: Binding<unknown>[];\n}\n\ninterface GetArgs<T> {\n avoidConstraints: boolean;\n isMultiInject: boolean;\n serviceIdentifier: interfaces.ServiceIdentifier<T>;\n key: string | symbol;\n value: any;\n}\n\nexport class Container {\n id: number;\n readonly options: interfaces.ContainerOptions;\n private _bindingDictionary: Map<any, Binding<unknown>[]>;\n private _metadataReader: interfaces.MetadataReader;\n\n constructor(containerOptions?: interfaces.ContainerOptions) {\n const options = containerOptions || {};\n options.defaultScope = options.defaultScope || BindingScopeEnum.Transient;\n // console.log(this);\n this.options = options;\n this.id = Generator.GenAutoIncrementId();\n this._bindingDictionary = new Map();\n this._metadataReader = new MetadataReader();\n }\n\n load(module: interfaces.ContainerModule) {\n const getHelpers = this._getContainerModuleHelpersFactory();\n\n const containerModuleHelpers = getHelpers(module.id);\n\n module.registry(\n containerModuleHelpers.bindFunction as interfaces.Bind,\n containerModuleHelpers.unbindFunction,\n containerModuleHelpers.isboundFunction,\n containerModuleHelpers.rebindFunction as interfaces.Rebind\n );\n }\n\n get<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): T {\n const getArgs = this._getNotAllArgs(serviceIdentifier, false);\n\n return this._get<T>(getArgs) as T;\n }\n\n getAll<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): T[] {\n const getArgs = this._getAllArgs(serviceIdentifier);\n\n return this._get<T>(getArgs) as T[];\n }\n\n getTagged<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>, key: string | number | symbol, value: unknown): T {\n const getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);\n\n return this._get<T>(getArgs) as T;\n }\n\n getNamed<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>, named: string | number | symbol): T {\n return this.getTagged<T>(serviceIdentifier, NAMED_TAG, named);\n }\n\n isBound(serviceIdentifier: interfaces.ServiceIdentifier<unknown>): boolean {\n return this._bindingDictionary.has(serviceIdentifier);\n }\n\n // Registers a type binding\n bind<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): interfaces.BindingToSyntax<T> {\n const scope = this.options.defaultScope;\n const binding = new Binding<T>(serviceIdentifier, scope);\n const list = this._bindingDictionary.get(serviceIdentifier) || [];\n list.push(binding);\n this._bindingDictionary.set(serviceIdentifier, list);\n return new BindingToSyntax<T>(binding);\n }\n\n unbind(serviceIdentifier: interfaces.ServiceIdentifier): void {\n this._bindingDictionary.delete(serviceIdentifier);\n }\n\n rebind<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): interfaces.BindingToSyntax<T> {\n this.unbind(serviceIdentifier);\n return this.bind(serviceIdentifier);\n }\n\n private _getContainerModuleHelpersFactory() {\n const setModuleId = (\n bindingToSyntax: interfaces.BindingToSyntax<unknown>,\n moduleId: interfaces.ContainerModuleBase['id']\n ) => {\n // TODO: Implement an internal type `_BindingToSyntax<T>` wherein this member\n // can be public. Let `BindingToSyntax<T>` be the presentational type that\n // depends on it, and does not expose this member as public.\n (\n bindingToSyntax as unknown as { _binding: { moduleId: interfaces.ContainerModuleBase['id'] } }\n )._binding.moduleId = moduleId;\n };\n\n const getBindFunction =\n <T>(moduleId: interfaces.ContainerModuleBase['id']) =>\n (serviceIdentifier: interfaces.ServiceIdentifier) => {\n const bindingToSyntax = this.bind(serviceIdentifier);\n setModuleId(bindingToSyntax, moduleId);\n return bindingToSyntax as BindingToSyntax<T>;\n };\n\n const getUnbindFunction = () => (serviceIdentifier: interfaces.ServiceIdentifier) => {\n return this.unbind(serviceIdentifier);\n };\n\n const getUnbindAsyncFunction = () => (serviceIdentifier: interfaces.ServiceIdentifier) => {\n return null as any;\n // return this.unbindAsync(serviceIdentifier);\n };\n\n const getIsboundFunction = () => (serviceIdentifier: interfaces.ServiceIdentifier) => {\n return this.isBound(serviceIdentifier);\n };\n\n const getRebindFunction =\n <T = unknown>(moduleId: interfaces.ContainerModuleBase['id']) =>\n (serviceIdentifier: interfaces.ServiceIdentifier) => {\n const bindingToSyntax = this.rebind(serviceIdentifier);\n setModuleId(bindingToSyntax, moduleId);\n return bindingToSyntax as BindingToSyntax<T>;\n };\n return (mId: interfaces.ContainerModuleBase['id']) => ({\n bindFunction: getBindFunction(mId),\n isboundFunction: getIsboundFunction(),\n rebindFunction: getRebindFunction(mId),\n unbindFunction: getUnbindFunction(),\n unbindAsyncFunction: getUnbindAsyncFunction()\n });\n }\n\n private _getNotAllArgs<T>(\n serviceIdentifier: interfaces.ServiceIdentifier<T>,\n isMultiInject: boolean,\n key?: string | number | symbol | undefined,\n value?: unknown\n ): any {\n return {\n avoidConstraints: false,\n isMultiInject,\n serviceIdentifier,\n key,\n value\n };\n }\n\n private _getAllArgs<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): any {\n return {\n avoidConstraints: true,\n isMultiInject: true,\n serviceIdentifier\n };\n }\n\n private _get<T>(getArgs: GetArgs<T>): T | T[] {\n const result: T[] = [];\n const bindings = this._bindingDictionary.get(getArgs.serviceIdentifier) as Binding<T>[];\n bindings.forEach(binding => {\n result.push(this._resolveFromBinding<T>(binding));\n });\n\n return !getArgs.isMultiInject && result.length === 1 ? result[0] : result;\n }\n\n private _getChildRequest(binding: Binding<unknown>) {\n const constr = binding.implementationType;\n const { userGeneratedMetadata } = this._metadataReader.getConstructorMetadata(constr as any);\n const keys = Object.keys(userGeneratedMetadata);\n const arr = [];\n for (let i = 0; i < keys.length; i++) {\n const constructorArgsMetadata = userGeneratedMetadata[i];\n const targetMetadataMap = {};\n constructorArgsMetadata.forEach(md => {\n targetMetadataMap[md.key] = md.value;\n });\n const metadata = {\n inject: targetMetadataMap[INJECT_TAG],\n multiInject: targetMetadataMap[MULTI_INJECT_TAG]\n };\n const injectIdentifier = metadata.inject || metadata.multiInject;\n const target = {\n serviceIdentifier: injectIdentifier,\n constructorArgsMetadata\n };\n const bindings = this._bindingDictionary.get(injectIdentifier).filter(b => {\n return b.constraint(target as any);\n });\n const request = {\n injectIdentifier,\n metadata: constructorArgsMetadata,\n bindings\n };\n\n arr.push(request);\n }\n\n return arr;\n }\n\n private _resolveFromBinding<T>(binding: Binding<T>): T {\n const result = this._getResolvedFromBinding<T>(binding);\n\n this._saveToScope(binding, result);\n\n return result;\n }\n\n private _getResolvedFromBinding<T>(binding: Binding<T>) {\n let result: T;\n switch (binding.type) {\n case BindingTypeEnum.ConstantValue:\n case BindingTypeEnum.Function:\n result = binding.cache as T;\n break;\n case BindingTypeEnum.Instance:\n result = this._resolveInstance<T>(binding, binding.implementationType as interfaces.Newable<T>);\n break;\n default:\n result = binding.dynamicValue({ container: this } as any);\n }\n\n return result;\n }\n\n private _resolveInstance<T>(binding: Binding<T>, constr: interfaces.Newable<T>): T {\n if (binding.activated) {\n return binding.cache;\n }\n\n const childRequests = this._getChildRequest(binding);\n return this._createInstance(constr, childRequests);\n }\n\n private _createInstance<T>(constr: interfaces.Newable<T>, childRequests: IChildRequest[]) {\n if (childRequests.length) {\n const resolved = this._resolveRequests(childRequests);\n const obj = new constr(...resolved);\n return obj;\n }\n const obj = new constr();\n return obj;\n }\n\n private _resolveRequests(childRequests: IChildRequest[]): any[] {\n return childRequests.map(request => {\n return request.bindings.length > 1\n ? request.bindings.map(binding => this._resolveFromBinding(binding))\n : this._resolveFromBinding(request.bindings[0]);\n });\n }\n\n private _saveToScope(binding: Binding<unknown>, result: any) {\n if (binding.scope === BindingScopeEnum.Singleton) {\n binding.cache = result;\n binding.activated = true;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.ContainerModule = void 0;
|
|
6
|
+
|
|
7
|
+
const generator_1 = require("../generator");
|
|
8
|
+
|
|
9
|
+
class ContainerModule {
|
|
10
|
+
constructor(registry) {
|
|
11
|
+
this.id = generator_1.Generator.GenAutoIncrementId(), this.registry = registry;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
exports.ContainerModule = ContainerModule;
|
|
16
|
+
//# sourceMappingURL=cotainer-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/inversify/cotainer-module.ts"],"names":[],"mappings":";;;AAAA,4CAAyC;AAGzC,MAAa,eAAe;IAI1B,YAAY,QAA4C;QACtD,IAAI,CAAC,EAAE,GAAG,qBAAS,CAAC,kBAAkB,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AARD,0CAQC","file":"cotainer-module.js","sourcesContent":["import { Generator } from '../generator';\nimport type { interfaces } from '../inversify-lite';\n\nexport class ContainerModule {\n id: number;\n registry: interfaces.ContainerModuleCallBack;\n\n constructor(registry: interfaces.ContainerModuleCallBack) {\n this.id = Generator.GenAutoIncrementId();\n this.registry = registry;\n }\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { ContainerModule } from './cotainer-module';
|
|
2
|
+
export { inject } from './annotation/inject';
|
|
3
|
+
export { multiInject } from './annotation/multi_inject';
|
|
4
|
+
export { injectable } from './annotation/injectable';
|
|
5
|
+
export { named } from './annotation/named';
|
|
6
|
+
export { Container } from './container';
|
|
7
|
+
export * from './interfaces';
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
4
|
+
void 0 === k2 && (k2 = k);
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
|
|
7
|
+
enumerable: !0,
|
|
8
|
+
get: function() {
|
|
9
|
+
return m[k];
|
|
10
|
+
}
|
|
11
|
+
}), Object.defineProperty(o, k2, desc);
|
|
12
|
+
} : function(o, m, k, k2) {
|
|
13
|
+
void 0 === k2 && (k2 = k), o[k2] = m[k];
|
|
14
|
+
}), __exportStar = this && this.__exportStar || function(m, exports) {
|
|
15
|
+
for (var p in m) "default" === p || Object.prototype.hasOwnProperty.call(exports, p) || __createBinding(exports, m, p);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
Object.defineProperty(exports, "__esModule", {
|
|
19
|
+
value: !0
|
|
20
|
+
}), exports.Container = exports.named = exports.injectable = exports.multiInject = exports.inject = exports.ContainerModule = void 0;
|
|
21
|
+
|
|
22
|
+
var cotainer_module_1 = require("./cotainer-module");
|
|
23
|
+
|
|
24
|
+
Object.defineProperty(exports, "ContainerModule", {
|
|
25
|
+
enumerable: !0,
|
|
26
|
+
get: function() {
|
|
27
|
+
return cotainer_module_1.ContainerModule;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
var inject_1 = require("./annotation/inject");
|
|
32
|
+
|
|
33
|
+
Object.defineProperty(exports, "inject", {
|
|
34
|
+
enumerable: !0,
|
|
35
|
+
get: function() {
|
|
36
|
+
return inject_1.inject;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
var multi_inject_1 = require("./annotation/multi_inject");
|
|
41
|
+
|
|
42
|
+
Object.defineProperty(exports, "multiInject", {
|
|
43
|
+
enumerable: !0,
|
|
44
|
+
get: function() {
|
|
45
|
+
return multi_inject_1.multiInject;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
var injectable_1 = require("./annotation/injectable");
|
|
50
|
+
|
|
51
|
+
Object.defineProperty(exports, "injectable", {
|
|
52
|
+
enumerable: !0,
|
|
53
|
+
get: function() {
|
|
54
|
+
return injectable_1.injectable;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
var named_1 = require("./annotation/named");
|
|
59
|
+
|
|
60
|
+
Object.defineProperty(exports, "named", {
|
|
61
|
+
enumerable: !0,
|
|
62
|
+
get: function() {
|
|
63
|
+
return named_1.named;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
var container_1 = require("./container");
|
|
68
|
+
|
|
69
|
+
Object.defineProperty(exports, "Container", {
|
|
70
|
+
enumerable: !0,
|
|
71
|
+
get: function() {
|
|
72
|
+
return container_1.Container;
|
|
73
|
+
}
|
|
74
|
+
}), __exportStar(require("./interfaces"), exports);
|
|
75
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/inversify/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA0BA,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,8CAA6C;AAApC,gGAAA,MAAM,OAAA;AACf,0DAAwD;AAA/C,2GAAA,WAAW,OAAA;AACpB,sDAAqD;AAA5C,wGAAA,UAAU,OAAA;AACnB,4CAA2C;AAAlC,8FAAA,KAAK,OAAA;AACd,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAElB,+CAA6B","file":"index.js","sourcesContent":["/**\n * 该文件夹下所有文件来源于inversify\n * https://github.com/inversify/InversifyJS\n * The MIT License (MIT)\n\nCopyright (c) 2015-2017 Remo H. Jansen\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n */\n\nexport { ContainerModule } from './cotainer-module';\nexport { inject } from './annotation/inject';\nexport { multiInject } from './annotation/multi_inject';\nexport { injectable } from './annotation/injectable';\nexport { named } from './annotation/named';\nexport { Container } from './container';\n// export { postConstruct } from './annotation/post_construct';\nexport * from './interfaces';\n"]}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { FactoryType } from '../utils/factory_type';
|
|
2
|
+
export declare namespace interfaces {
|
|
3
|
+
type DynamicValue<T> = (context: interfaces.Context) => T;
|
|
4
|
+
type ContainerResolution<T> = T | Promise<T> | (T | Promise<T>)[];
|
|
5
|
+
type BindingScope = 'Singleton' | 'Transient' | 'Request';
|
|
6
|
+
type BindingType = 'ConstantValue' | 'Constructor' | 'DynamicValue' | 'Factory' | 'Function' | 'Instance' | 'Invalid' | 'Provider';
|
|
7
|
+
type TargetType = 'ConstructorArgument' | 'ClassProperty' | 'Variable';
|
|
8
|
+
interface BindingScopeEnum {
|
|
9
|
+
Singleton: interfaces.BindingScope;
|
|
10
|
+
Transient: interfaces.BindingScope;
|
|
11
|
+
}
|
|
12
|
+
interface BindingTypeEnum {
|
|
13
|
+
ConstantValue: interfaces.BindingType;
|
|
14
|
+
Constructor: interfaces.BindingType;
|
|
15
|
+
DynamicValue: interfaces.BindingType;
|
|
16
|
+
Factory: interfaces.BindingType;
|
|
17
|
+
Function: interfaces.BindingType;
|
|
18
|
+
Instance: interfaces.BindingType;
|
|
19
|
+
Invalid: interfaces.BindingType;
|
|
20
|
+
Provider: interfaces.BindingType;
|
|
21
|
+
}
|
|
22
|
+
interface TargetTypeEnum {
|
|
23
|
+
ConstructorArgument: interfaces.TargetType;
|
|
24
|
+
ClassProperty: interfaces.TargetType;
|
|
25
|
+
Variable: interfaces.TargetType;
|
|
26
|
+
}
|
|
27
|
+
type Newable<T> = new (...args: any[]) => T;
|
|
28
|
+
type Instance<T> = T & Record<string, () => void>;
|
|
29
|
+
interface Abstract<T> {
|
|
30
|
+
prototype: T;
|
|
31
|
+
}
|
|
32
|
+
type ServiceIdentifier<T = unknown> = string | symbol | Newable<T> | Abstract<T>;
|
|
33
|
+
interface Clonable<T> {
|
|
34
|
+
clone(): T;
|
|
35
|
+
}
|
|
36
|
+
type BindingActivation<T = unknown> = (context: interfaces.Context, injectable: T) => T | Promise<T>;
|
|
37
|
+
type BindingDeactivation<T = unknown> = (injectable: T) => void | Promise<void>;
|
|
38
|
+
interface Binding<TActivated = unknown> extends Clonable<Binding<TActivated>> {
|
|
39
|
+
id: number;
|
|
40
|
+
moduleId: ContainerModuleBase['id'];
|
|
41
|
+
activated: boolean;
|
|
42
|
+
serviceIdentifier: ServiceIdentifier<TActivated>;
|
|
43
|
+
constraint: ConstraintFunction;
|
|
44
|
+
dynamicValue: DynamicValue<TActivated> | null;
|
|
45
|
+
scope: BindingScope;
|
|
46
|
+
type: BindingType;
|
|
47
|
+
implementationType: Newable<TActivated> | TActivated | null;
|
|
48
|
+
factory: FactoryCreator<unknown> | null;
|
|
49
|
+
provider: ProviderCreator<unknown> | null;
|
|
50
|
+
cache: null | TActivated | Promise<TActivated>;
|
|
51
|
+
}
|
|
52
|
+
type SimpleFactory<T, U extends unknown[] = unknown[]> = (...args: U) => T;
|
|
53
|
+
type MultiFactory<T, U extends unknown[] = unknown[], V extends unknown[] = unknown[]> = (...args: U) => SimpleFactory<T, V>;
|
|
54
|
+
type Factory<T, U extends unknown[] = unknown[], V extends unknown[] = unknown[]> = SimpleFactory<T, U> | MultiFactory<T, U, V>;
|
|
55
|
+
type FactoryCreator<T, U extends unknown[] = unknown[], V extends unknown[] = unknown[]> = (context: Context) => Factory<T, U, V>;
|
|
56
|
+
type AutoNamedFactory<T> = SimpleFactory<T, [string]>;
|
|
57
|
+
type AutoFactory<T> = SimpleFactory<T, []>;
|
|
58
|
+
type FactoryTypeFunction<T = unknown> = (context: interfaces.Context) => T | Promise<T>;
|
|
59
|
+
interface FactoryDetails {
|
|
60
|
+
factoryType: FactoryType;
|
|
61
|
+
factory: FactoryTypeFunction | null;
|
|
62
|
+
}
|
|
63
|
+
type Provider<T> = (...args: any[]) => ((...args: any[]) => Promise<T>) | Promise<T>;
|
|
64
|
+
type ProviderCreator<T> = (context: Context) => Provider<T>;
|
|
65
|
+
interface NextArgs<T = unknown> {
|
|
66
|
+
avoidConstraints: boolean;
|
|
67
|
+
contextInterceptor: (contexts: Context) => Context;
|
|
68
|
+
isMultiInject: boolean;
|
|
69
|
+
targetType: TargetType;
|
|
70
|
+
serviceIdentifier: interfaces.ServiceIdentifier<T>;
|
|
71
|
+
key?: string | number | symbol | undefined;
|
|
72
|
+
value?: unknown;
|
|
73
|
+
}
|
|
74
|
+
type Next = (args: NextArgs) => unknown | unknown[];
|
|
75
|
+
type Middleware = (next: Next) => Next;
|
|
76
|
+
type ContextInterceptor = (context: interfaces.Context) => interfaces.Context;
|
|
77
|
+
interface Context {
|
|
78
|
+
id: number;
|
|
79
|
+
container: Container;
|
|
80
|
+
plan: Plan;
|
|
81
|
+
currentRequest: Request;
|
|
82
|
+
addPlan(plan: Plan): void;
|
|
83
|
+
setCurrentRequest(request: Request): void;
|
|
84
|
+
}
|
|
85
|
+
type MetadataOrMetadataArray = Metadata | Metadata[];
|
|
86
|
+
interface Metadata<TValue = unknown> {
|
|
87
|
+
key: string | number | symbol;
|
|
88
|
+
value: TValue;
|
|
89
|
+
}
|
|
90
|
+
interface Plan {
|
|
91
|
+
parentContext: Context;
|
|
92
|
+
rootRequest: Request;
|
|
93
|
+
}
|
|
94
|
+
interface QueryableString {
|
|
95
|
+
contains(searchString: string): boolean;
|
|
96
|
+
equals(compareString: string): boolean;
|
|
97
|
+
value(): string;
|
|
98
|
+
}
|
|
99
|
+
type ResolveRequestHandler = (request: interfaces.Request) => unknown;
|
|
100
|
+
type RequestScope = Map<unknown, unknown>;
|
|
101
|
+
interface Request {
|
|
102
|
+
id: number;
|
|
103
|
+
serviceIdentifier: ServiceIdentifier;
|
|
104
|
+
parentContext: Context;
|
|
105
|
+
parentRequest: Request | null;
|
|
106
|
+
childRequests: Request[];
|
|
107
|
+
target: Target;
|
|
108
|
+
bindings: Binding<unknown>[];
|
|
109
|
+
requestScope: RequestScope | null;
|
|
110
|
+
addChildRequest(serviceIdentifier: ServiceIdentifier, bindings: Binding<unknown> | Binding<unknown>[], target: Target): Request;
|
|
111
|
+
}
|
|
112
|
+
interface Target {
|
|
113
|
+
id: number;
|
|
114
|
+
serviceIdentifier: ServiceIdentifier;
|
|
115
|
+
type: TargetType;
|
|
116
|
+
name: QueryableString;
|
|
117
|
+
identifier: string | symbol;
|
|
118
|
+
metadata: Metadata[];
|
|
119
|
+
getNamedTag(): interfaces.Metadata<string> | null;
|
|
120
|
+
getCustomTags(): interfaces.Metadata[] | null;
|
|
121
|
+
hasTag(key: string | number | symbol): boolean;
|
|
122
|
+
isArray(): boolean;
|
|
123
|
+
matchesArray(name: interfaces.ServiceIdentifier): boolean;
|
|
124
|
+
isNamed(): boolean;
|
|
125
|
+
isTagged(): boolean;
|
|
126
|
+
isOptional(): boolean;
|
|
127
|
+
matchesNamedTag(name: string): boolean;
|
|
128
|
+
matchesTag(key: string | number | symbol): (value: unknown) => boolean;
|
|
129
|
+
}
|
|
130
|
+
interface ContainerOptions {
|
|
131
|
+
autoBindInjectable?: boolean;
|
|
132
|
+
defaultScope?: BindingScope | undefined;
|
|
133
|
+
skipBaseClassChecks?: boolean;
|
|
134
|
+
}
|
|
135
|
+
interface Container {
|
|
136
|
+
id: number;
|
|
137
|
+
parent: Container | null;
|
|
138
|
+
options: ContainerOptions;
|
|
139
|
+
bind<T>(serviceIdentifier: ServiceIdentifier<T>): BindingToSyntax<T>;
|
|
140
|
+
rebind<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): interfaces.BindingToSyntax<T>;
|
|
141
|
+
unbind(serviceIdentifier: ServiceIdentifier): void;
|
|
142
|
+
unbindAll(): void;
|
|
143
|
+
isBound(serviceIdentifier: ServiceIdentifier): boolean;
|
|
144
|
+
isCurrentBound<T>(serviceIdentifier: ServiceIdentifier<T>): boolean;
|
|
145
|
+
isBoundNamed(serviceIdentifier: ServiceIdentifier, named: string | number | symbol): boolean;
|
|
146
|
+
isBoundTagged(serviceIdentifier: ServiceIdentifier, key: string | number | symbol, value: unknown): boolean;
|
|
147
|
+
get<T>(serviceIdentifier: ServiceIdentifier<T>): T;
|
|
148
|
+
getNamed<T>(serviceIdentifier: ServiceIdentifier<T>, named: string | number | symbol): T;
|
|
149
|
+
getTagged<T>(serviceIdentifier: ServiceIdentifier<T>, key: string | number | symbol, value: unknown): T;
|
|
150
|
+
getAll<T>(serviceIdentifier: ServiceIdentifier<T>): T[];
|
|
151
|
+
getAllTagged<T>(serviceIdentifier: ServiceIdentifier<T>, key: string | number | symbol, value: unknown): T[];
|
|
152
|
+
getAllNamed<T>(serviceIdentifier: ServiceIdentifier<T>, named: string | number | symbol): T[];
|
|
153
|
+
getAsync<T>(serviceIdentifier: ServiceIdentifier<T>): Promise<T>;
|
|
154
|
+
resolve<T>(constructorFunction: interfaces.Newable<T>): T;
|
|
155
|
+
load(...modules: ContainerModule[]): void;
|
|
156
|
+
unload(...modules: ContainerModuleBase[]): void;
|
|
157
|
+
applyCustomMetadataReader(metadataReader: MetadataReader): void;
|
|
158
|
+
}
|
|
159
|
+
type Bind = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => BindingToSyntax<T>;
|
|
160
|
+
type Rebind = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => BindingToSyntax<T>;
|
|
161
|
+
type Unbind = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => void;
|
|
162
|
+
type UnbindAsync = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => Promise<void>;
|
|
163
|
+
type IsBound = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => boolean;
|
|
164
|
+
interface ContainerModuleBase {
|
|
165
|
+
id: number;
|
|
166
|
+
}
|
|
167
|
+
interface ContainerModule extends ContainerModuleBase {
|
|
168
|
+
registry: ContainerModuleCallBack;
|
|
169
|
+
}
|
|
170
|
+
interface ModuleActivationHandlers {
|
|
171
|
+
onActivations: Lookup<BindingActivation<unknown>>;
|
|
172
|
+
onDeactivations: Lookup<BindingDeactivation<unknown>>;
|
|
173
|
+
}
|
|
174
|
+
type ContainerModuleCallBack = (bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind) => void;
|
|
175
|
+
interface Lookup<T> extends Clonable<Lookup<T>> {
|
|
176
|
+
add(serviceIdentifier: ServiceIdentifier, value: T): void;
|
|
177
|
+
getMap(): Map<interfaces.ServiceIdentifier, T[]>;
|
|
178
|
+
get(serviceIdentifier: ServiceIdentifier): T[];
|
|
179
|
+
remove(serviceIdentifier: interfaces.ServiceIdentifier): void;
|
|
180
|
+
removeByCondition(condition: (item: T) => boolean): T[];
|
|
181
|
+
removeIntersection(lookup: interfaces.Lookup<T>): void;
|
|
182
|
+
hasKey(serviceIdentifier: ServiceIdentifier): boolean;
|
|
183
|
+
clone(): Lookup<T>;
|
|
184
|
+
traverse(func: (key: interfaces.ServiceIdentifier, value: T[]) => void): void;
|
|
185
|
+
}
|
|
186
|
+
interface BindingOnSyntax<T> {
|
|
187
|
+
}
|
|
188
|
+
interface BindingInSyntax<T> {
|
|
189
|
+
inSingletonScope(): BindingInSyntax<T>;
|
|
190
|
+
inTransientScope(): BindingInSyntax<T>;
|
|
191
|
+
whenTargetNamed(name: string | number | symbol): BindingOnSyntax<T>;
|
|
192
|
+
}
|
|
193
|
+
interface BindingInWhenOnSyntax<T> extends BindingInSyntax<T>, BindingInSyntax<T> {
|
|
194
|
+
}
|
|
195
|
+
interface BindingToSyntax<T> {
|
|
196
|
+
to(constructor: Newable<T>): BindingInWhenOnSyntax<T>;
|
|
197
|
+
toSelf(): BindingInWhenOnSyntax<T>;
|
|
198
|
+
toConstantValue(value: T): BindingInWhenOnSyntax<T>;
|
|
199
|
+
toDynamicValue(func: DynamicValue<T>): BindingInWhenOnSyntax<T>;
|
|
200
|
+
toFactory<T2, T3 extends unknown[] = unknown[], T4 extends unknown[] = unknown[]>(factory: FactoryCreator<T2, T3, T4>): BindingInWhenOnSyntax<T>;
|
|
201
|
+
toService(service: ServiceIdentifier<T>): void;
|
|
202
|
+
}
|
|
203
|
+
interface ConstraintFunction {
|
|
204
|
+
metaData?: Metadata;
|
|
205
|
+
(request: Request | null): boolean;
|
|
206
|
+
}
|
|
207
|
+
interface MetadataReader {
|
|
208
|
+
getConstructorMetadata(constructorFunc: NewableFunction): ConstructorMetadata;
|
|
209
|
+
getPropertiesMetadata(constructorFunc: NewableFunction): MetadataMap;
|
|
210
|
+
}
|
|
211
|
+
interface MetadataMap {
|
|
212
|
+
[propertyNameOrArgumentIndex: string | symbol]: Metadata[];
|
|
213
|
+
}
|
|
214
|
+
interface ConstructorMetadata {
|
|
215
|
+
compilerGeneratedMetadata: NewableFunction[] | undefined;
|
|
216
|
+
userGeneratedMetadata: MetadataMap;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/inversify/interfaces.ts"],"names":[],"mappings":"","file":"interfaces.js","sourcesContent":["// @ts-nocheck\n/* eslint-disable */\nimport { FactoryType } from '../utils/factory_type';\n\nexport namespace interfaces {\n export type DynamicValue<T> = (context: interfaces.Context) => T;\n export type ContainerResolution<T> = T | Promise<T> | (T | Promise<T>)[];\n\n export type BindingScope = 'Singleton' | 'Transient' | 'Request';\n\n export type BindingType =\n | 'ConstantValue'\n | 'Constructor'\n | 'DynamicValue'\n | 'Factory'\n | 'Function'\n | 'Instance'\n | 'Invalid'\n | 'Provider';\n\n export type TargetType = 'ConstructorArgument' | 'ClassProperty' | 'Variable';\n\n export interface BindingScopeEnum {\n Singleton: interfaces.BindingScope;\n Transient: interfaces.BindingScope;\n }\n\n export interface BindingTypeEnum {\n ConstantValue: interfaces.BindingType;\n Constructor: interfaces.BindingType;\n DynamicValue: interfaces.BindingType;\n Factory: interfaces.BindingType;\n Function: interfaces.BindingType;\n Instance: interfaces.BindingType;\n Invalid: interfaces.BindingType;\n Provider: interfaces.BindingType;\n }\n\n export interface TargetTypeEnum {\n ConstructorArgument: interfaces.TargetType;\n ClassProperty: interfaces.TargetType;\n Variable: interfaces.TargetType;\n }\n\n export type Newable<T> = new (...args: any[]) => T;\n\n export type Instance<T> = T & Record<string, () => void>;\n\n export interface Abstract<T> {\n prototype: T;\n }\n\n export type ServiceIdentifier<T = unknown> = string | symbol | Newable<T> | Abstract<T>;\n\n export interface Clonable<T> {\n clone(): T;\n }\n\n export type BindingActivation<T = unknown> = (context: interfaces.Context, injectable: T) => T | Promise<T>;\n\n export type BindingDeactivation<T = unknown> = (injectable: T) => void | Promise<void>;\n\n export interface Binding<TActivated = unknown> extends Clonable<Binding<TActivated>> {\n id: number;\n moduleId: ContainerModuleBase['id'];\n activated: boolean;\n serviceIdentifier: ServiceIdentifier<TActivated>;\n constraint: ConstraintFunction;\n dynamicValue: DynamicValue<TActivated> | null;\n scope: BindingScope;\n type: BindingType;\n implementationType: Newable<TActivated> | TActivated | null;\n factory: FactoryCreator<unknown> | null;\n provider: ProviderCreator<unknown> | null;\n // onActivation: BindingActivation<TActivated> | null;\n // onDeactivation: BindingDeactivation<TActivated> | null;\n cache: null | TActivated | Promise<TActivated>;\n }\n\n export type SimpleFactory<T, U extends unknown[] = unknown[]> = (...args: U) => T;\n\n export type MultiFactory<T, U extends unknown[] = unknown[], V extends unknown[] = unknown[]> = (\n ...args: U\n ) => SimpleFactory<T, V>;\n\n export type Factory<T, U extends unknown[] = unknown[], V extends unknown[] = unknown[]> =\n | SimpleFactory<T, U>\n | MultiFactory<T, U, V>;\n\n export type FactoryCreator<T, U extends unknown[] = unknown[], V extends unknown[] = unknown[]> = (\n context: Context\n ) => Factory<T, U, V>;\n\n export type AutoNamedFactory<T> = SimpleFactory<T, [string]>;\n\n export type AutoFactory<T> = SimpleFactory<T, []>;\n\n export type FactoryTypeFunction<T = unknown> = (context: interfaces.Context) => T | Promise<T>;\n\n export interface FactoryDetails {\n factoryType: FactoryType;\n factory: FactoryTypeFunction | null;\n }\n\n export type Provider<T> = (...args: any[]) => ((...args: any[]) => Promise<T>) | Promise<T>;\n\n export type ProviderCreator<T> = (context: Context) => Provider<T>;\n\n export interface NextArgs<T = unknown> {\n avoidConstraints: boolean;\n contextInterceptor: (contexts: Context) => Context;\n isMultiInject: boolean;\n targetType: TargetType;\n serviceIdentifier: interfaces.ServiceIdentifier<T>;\n key?: string | number | symbol | undefined;\n value?: unknown;\n }\n\n export type Next = (args: NextArgs) => unknown | unknown[];\n\n export type Middleware = (next: Next) => Next;\n\n export type ContextInterceptor = (context: interfaces.Context) => interfaces.Context;\n\n export interface Context {\n id: number;\n container: Container;\n plan: Plan;\n currentRequest: Request;\n addPlan(plan: Plan): void;\n setCurrentRequest(request: Request): void;\n }\n\n export type MetadataOrMetadataArray = Metadata | Metadata[];\n\n export interface Metadata<TValue = unknown> {\n key: string | number | symbol;\n value: TValue;\n }\n\n export interface Plan {\n parentContext: Context;\n rootRequest: Request;\n }\n\n export interface QueryableString {\n // startsWith(searchString: string): boolean;\n // endsWith(searchString: string): boolean;\n contains(searchString: string): boolean;\n equals(compareString: string): boolean;\n value(): string;\n }\n\n export type ResolveRequestHandler = (request: interfaces.Request) => unknown;\n\n export type RequestScope = Map<unknown, unknown>;\n\n export interface Request {\n id: number;\n serviceIdentifier: ServiceIdentifier;\n parentContext: Context;\n parentRequest: Request | null;\n childRequests: Request[];\n target: Target;\n bindings: Binding<unknown>[];\n requestScope: RequestScope | null;\n addChildRequest(\n serviceIdentifier: ServiceIdentifier,\n bindings: Binding<unknown> | Binding<unknown>[],\n target: Target\n ): Request;\n }\n\n export interface Target {\n id: number;\n serviceIdentifier: ServiceIdentifier;\n type: TargetType;\n name: QueryableString;\n identifier: string | symbol;\n metadata: Metadata[];\n getNamedTag(): interfaces.Metadata<string> | null;\n getCustomTags(): interfaces.Metadata[] | null;\n hasTag(key: string | number | symbol): boolean;\n isArray(): boolean;\n matchesArray(name: interfaces.ServiceIdentifier): boolean;\n isNamed(): boolean;\n isTagged(): boolean;\n isOptional(): boolean;\n matchesNamedTag(name: string): boolean;\n matchesTag(key: string | number | symbol): (value: unknown) => boolean;\n }\n\n export interface ContainerOptions {\n autoBindInjectable?: boolean;\n defaultScope?: BindingScope | undefined;\n skipBaseClassChecks?: boolean;\n }\n\n export interface Container {\n id: number;\n parent: Container | null;\n options: ContainerOptions;\n bind<T>(serviceIdentifier: ServiceIdentifier<T>): BindingToSyntax<T>;\n rebind<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): interfaces.BindingToSyntax<T>;\n // rebindAsync<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): Promise<interfaces.BindingToSyntax<T>>;\n unbind(serviceIdentifier: ServiceIdentifier): void;\n // unbindAsync(serviceIdentifier: interfaces.ServiceIdentifier): Promise<void>;\n unbindAll(): void;\n // unbindAllAsync(): Promise<void>;\n isBound(serviceIdentifier: ServiceIdentifier): boolean;\n isCurrentBound<T>(serviceIdentifier: ServiceIdentifier<T>): boolean;\n isBoundNamed(serviceIdentifier: ServiceIdentifier, named: string | number | symbol): boolean;\n isBoundTagged(serviceIdentifier: ServiceIdentifier, key: string | number | symbol, value: unknown): boolean;\n get<T>(serviceIdentifier: ServiceIdentifier<T>): T;\n getNamed<T>(serviceIdentifier: ServiceIdentifier<T>, named: string | number | symbol): T;\n getTagged<T>(serviceIdentifier: ServiceIdentifier<T>, key: string | number | symbol, value: unknown): T;\n getAll<T>(serviceIdentifier: ServiceIdentifier<T>): T[];\n getAllTagged<T>(serviceIdentifier: ServiceIdentifier<T>, key: string | number | symbol, value: unknown): T[];\n getAllNamed<T>(serviceIdentifier: ServiceIdentifier<T>, named: string | number | symbol): T[];\n getAsync<T>(serviceIdentifier: ServiceIdentifier<T>): Promise<T>;\n // getNamedAsync<T>(serviceIdentifier: ServiceIdentifier<T>, named: string | number | symbol): Promise<T>;\n // getTaggedAsync<T>(\n // serviceIdentifier: ServiceIdentifier<T>,\n // key: string | number | symbol,\n // value: unknown\n // ): Promise<T>;\n // getAllAsync<T>(serviceIdentifier: ServiceIdentifier<T>): Promise<T[]>;\n // getAllTaggedAsync<T>(\n // serviceIdentifier: ServiceIdentifier<T>,\n // key: string | number | symbol,\n // value: unknown\n // ): Promise<T[]>;\n // getAllNamedAsync<T>(serviceIdentifier: ServiceIdentifier<T>, named: string | number | symbol): Promise<T[]>;\n // onActivation<T>(serviceIdentifier: ServiceIdentifier<T>, onActivation: BindingActivation<T>): void;\n // onDeactivation<T>(serviceIdentifier: ServiceIdentifier<T>, onDeactivation: BindingDeactivation<T>): void;\n resolve<T>(constructorFunction: interfaces.Newable<T>): T;\n load(...modules: ContainerModule[]): void;\n // loadAsync(...modules: AsyncContainerModule[]): Promise<void>;\n unload(...modules: ContainerModuleBase[]): void;\n // unloadAsync(...modules: ContainerModuleBase[]): Promise<void>;\n applyCustomMetadataReader(metadataReader: MetadataReader): void;\n // applyMiddleware(...middleware: Middleware[]): void;\n // snapshot(): void;\n // restore(): void;\n // createChild(): Container;\n }\n\n export type Bind = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => BindingToSyntax<T>;\n\n export type Rebind = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => BindingToSyntax<T>;\n\n export type Unbind = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => void;\n\n export type UnbindAsync = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => Promise<void>;\n\n export type IsBound = <T = unknown>(serviceIdentifier: ServiceIdentifier<T>) => boolean;\n\n export interface ContainerModuleBase {\n id: number;\n }\n\n export interface ContainerModule extends ContainerModuleBase {\n registry: ContainerModuleCallBack;\n }\n\n export interface ModuleActivationHandlers {\n onActivations: Lookup<BindingActivation<unknown>>;\n onDeactivations: Lookup<BindingDeactivation<unknown>>;\n }\n\n // export interface ModuleActivationStore extends Clonable<ModuleActivationStore> {\n // addDeactivation(\n // moduleId: ContainerModuleBase['id'],\n // serviceIdentifier: ServiceIdentifier<unknown>,\n // onDeactivation: interfaces.BindingDeactivation<unknown>\n // ): void;\n // addActivation(\n // moduleId: ContainerModuleBase['id'],\n // serviceIdentifier: ServiceIdentifier<unknown>,\n // onActivation: interfaces.BindingActivation<unknown>\n // ): void;\n // remove(moduleId: ContainerModuleBase['id']): ModuleActivationHandlers;\n // }\n\n export type ContainerModuleCallBack = (\n bind: interfaces.Bind,\n unbind: interfaces.Unbind,\n isBound: interfaces.IsBound,\n rebind: interfaces.Rebind\n // unbindAsync: interfaces.UnbindAsync,\n // onActivation: interfaces.Container['onActivation'],\n // onDeactivation: interfaces.Container['onDeactivation']\n ) => void;\n\n // export interface ContainerSnapshot {\n // bindings: Lookup<Binding<unknown>>;\n // activations: Lookup<BindingActivation<unknown>>;\n // deactivations: Lookup<BindingDeactivation<unknown>>;\n // middleware: Next | null;\n // moduleActivationStore: interfaces.ModuleActivationStore;\n // }\n\n export interface Lookup<T> extends Clonable<Lookup<T>> {\n add(serviceIdentifier: ServiceIdentifier, value: T): void;\n getMap(): Map<interfaces.ServiceIdentifier, T[]>;\n get(serviceIdentifier: ServiceIdentifier): T[];\n remove(serviceIdentifier: interfaces.ServiceIdentifier): void;\n removeByCondition(condition: (item: T) => boolean): T[];\n removeIntersection(lookup: interfaces.Lookup<T>): void;\n hasKey(serviceIdentifier: ServiceIdentifier): boolean;\n clone(): Lookup<T>;\n traverse(func: (key: interfaces.ServiceIdentifier, value: T[]) => void): void;\n }\n\n export interface BindingOnSyntax<T> {\n // onActivation(fn: (context: Context, injectable: T) => T | Promise<T>): BindingWhenSyntax<T>;\n // onDeactivation(fn: (injectable: T) => void | Promise<void>): BindingWhenSyntax<T>;\n }\n\n // export interface BindingWhenOnSyntax<T> extends BindingWhenSyntax<T>, BindingOnSyntax<T> {}\n\n export interface BindingInSyntax<T> {\n inSingletonScope(): BindingInSyntax<T>;\n inTransientScope(): BindingInSyntax<T>;\n whenTargetNamed(name: string | number | symbol): BindingOnSyntax<T>;\n // inRequestScope(): BindingInSyntax<T>;\n }\n\n export interface BindingInWhenOnSyntax<T> extends BindingInSyntax<T>, BindingInSyntax<T> {}\n\n export interface BindingToSyntax<T> {\n to(constructor: Newable<T>): BindingInWhenOnSyntax<T>;\n toSelf(): BindingInWhenOnSyntax<T>;\n toConstantValue(value: T): BindingInWhenOnSyntax<T>;\n toDynamicValue(func: DynamicValue<T>): BindingInWhenOnSyntax<T>;\n toFactory<T2, T3 extends unknown[] = unknown[], T4 extends unknown[] = unknown[]>(\n factory: FactoryCreator<T2, T3, T4>\n ): BindingInWhenOnSyntax<T>;\n toService(service: ServiceIdentifier<T>): void;\n }\n\n export interface ConstraintFunction {\n metaData?: Metadata;\n (request: Request | null): boolean;\n }\n\n export interface MetadataReader {\n getConstructorMetadata(constructorFunc: NewableFunction): ConstructorMetadata;\n getPropertiesMetadata(constructorFunc: NewableFunction): MetadataMap;\n }\n\n export interface MetadataMap {\n [propertyNameOrArgumentIndex: string | symbol]: Metadata[];\n }\n\n export interface ConstructorMetadata {\n compilerGeneratedMetadata: NewableFunction[] | undefined;\n userGeneratedMetadata: MetadataMap;\n }\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { interfaces } from './interfaces';
|
|
2
|
+
declare const BindingScopeEnum: interfaces.BindingScopeEnum;
|
|
3
|
+
declare const BindingTypeEnum: interfaces.BindingTypeEnum;
|
|
4
|
+
declare const TargetTypeEnum: interfaces.TargetTypeEnum;
|
|
5
|
+
export { BindingScopeEnum, BindingTypeEnum, TargetTypeEnum };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.TargetTypeEnum = exports.BindingTypeEnum = exports.BindingScopeEnum = void 0;
|
|
6
|
+
|
|
7
|
+
const BindingScopeEnum = {
|
|
8
|
+
Singleton: "Singleton",
|
|
9
|
+
Transient: "Transient"
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
exports.BindingScopeEnum = BindingScopeEnum;
|
|
13
|
+
|
|
14
|
+
const BindingTypeEnum = {
|
|
15
|
+
ConstantValue: "ConstantValue",
|
|
16
|
+
Constructor: "Constructor",
|
|
17
|
+
DynamicValue: "DynamicValue",
|
|
18
|
+
Factory: "Factory",
|
|
19
|
+
Function: "Function",
|
|
20
|
+
Instance: "Instance",
|
|
21
|
+
Invalid: "Invalid",
|
|
22
|
+
Provider: "Provider"
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
exports.BindingTypeEnum = BindingTypeEnum;
|
|
26
|
+
|
|
27
|
+
const TargetTypeEnum = {
|
|
28
|
+
ClassProperty: "ClassProperty",
|
|
29
|
+
ConstructorArgument: "ConstructorArgument",
|
|
30
|
+
Variable: "Variable"
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
exports.TargetTypeEnum = TargetTypeEnum;
|
|
34
|
+
//# sourceMappingURL=literal_types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/inversify/literal_types.ts"],"names":[],"mappings":";;;AAEA,MAAM,gBAAgB,GAAgC;IACpD,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;CACvB,CAAC;AAmBO,4CAAgB;AAjBzB,MAAM,eAAe,GAA+B;IAClD,aAAa,EAAE,eAAe;IAC9B,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;CACrB,CAAC;AAQyB,0CAAe;AAN1C,MAAM,cAAc,GAA8B;IAChD,aAAa,EAAE,eAAe;IAC9B,mBAAmB,EAAE,qBAAqB;IAC1C,QAAQ,EAAE,UAAU;CACrB,CAAC;AAE0C,wCAAc","file":"literal_types.js","sourcesContent":["import type { interfaces } from './interfaces';\n\nconst BindingScopeEnum: interfaces.BindingScopeEnum = {\n Singleton: 'Singleton',\n Transient: 'Transient'\n};\n\nconst BindingTypeEnum: interfaces.BindingTypeEnum = {\n ConstantValue: 'ConstantValue',\n Constructor: 'Constructor',\n DynamicValue: 'DynamicValue',\n Factory: 'Factory',\n Function: 'Function',\n Instance: 'Instance',\n Invalid: 'Invalid',\n Provider: 'Provider'\n};\n\nconst TargetTypeEnum: interfaces.TargetTypeEnum = {\n ClassProperty: 'ClassProperty',\n ConstructorArgument: 'ConstructorArgument',\n Variable: 'Variable'\n};\n\nexport { BindingScopeEnum, BindingTypeEnum, TargetTypeEnum };\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.Metadata = void 0;
|
|
6
|
+
|
|
7
|
+
const metadata_keys_1 = require("./metadata_keys");
|
|
8
|
+
|
|
9
|
+
class Metadata {
|
|
10
|
+
constructor(key, value) {
|
|
11
|
+
this.key = key, this.value = value;
|
|
12
|
+
}
|
|
13
|
+
toString() {
|
|
14
|
+
return this.key === metadata_keys_1.NAMED_TAG ? `named: ${String(this.value).toString()} ` : `tagged: { key:${this.key.toString()}, value: ${String(this.value)} }`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
exports.Metadata = Metadata;
|
|
19
|
+
//# sourceMappingURL=meta-data.js.map
|