ts-ioc-container 68.0.0 → 68.1.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/README.md +3 -0
- package/cjm/errors/ArgumentNotFoundError.js +12 -0
- package/cjm/index.js +7 -3
- package/cjm/utils/array.js +10 -1
- package/esm/errors/ArgumentNotFoundError.js +8 -0
- package/esm/index.js +2 -0
- package/esm/utils/array.js +8 -0
- package/package.json +1 -1
- package/typings/errors/ArgumentNotFoundError.d.ts +5 -0
- package/typings/index.d.ts +2 -0
- package/typings/utils/array.d.ts +2 -0
package/README.md
CHANGED
|
@@ -1792,6 +1792,8 @@ Constructor parameters that should pick up positional args from `ProviderOptions
|
|
|
1792
1792
|
|
|
1793
1793
|
`argsFn(predicate)` is the general form: it iterates the runtime `args` array and returns the **first argument matching** `predicate(value, index)` — think `args.find(predicate)`. `arg(index)` is just a shortcut for matching by position: `arg(0)` is `argsFn((value, index) => index === 0)`. `args` is `(scope, options) => options.args`, i.e. it returns the runtime args array as-is. Every `InjectFn` receives `(scope, options)`, where `options.args` is the runtime args array.
|
|
1794
1794
|
|
|
1795
|
+
`findOrFail(predicate)` is the strict, variadic counterpart for places that take the raw args list — `singleton(findOrFail(isUserId))` keys a per-argument singleton, for example. It returns the first argument matching `predicate(value)` and throws `ArgumentNotFoundError` when none does, instead of silently handing out `undefined`.
|
|
1796
|
+
|
|
1795
1797
|
### Immutable token chaining
|
|
1796
1798
|
|
|
1797
1799
|
`token.args(...)`, `token.argsFn(...)`, and `token.lazy()` all return **new token instances** — the parent token is never mutated. This allows the same token to be specialized in multiple independent ways (one-way linked list: parent → many children).
|
|
@@ -3398,3 +3400,4 @@ The product-facing error contract is described in
|
|
|
3398
3400
|
- [MethodNotImplementedError.ts](..%2F..%2Flib%2Ferrors%2FMethodNotImplementedError.ts)
|
|
3399
3401
|
- [DependencyMissingKeyError.ts](..%2F..%2Flib%2Ferrors%2FDependencyMissingKeyError.ts)
|
|
3400
3402
|
- [ContainerDisposedError.ts](..%2F..%2Flib%2Ferrors%2FContainerDisposedError.ts)
|
|
3403
|
+
- [ArgumentNotFoundError.ts](..%2F..%2Flib%2Ferrors%2FArgumentNotFoundError.ts)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ArgumentNotFoundError = void 0;
|
|
4
|
+
const ContainerError_1 = require("./ContainerError");
|
|
5
|
+
class ArgumentNotFoundError extends ContainerError_1.ContainerError {
|
|
6
|
+
name = 'ArgumentNotFoundError';
|
|
7
|
+
constructor(message = 'Argument not found') {
|
|
8
|
+
super(message);
|
|
9
|
+
Object.setPrototypeOf(this, ArgumentNotFoundError.prototype);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.ArgumentNotFoundError = ArgumentNotFoundError;
|
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.Is = exports.unwrapProxy = void 0;
|
|
3
|
+
exports.injectProp = exports.createHookExecutionContext = exports.createHookContextFactory = exports.HookContext = exports.toHookFn = exports.hasHooks = exports.hook = exports.getHooks = exports.ArgumentNotFoundError = exports.TypedEventDisposedError = exports.UnsupportedTokenTypeError = exports.CannonSingletonApplyTwiceError = 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.argsFn = exports.args = exports.arg = exports.inject = exports.MetadataInjector = exports.Injector = exports.EmptyContainer = exports.AutoResolveModule = exports.Container = exports.isDependencyKey = void 0;
|
|
4
|
+
exports.pipe = exports.select = exports.TypedEvent = exports.getConstructorChain = exports.memoize = exports.once = exports.shallowCache = exports.debounce = exports.throttle = exports.runAtOnce = exports.runInOrder = 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.resolveConstructor = exports.GroupInstanceToken = exports.ConstantToken = exports.FunctionToken = exports.SingleToken = exports.ClassToken = exports.toSingleAlias = exports.SingleAliasToken = exports.toGroupAlias = exports.GroupAliasToken = exports.argToToken = exports.toMappedToken = exports.toToken = exports.InjectionToken = exports.toTask = exports.HookCollector = exports.oncePerInstance = exports.parallel = exports.sequential = void 0;
|
|
5
|
+
exports.Is = exports.unwrapProxy = exports.ProxyRegistry = exports.findOrFail = 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");
|
|
@@ -65,6 +65,8 @@ var UnsupportedTokenTypeError_1 = require("./errors/UnsupportedTokenTypeError");
|
|
|
65
65
|
Object.defineProperty(exports, "UnsupportedTokenTypeError", { enumerable: true, get: function () { return UnsupportedTokenTypeError_1.UnsupportedTokenTypeError; } });
|
|
66
66
|
var TypedEventDisposedError_1 = require("./errors/TypedEventDisposedError");
|
|
67
67
|
Object.defineProperty(exports, "TypedEventDisposedError", { enumerable: true, get: function () { return TypedEventDisposedError_1.TypedEventDisposedError; } });
|
|
68
|
+
var ArgumentNotFoundError_1 = require("./errors/ArgumentNotFoundError");
|
|
69
|
+
Object.defineProperty(exports, "ArgumentNotFoundError", { enumerable: true, get: function () { return ArgumentNotFoundError_1.ArgumentNotFoundError; } });
|
|
68
70
|
var hook_1 = require("./hooks/hook");
|
|
69
71
|
Object.defineProperty(exports, "getHooks", { enumerable: true, get: function () { return hook_1.getHooks; } });
|
|
70
72
|
Object.defineProperty(exports, "hook", { enumerable: true, get: function () { return hook_1.hook; } });
|
|
@@ -152,6 +154,8 @@ var select_1 = require("./select");
|
|
|
152
154
|
Object.defineProperty(exports, "select", { enumerable: true, get: function () { return select_1.select; } });
|
|
153
155
|
var fp_1 = require("./utils/fp");
|
|
154
156
|
Object.defineProperty(exports, "pipe", { enumerable: true, get: function () { return fp_1.pipe; } });
|
|
157
|
+
var array_1 = require("./utils/array");
|
|
158
|
+
Object.defineProperty(exports, "findOrFail", { enumerable: true, get: function () { return array_1.findOrFail; } });
|
|
155
159
|
var ProxyRegistry_1 = require("./utils/ProxyRegistry");
|
|
156
160
|
Object.defineProperty(exports, "ProxyRegistry", { enumerable: true, get: function () { return ProxyRegistry_1.ProxyRegistry; } });
|
|
157
161
|
Object.defineProperty(exports, "unwrapProxy", { enumerable: true, get: function () { return ProxyRegistry_1.unwrapProxy; } });
|
package/cjm/utils/array.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Filter = void 0;
|
|
3
|
+
exports.findOrFail = exports.Filter = void 0;
|
|
4
|
+
const ArgumentNotFoundError_1 = require("../errors/ArgumentNotFoundError");
|
|
4
5
|
exports.Filter = {
|
|
5
6
|
exclude: (arr) => {
|
|
6
7
|
const excludeSet = arr instanceof Array ? new Set(arr) : arr;
|
|
7
8
|
return (v) => !excludeSet.has(v);
|
|
8
9
|
},
|
|
9
10
|
};
|
|
11
|
+
const findOrFail = (predicate) => (...args) => {
|
|
12
|
+
const index = args.findIndex((arg) => predicate(arg));
|
|
13
|
+
if (index === -1) {
|
|
14
|
+
throw new ArgumentNotFoundError_1.ArgumentNotFoundError();
|
|
15
|
+
}
|
|
16
|
+
return args[index];
|
|
17
|
+
};
|
|
18
|
+
exports.findOrFail = findOrFail;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ContainerError } from './ContainerError.js';
|
|
2
|
+
export class ArgumentNotFoundError extends ContainerError {
|
|
3
|
+
name = 'ArgumentNotFoundError';
|
|
4
|
+
constructor(message = 'Argument not found') {
|
|
5
|
+
super(message);
|
|
6
|
+
Object.setPrototypeOf(this, ArgumentNotFoundError.prototype);
|
|
7
|
+
}
|
|
8
|
+
}
|
package/esm/index.js
CHANGED
|
@@ -19,6 +19,7 @@ export { ProviderDisposedError } from './errors/ProviderDisposedError.js';
|
|
|
19
19
|
export { CannonSingletonApplyTwiceError } from './errors/CannonSingletonApplyTwiceError.js';
|
|
20
20
|
export { UnsupportedTokenTypeError } from './errors/UnsupportedTokenTypeError.js';
|
|
21
21
|
export { TypedEventDisposedError } from './errors/TypedEventDisposedError.js';
|
|
22
|
+
export { ArgumentNotFoundError } from './errors/ArgumentNotFoundError.js';
|
|
22
23
|
export { getHooks, hook, hasHooks, toHookFn, } from './hooks/hook.js';
|
|
23
24
|
export { HookContext, createHookContextFactory, createHookExecutionContext, } from './hooks/HookContext.js';
|
|
24
25
|
export { injectProp } from './hooks/injectProp.js';
|
|
@@ -48,5 +49,6 @@ export { getConstructorChain } from './utils/getConstructorChain.js';
|
|
|
48
49
|
export { TypedEvent } from './utils/TypedEvent.js';
|
|
49
50
|
export { select } from './select.js';
|
|
50
51
|
export { pipe } from './utils/fp.js';
|
|
52
|
+
export { findOrFail } from './utils/array.js';
|
|
51
53
|
export { ProxyRegistry, unwrapProxy } from './utils/ProxyRegistry.js';
|
|
52
54
|
export { Is } from './utils/basic.js';
|
package/esm/utils/array.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
import { ArgumentNotFoundError } from '../errors/ArgumentNotFoundError.js';
|
|
1
2
|
export const Filter = {
|
|
2
3
|
exclude: (arr) => {
|
|
3
4
|
const excludeSet = arr instanceof Array ? new Set(arr) : arr;
|
|
4
5
|
return (v) => !excludeSet.has(v);
|
|
5
6
|
},
|
|
6
7
|
};
|
|
8
|
+
export const findOrFail = (predicate) => (...args) => {
|
|
9
|
+
const index = args.findIndex((arg) => predicate(arg));
|
|
10
|
+
if (index === -1) {
|
|
11
|
+
throw new ArgumentNotFoundError();
|
|
12
|
+
}
|
|
13
|
+
return args[index];
|
|
14
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-ioc-container",
|
|
3
|
-
"version": "68.
|
|
3
|
+
"version": "68.1.0",
|
|
4
4
|
"description": "Fast, lightweight TypeScript dependency injection container with a clean API, scoped lifecycles, decorators, tokens, hooks, lazy injection, customizable providers, and no global container objects.",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
package/typings/index.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export { ProviderDisposedError } from './errors/ProviderDisposedError.js';
|
|
|
20
20
|
export { CannonSingletonApplyTwiceError } from './errors/CannonSingletonApplyTwiceError.js';
|
|
21
21
|
export { UnsupportedTokenTypeError } from './errors/UnsupportedTokenTypeError.js';
|
|
22
22
|
export { TypedEventDisposedError } from './errors/TypedEventDisposedError.js';
|
|
23
|
+
export { ArgumentNotFoundError } from './errors/ArgumentNotFoundError.js';
|
|
23
24
|
export { getHooks, hook, hasHooks, toHookFn, type HookFn, type HookClass, type HookType, type InjectFn, type HooksOfClass, } from './hooks/hook.js';
|
|
24
25
|
export { HookContext, createHookContextFactory, createHookExecutionContext, type CreateHookExecutionContext, type IHookContext, } from './hooks/HookContext.js';
|
|
25
26
|
export { injectProp } from './hooks/injectProp.js';
|
|
@@ -50,5 +51,6 @@ export { TypedEvent, type ITypedEvent, type TypedEventListener, type Unsubscribe
|
|
|
50
51
|
export { type ExecutionContext } from './ExecutionContext.js';
|
|
51
52
|
export { select } from './select.js';
|
|
52
53
|
export { pipe, type MapFn } from './utils/fp.js';
|
|
54
|
+
export { findOrFail, type Predicate } from './utils/array.js';
|
|
53
55
|
export { ProxyRegistry, unwrapProxy, type IProxyRegistry } from './utils/ProxyRegistry.js';
|
|
54
56
|
export { type Branded, type constructor, type Instance, Is } from './utils/basic.js';
|
package/typings/utils/array.d.ts
CHANGED