ts-ioc-container 72.1.0 → 72.3.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/AGENTS.md +179 -0
- package/README.md +169 -0
- package/cjm/container/Container.js +5 -2
- package/cjm/container/EmptyContainer.js +20 -15
- package/cjm/errors/ArgumentNotFoundError.js +1 -0
- package/cjm/errors/CannonSingletonApplyTwiceError.js +2 -14
- package/cjm/errors/CannotApplySingletonTwiceError.js +18 -0
- package/cjm/errors/ContainerDisposedError.js +1 -0
- package/cjm/errors/ContainerError.js +1 -0
- package/cjm/errors/ContainerNotFoundError.js +1 -0
- package/cjm/errors/DependencyMissingKeyError.js +1 -0
- package/cjm/errors/DependencyNotFoundError.js +1 -0
- package/cjm/errors/MethodNotImplementedError.js +1 -0
- package/cjm/errors/ProviderDisposedError.js +1 -0
- package/cjm/errors/TypedEventDisposedError.js +1 -0
- package/cjm/errors/UnsupportedTokenTypeError.js +1 -0
- package/cjm/feature/IFeatureFlags.js +6 -0
- package/cjm/index.js +14 -3
- package/cjm/provider/Provider.js +6 -6
- package/cjm/registration/Registration.js +2 -2
- package/cjm/token/BindableToken.js +63 -0
- package/cjm/token/ConstantToken.js +4 -4
- package/cjm/token/FunctionToken.js +1 -1
- package/cjm/token/GroupAliasToken.js +5 -50
- package/cjm/token/GroupInstanceToken.js +4 -4
- package/cjm/token/MultiVariantFeatureToken.js +84 -0
- package/cjm/token/SingleAliasToken.js +5 -50
- package/cjm/token/SingleToken.js +5 -50
- package/cjm/token/ToggleFeatureToken.js +10 -0
- package/cjm/token/toToken.js +1 -1
- package/cjm/utils/TypedEvent.js +1 -1
- package/cjm/utils/array.js +1 -1
- package/esm/container/Container.js +5 -2
- package/esm/container/EmptyContainer.js +20 -15
- package/esm/errors/ArgumentNotFoundError.js +1 -0
- package/esm/errors/CannonSingletonApplyTwiceError.js +2 -13
- package/esm/errors/CannotApplySingletonTwiceError.js +14 -0
- package/esm/errors/ContainerDisposedError.js +1 -0
- package/esm/errors/ContainerError.js +1 -0
- package/esm/errors/ContainerNotFoundError.js +1 -0
- package/esm/errors/DependencyMissingKeyError.js +1 -0
- package/esm/errors/DependencyNotFoundError.js +1 -0
- package/esm/errors/MethodNotImplementedError.js +1 -0
- package/esm/errors/ProviderDisposedError.js +1 -0
- package/esm/errors/TypedEventDisposedError.js +1 -0
- package/esm/errors/UnsupportedTokenTypeError.js +1 -0
- package/esm/feature/IFeatureFlags.js +3 -0
- package/esm/index.js +5 -0
- package/esm/provider/Provider.js +6 -6
- package/esm/registration/Registration.js +2 -2
- package/esm/token/BindableToken.js +59 -0
- package/esm/token/ConstantToken.js +4 -4
- package/esm/token/FunctionToken.js +1 -1
- package/esm/token/GroupAliasToken.js +5 -50
- package/esm/token/GroupInstanceToken.js +4 -4
- package/esm/token/MultiVariantFeatureToken.js +80 -0
- package/esm/token/SingleAliasToken.js +5 -50
- package/esm/token/SingleToken.js +5 -50
- package/esm/token/ToggleFeatureToken.js +6 -0
- package/esm/token/toToken.js +1 -1
- package/esm/utils/TypedEvent.js +1 -1
- package/esm/utils/array.js +1 -1
- package/lib/ExecutionContext.ts +6 -0
- package/lib/container/AliasMap.ts +30 -0
- package/lib/container/AutoResolveModule.ts +24 -0
- package/lib/container/Container.ts +315 -0
- package/lib/container/EmptyContainer.ts +170 -0
- package/lib/container/IContainer.ts +159 -0
- package/lib/errors/ArgumentNotFoundError.ts +13 -0
- package/lib/errors/CannonSingletonApplyTwiceError.ts +6 -0
- package/lib/errors/CannotApplySingletonTwiceError.ts +22 -0
- package/lib/errors/ContainerDisposedError.ts +13 -0
- package/lib/errors/ContainerError.ts +15 -0
- package/lib/errors/ContainerNotFoundError.ts +13 -0
- package/lib/errors/DependencyMissingKeyError.ts +13 -0
- package/lib/errors/DependencyNotFoundError.ts +13 -0
- package/lib/errors/MethodNotImplementedError.ts +13 -0
- package/lib/errors/ProviderDisposedError.ts +22 -0
- package/lib/errors/TypedEventDisposedError.ts +22 -0
- package/lib/errors/UnsupportedTokenTypeError.ts +13 -0
- package/lib/feature/IFeatureFlags.ts +44 -0
- package/lib/hooks/HookCollector.ts +109 -0
- package/lib/hooks/HookContext.ts +85 -0
- package/lib/hooks/combinators.ts +51 -0
- package/lib/hooks/hook.ts +89 -0
- package/lib/hooks/injectProp.ts +14 -0
- package/lib/index.ts +197 -0
- package/lib/injector/IInjector.ts +88 -0
- package/lib/injector/MetadataInjector.ts +100 -0
- package/lib/injector/ProxyInjector.ts +31 -0
- package/lib/injector/SimpleInjector.ts +20 -0
- package/lib/metadata/class.ts +50 -0
- package/lib/metadata/method.ts +47 -0
- package/lib/metadata/parameter.ts +60 -0
- package/lib/metadata/target.ts +25 -0
- package/lib/provider/IProvider.ts +65 -0
- package/lib/provider/Provider.ts +174 -0
- package/lib/registration/IRegistration.ts +242 -0
- package/lib/registration/Registration.ts +122 -0
- package/lib/select.ts +33 -0
- package/lib/token/BindToken.ts +13 -0
- package/lib/token/BindableToken.ts +137 -0
- package/lib/token/ClassToken.ts +72 -0
- package/lib/token/ConstantToken.ts +50 -0
- package/lib/token/FunctionToken.ts +79 -0
- package/lib/token/GroupAliasToken.ts +33 -0
- package/lib/token/GroupInstanceToken.ts +70 -0
- package/lib/token/InjectionToken.ts +46 -0
- package/lib/token/MultiVariantFeatureToken.ts +160 -0
- package/lib/token/SingleAliasToken.ts +28 -0
- package/lib/token/SingleToken.ts +35 -0
- package/lib/token/ToggleFeatureToken.ts +27 -0
- package/lib/token/toToken.ts +46 -0
- package/lib/utils/ProxyRegistry.ts +149 -0
- package/lib/utils/TypedEvent.ts +96 -0
- package/lib/utils/array.ts +28 -0
- package/lib/utils/basic.ts +34 -0
- package/lib/utils/debounce.ts +18 -0
- package/lib/utils/errorHandler.ts +34 -0
- package/lib/utils/fp.ts +86 -0
- package/lib/utils/getConstructorChain.ts +17 -0
- package/lib/utils/memoize.ts +24 -0
- package/lib/utils/once.ts +24 -0
- package/lib/utils/shallowCache.ts +22 -0
- package/lib/utils/task.ts +33 -0
- package/lib/utils/throttle.ts +17 -0
- package/package.json +6 -4
- package/typings/ExecutionContext.d.ts +2 -0
- package/typings/ExecutionContext.d.ts.map +1 -0
- package/typings/container/AliasMap.d.ts +1 -0
- package/typings/container/AliasMap.d.ts.map +1 -0
- package/typings/container/AutoResolveModule.d.ts +16 -0
- package/typings/container/AutoResolveModule.d.ts.map +1 -0
- package/typings/container/Container.d.ts +61 -0
- package/typings/container/Container.d.ts.map +1 -0
- package/typings/container/EmptyContainer.d.ts +52 -0
- package/typings/container/EmptyContainer.d.ts.map +1 -0
- package/typings/container/IContainer.d.ts +77 -0
- package/typings/container/IContainer.d.ts.map +1 -0
- package/typings/errors/ArgumentNotFoundError.d.ts +3 -0
- package/typings/errors/ArgumentNotFoundError.d.ts.map +1 -0
- package/typings/errors/CannonSingletonApplyTwiceError.d.ts +6 -6
- package/typings/errors/CannonSingletonApplyTwiceError.d.ts.map +1 -0
- package/typings/errors/CannotApplySingletonTwiceError.d.ts +12 -0
- package/typings/errors/CannotApplySingletonTwiceError.d.ts.map +1 -0
- package/typings/errors/ContainerDisposedError.d.ts +3 -0
- package/typings/errors/ContainerDisposedError.d.ts.map +1 -0
- package/typings/errors/ContainerError.d.ts +7 -0
- package/typings/errors/ContainerError.d.ts.map +1 -0
- package/typings/errors/ContainerNotFoundError.d.ts +3 -0
- package/typings/errors/ContainerNotFoundError.d.ts.map +1 -0
- package/typings/errors/DependencyMissingKeyError.d.ts +3 -0
- package/typings/errors/DependencyMissingKeyError.d.ts.map +1 -0
- package/typings/errors/DependencyNotFoundError.d.ts +3 -0
- package/typings/errors/DependencyNotFoundError.d.ts.map +1 -0
- package/typings/errors/MethodNotImplementedError.d.ts +3 -0
- package/typings/errors/MethodNotImplementedError.d.ts.map +1 -0
- package/typings/errors/ProviderDisposedError.d.ts +6 -0
- package/typings/errors/ProviderDisposedError.d.ts.map +1 -0
- package/typings/errors/TypedEventDisposedError.d.ts +6 -0
- package/typings/errors/TypedEventDisposedError.d.ts.map +1 -0
- package/typings/errors/UnsupportedTokenTypeError.d.ts +3 -0
- package/typings/errors/UnsupportedTokenTypeError.d.ts.map +1 -0
- package/typings/feature/IFeatureFlags.d.ts +42 -0
- package/typings/feature/IFeatureFlags.d.ts.map +1 -0
- package/typings/hooks/HookCollector.d.ts +36 -0
- package/typings/hooks/HookCollector.d.ts.map +1 -0
- package/typings/hooks/HookContext.d.ts +10 -0
- package/typings/hooks/HookContext.d.ts.map +1 -0
- package/typings/hooks/combinators.d.ts +23 -0
- package/typings/hooks/combinators.d.ts.map +1 -0
- package/typings/hooks/hook.d.ts +39 -0
- package/typings/hooks/hook.d.ts.map +1 -0
- package/typings/hooks/injectProp.d.ts +9 -0
- package/typings/hooks/injectProp.d.ts.map +1 -0
- package/typings/index.d.ts +6 -0
- package/typings/index.d.ts.map +1 -0
- package/typings/injector/IInjector.d.ts +32 -0
- package/typings/injector/IInjector.d.ts.map +1 -0
- package/typings/injector/MetadataInjector.d.ts +58 -0
- package/typings/injector/MetadataInjector.d.ts.map +1 -0
- package/typings/injector/ProxyInjector.d.ts +13 -0
- package/typings/injector/ProxyInjector.d.ts.map +1 -0
- package/typings/injector/SimpleInjector.d.ts +13 -0
- package/typings/injector/SimpleInjector.d.ts.map +1 -0
- package/typings/metadata/class.d.ts +27 -0
- package/typings/metadata/class.d.ts.map +1 -0
- package/typings/metadata/method.d.ts +24 -0
- package/typings/metadata/method.d.ts.map +1 -0
- package/typings/metadata/parameter.d.ts +21 -0
- package/typings/metadata/parameter.d.ts.map +1 -0
- package/typings/metadata/target.d.ts +19 -0
- package/typings/metadata/target.d.ts.map +1 -0
- package/typings/provider/IProvider.d.ts +25 -0
- package/typings/provider/IProvider.d.ts.map +1 -0
- package/typings/provider/Provider.d.ts +30 -0
- package/typings/provider/Provider.d.ts.map +1 -0
- package/typings/registration/IRegistration.d.ts +144 -0
- package/typings/registration/IRegistration.d.ts.map +1 -0
- package/typings/registration/Registration.d.ts +23 -0
- package/typings/registration/Registration.d.ts.map +1 -0
- package/typings/select.d.ts +15 -0
- package/typings/select.d.ts.map +1 -0
- package/typings/token/BindToken.d.ts +3 -0
- package/typings/token/BindToken.d.ts.map +1 -0
- package/typings/token/BindableToken.d.ts +80 -0
- package/typings/token/BindableToken.d.ts.map +1 -0
- package/typings/token/ClassToken.d.ts +2 -0
- package/typings/token/ClassToken.d.ts.map +1 -0
- package/typings/token/ConstantToken.d.ts +14 -0
- package/typings/token/ConstantToken.d.ts.map +1 -0
- package/typings/token/FunctionToken.d.ts +10 -0
- package/typings/token/FunctionToken.d.ts.map +1 -0
- package/typings/token/GroupAliasToken.d.ts +21 -22
- package/typings/token/GroupAliasToken.d.ts.map +1 -0
- package/typings/token/GroupInstanceToken.d.ts +19 -0
- package/typings/token/GroupInstanceToken.d.ts.map +1 -0
- package/typings/token/InjectionToken.d.ts +8 -0
- package/typings/token/InjectionToken.d.ts.map +1 -0
- package/typings/token/MultiVariantFeatureToken.d.ts +79 -0
- package/typings/token/MultiVariantFeatureToken.d.ts.map +1 -0
- package/typings/token/SingleAliasToken.d.ts +16 -22
- package/typings/token/SingleAliasToken.d.ts.map +1 -0
- package/typings/token/SingleToken.d.ts +25 -21
- package/typings/token/SingleToken.d.ts.map +1 -0
- package/typings/token/ToggleFeatureToken.d.ts +25 -0
- package/typings/token/ToggleFeatureToken.d.ts.map +1 -0
- package/typings/token/toToken.d.ts +12 -0
- package/typings/token/toToken.d.ts.map +1 -0
- package/typings/utils/ProxyRegistry.d.ts +63 -0
- package/typings/utils/ProxyRegistry.d.ts.map +1 -0
- package/typings/utils/TypedEvent.d.ts +42 -0
- package/typings/utils/TypedEvent.d.ts.map +1 -0
- package/typings/utils/array.d.ts +7 -0
- package/typings/utils/array.d.ts.map +1 -0
- package/typings/utils/basic.d.ts +12 -0
- package/typings/utils/basic.d.ts.map +1 -0
- package/typings/utils/debounce.d.ts +2 -0
- package/typings/utils/debounce.d.ts.map +1 -0
- package/typings/utils/errorHandler.d.ts +4 -0
- package/typings/utils/errorHandler.d.ts.map +1 -0
- package/typings/utils/fp.d.ts +8 -0
- package/typings/utils/fp.d.ts.map +1 -0
- package/typings/utils/getConstructorChain.d.ts +9 -0
- package/typings/utils/getConstructorChain.d.ts.map +1 -0
- package/typings/utils/memoize.d.ts +10 -0
- package/typings/utils/memoize.d.ts.map +1 -0
- package/typings/utils/once.d.ts +2 -0
- package/typings/utils/once.d.ts.map +1 -0
- package/typings/utils/shallowCache.d.ts +2 -0
- package/typings/utils/shallowCache.d.ts.map +1 -0
- package/typings/utils/task.d.ts +13 -0
- package/typings/utils/task.d.ts.map +1 -0
- package/typings/utils/throttle.d.ts +2 -0
- package/typings/utils/throttle.d.ts.map +1 -0
package/cjm/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
exports.isSerializable = exports.Is = exports.unwrapProxy = exports.ProxyRegistry = exports.findOrFail = exports.pipe = exports.select = exports.TypedEvent = exports.getConstructorChain = exports.memoize = void 0;
|
|
3
|
+
exports.createHookContextFactory = exports.HookContext = exports.toHookFn = exports.hasHooks = exports.hook = exports.getHooks = exports.ArgumentNotFoundError = exports.TypedEventDisposedError = exports.UnsupportedTokenTypeError = exports.CannonSingletonApplyTwiceError = exports.CannotApplySingletonTwiceError = exports.ProviderDisposedError = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyMissingKeyError = exports.ContainerNotFoundError = exports.DependencyNotFoundError = exports.ContainerError = exports.Registration = exports.onResolve = exports.appendArgsFn = exports.appendArgs = exports.decorate = exports.singleton = exports.autoResolve = exports.lazy = exports.scopeAccess = exports.scope = exports.bindTo = exports.register = exports.toRegistrationFn = exports.toProviderFn = exports.toBindToken = exports.registerPipe = exports.isProviderPipe = exports.Provider = exports.ProxyInjector = exports.SimpleInjector = exports.resolveArgs = exports.by = exports.argsFn = exports.args = exports.arg = exports.inject = exports.MetadataInjector = exports.Injector = exports.EmptyContainer = exports.AutoResolveModule = exports.Container = exports.isDependencyKey = void 0;
|
|
4
|
+
exports.handleAsyncError = exports.handleError = exports.createComposeMethodDecorator = exports.getMethodTags = exports.addMethodTag = exports.getMethodLabels = exports.addMethodLabel = exports.getMethodMeta = exports.addMethodMeta = exports.createComposeParameterDecorator = exports.getParamTags = exports.addParamTag = exports.getParamLabels = exports.addParamLabel = exports.getParamMeta = exports.addParamMeta = exports.createComposeClassDecorator = exports.getClassTags = exports.addClassTag = exports.getClassLabels = exports.addClassLabel = exports.getClassMeta = exports.addClassMeta = exports.resolveConstructor = exports.IFeatureContextToken = exports.IFeatureFlagsToken = exports.ToggleFeatureToken = exports.MultiVariantFeatureToken = exports.GroupInstanceToken = exports.ConstantToken = exports.FunctionToken = exports.SingleToken = exports.BindableToken = exports.ClassToken = exports.toSingleAlias = exports.SingleAliasToken = exports.toGroupAlias = exports.GroupAliasToken = exports.argToToken = exports.toToken = exports.forwardArgs = exports.isInjectionToken = exports.InjectionToken = exports.toTask = exports.HookCollector = exports.oncePerInstance = exports.parallel = exports.sequential = exports.injectProp = exports.createHookExecutionContext = void 0;
|
|
5
|
+
exports.isSerializable = exports.Is = exports.unwrapProxy = exports.ProxyRegistry = exports.findOrFail = exports.pipe = exports.select = exports.TypedEvent = exports.getConstructorChain = exports.memoize = exports.once = exports.shallowCache = exports.debounce = exports.throttle = exports.runAtOnce = exports.runInOrder = void 0;
|
|
6
6
|
var IContainer_1 = require("./container/IContainer");
|
|
7
7
|
Object.defineProperty(exports, "isDependencyKey", { enumerable: true, get: function () { return IContainer_1.isDependencyKey; } });
|
|
8
8
|
var Container_1 = require("./container/Container");
|
|
@@ -60,6 +60,8 @@ var ContainerDisposedError_1 = require("./errors/ContainerDisposedError");
|
|
|
60
60
|
Object.defineProperty(exports, "ContainerDisposedError", { enumerable: true, get: function () { return ContainerDisposedError_1.ContainerDisposedError; } });
|
|
61
61
|
var ProviderDisposedError_1 = require("./errors/ProviderDisposedError");
|
|
62
62
|
Object.defineProperty(exports, "ProviderDisposedError", { enumerable: true, get: function () { return ProviderDisposedError_1.ProviderDisposedError; } });
|
|
63
|
+
var CannotApplySingletonTwiceError_1 = require("./errors/CannotApplySingletonTwiceError");
|
|
64
|
+
Object.defineProperty(exports, "CannotApplySingletonTwiceError", { enumerable: true, get: function () { return CannotApplySingletonTwiceError_1.CannotApplySingletonTwiceError; } });
|
|
63
65
|
var CannonSingletonApplyTwiceError_1 = require("./errors/CannonSingletonApplyTwiceError");
|
|
64
66
|
Object.defineProperty(exports, "CannonSingletonApplyTwiceError", { enumerable: true, get: function () { return CannonSingletonApplyTwiceError_1.CannonSingletonApplyTwiceError; } });
|
|
65
67
|
var UnsupportedTokenTypeError_1 = require("./errors/UnsupportedTokenTypeError");
|
|
@@ -101,6 +103,8 @@ Object.defineProperty(exports, "SingleAliasToken", { enumerable: true, get: func
|
|
|
101
103
|
Object.defineProperty(exports, "toSingleAlias", { enumerable: true, get: function () { return SingleAliasToken_1.toSingleAlias; } });
|
|
102
104
|
var ClassToken_1 = require("./token/ClassToken");
|
|
103
105
|
Object.defineProperty(exports, "ClassToken", { enumerable: true, get: function () { return ClassToken_1.ClassToken; } });
|
|
106
|
+
var BindableToken_1 = require("./token/BindableToken");
|
|
107
|
+
Object.defineProperty(exports, "BindableToken", { enumerable: true, get: function () { return BindableToken_1.BindableToken; } });
|
|
104
108
|
var SingleToken_1 = require("./token/SingleToken");
|
|
105
109
|
Object.defineProperty(exports, "SingleToken", { enumerable: true, get: function () { return SingleToken_1.SingleToken; } });
|
|
106
110
|
var FunctionToken_1 = require("./token/FunctionToken");
|
|
@@ -109,6 +113,13 @@ var ConstantToken_1 = require("./token/ConstantToken");
|
|
|
109
113
|
Object.defineProperty(exports, "ConstantToken", { enumerable: true, get: function () { return ConstantToken_1.ConstantToken; } });
|
|
110
114
|
var GroupInstanceToken_1 = require("./token/GroupInstanceToken");
|
|
111
115
|
Object.defineProperty(exports, "GroupInstanceToken", { enumerable: true, get: function () { return GroupInstanceToken_1.GroupInstanceToken; } });
|
|
116
|
+
var MultiVariantFeatureToken_1 = require("./token/MultiVariantFeatureToken");
|
|
117
|
+
Object.defineProperty(exports, "MultiVariantFeatureToken", { enumerable: true, get: function () { return MultiVariantFeatureToken_1.MultiVariantFeatureToken; } });
|
|
118
|
+
var ToggleFeatureToken_1 = require("./token/ToggleFeatureToken");
|
|
119
|
+
Object.defineProperty(exports, "ToggleFeatureToken", { enumerable: true, get: function () { return ToggleFeatureToken_1.ToggleFeatureToken; } });
|
|
120
|
+
var IFeatureFlags_1 = require("./feature/IFeatureFlags");
|
|
121
|
+
Object.defineProperty(exports, "IFeatureFlagsToken", { enumerable: true, get: function () { return IFeatureFlags_1.IFeatureFlagsToken; } });
|
|
122
|
+
Object.defineProperty(exports, "IFeatureContextToken", { enumerable: true, get: function () { return IFeatureFlags_1.IFeatureContextToken; } });
|
|
112
123
|
var target_1 = require("./metadata/target");
|
|
113
124
|
Object.defineProperty(exports, "resolveConstructor", { enumerable: true, get: function () { return target_1.resolveConstructor; } });
|
|
114
125
|
var class_1 = require("./metadata/class");
|
package/cjm/provider/Provider.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Provider = void 0;
|
|
4
4
|
const basic_1 = require("../utils/basic");
|
|
5
|
-
const
|
|
5
|
+
const CannotApplySingletonTwiceError_1 = require("../errors/CannotApplySingletonTwiceError");
|
|
6
6
|
const ProviderDisposedError_1 = require("../errors/ProviderDisposedError");
|
|
7
7
|
class Provider {
|
|
8
8
|
resolveDependency;
|
|
@@ -28,7 +28,7 @@ class Provider {
|
|
|
28
28
|
this.resolveDependency = resolveDependency;
|
|
29
29
|
}
|
|
30
30
|
resolve(options) {
|
|
31
|
-
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
|
|
31
|
+
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed: its scope was disposed. Resolve from a live scope.');
|
|
32
32
|
if (!this.getKey) {
|
|
33
33
|
return this.resolveDep(options);
|
|
34
34
|
}
|
|
@@ -67,7 +67,7 @@ class Provider {
|
|
|
67
67
|
return this;
|
|
68
68
|
}
|
|
69
69
|
isAutoResolvable() {
|
|
70
|
-
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
|
|
70
|
+
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed: its scope was disposed. Resolve from a live scope.');
|
|
71
71
|
return this.isAutoResolve;
|
|
72
72
|
}
|
|
73
73
|
addArgsFn(...fns) {
|
|
@@ -75,11 +75,11 @@ class Provider {
|
|
|
75
75
|
return this;
|
|
76
76
|
}
|
|
77
77
|
hasAccess(options) {
|
|
78
|
-
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
|
|
78
|
+
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed: its scope was disposed. Resolve from a live scope.');
|
|
79
79
|
return this.accessRules.reduce((acc, rule) => rule(options, acc), true);
|
|
80
80
|
}
|
|
81
81
|
singleton(getCacheKey = () => '1') {
|
|
82
|
-
|
|
82
|
+
CannotApplySingletonTwiceError_1.CannotApplySingletonTwiceError.assert(!this.getKey, 'Provider is already singleton: singleton() was applied twice to the same provider. Remove the duplicate singleton().');
|
|
83
83
|
this.getKey = getCacheKey;
|
|
84
84
|
return this;
|
|
85
85
|
}
|
|
@@ -88,7 +88,7 @@ class Provider {
|
|
|
88
88
|
return this;
|
|
89
89
|
}
|
|
90
90
|
dispose() {
|
|
91
|
-
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed');
|
|
91
|
+
ProviderDisposedError_1.ProviderDisposedError.assert(!this.isDisposed, 'Provider is already disposed: its scope was disposed. Resolve from a live scope.');
|
|
92
92
|
this.isDisposed = true;
|
|
93
93
|
this.isAutoResolve = false;
|
|
94
94
|
this.getKey = undefined;
|
|
@@ -62,14 +62,14 @@ class Registration {
|
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
64
64
|
if (!this.key) {
|
|
65
|
-
throw new DependencyMissingKeyError_1.DependencyMissingKeyError('No key provided for registration');
|
|
65
|
+
throw new DependencyMissingKeyError_1.DependencyMissingKeyError('No key provided for registration: bind it with @register(bindTo(...)) or .bindTo(...).');
|
|
66
66
|
}
|
|
67
67
|
const provider = this.mappers.reduce((p, m) => m(p), this.createProvider());
|
|
68
68
|
container.register(this.key, provider, { aliases: [...this.aliases] });
|
|
69
69
|
}
|
|
70
70
|
getKeyOrFail() {
|
|
71
71
|
if (!this.key) {
|
|
72
|
-
throw new DependencyMissingKeyError_1.DependencyMissingKeyError('No key provided for registration');
|
|
72
|
+
throw new DependencyMissingKeyError_1.DependencyMissingKeyError('No key provided for registration: bind it with @register(bindTo(...)) or .bindTo(...).');
|
|
73
73
|
}
|
|
74
74
|
return this.key;
|
|
75
75
|
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BindableToken = void 0;
|
|
4
|
+
const InjectionToken_1 = require("./InjectionToken");
|
|
5
|
+
class BindableToken extends InjectionToken_1.InjectionToken {
|
|
6
|
+
token;
|
|
7
|
+
getArgsFn;
|
|
8
|
+
isLazyByDefault;
|
|
9
|
+
memberships;
|
|
10
|
+
constructor(token, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false, tags = [], memberships = [] } = {}) {
|
|
11
|
+
super(tags);
|
|
12
|
+
this.token = token;
|
|
13
|
+
this.getArgsFn = getArgsFn;
|
|
14
|
+
this.isLazyByDefault = isLazy;
|
|
15
|
+
this.memberships = memberships;
|
|
16
|
+
}
|
|
17
|
+
bindTo(r) {
|
|
18
|
+
this.bindKey(r);
|
|
19
|
+
for (const alias of this.memberships) {
|
|
20
|
+
r.bindToAlias(alias);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
variantOf(feature, name) {
|
|
24
|
+
return this.copy({ memberships: [...this.memberships, feature.variantAlias(name)] });
|
|
25
|
+
}
|
|
26
|
+
primaryVariantOf(feature) {
|
|
27
|
+
return this.copy({ memberships: [...this.memberships, feature.primaryAlias()] });
|
|
28
|
+
}
|
|
29
|
+
fallbackOf(feature) {
|
|
30
|
+
return this.copy({ memberships: [...this.memberships, feature.fallbackAlias()] });
|
|
31
|
+
}
|
|
32
|
+
args(...newArgs) {
|
|
33
|
+
const parentFn = this.getArgsFn;
|
|
34
|
+
return this.copy({ getArgsFn: (options) => [...parentFn(options), ...newArgs] });
|
|
35
|
+
}
|
|
36
|
+
argsFn(fn) {
|
|
37
|
+
const parentFn = this.getArgsFn;
|
|
38
|
+
return this.copy({ getArgsFn: (options) => [...parentFn(options), ...fn(options.scope)] });
|
|
39
|
+
}
|
|
40
|
+
lazy() {
|
|
41
|
+
return this.copy({ isLazy: true });
|
|
42
|
+
}
|
|
43
|
+
addTags(...tags) {
|
|
44
|
+
return this.copy({ tags: [...this.getTags(), ...tags] });
|
|
45
|
+
}
|
|
46
|
+
toString() {
|
|
47
|
+
return this.token.toString();
|
|
48
|
+
}
|
|
49
|
+
toResolveOptions(s, { args = [], lazy } = {}) {
|
|
50
|
+
return { args: this.getArgsFn({ scope: s, args }), lazy: this.isLazyByDefault || lazy };
|
|
51
|
+
}
|
|
52
|
+
copy(overrides) {
|
|
53
|
+
const Self = this.constructor;
|
|
54
|
+
return new Self(this.token, {
|
|
55
|
+
getArgsFn: this.getArgsFn,
|
|
56
|
+
isLazy: this.isLazyByDefault,
|
|
57
|
+
tags: this.getTags(),
|
|
58
|
+
memberships: this.memberships,
|
|
59
|
+
...overrides,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.BindableToken = BindableToken;
|
|
@@ -13,19 +13,19 @@ class ConstantToken extends InjectionToken_1.InjectionToken {
|
|
|
13
13
|
return this.token;
|
|
14
14
|
}
|
|
15
15
|
args(...deps) {
|
|
16
|
-
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
16
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError('ConstantToken.args is not implemented');
|
|
17
17
|
}
|
|
18
18
|
argsFn(getArgsFn) {
|
|
19
|
-
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
19
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError('ConstantToken.argsFn is not implemented');
|
|
20
20
|
}
|
|
21
21
|
lazy() {
|
|
22
|
-
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
22
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError('ConstantToken.lazy is not implemented');
|
|
23
23
|
}
|
|
24
24
|
addTags(...tags) {
|
|
25
25
|
return new ConstantToken(this.token, { tags: [...this.getTags(), ...tags] });
|
|
26
26
|
}
|
|
27
27
|
toString() {
|
|
28
|
-
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
28
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError('ConstantToken.toString is not implemented');
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
exports.ConstantToken = ConstantToken;
|
|
@@ -51,7 +51,7 @@ class FunctionToken extends InjectionToken_1.InjectionToken {
|
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
toString() {
|
|
54
|
-
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
54
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError('FunctionToken.toString is not implemented');
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
exports.FunctionToken = FunctionToken;
|
|
@@ -1,62 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.toGroupAlias = exports.GroupAliasToken = void 0;
|
|
4
|
-
const
|
|
5
|
-
class GroupAliasToken extends
|
|
6
|
-
token;
|
|
7
|
-
_getArgsFn;
|
|
8
|
-
_isLazy;
|
|
9
|
-
constructor(token, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
10
|
-
super(tags);
|
|
11
|
-
this.token = token;
|
|
12
|
-
this._getArgsFn = getArgsFn;
|
|
13
|
-
this._isLazy = isLazy;
|
|
14
|
-
}
|
|
4
|
+
const BindableToken_1 = require("./BindableToken");
|
|
5
|
+
class GroupAliasToken extends BindableToken_1.BindableToken {
|
|
15
6
|
select(fn) {
|
|
16
7
|
return (s) => fn(this.resolve(s));
|
|
17
8
|
}
|
|
18
|
-
resolve(s,
|
|
19
|
-
return s.resolveByAlias(this.token,
|
|
20
|
-
args: this._getArgsFn({ scope: s, args }),
|
|
21
|
-
lazy: this._isLazy || lazy,
|
|
22
|
-
});
|
|
9
|
+
resolve(s, options) {
|
|
10
|
+
return s.resolveByAlias(this.token, this.toResolveOptions(s, options));
|
|
23
11
|
}
|
|
24
|
-
|
|
12
|
+
bindKey(r) {
|
|
25
13
|
r.bindToAlias(this.token);
|
|
26
14
|
}
|
|
27
|
-
args(...newArgs) {
|
|
28
|
-
const parentFn = this._getArgsFn;
|
|
29
|
-
return new GroupAliasToken(this.token, {
|
|
30
|
-
getArgsFn: (options) => [...parentFn(options), ...newArgs],
|
|
31
|
-
isLazy: this._isLazy,
|
|
32
|
-
tags: this.getTags(),
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
argsFn(fn) {
|
|
36
|
-
const parentFn = this._getArgsFn;
|
|
37
|
-
return new GroupAliasToken(this.token, {
|
|
38
|
-
getArgsFn: (options) => [...parentFn(options), ...fn(options.scope)],
|
|
39
|
-
isLazy: this._isLazy,
|
|
40
|
-
tags: this.getTags(),
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
lazy() {
|
|
44
|
-
return new GroupAliasToken(this.token, {
|
|
45
|
-
getArgsFn: this._getArgsFn,
|
|
46
|
-
isLazy: true,
|
|
47
|
-
tags: this.getTags(),
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
addTags(...tags) {
|
|
51
|
-
return new GroupAliasToken(this.token, {
|
|
52
|
-
getArgsFn: this._getArgsFn,
|
|
53
|
-
isLazy: this._isLazy,
|
|
54
|
-
tags: [...this.getTags(), ...tags],
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
toString() {
|
|
58
|
-
return this.token.toString();
|
|
59
|
-
}
|
|
60
15
|
}
|
|
61
16
|
exports.GroupAliasToken = GroupAliasToken;
|
|
62
17
|
const toGroupAlias = (token) => new GroupAliasToken(token);
|
|
@@ -15,13 +15,13 @@ class GroupInstanceToken extends InjectionToken_1.InjectionToken {
|
|
|
15
15
|
return (s) => this.resolve(s).map(fn);
|
|
16
16
|
}
|
|
17
17
|
args(...deps) {
|
|
18
|
-
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
18
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError('GroupInstanceToken.args is not implemented');
|
|
19
19
|
}
|
|
20
20
|
argsFn(getArgsFn) {
|
|
21
|
-
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
21
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError('GroupInstanceToken.argsFn is not implemented');
|
|
22
22
|
}
|
|
23
23
|
lazy() {
|
|
24
|
-
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
24
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError('GroupInstanceToken.lazy is not implemented');
|
|
25
25
|
}
|
|
26
26
|
cascade(isTrue) {
|
|
27
27
|
this.isCascade = isTrue;
|
|
@@ -34,7 +34,7 @@ class GroupInstanceToken extends InjectionToken_1.InjectionToken {
|
|
|
34
34
|
return new GroupInstanceToken(this.predicate, { tags: [...this.getTags(), ...tags], isCascade: this.isCascade });
|
|
35
35
|
}
|
|
36
36
|
toString() {
|
|
37
|
-
throw new MethodNotImplementedError_1.MethodNotImplementedError('not implemented');
|
|
37
|
+
throw new MethodNotImplementedError_1.MethodNotImplementedError('GroupInstanceToken.toString is not implemented');
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
exports.GroupInstanceToken = GroupInstanceToken;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MultiVariantFeatureToken = void 0;
|
|
4
|
+
const InjectionToken_1 = require("./InjectionToken");
|
|
5
|
+
const ProxyRegistry_1 = require("../utils/ProxyRegistry");
|
|
6
|
+
const DependencyNotFoundError_1 = require("../errors/DependencyNotFoundError");
|
|
7
|
+
const IFeatureFlags_1 = require("../feature/IFeatureFlags");
|
|
8
|
+
class MultiVariantFeatureToken extends InjectionToken_1.InjectionToken {
|
|
9
|
+
flag;
|
|
10
|
+
_getArgsFn;
|
|
11
|
+
_isLazy;
|
|
12
|
+
constructor(flag, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false, tags = [] } = {}) {
|
|
13
|
+
super(tags);
|
|
14
|
+
this.flag = flag;
|
|
15
|
+
this._getArgsFn = getArgsFn;
|
|
16
|
+
this._isLazy = isLazy;
|
|
17
|
+
}
|
|
18
|
+
variantAlias(name) {
|
|
19
|
+
return `feature:${this.flag}:variant:${name}`;
|
|
20
|
+
}
|
|
21
|
+
primaryAlias() {
|
|
22
|
+
return `feature:${this.flag}:primary`;
|
|
23
|
+
}
|
|
24
|
+
fallbackAlias() {
|
|
25
|
+
return `feature:${this.flag}:fallback`;
|
|
26
|
+
}
|
|
27
|
+
resolve(s, { args = [], lazy } = {}) {
|
|
28
|
+
const resolveSelected = () => s.resolveOneByAlias(this.selectAlias(s), { args: this._getArgsFn({ scope: s, args }) });
|
|
29
|
+
return ProxyRegistry_1.ProxyRegistry.getInstance().toLazyIf(resolveSelected, this._isLazy || lazy);
|
|
30
|
+
}
|
|
31
|
+
args(...newArgs) {
|
|
32
|
+
const parentFn = this._getArgsFn;
|
|
33
|
+
return this.copy({ getArgsFn: (options) => [...parentFn(options), ...newArgs] });
|
|
34
|
+
}
|
|
35
|
+
argsFn(fn) {
|
|
36
|
+
const parentFn = this._getArgsFn;
|
|
37
|
+
return this.copy({ getArgsFn: (options) => [...parentFn(options), ...fn(options.scope)] });
|
|
38
|
+
}
|
|
39
|
+
lazy() {
|
|
40
|
+
return this.copy({ isLazy: true });
|
|
41
|
+
}
|
|
42
|
+
addTags(...tags) {
|
|
43
|
+
return this.copy({ tags: [...this.getTags(), ...tags] });
|
|
44
|
+
}
|
|
45
|
+
toString() {
|
|
46
|
+
return this.flag;
|
|
47
|
+
}
|
|
48
|
+
evaluate(flags, context) {
|
|
49
|
+
const served = flags.getVariant(this.flag, context);
|
|
50
|
+
return served.enabled
|
|
51
|
+
? { enabled: true, variant: served.name }
|
|
52
|
+
: { enabled: flags.isEnabled(this.flag, context) };
|
|
53
|
+
}
|
|
54
|
+
copy(overrides) {
|
|
55
|
+
const Self = this.constructor;
|
|
56
|
+
return new Self(this.flag, {
|
|
57
|
+
getArgsFn: this._getArgsFn,
|
|
58
|
+
isLazy: this._isLazy,
|
|
59
|
+
tags: this.getTags(),
|
|
60
|
+
...overrides,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
selectAlias(s) {
|
|
64
|
+
const fallback = this.fallbackAlias();
|
|
65
|
+
if (!s.hasAlias(fallback)) {
|
|
66
|
+
throw new DependencyNotFoundError_1.DependencyNotFoundError(`Feature flag "${this.flag}" has no fallback: a flag always has one. ` +
|
|
67
|
+
`Register it with @register(token.fallbackOf(feature)) in this scope or a parent.`);
|
|
68
|
+
}
|
|
69
|
+
const flags = IFeatureFlags_1.IFeatureFlagsToken.resolve(s);
|
|
70
|
+
const context = IFeatureFlags_1.IFeatureContextToken.resolve(s);
|
|
71
|
+
let served = { enabled: false };
|
|
72
|
+
try {
|
|
73
|
+
served = this.evaluate(flags, context);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
}
|
|
77
|
+
const candidates = [
|
|
78
|
+
served.variant === undefined ? undefined : this.variantAlias(served.variant),
|
|
79
|
+
served.enabled ? this.primaryAlias() : undefined,
|
|
80
|
+
];
|
|
81
|
+
return candidates.find((alias) => alias !== undefined && s.hasAlias(alias)) ?? fallback;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.MultiVariantFeatureToken = MultiVariantFeatureToken;
|
|
@@ -1,62 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.toSingleAlias = exports.SingleAliasToken = void 0;
|
|
4
|
-
const
|
|
5
|
-
class SingleAliasToken extends
|
|
6
|
-
token;
|
|
7
|
-
_getArgsFn;
|
|
8
|
-
_isLazy;
|
|
9
|
-
constructor(token, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
10
|
-
super(tags);
|
|
11
|
-
this.token = token;
|
|
12
|
-
this._getArgsFn = getArgsFn;
|
|
13
|
-
this._isLazy = isLazy;
|
|
14
|
-
}
|
|
4
|
+
const BindableToken_1 = require("./BindableToken");
|
|
5
|
+
class SingleAliasToken extends BindableToken_1.BindableToken {
|
|
15
6
|
select(fn) {
|
|
16
7
|
return (s) => fn(this.resolve(s));
|
|
17
8
|
}
|
|
18
|
-
resolve(s,
|
|
19
|
-
return s.resolveOneByAlias(this.token,
|
|
20
|
-
args: this._getArgsFn({ scope: s, args }),
|
|
21
|
-
lazy: this._isLazy || lazy,
|
|
22
|
-
});
|
|
9
|
+
resolve(s, options) {
|
|
10
|
+
return s.resolveOneByAlias(this.token, this.toResolveOptions(s, options));
|
|
23
11
|
}
|
|
24
|
-
|
|
12
|
+
bindKey(r) {
|
|
25
13
|
r.bindToAlias(this.token);
|
|
26
14
|
}
|
|
27
|
-
args(...newArgs) {
|
|
28
|
-
const parentFn = this._getArgsFn;
|
|
29
|
-
return new SingleAliasToken(this.token, {
|
|
30
|
-
getArgsFn: (options) => [...parentFn(options), ...newArgs],
|
|
31
|
-
isLazy: this._isLazy,
|
|
32
|
-
tags: this.getTags(),
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
argsFn(fn) {
|
|
36
|
-
const parentFn = this._getArgsFn;
|
|
37
|
-
return new SingleAliasToken(this.token, {
|
|
38
|
-
getArgsFn: (options) => [...parentFn(options), ...fn(options.scope)],
|
|
39
|
-
isLazy: this._isLazy,
|
|
40
|
-
tags: this.getTags(),
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
lazy() {
|
|
44
|
-
return new SingleAliasToken(this.token, {
|
|
45
|
-
getArgsFn: this._getArgsFn,
|
|
46
|
-
isLazy: true,
|
|
47
|
-
tags: this.getTags(),
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
addTags(...tags) {
|
|
51
|
-
return new SingleAliasToken(this.token, {
|
|
52
|
-
getArgsFn: this._getArgsFn,
|
|
53
|
-
isLazy: this._isLazy,
|
|
54
|
-
tags: [...this.getTags(), ...tags],
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
toString() {
|
|
58
|
-
return this.token.toString();
|
|
59
|
-
}
|
|
60
15
|
}
|
|
61
16
|
exports.SingleAliasToken = SingleAliasToken;
|
|
62
17
|
const toSingleAlias = (token) => new SingleAliasToken(token);
|
package/cjm/token/SingleToken.js
CHANGED
|
@@ -1,61 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SingleToken = void 0;
|
|
4
|
-
const
|
|
5
|
-
class SingleToken extends
|
|
6
|
-
token;
|
|
7
|
-
_getArgsFn;
|
|
8
|
-
_isLazy;
|
|
9
|
-
constructor(token, { getArgsFn = InjectionToken_1.forwardArgs, isLazy = false, tags = [], } = {}) {
|
|
10
|
-
super(tags);
|
|
11
|
-
this.token = token;
|
|
12
|
-
this._getArgsFn = getArgsFn;
|
|
13
|
-
this._isLazy = isLazy;
|
|
14
|
-
}
|
|
4
|
+
const BindableToken_1 = require("./BindableToken");
|
|
5
|
+
class SingleToken extends BindableToken_1.BindableToken {
|
|
15
6
|
select(fn) {
|
|
16
7
|
return (s) => fn(this.resolve(s));
|
|
17
8
|
}
|
|
18
|
-
resolve(s,
|
|
19
|
-
return s.resolve(this.token,
|
|
20
|
-
args: this._getArgsFn({ scope: s, args }),
|
|
21
|
-
lazy: this._isLazy || lazy,
|
|
22
|
-
});
|
|
9
|
+
resolve(s, options) {
|
|
10
|
+
return s.resolve(this.token, this.toResolveOptions(s, options));
|
|
23
11
|
}
|
|
24
|
-
|
|
12
|
+
bindKey(r) {
|
|
25
13
|
r.bindToKey(this.token);
|
|
26
14
|
}
|
|
27
|
-
args(...newArgs) {
|
|
28
|
-
const parentFn = this._getArgsFn;
|
|
29
|
-
return new SingleToken(this.token, {
|
|
30
|
-
getArgsFn: (options) => [...parentFn(options), ...newArgs],
|
|
31
|
-
isLazy: this._isLazy,
|
|
32
|
-
tags: this.getTags(),
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
argsFn(fn) {
|
|
36
|
-
const parentFn = this._getArgsFn;
|
|
37
|
-
return new SingleToken(this.token, {
|
|
38
|
-
getArgsFn: (options) => [...parentFn(options), ...fn(options.scope)],
|
|
39
|
-
isLazy: this._isLazy,
|
|
40
|
-
tags: this.getTags(),
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
lazy() {
|
|
44
|
-
return new SingleToken(this.token, {
|
|
45
|
-
getArgsFn: this._getArgsFn,
|
|
46
|
-
isLazy: true,
|
|
47
|
-
tags: this.getTags(),
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
addTags(...tags) {
|
|
51
|
-
return new SingleToken(this.token, {
|
|
52
|
-
getArgsFn: this._getArgsFn,
|
|
53
|
-
isLazy: this._isLazy,
|
|
54
|
-
tags: [...this.getTags(), ...tags],
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
toString() {
|
|
58
|
-
return this.token.toString();
|
|
59
|
-
}
|
|
60
15
|
}
|
|
61
16
|
exports.SingleToken = SingleToken;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ToggleFeatureToken = void 0;
|
|
4
|
+
const MultiVariantFeatureToken_1 = require("./MultiVariantFeatureToken");
|
|
5
|
+
class ToggleFeatureToken extends MultiVariantFeatureToken_1.MultiVariantFeatureToken {
|
|
6
|
+
evaluate(flags, context) {
|
|
7
|
+
return { enabled: flags.isEnabled(this.flag, context) };
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.ToggleFeatureToken = ToggleFeatureToken;
|
package/cjm/token/toToken.js
CHANGED
|
@@ -22,7 +22,7 @@ const toToken = (token) => {
|
|
|
22
22
|
if (typeof token === 'function') {
|
|
23
23
|
return new FunctionToken_1.FunctionToken(token);
|
|
24
24
|
}
|
|
25
|
-
throw new UnsupportedTokenTypeError_1.UnsupportedTokenTypeError(`Unknown token ${token}
|
|
25
|
+
throw new UnsupportedTokenTypeError_1.UnsupportedTokenTypeError(`Unknown token ${token}: expected an InjectionToken, a DependencyKey (string | symbol), a class or a function.`);
|
|
26
26
|
};
|
|
27
27
|
exports.toToken = toToken;
|
|
28
28
|
const argToToken = (v) => ((0, InjectionToken_1.isInjectionToken)(v) ? v : new ConstantToken_1.ConstantToken(v));
|
package/cjm/utils/TypedEvent.js
CHANGED
|
@@ -29,7 +29,7 @@ class TypedEvent {
|
|
|
29
29
|
this.isDisposed = true;
|
|
30
30
|
}
|
|
31
31
|
validate() {
|
|
32
|
-
TypedEventDisposedError_1.TypedEventDisposedError.assert(!this.isDisposed, 'TypedEvent is already disposed');
|
|
32
|
+
TypedEventDisposedError_1.TypedEventDisposedError.assert(!this.isDisposed, 'TypedEvent is already disposed: its scope was disposed, so it accepts no new listeners.');
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
exports.TypedEvent = TypedEvent;
|
package/cjm/utils/array.js
CHANGED
|
@@ -11,7 +11,7 @@ exports.Filter = {
|
|
|
11
11
|
const findOrFail = (predicate) => (args = []) => {
|
|
12
12
|
const index = args.findIndex((arg) => predicate(arg));
|
|
13
13
|
if (index === -1) {
|
|
14
|
-
throw new ArgumentNotFoundError_1.ArgumentNotFoundError();
|
|
14
|
+
throw new ArgumentNotFoundError_1.ArgumentNotFoundError(`No argument matches the predicate (received ${args.length} args).`);
|
|
15
15
|
}
|
|
16
16
|
return args[index];
|
|
17
17
|
};
|
|
@@ -126,6 +126,9 @@ export class Container {
|
|
|
126
126
|
hasRegistration(key) {
|
|
127
127
|
return this.registrations.some((r) => r.getKeyOrFail() === key) || this.parent.hasRegistration(key);
|
|
128
128
|
}
|
|
129
|
+
hasAlias(alias) {
|
|
130
|
+
return this.aliases.getKeysByAlias(alias).length > 0 || this.parent.hasAlias(alias);
|
|
131
|
+
}
|
|
129
132
|
addInstance(instance) {
|
|
130
133
|
this.instances.add(instance);
|
|
131
134
|
}
|
|
@@ -161,12 +164,12 @@ export class Container {
|
|
|
161
164
|
}
|
|
162
165
|
validateContainer() {
|
|
163
166
|
if (this.isDisposed) {
|
|
164
|
-
throw new ContainerDisposedError('Container is already disposed');
|
|
167
|
+
throw new ContainerDisposedError('Container is already disposed: a scope cannot be used after dispose(). Create a new scope.');
|
|
165
168
|
}
|
|
166
169
|
}
|
|
167
170
|
findProviderByKeyOrFail(key) {
|
|
168
171
|
if (!this.providers.has(key)) {
|
|
169
|
-
throw new DependencyNotFoundError(`Provider ${key.toString()} does not exist
|
|
172
|
+
throw new DependencyNotFoundError(`Provider ${key.toString()} does not exist: an alias points at a key with no provider in this scope.`);
|
|
170
173
|
}
|
|
171
174
|
return this.providers.get(key);
|
|
172
175
|
}
|