ts-ioc-container 56.1.0 → 56.2.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/cjm/ExecutionContext.js +2 -0
- package/cjm/container/AliasMap.js +25 -0
- package/cjm/container/Container.js +175 -0
- package/cjm/container/EmptyContainer.js +71 -0
- package/cjm/container/IContainer.js +6 -0
- package/cjm/errors/CannonSingletonApplyTwiceError.js +17 -0
- package/cjm/errors/ContainerDisposedError.js +12 -0
- package/cjm/errors/ContainerError.js +11 -0
- package/cjm/errors/ContainerNotFoundError.js +12 -0
- package/cjm/errors/DependencyMissingKeyError.js +12 -0
- package/cjm/errors/DependencyNotFoundError.js +12 -0
- package/cjm/errors/MethodNotImplementedError.js +12 -0
- package/cjm/errors/ProviderDisposedError.js +17 -0
- package/cjm/errors/UnexpectedHookResultError.js +12 -0
- package/cjm/errors/UnsupportedTokenTypeError.js +12 -0
- package/cjm/hooks/HookContext.js +42 -0
- package/cjm/hooks/HooksRunner.js +42 -0
- package/cjm/hooks/hook.js +55 -0
- package/cjm/hooks/injectProp.js +6 -0
- package/cjm/hooks/onConstruct.js +28 -0
- package/cjm/hooks/onConstructAsync.js +28 -0
- package/cjm/hooks/onContainerDisposed.js +18 -0
- package/cjm/index.js +141 -0
- package/cjm/injector/IInjector.js +14 -0
- package/cjm/injector/MetadataInjector.js +33 -0
- package/cjm/injector/ProxyInjector.js +18 -0
- package/cjm/injector/SimpleInjector.js +10 -0
- package/cjm/metadata/class.js +21 -0
- package/cjm/metadata/method.js +19 -0
- package/cjm/metadata/parameter.js +34 -0
- package/cjm/provider/IProvider.js +2 -0
- package/cjm/provider/Provider.js +80 -0
- package/cjm/registration/IRegistration.js +50 -0
- package/cjm/registration/Registration.js +85 -0
- package/cjm/select.js +16 -0
- package/cjm/token/BindToken.js +7 -0
- package/cjm/token/ClassToken.js +45 -0
- package/cjm/token/ConstantToken.js +25 -0
- package/cjm/token/FunctionToken.js +42 -0
- package/cjm/token/GroupAliasToken.js +50 -0
- package/cjm/token/GroupInstanceToken.js +33 -0
- package/cjm/token/InjectionToken.js +11 -0
- package/cjm/token/SingleAliasToken.js +50 -0
- package/cjm/token/SingleToken.js +48 -0
- package/cjm/token/toToken.js +29 -0
- package/cjm/utils/array.js +9 -0
- package/cjm/utils/basic.js +13 -0
- package/cjm/utils/debounce.js +16 -0
- package/cjm/utils/errorHandler.js +29 -0
- package/cjm/utils/fp.js +6 -0
- package/cjm/utils/once.js +20 -0
- package/cjm/utils/promise.js +5 -0
- package/cjm/utils/proxy.js +39 -0
- package/cjm/utils/shallowCache.js +23 -0
- package/cjm/utils/throttle.js +18 -0
- package/esm/ExecutionContext.js +1 -0
- package/esm/container/AliasMap.js +21 -0
- package/esm/container/Container.js +171 -0
- package/esm/container/EmptyContainer.js +67 -0
- package/esm/container/IContainer.js +3 -0
- package/esm/errors/CannonSingletonApplyTwiceError.js +13 -0
- package/esm/errors/ContainerDisposedError.js +8 -0
- package/esm/errors/ContainerError.js +7 -0
- package/esm/errors/ContainerNotFoundError.js +8 -0
- package/esm/errors/DependencyMissingKeyError.js +8 -0
- package/esm/errors/DependencyNotFoundError.js +8 -0
- package/esm/errors/MethodNotImplementedError.js +8 -0
- package/esm/errors/ProviderDisposedError.js +13 -0
- package/esm/errors/UnexpectedHookResultError.js +8 -0
- package/esm/errors/UnsupportedTokenTypeError.js +8 -0
- package/esm/hooks/HookContext.js +36 -0
- package/esm/hooks/HooksRunner.js +38 -0
- package/esm/hooks/hook.js +46 -0
- package/esm/hooks/injectProp.js +2 -0
- package/esm/hooks/onConstruct.js +23 -0
- package/esm/hooks/onConstructAsync.js +23 -0
- package/esm/hooks/onContainerDisposed.js +13 -0
- package/esm/index.js +46 -0
- package/esm/injector/IInjector.js +10 -0
- package/esm/injector/MetadataInjector.js +25 -0
- package/esm/injector/ProxyInjector.js +14 -0
- package/esm/injector/SimpleInjector.js +6 -0
- package/esm/metadata/class.js +12 -0
- package/esm/metadata/method.js +10 -0
- package/esm/metadata/parameter.js +25 -0
- package/esm/package.json +3 -0
- package/esm/provider/IProvider.js +1 -0
- package/esm/provider/Provider.js +76 -0
- package/esm/registration/IRegistration.js +35 -0
- package/esm/registration/Registration.js +81 -0
- package/esm/select.js +13 -0
- package/esm/token/BindToken.js +4 -0
- package/esm/token/ClassToken.js +41 -0
- package/esm/token/ConstantToken.js +21 -0
- package/esm/token/FunctionToken.js +38 -0
- package/esm/token/GroupAliasToken.js +45 -0
- package/esm/token/GroupInstanceToken.js +29 -0
- package/esm/token/InjectionToken.js +6 -0
- package/esm/token/SingleAliasToken.js +45 -0
- package/esm/token/SingleToken.js +44 -0
- package/esm/token/toToken.js +24 -0
- package/esm/utils/array.js +6 -0
- package/esm/utils/basic.js +9 -0
- package/esm/utils/debounce.js +12 -0
- package/esm/utils/errorHandler.js +24 -0
- package/esm/utils/fp.js +3 -0
- package/esm/utils/once.js +16 -0
- package/esm/utils/promise.js +1 -0
- package/esm/utils/proxy.js +33 -0
- package/esm/utils/shallowCache.js +19 -0
- package/esm/utils/throttle.js +14 -0
- package/package.json +1 -1
- package/typings/ExecutionContext.d.ts +4 -0
- package/typings/container/AliasMap.d.ts +8 -0
- package/typings/container/Container.d.ts +48 -0
- package/typings/container/EmptyContainer.d.ts +30 -0
- package/typings/container/IContainer.d.ts +56 -0
- package/typings/errors/CannonSingletonApplyTwiceError.d.ts +6 -0
- package/typings/errors/ContainerDisposedError.d.ts +5 -0
- package/typings/errors/ContainerError.d.ts +4 -0
- package/typings/errors/ContainerNotFoundError.d.ts +5 -0
- package/typings/errors/DependencyMissingKeyError.d.ts +5 -0
- package/typings/errors/DependencyNotFoundError.d.ts +5 -0
- package/typings/errors/MethodNotImplementedError.d.ts +5 -0
- package/typings/errors/ProviderDisposedError.d.ts +6 -0
- package/typings/errors/UnexpectedHookResultError.d.ts +5 -0
- package/typings/errors/UnsupportedTokenTypeError.d.ts +5 -0
- package/typings/hooks/HookContext.d.ts +35 -0
- package/typings/hooks/HooksRunner.d.ts +16 -0
- package/typings/hooks/hook.d.ts +20 -0
- package/typings/hooks/injectProp.d.ts +5 -0
- package/typings/hooks/onConstruct.d.ts +14 -0
- package/typings/hooks/onConstructAsync.d.ts +11 -0
- package/typings/hooks/onContainerDisposed.d.ts +9 -0
- package/typings/index.d.ts +48 -0
- package/typings/injector/IInjector.d.ts +17 -0
- package/typings/injector/MetadataInjector.d.ts +13 -0
- package/typings/injector/ProxyInjector.d.ts +6 -0
- package/typings/injector/SimpleInjector.d.ts +6 -0
- package/typings/metadata/class.d.ts +6 -0
- package/typings/metadata/method.d.ts +6 -0
- package/typings/metadata/parameter.d.ts +6 -0
- package/typings/provider/IProvider.d.ts +26 -0
- package/typings/provider/Provider.d.ts +26 -0
- package/typings/registration/IRegistration.d.ts +31 -0
- package/typings/registration/Registration.d.ts +28 -0
- package/typings/select.d.ts +12 -0
- package/typings/token/BindToken.d.ts +5 -0
- package/typings/token/ClassToken.d.ts +18 -0
- package/typings/token/ConstantToken.d.ts +10 -0
- package/typings/token/FunctionToken.d.ts +17 -0
- package/typings/token/GroupAliasToken.d.ts +21 -0
- package/typings/token/GroupInstanceToken.d.ts +15 -0
- package/typings/token/InjectionToken.d.ts +9 -0
- package/typings/token/SingleAliasToken.d.ts +21 -0
- package/typings/token/SingleToken.d.ts +19 -0
- package/typings/token/toToken.d.ts +6 -0
- package/typings/utils/array.d.ts +3 -0
- package/typings/utils/basic.d.ts +11 -0
- package/typings/utils/debounce.d.ts +1 -0
- package/typings/utils/errorHandler.d.ts +6 -0
- package/typings/utils/fp.d.ts +13 -0
- package/typings/utils/once.d.ts +8 -0
- package/typings/utils/promise.d.ts +1 -0
- package/typings/utils/proxy.d.ts +4 -0
- package/typings/utils/shallowCache.d.ts +1 -0
- package/typings/utils/throttle.d.ts +1 -0
package/cjm/index.js
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.onContainerDisposedHooksRunner = exports.AddOnConstructAsyncHookModule = exports.onConstructAsync = exports.onConstructAsyncHooksRunner = exports.AddOnConstructHookModule = exports.onConstruct = exports.onConstructHooksRunner = exports.injectProp = exports.createHookContext = exports.createHookContextFactory = exports.HookContext = exports.prepend = exports.append = exports.prependHooks = exports.appendHooks = exports.hasHooks = exports.hook = exports.getHooks = exports.UnsupportedTokenTypeError = exports.CannonSingletonApplyTwiceError = exports.UnexpectedHookResultError = exports.ProviderDisposedError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyMissingKeyError = exports.ContainerNotFoundError = exports.DependencyNotFoundError = exports.ContainerError = exports.Registration = exports.appendArgsFn = exports.appendArgs = exports.decorate = exports.singleton = exports.lazy = exports.scopeAccess = exports.scope = exports.bindTo = exports.register = exports.Provider = exports.ProxyInjector = exports.SimpleInjector = exports.resolveArgs = exports.argsFn = exports.args = exports.inject = exports.MetadataInjector = exports.Injector = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
|
|
4
|
+
exports.resolveConstructor = exports.Is = exports.pipe = exports.select = exports.once = exports.shallowCache = exports.debounce = exports.throttle = exports.handleAsyncError = exports.handleError = exports.getMethodTags = exports.addMethodTag = exports.getMethodLabels = exports.addMethodLabel = exports.getMethodMeta = exports.addMethodMeta = exports.getParamTags = exports.addParamTag = exports.getParamLabels = exports.addParamLabel = exports.getParamMeta = exports.addParamMeta = exports.getClassTags = exports.addClassTag = exports.getClassLabels = exports.addClassLabel = exports.getClassMeta = exports.addClassMeta = exports.GroupInstanceToken = exports.ConstantToken = exports.FunctionToken = exports.SingleToken = exports.ClassToken = exports.toSingleAlias = exports.SingleAliasToken = exports.toGroupAlias = exports.GroupAliasToken = exports.InjectionToken = exports.HooksRunner = exports.AddOnDisposeHookModule = exports.onContainerDisposed = void 0;
|
|
5
|
+
var IContainer_1 = require("./container/IContainer");
|
|
6
|
+
Object.defineProperty(exports, "isDependencyKey", { enumerable: true, get: function () { return IContainer_1.isDependencyKey; } });
|
|
7
|
+
var Container_1 = require("./container/Container");
|
|
8
|
+
Object.defineProperty(exports, "Container", { enumerable: true, get: function () { return Container_1.Container; } });
|
|
9
|
+
var EmptyContainer_1 = require("./container/EmptyContainer");
|
|
10
|
+
Object.defineProperty(exports, "EmptyContainer", { enumerable: true, get: function () { return EmptyContainer_1.EmptyContainer; } });
|
|
11
|
+
var IInjector_1 = require("./injector/IInjector");
|
|
12
|
+
Object.defineProperty(exports, "Injector", { enumerable: true, get: function () { return IInjector_1.Injector; } });
|
|
13
|
+
var MetadataInjector_1 = require("./injector/MetadataInjector");
|
|
14
|
+
Object.defineProperty(exports, "MetadataInjector", { enumerable: true, get: function () { return MetadataInjector_1.MetadataInjector; } });
|
|
15
|
+
Object.defineProperty(exports, "inject", { enumerable: true, get: function () { return MetadataInjector_1.inject; } });
|
|
16
|
+
Object.defineProperty(exports, "args", { enumerable: true, get: function () { return MetadataInjector_1.args; } });
|
|
17
|
+
Object.defineProperty(exports, "argsFn", { enumerable: true, get: function () { return MetadataInjector_1.argsFn; } });
|
|
18
|
+
Object.defineProperty(exports, "resolveArgs", { enumerable: true, get: function () { return MetadataInjector_1.resolveArgs; } });
|
|
19
|
+
var SimpleInjector_1 = require("./injector/SimpleInjector");
|
|
20
|
+
Object.defineProperty(exports, "SimpleInjector", { enumerable: true, get: function () { return SimpleInjector_1.SimpleInjector; } });
|
|
21
|
+
var ProxyInjector_1 = require("./injector/ProxyInjector");
|
|
22
|
+
Object.defineProperty(exports, "ProxyInjector", { enumerable: true, get: function () { return ProxyInjector_1.ProxyInjector; } });
|
|
23
|
+
var Provider_1 = require("./provider/Provider");
|
|
24
|
+
Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return Provider_1.Provider; } });
|
|
25
|
+
var IRegistration_1 = require("./registration/IRegistration");
|
|
26
|
+
Object.defineProperty(exports, "register", { enumerable: true, get: function () { return IRegistration_1.register; } });
|
|
27
|
+
Object.defineProperty(exports, "bindTo", { enumerable: true, get: function () { return IRegistration_1.bindTo; } });
|
|
28
|
+
Object.defineProperty(exports, "scope", { enumerable: true, get: function () { return IRegistration_1.scope; } });
|
|
29
|
+
Object.defineProperty(exports, "scopeAccess", { enumerable: true, get: function () { return IRegistration_1.scopeAccess; } });
|
|
30
|
+
Object.defineProperty(exports, "lazy", { enumerable: true, get: function () { return IRegistration_1.lazy; } });
|
|
31
|
+
Object.defineProperty(exports, "singleton", { enumerable: true, get: function () { return IRegistration_1.singleton; } });
|
|
32
|
+
Object.defineProperty(exports, "decorate", { enumerable: true, get: function () { return IRegistration_1.decorate; } });
|
|
33
|
+
Object.defineProperty(exports, "appendArgs", { enumerable: true, get: function () { return IRegistration_1.appendArgs; } });
|
|
34
|
+
Object.defineProperty(exports, "appendArgsFn", { enumerable: true, get: function () { return IRegistration_1.appendArgsFn; } });
|
|
35
|
+
var Registration_1 = require("./registration/Registration");
|
|
36
|
+
Object.defineProperty(exports, "Registration", { enumerable: true, get: function () { return Registration_1.Registration; } });
|
|
37
|
+
var ContainerError_1 = require("./errors/ContainerError");
|
|
38
|
+
Object.defineProperty(exports, "ContainerError", { enumerable: true, get: function () { return ContainerError_1.ContainerError; } });
|
|
39
|
+
var DependencyNotFoundError_1 = require("./errors/DependencyNotFoundError");
|
|
40
|
+
Object.defineProperty(exports, "DependencyNotFoundError", { enumerable: true, get: function () { return DependencyNotFoundError_1.DependencyNotFoundError; } });
|
|
41
|
+
var ContainerNotFoundError_1 = require("./errors/ContainerNotFoundError");
|
|
42
|
+
Object.defineProperty(exports, "ContainerNotFoundError", { enumerable: true, get: function () { return ContainerNotFoundError_1.ContainerNotFoundError; } });
|
|
43
|
+
var DependencyMissingKeyError_1 = require("./errors/DependencyMissingKeyError");
|
|
44
|
+
Object.defineProperty(exports, "DependencyMissingKeyError", { enumerable: true, get: function () { return DependencyMissingKeyError_1.DependencyMissingKeyError; } });
|
|
45
|
+
var MethodNotImplementedError_1 = require("./errors/MethodNotImplementedError");
|
|
46
|
+
Object.defineProperty(exports, "MethodNotImplementedError", { enumerable: true, get: function () { return MethodNotImplementedError_1.MethodNotImplementedError; } });
|
|
47
|
+
var ContainerDisposedError_1 = require("./errors/ContainerDisposedError");
|
|
48
|
+
Object.defineProperty(exports, "ContainerDisposedError", { enumerable: true, get: function () { return ContainerDisposedError_1.ContainerDisposedError; } });
|
|
49
|
+
var ProviderDisposedError_1 = require("./errors/ProviderDisposedError");
|
|
50
|
+
Object.defineProperty(exports, "ProviderDisposedError", { enumerable: true, get: function () { return ProviderDisposedError_1.ProviderDisposedError; } });
|
|
51
|
+
var UnexpectedHookResultError_1 = require("./errors/UnexpectedHookResultError");
|
|
52
|
+
Object.defineProperty(exports, "UnexpectedHookResultError", { enumerable: true, get: function () { return UnexpectedHookResultError_1.UnexpectedHookResultError; } });
|
|
53
|
+
var CannonSingletonApplyTwiceError_1 = require("./errors/CannonSingletonApplyTwiceError");
|
|
54
|
+
Object.defineProperty(exports, "CannonSingletonApplyTwiceError", { enumerable: true, get: function () { return CannonSingletonApplyTwiceError_1.CannonSingletonApplyTwiceError; } });
|
|
55
|
+
var UnsupportedTokenTypeError_1 = require("./errors/UnsupportedTokenTypeError");
|
|
56
|
+
Object.defineProperty(exports, "UnsupportedTokenTypeError", { enumerable: true, get: function () { return UnsupportedTokenTypeError_1.UnsupportedTokenTypeError; } });
|
|
57
|
+
var hook_1 = require("./hooks/hook");
|
|
58
|
+
Object.defineProperty(exports, "getHooks", { enumerable: true, get: function () { return hook_1.getHooks; } });
|
|
59
|
+
Object.defineProperty(exports, "hook", { enumerable: true, get: function () { return hook_1.hook; } });
|
|
60
|
+
Object.defineProperty(exports, "hasHooks", { enumerable: true, get: function () { return hook_1.hasHooks; } });
|
|
61
|
+
Object.defineProperty(exports, "appendHooks", { enumerable: true, get: function () { return hook_1.appendHooks; } });
|
|
62
|
+
Object.defineProperty(exports, "prependHooks", { enumerable: true, get: function () { return hook_1.prependHooks; } });
|
|
63
|
+
Object.defineProperty(exports, "append", { enumerable: true, get: function () { return hook_1.append; } });
|
|
64
|
+
Object.defineProperty(exports, "prepend", { enumerable: true, get: function () { return hook_1.prepend; } });
|
|
65
|
+
var HookContext_1 = require("./hooks/HookContext");
|
|
66
|
+
Object.defineProperty(exports, "HookContext", { enumerable: true, get: function () { return HookContext_1.HookContext; } });
|
|
67
|
+
Object.defineProperty(exports, "createHookContextFactory", { enumerable: true, get: function () { return HookContext_1.createHookContextFactory; } });
|
|
68
|
+
Object.defineProperty(exports, "createHookContext", { enumerable: true, get: function () { return HookContext_1.createHookContext; } });
|
|
69
|
+
var injectProp_1 = require("./hooks/injectProp");
|
|
70
|
+
Object.defineProperty(exports, "injectProp", { enumerable: true, get: function () { return injectProp_1.injectProp; } });
|
|
71
|
+
var onConstruct_1 = require("./hooks/onConstruct");
|
|
72
|
+
Object.defineProperty(exports, "onConstructHooksRunner", { enumerable: true, get: function () { return onConstruct_1.onConstructHooksRunner; } });
|
|
73
|
+
Object.defineProperty(exports, "onConstruct", { enumerable: true, get: function () { return onConstruct_1.onConstruct; } });
|
|
74
|
+
Object.defineProperty(exports, "AddOnConstructHookModule", { enumerable: true, get: function () { return onConstruct_1.AddOnConstructHookModule; } });
|
|
75
|
+
var onConstructAsync_1 = require("./hooks/onConstructAsync");
|
|
76
|
+
Object.defineProperty(exports, "onConstructAsyncHooksRunner", { enumerable: true, get: function () { return onConstructAsync_1.onConstructAsyncHooksRunner; } });
|
|
77
|
+
Object.defineProperty(exports, "onConstructAsync", { enumerable: true, get: function () { return onConstructAsync_1.onConstructAsync; } });
|
|
78
|
+
Object.defineProperty(exports, "AddOnConstructAsyncHookModule", { enumerable: true, get: function () { return onConstructAsync_1.AddOnConstructAsyncHookModule; } });
|
|
79
|
+
var onContainerDisposed_1 = require("./hooks/onContainerDisposed");
|
|
80
|
+
Object.defineProperty(exports, "onContainerDisposedHooksRunner", { enumerable: true, get: function () { return onContainerDisposed_1.onContainerDisposedHooksRunner; } });
|
|
81
|
+
Object.defineProperty(exports, "onContainerDisposed", { enumerable: true, get: function () { return onContainerDisposed_1.onContainerDisposed; } });
|
|
82
|
+
Object.defineProperty(exports, "AddOnDisposeHookModule", { enumerable: true, get: function () { return onContainerDisposed_1.AddOnDisposeHookModule; } });
|
|
83
|
+
var HooksRunner_1 = require("./hooks/HooksRunner");
|
|
84
|
+
Object.defineProperty(exports, "HooksRunner", { enumerable: true, get: function () { return HooksRunner_1.HooksRunner; } });
|
|
85
|
+
var InjectionToken_1 = require("./token/InjectionToken");
|
|
86
|
+
Object.defineProperty(exports, "InjectionToken", { enumerable: true, get: function () { return InjectionToken_1.InjectionToken; } });
|
|
87
|
+
var GroupAliasToken_1 = require("./token/GroupAliasToken");
|
|
88
|
+
Object.defineProperty(exports, "GroupAliasToken", { enumerable: true, get: function () { return GroupAliasToken_1.GroupAliasToken; } });
|
|
89
|
+
Object.defineProperty(exports, "toGroupAlias", { enumerable: true, get: function () { return GroupAliasToken_1.toGroupAlias; } });
|
|
90
|
+
var SingleAliasToken_1 = require("./token/SingleAliasToken");
|
|
91
|
+
Object.defineProperty(exports, "SingleAliasToken", { enumerable: true, get: function () { return SingleAliasToken_1.SingleAliasToken; } });
|
|
92
|
+
Object.defineProperty(exports, "toSingleAlias", { enumerable: true, get: function () { return SingleAliasToken_1.toSingleAlias; } });
|
|
93
|
+
var ClassToken_1 = require("./token/ClassToken");
|
|
94
|
+
Object.defineProperty(exports, "ClassToken", { enumerable: true, get: function () { return ClassToken_1.ClassToken; } });
|
|
95
|
+
var SingleToken_1 = require("./token/SingleToken");
|
|
96
|
+
Object.defineProperty(exports, "SingleToken", { enumerable: true, get: function () { return SingleToken_1.SingleToken; } });
|
|
97
|
+
var FunctionToken_1 = require("./token/FunctionToken");
|
|
98
|
+
Object.defineProperty(exports, "FunctionToken", { enumerable: true, get: function () { return FunctionToken_1.FunctionToken; } });
|
|
99
|
+
var ConstantToken_1 = require("./token/ConstantToken");
|
|
100
|
+
Object.defineProperty(exports, "ConstantToken", { enumerable: true, get: function () { return ConstantToken_1.ConstantToken; } });
|
|
101
|
+
var GroupInstanceToken_1 = require("./token/GroupInstanceToken");
|
|
102
|
+
Object.defineProperty(exports, "GroupInstanceToken", { enumerable: true, get: function () { return GroupInstanceToken_1.GroupInstanceToken; } });
|
|
103
|
+
var class_1 = require("./metadata/class");
|
|
104
|
+
Object.defineProperty(exports, "addClassMeta", { enumerable: true, get: function () { return class_1.addClassMeta; } });
|
|
105
|
+
Object.defineProperty(exports, "getClassMeta", { enumerable: true, get: function () { return class_1.getClassMeta; } });
|
|
106
|
+
Object.defineProperty(exports, "addClassLabel", { enumerable: true, get: function () { return class_1.addClassLabel; } });
|
|
107
|
+
Object.defineProperty(exports, "getClassLabels", { enumerable: true, get: function () { return class_1.getClassLabels; } });
|
|
108
|
+
Object.defineProperty(exports, "addClassTag", { enumerable: true, get: function () { return class_1.addClassTag; } });
|
|
109
|
+
Object.defineProperty(exports, "getClassTags", { enumerable: true, get: function () { return class_1.getClassTags; } });
|
|
110
|
+
var parameter_1 = require("./metadata/parameter");
|
|
111
|
+
Object.defineProperty(exports, "addParamMeta", { enumerable: true, get: function () { return parameter_1.addParamMeta; } });
|
|
112
|
+
Object.defineProperty(exports, "getParamMeta", { enumerable: true, get: function () { return parameter_1.getParamMeta; } });
|
|
113
|
+
Object.defineProperty(exports, "addParamLabel", { enumerable: true, get: function () { return parameter_1.addParamLabel; } });
|
|
114
|
+
Object.defineProperty(exports, "getParamLabels", { enumerable: true, get: function () { return parameter_1.getParamLabels; } });
|
|
115
|
+
Object.defineProperty(exports, "addParamTag", { enumerable: true, get: function () { return parameter_1.addParamTag; } });
|
|
116
|
+
Object.defineProperty(exports, "getParamTags", { enumerable: true, get: function () { return parameter_1.getParamTags; } });
|
|
117
|
+
var method_1 = require("./metadata/method");
|
|
118
|
+
Object.defineProperty(exports, "addMethodMeta", { enumerable: true, get: function () { return method_1.addMethodMeta; } });
|
|
119
|
+
Object.defineProperty(exports, "getMethodMeta", { enumerable: true, get: function () { return method_1.getMethodMeta; } });
|
|
120
|
+
Object.defineProperty(exports, "addMethodLabel", { enumerable: true, get: function () { return method_1.addMethodLabel; } });
|
|
121
|
+
Object.defineProperty(exports, "getMethodLabels", { enumerable: true, get: function () { return method_1.getMethodLabels; } });
|
|
122
|
+
Object.defineProperty(exports, "addMethodTag", { enumerable: true, get: function () { return method_1.addMethodTag; } });
|
|
123
|
+
Object.defineProperty(exports, "getMethodTags", { enumerable: true, get: function () { return method_1.getMethodTags; } });
|
|
124
|
+
var errorHandler_1 = require("./utils/errorHandler");
|
|
125
|
+
Object.defineProperty(exports, "handleError", { enumerable: true, get: function () { return errorHandler_1.handleError; } });
|
|
126
|
+
Object.defineProperty(exports, "handleAsyncError", { enumerable: true, get: function () { return errorHandler_1.handleAsyncError; } });
|
|
127
|
+
var throttle_1 = require("./utils/throttle");
|
|
128
|
+
Object.defineProperty(exports, "throttle", { enumerable: true, get: function () { return throttle_1.throttle; } });
|
|
129
|
+
var debounce_1 = require("./utils/debounce");
|
|
130
|
+
Object.defineProperty(exports, "debounce", { enumerable: true, get: function () { return debounce_1.debounce; } });
|
|
131
|
+
var shallowCache_1 = require("./utils/shallowCache");
|
|
132
|
+
Object.defineProperty(exports, "shallowCache", { enumerable: true, get: function () { return shallowCache_1.shallowCache; } });
|
|
133
|
+
var once_1 = require("./utils/once");
|
|
134
|
+
Object.defineProperty(exports, "once", { enumerable: true, get: function () { return once_1.once; } });
|
|
135
|
+
var select_1 = require("./select");
|
|
136
|
+
Object.defineProperty(exports, "select", { enumerable: true, get: function () { return select_1.select; } });
|
|
137
|
+
var fp_1 = require("./utils/fp");
|
|
138
|
+
Object.defineProperty(exports, "pipe", { enumerable: true, get: function () { return fp_1.pipe; } });
|
|
139
|
+
var basic_1 = require("./utils/basic");
|
|
140
|
+
Object.defineProperty(exports, "Is", { enumerable: true, get: function () { return basic_1.Is; } });
|
|
141
|
+
Object.defineProperty(exports, "resolveConstructor", { enumerable: true, get: function () { return basic_1.resolveConstructor; } });
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Injector = void 0;
|
|
4
|
+
const proxy_1 = require("../utils/proxy");
|
|
5
|
+
class Injector {
|
|
6
|
+
resolve(scope, Target, { args, lazy } = {}) {
|
|
7
|
+
return (0, proxy_1.toLazyIf)(() => {
|
|
8
|
+
const instance = this.createInstance(scope, Target, { args });
|
|
9
|
+
scope.addInstance(instance);
|
|
10
|
+
return instance;
|
|
11
|
+
}, lazy);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.Injector = Injector;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveArgs = exports.args = exports.argsFn = exports.inject = exports.MetadataInjector = void 0;
|
|
4
|
+
const IInjector_1 = require("./IInjector");
|
|
5
|
+
const basic_1 = require("../utils/basic");
|
|
6
|
+
const parameter_1 = require("../metadata/parameter");
|
|
7
|
+
const toToken_1 = require("../token/toToken");
|
|
8
|
+
const FunctionToken_1 = require("../token/FunctionToken");
|
|
9
|
+
class MetadataInjector extends IInjector_1.Injector {
|
|
10
|
+
createInstance(scope, Target, { args: deps = [] } = {}) {
|
|
11
|
+
const args = (0, exports.resolveArgs)(Target)(scope, { args: deps });
|
|
12
|
+
return new Target(...args);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.MetadataInjector = MetadataInjector;
|
|
16
|
+
const hookMetaKey = (methodName = 'constructor') => `inject:${methodName}`;
|
|
17
|
+
const inject = (fn, selectFn = (instance) => instance) => (target, propertyKey, parameterIndex) => {
|
|
18
|
+
const toSelectedToken = () => {
|
|
19
|
+
const token = (0, toToken_1.toToken)(fn);
|
|
20
|
+
return new FunctionToken_1.FunctionToken((scope, options) => selectFn(token.resolve(scope, options)));
|
|
21
|
+
};
|
|
22
|
+
(0, parameter_1.addParamMeta)(hookMetaKey(propertyKey), toSelectedToken)(basic_1.Is.instance(target) ? target.constructor : target, propertyKey, parameterIndex);
|
|
23
|
+
};
|
|
24
|
+
exports.inject = inject;
|
|
25
|
+
const argsFn = (predicate) => (c, { args = [] }) => args.find((value, index) => predicate(value, index));
|
|
26
|
+
exports.argsFn = argsFn;
|
|
27
|
+
const args = (index) => (0, exports.argsFn)((value, i) => i === index);
|
|
28
|
+
exports.args = args;
|
|
29
|
+
const resolveArgs = (Target, methodName) => {
|
|
30
|
+
const tokens = (0, parameter_1.getParamMeta)(hookMetaKey(methodName), Target);
|
|
31
|
+
return (scope, { args = [], lazy }) => tokens.map((fn) => fn.resolve(scope, { args: args.map(toToken_1.argToToken).map((t) => t.resolve(scope)), lazy }));
|
|
32
|
+
};
|
|
33
|
+
exports.resolveArgs = resolveArgs;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProxyInjector = void 0;
|
|
4
|
+
const IInjector_1 = require("./IInjector");
|
|
5
|
+
class ProxyInjector extends IInjector_1.Injector {
|
|
6
|
+
createInstance(scope, Target, { args = [] } = {}) {
|
|
7
|
+
const proxy = new Proxy({}, {
|
|
8
|
+
get(target, prop) {
|
|
9
|
+
if (prop === 'args') {
|
|
10
|
+
return args;
|
|
11
|
+
}
|
|
12
|
+
return prop.toString().search(/alias/gi) >= 0 ? scope.resolveByAlias(prop) : scope.resolve(prop);
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
return new Target(proxy);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.ProxyInjector = ProxyInjector;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SimpleInjector = void 0;
|
|
4
|
+
const IInjector_1 = require("./IInjector");
|
|
5
|
+
class SimpleInjector extends IInjector_1.Injector {
|
|
6
|
+
createInstance(container, Target, { args = [] } = {}) {
|
|
7
|
+
return new Target(container, ...args);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.SimpleInjector = SimpleInjector;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getClassTags = exports.addClassTag = exports.getClassLabels = exports.addClassLabel = exports.addClassMeta = void 0;
|
|
4
|
+
exports.getClassMeta = getClassMeta;
|
|
5
|
+
const basic_1 = require("../utils/basic");
|
|
6
|
+
const addClassMeta = (key, mapFn) => (target) => {
|
|
7
|
+
const value = Reflect.getOwnMetadata(key, target);
|
|
8
|
+
Reflect.defineMetadata(key, mapFn(value), target);
|
|
9
|
+
};
|
|
10
|
+
exports.addClassMeta = addClassMeta;
|
|
11
|
+
function getClassMeta(target, key) {
|
|
12
|
+
return Reflect.getOwnMetadata(key, (0, basic_1.resolveConstructor)(target));
|
|
13
|
+
}
|
|
14
|
+
const addClassLabel = (key, label) => (0, exports.addClassMeta)('label', (prev = new Map()) => prev.set(key, label));
|
|
15
|
+
exports.addClassLabel = addClassLabel;
|
|
16
|
+
const getClassLabels = (target) => getClassMeta(target, 'label') ?? new Map();
|
|
17
|
+
exports.getClassLabels = getClassLabels;
|
|
18
|
+
const addClassTag = (tag) => (0, exports.addClassMeta)('tag', (prev = new Set()) => prev.add(tag));
|
|
19
|
+
exports.addClassTag = addClassTag;
|
|
20
|
+
const getClassTags = (target) => getClassMeta(target, 'tag') ?? new Set();
|
|
21
|
+
exports.getClassTags = getClassTags;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMethodTags = exports.addMethodTag = exports.getMethodLabels = exports.addMethodLabel = exports.getMethodMeta = exports.addMethodMeta = void 0;
|
|
4
|
+
const basic_1 = require("../utils/basic");
|
|
5
|
+
const addMethodMeta = (key, mapFn) => (target, propertyKey) => {
|
|
6
|
+
const metadata = Reflect.getMetadata(key, target.constructor, propertyKey);
|
|
7
|
+
Reflect.defineMetadata(key, mapFn(metadata), target.constructor, propertyKey);
|
|
8
|
+
};
|
|
9
|
+
exports.addMethodMeta = addMethodMeta;
|
|
10
|
+
const getMethodMeta = (key, target, propertyKey) => Reflect.getMetadata(key, (0, basic_1.resolveConstructor)(target), propertyKey);
|
|
11
|
+
exports.getMethodMeta = getMethodMeta;
|
|
12
|
+
const addMethodLabel = (key, label) => (0, exports.addMethodMeta)('label', (prev = new Map()) => prev.set(key, label));
|
|
13
|
+
exports.addMethodLabel = addMethodLabel;
|
|
14
|
+
const getMethodLabels = (target, propertyKey) => (0, exports.getMethodMeta)('label', target, propertyKey) ?? new Map();
|
|
15
|
+
exports.getMethodLabels = getMethodLabels;
|
|
16
|
+
const addMethodTag = (tag) => (0, exports.addMethodMeta)('tag', (prev = new Set()) => prev.add(tag));
|
|
17
|
+
exports.addMethodTag = addMethodTag;
|
|
18
|
+
const getMethodTags = (target, propertyKey) => (0, exports.getMethodMeta)('tag', target, propertyKey) ?? new Set();
|
|
19
|
+
exports.getMethodTags = getMethodTags;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getParamTags = exports.addParamTag = exports.getParamLabels = exports.addParamLabel = exports.getParamMeta = exports.addParamMeta = void 0;
|
|
4
|
+
const basic_1 = require("../utils/basic");
|
|
5
|
+
const addParamMeta = (key, mapFn) => (target, _, parameterIndex) => {
|
|
6
|
+
const metadata = Reflect.getOwnMetadata(key, target) ?? [];
|
|
7
|
+
metadata[parameterIndex] = mapFn(metadata[parameterIndex]);
|
|
8
|
+
Reflect.defineMetadata(key, metadata, target);
|
|
9
|
+
};
|
|
10
|
+
exports.addParamMeta = addParamMeta;
|
|
11
|
+
const getParamMeta = (key, target) => {
|
|
12
|
+
return Reflect.getOwnMetadata(key, (0, basic_1.resolveConstructor)(target)) ?? [];
|
|
13
|
+
};
|
|
14
|
+
exports.getParamMeta = getParamMeta;
|
|
15
|
+
const addParamLabel = (key, label) => (0, exports.addParamMeta)('label', (prev) => {
|
|
16
|
+
const map = prev ?? new Map();
|
|
17
|
+
return map.set(key, label);
|
|
18
|
+
});
|
|
19
|
+
exports.addParamLabel = addParamLabel;
|
|
20
|
+
const getParamLabels = (target, parameterIndex) => {
|
|
21
|
+
const all = (0, exports.getParamMeta)('label', target);
|
|
22
|
+
return all[parameterIndex] ?? new Map();
|
|
23
|
+
};
|
|
24
|
+
exports.getParamLabels = getParamLabels;
|
|
25
|
+
const addParamTag = (tag) => (0, exports.addParamMeta)('tag', (prev) => {
|
|
26
|
+
const set = prev ?? new Set();
|
|
27
|
+
return set.add(tag);
|
|
28
|
+
});
|
|
29
|
+
exports.addParamTag = addParamTag;
|
|
30
|
+
const getParamTags = (target, parameterIndex) => {
|
|
31
|
+
const all = (0, exports.getParamMeta)('tag', target);
|
|
32
|
+
return all[parameterIndex] ?? new Set();
|
|
33
|
+
};
|
|
34
|
+
exports.getParamTags = getParamTags;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Provider = void 0;
|
|
4
|
+
const CannonSingletonApplyTwiceError_1 = require("../errors/CannonSingletonApplyTwiceError");
|
|
5
|
+
const ProviderDisposedError_1 = require("../errors/ProviderDisposedError");
|
|
6
|
+
class Provider {
|
|
7
|
+
resolveDependency;
|
|
8
|
+
static fromClass(Target) {
|
|
9
|
+
return new Provider((container, options) => container.resolve(Target, options));
|
|
10
|
+
}
|
|
11
|
+
static fromValue(value) {
|
|
12
|
+
return new Provider(() => value);
|
|
13
|
+
}
|
|
14
|
+
static fromKey(key) {
|
|
15
|
+
return new Provider((c) => c.resolve(key));
|
|
16
|
+
}
|
|
17
|
+
argsFnList = [];
|
|
18
|
+
accessRules = [];
|
|
19
|
+
mappers = [];
|
|
20
|
+
isLazy = false;
|
|
21
|
+
cache = new Map();
|
|
22
|
+
getKey;
|
|
23
|
+
isDisposed = false;
|
|
24
|
+
constructor(resolveDependency) {
|
|
25
|
+
this.resolveDependency = resolveDependency;
|
|
26
|
+
}
|
|
27
|
+
resolve(scope, options) {
|
|
28
|
+
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
|
|
29
|
+
if (!this.getKey) {
|
|
30
|
+
return this.resolveDep(scope, options);
|
|
31
|
+
}
|
|
32
|
+
const key = this.getKey(...(options.args ?? []));
|
|
33
|
+
if (!this.cache.has(key)) {
|
|
34
|
+
this.cache.set(key, this.resolveDep(scope, options));
|
|
35
|
+
}
|
|
36
|
+
return this.cache.get(key);
|
|
37
|
+
}
|
|
38
|
+
resolveDep(scope, { args = [], lazy } = {}) {
|
|
39
|
+
const dependency = this.resolveDependency(scope, {
|
|
40
|
+
args: this.argsFnList.reduce((acc, current) => current(scope, { args: acc }), args),
|
|
41
|
+
lazy: lazy ?? this.isLazy,
|
|
42
|
+
});
|
|
43
|
+
return this.mappers.reduce((acc, current) => current(acc, scope), dependency);
|
|
44
|
+
}
|
|
45
|
+
map(...mappers) {
|
|
46
|
+
this.mappers.push(...mappers);
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
addAccessRule(...rules) {
|
|
50
|
+
this.accessRules.push(...rules);
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
lazy() {
|
|
54
|
+
this.isLazy = true;
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
addArgsFn(...fns) {
|
|
58
|
+
this.argsFnList.push(...fns);
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
hasAccess(options) {
|
|
62
|
+
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
|
|
63
|
+
return this.accessRules.reduce((acc, rule) => rule(options, acc), true);
|
|
64
|
+
}
|
|
65
|
+
singleton(getCacheKey = () => '1') {
|
|
66
|
+
CannonSingletonApplyTwiceError_1.CannonSingletonApplyTwiceError.assert(!this.getKey, 'Provider is already singleton');
|
|
67
|
+
this.getKey = getCacheKey;
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
dispose() {
|
|
71
|
+
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
|
|
72
|
+
this.isDisposed = true;
|
|
73
|
+
this.getKey = undefined;
|
|
74
|
+
this.cache.clear();
|
|
75
|
+
this.accessRules.splice(0, this.accessRules.length);
|
|
76
|
+
this.mappers.splice(0, this.mappers.length);
|
|
77
|
+
this.argsFnList.splice(0, this.argsFnList.length);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.Provider = Provider;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.singleton = exports.decorate = exports.lazy = exports.scopeAccess = exports.appendArgsFn = exports.appendArgs = exports.scope = exports.bindTo = exports.register = exports.getTransformers = exports.registerPipe = exports.isProviderPipe = void 0;
|
|
4
|
+
const IContainer_1 = require("../container/IContainer");
|
|
5
|
+
const SingleToken_1 = require("../token/SingleToken");
|
|
6
|
+
const BindToken_1 = require("../token/BindToken");
|
|
7
|
+
const class_1 = require("../metadata/class");
|
|
8
|
+
const isProviderPipe = (obj) => obj !== null && typeof obj === 'object' && 'mapProvider' in obj;
|
|
9
|
+
exports.isProviderPipe = isProviderPipe;
|
|
10
|
+
const registerPipe = (mapProvider) => ({
|
|
11
|
+
mapProvider,
|
|
12
|
+
mapRegistration: (r) => r.pipe(mapProvider),
|
|
13
|
+
});
|
|
14
|
+
exports.registerPipe = registerPipe;
|
|
15
|
+
const METADATA_KEY = 'registration';
|
|
16
|
+
const getTransformers = (Target) => (0, class_1.getClassMeta)(Target, METADATA_KEY) ?? [];
|
|
17
|
+
exports.getTransformers = getTransformers;
|
|
18
|
+
const register = (...mappers) => (0, class_1.addClassMeta)(METADATA_KEY, (acc) => {
|
|
19
|
+
const result = mappers.map((m) => {
|
|
20
|
+
if ((0, exports.isProviderPipe)(m))
|
|
21
|
+
return (r) => m.mapRegistration(r);
|
|
22
|
+
if ((0, BindToken_1.isBindToken)(m) || (0, IContainer_1.isDependencyKey)(m))
|
|
23
|
+
return (0, exports.bindTo)(m);
|
|
24
|
+
return m;
|
|
25
|
+
});
|
|
26
|
+
return acc ? [...result, ...acc] : result;
|
|
27
|
+
});
|
|
28
|
+
exports.register = register;
|
|
29
|
+
const bindTo = (...tokens) => (r) => {
|
|
30
|
+
for (const token of tokens) {
|
|
31
|
+
const targetToken = (0, BindToken_1.isBindToken)(token) ? token : new SingleToken_1.SingleToken(token);
|
|
32
|
+
targetToken.bindTo(r);
|
|
33
|
+
}
|
|
34
|
+
return r;
|
|
35
|
+
};
|
|
36
|
+
exports.bindTo = bindTo;
|
|
37
|
+
const scope = (...rules) => (r) => r.when(...rules);
|
|
38
|
+
exports.scope = scope;
|
|
39
|
+
const appendArgs = (...extraArgs) => (0, exports.registerPipe)((p) => p.addArgsFn((_, { args = [] } = {}) => [...args, ...extraArgs]));
|
|
40
|
+
exports.appendArgs = appendArgs;
|
|
41
|
+
const appendArgsFn = (fn) => (0, exports.registerPipe)((p) => p.addArgsFn((scope, options) => [...(options?.args ?? []), ...fn(scope, options)]));
|
|
42
|
+
exports.appendArgsFn = appendArgsFn;
|
|
43
|
+
const scopeAccess = (rule) => (0, exports.registerPipe)((p) => p.addAccessRule(rule));
|
|
44
|
+
exports.scopeAccess = scopeAccess;
|
|
45
|
+
const lazy = () => (0, exports.registerPipe)((p) => p.lazy());
|
|
46
|
+
exports.lazy = lazy;
|
|
47
|
+
const decorate = (...fns) => (0, exports.registerPipe)((p) => p.map(...fns));
|
|
48
|
+
exports.decorate = decorate;
|
|
49
|
+
const singleton = (getCacheKey) => (0, exports.registerPipe)((p) => p.singleton(getCacheKey));
|
|
50
|
+
exports.singleton = singleton;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Registration = void 0;
|
|
4
|
+
const IContainer_1 = require("../container/IContainer");
|
|
5
|
+
const Provider_1 = require("../provider/Provider");
|
|
6
|
+
const DependencyMissingKeyError_1 = require("../errors/DependencyMissingKeyError");
|
|
7
|
+
const IRegistration_1 = require("./IRegistration");
|
|
8
|
+
const IRegistration_2 = require("./IRegistration");
|
|
9
|
+
const SingleToken_1 = require("../token/SingleToken");
|
|
10
|
+
const fp_1 = require("../utils/fp");
|
|
11
|
+
const basic_1 = require("../utils/basic");
|
|
12
|
+
class Registration {
|
|
13
|
+
createProvider;
|
|
14
|
+
key;
|
|
15
|
+
scopeRules;
|
|
16
|
+
static fromClass(Target, { name } = {}) {
|
|
17
|
+
const transform = (0, fp_1.pipe)(...(0, IRegistration_2.getTransformers)(Target));
|
|
18
|
+
return transform(new Registration(() => Provider_1.Provider.fromClass(Target), name ?? Target.name));
|
|
19
|
+
}
|
|
20
|
+
static fromValue(value) {
|
|
21
|
+
if (basic_1.Is.constructor(value)) {
|
|
22
|
+
const transform = (0, fp_1.pipe)(...(0, IRegistration_2.getTransformers)(value));
|
|
23
|
+
return transform(new Registration(() => Provider_1.Provider.fromValue(value), value.name));
|
|
24
|
+
}
|
|
25
|
+
return new Registration(() => Provider_1.Provider.fromValue(value));
|
|
26
|
+
}
|
|
27
|
+
static fromFn(fn) {
|
|
28
|
+
return new Registration(() => new Provider_1.Provider(fn));
|
|
29
|
+
}
|
|
30
|
+
static fromKey(key) {
|
|
31
|
+
return new Registration(() => Provider_1.Provider.fromKey(key));
|
|
32
|
+
}
|
|
33
|
+
mappers = [];
|
|
34
|
+
aliases = new Set();
|
|
35
|
+
constructor(createProvider, key, scopeRules = []) {
|
|
36
|
+
this.createProvider = createProvider;
|
|
37
|
+
this.key = key;
|
|
38
|
+
this.scopeRules = scopeRules;
|
|
39
|
+
}
|
|
40
|
+
bindToKey(key) {
|
|
41
|
+
this.key = key;
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
bindToAlias(alias) {
|
|
45
|
+
this.aliases.add(alias);
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
pipe(...mappers) {
|
|
49
|
+
const fns = mappers.map((m) => ((0, IRegistration_1.isProviderPipe)(m) ? m.mapProvider.bind(m) : m));
|
|
50
|
+
this.mappers.push(...fns);
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
when(...predicates) {
|
|
54
|
+
this.scopeRules.push(...predicates);
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
bindTo(key) {
|
|
58
|
+
if ((0, IContainer_1.isDependencyKey)(key)) {
|
|
59
|
+
new SingleToken_1.SingleToken(key).bindTo(this);
|
|
60
|
+
return this;
|
|
61
|
+
}
|
|
62
|
+
key.bindTo(this);
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
matchScope(container) {
|
|
66
|
+
return this.scopeRules.reduce((prev, curr) => curr(container, prev), true);
|
|
67
|
+
}
|
|
68
|
+
applyTo(container) {
|
|
69
|
+
if (!this.matchScope(container)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (!this.key) {
|
|
73
|
+
throw new DependencyMissingKeyError_1.DependencyMissingKeyError('No key provided for registration');
|
|
74
|
+
}
|
|
75
|
+
const provider = this.mappers.reduce((p, m) => m(p), this.createProvider());
|
|
76
|
+
container.register(this.key, provider, { aliases: [...this.aliases] });
|
|
77
|
+
}
|
|
78
|
+
getKeyOrFail() {
|
|
79
|
+
if (!this.key) {
|
|
80
|
+
throw new DependencyMissingKeyError_1.DependencyMissingKeyError('No key provided for registration');
|
|
81
|
+
}
|
|
82
|
+
return this.key;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.Registration = Registration;
|
package/cjm/select.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.select = void 0;
|
|
4
|
+
const GroupAliasToken_1 = require("./token/GroupAliasToken");
|
|
5
|
+
const FunctionToken_1 = require("./token/FunctionToken");
|
|
6
|
+
const GroupInstanceToken_1 = require("./token/GroupInstanceToken");
|
|
7
|
+
const toToken_1 = require("./token/toToken");
|
|
8
|
+
exports.select = {
|
|
9
|
+
alias: GroupAliasToken_1.toGroupAlias,
|
|
10
|
+
token: toToken_1.toToken,
|
|
11
|
+
instances: (predicate = () => true) => new GroupInstanceToken_1.GroupInstanceToken(predicate),
|
|
12
|
+
scope: {
|
|
13
|
+
current: new FunctionToken_1.FunctionToken((s) => s),
|
|
14
|
+
create: (options) => new FunctionToken_1.FunctionToken((s) => s.createScope(options)),
|
|
15
|
+
},
|
|
16
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isBindToken = isBindToken;
|
|
4
|
+
const basic_1 = require("../utils/basic");
|
|
5
|
+
function isBindToken(token) {
|
|
6
|
+
return !basic_1.Is.nullish(token) && typeof token === 'object' && 'bindTo' in token;
|
|
7
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClassToken = void 0;
|
|
4
|
+
const InjectionToken_1 = require("./InjectionToken");
|
|
5
|
+
class ClassToken extends InjectionToken_1.InjectionToken {
|
|
6
|
+
target;
|
|
7
|
+
_getArgsFn;
|
|
8
|
+
_isLazy;
|
|
9
|
+
constructor(target, { getArgsFn = () => [], isLazy = false } = {}) {
|
|
10
|
+
super();
|
|
11
|
+
this.target = target;
|
|
12
|
+
this._getArgsFn = getArgsFn;
|
|
13
|
+
this._isLazy = isLazy;
|
|
14
|
+
}
|
|
15
|
+
select(fn) {
|
|
16
|
+
return (s) => fn(this.resolve(s));
|
|
17
|
+
}
|
|
18
|
+
resolve(s, { args = [], lazy } = {}) {
|
|
19
|
+
return s.resolve(this.target, {
|
|
20
|
+
args: this._getArgsFn(s, { args }),
|
|
21
|
+
lazy: this._isLazy || lazy,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
args(...newArgs) {
|
|
25
|
+
const parentFn = this._getArgsFn;
|
|
26
|
+
return new ClassToken(this.target, {
|
|
27
|
+
getArgsFn: (s, opts) => [...parentFn(s, opts), ...newArgs],
|
|
28
|
+
isLazy: this._isLazy,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
argsFn(fn) {
|
|
32
|
+
const parentFn = this._getArgsFn;
|
|
33
|
+
return new ClassToken(this.target, {
|
|
34
|
+
getArgsFn: (s, opts) => [...parentFn(s, opts), ...fn(s)],
|
|
35
|
+
isLazy: this._isLazy,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
lazy() {
|
|
39
|
+
return new ClassToken(this.target, {
|
|
40
|
+
getArgsFn: this._getArgsFn,
|
|
41
|
+
isLazy: true,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.ClassToken = ClassToken;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConstantToken = void 0;
|
|
4
|
+
const InjectionToken_1 = require("./InjectionToken");
|
|
5
|
+
const MethodNotImplementedError_1 = require("../errors/MethodNotImplementedError");
|
|
6
|
+
class ConstantToken extends InjectionToken_1.InjectionToken {
|
|
7
|
+
token;
|
|
8
|
+
constructor(token) {
|
|
9
|
+
super();
|
|
10
|
+
this.token = token;
|
|
11
|
+
}
|
|
12
|
+
resolve(s) {
|
|
13
|
+
return this.token;
|
|
14
|
+
}
|
|
15
|
+
args(...deps) {
|
|
16
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
17
|
+
}
|
|
18
|
+
argsFn(getArgsFn) {
|
|
19
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
20
|
+
}
|
|
21
|
+
lazy() {
|
|
22
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.ConstantToken = ConstantToken;
|