ts-ioc-container 31.2.0 → 31.2.1
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 +4 -5
- package/cjm/index.js +2 -1
- package/cjm/provider/IProvider.js +7 -1
- package/cjm/provider/Provider.js +3 -1
- package/esm/index.js +1 -1
- package/esm/provider/IProvider.js +4 -0
- package/esm/provider/Provider.js +3 -1
- package/package.json +2 -2
- package/typings/index.d.ts +1 -1
- package/typings/provider/IProvider.d.ts +3 -1
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
- [Metadata](#metadata) `@inject`
|
|
30
30
|
- [Simple](#simple)
|
|
31
31
|
- [Proxy](#proxy)
|
|
32
|
-
- [Provider](#provider)
|
|
32
|
+
- [Provider](#provider)
|
|
33
33
|
- [Singleton](#singleton) `singleton`
|
|
34
34
|
- [Arguments](#arguments) `args`
|
|
35
35
|
- [Visibility](#visibility) `visible`
|
|
@@ -387,7 +387,6 @@ describe('ProxyInjector', function () {
|
|
|
387
387
|
## Provider
|
|
388
388
|
Provider is dependency factory which creates dependency.
|
|
389
389
|
|
|
390
|
-
- `provider()`
|
|
391
390
|
- `Provider.fromClass(Logger)`
|
|
392
391
|
- `Provider.fromValue(logger)`
|
|
393
392
|
- `new Provider((container, ...args) => container.resolve(Logger, {args}))`
|
|
@@ -472,8 +471,8 @@ describe('Singleton', function () {
|
|
|
472
471
|
|
|
473
472
|
### Arguments
|
|
474
473
|
Sometimes you want to bind some arguments to provider. This is what `ArgsProvider` is for.
|
|
475
|
-
- `
|
|
476
|
-
- `
|
|
474
|
+
- `args('someArgument')`
|
|
475
|
+
- `argsFn((container) => [container.resolve(Logger), 'someValue'])`
|
|
477
476
|
- `Provider.fromClass(Logger).pipe(args('someArgument'))`
|
|
478
477
|
- NOTICE: args from this provider has higher priority than args from `resolve` method.
|
|
479
478
|
|
|
@@ -522,7 +521,7 @@ describe('ArgsProvider', function () {
|
|
|
522
521
|
|
|
523
522
|
### Visibility
|
|
524
523
|
Sometimes you want to hide dependency if somebody wants to resolve it from certain scope
|
|
525
|
-
- `
|
|
524
|
+
- `visible(({ isParent, child }) => isParent || child.hasTag('root'))` - dependency will be accessible from scope `root` or from scope where it's registered
|
|
526
525
|
- `Provider.fromClass(Logger).pipe(visible(({ isParent, child }) => isParent || child.hasTag('root')))`
|
|
527
526
|
|
|
528
527
|
```typescript
|
package/cjm/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getParameterMetadata = exports.getMethodMetadata = exports.setMethodMetadata = exports.setParameterMetadata = exports.getMetadata = exports.setMetadata = exports.by = exports.hasHooks = exports.hook = exports.getHooks = exports.ProxyInjector = exports.SimpleInjector = exports.inject = exports.MetadataInjector = exports.register = exports.scope = exports.alias = exports.key = exports.Registration = exports.AutoMockedContainer = exports.SingletonProvider = exports.singleton = exports.ArgsProvider = exports.args = exports.argsFn = exports.ProviderDecorator = exports.Provider = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.visible = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
|
|
3
|
+
exports.getParameterMetadata = exports.getMethodMetadata = exports.setMethodMetadata = exports.setParameterMetadata = exports.getMetadata = exports.setMetadata = exports.by = exports.hasHooks = exports.hook = exports.getHooks = exports.ProxyInjector = exports.SimpleInjector = exports.inject = exports.MetadataInjector = exports.register = exports.scope = exports.alias = exports.key = exports.Registration = exports.AutoMockedContainer = exports.SingletonProvider = exports.singleton = exports.ArgsProvider = exports.args = exports.argsFn = exports.ProviderDecorator = exports.Provider = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.provider = exports.visible = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
|
|
4
4
|
var IContainer_1 = require("./container/IContainer");
|
|
5
5
|
Object.defineProperty(exports, "isDependencyKey", { enumerable: true, get: function () { return IContainer_1.isDependencyKey; } });
|
|
6
6
|
var Container_1 = require("./container/Container");
|
|
@@ -9,6 +9,7 @@ var EmptyContainer_1 = require("./container/EmptyContainer");
|
|
|
9
9
|
Object.defineProperty(exports, "EmptyContainer", { enumerable: true, get: function () { return EmptyContainer_1.EmptyContainer; } });
|
|
10
10
|
var IProvider_1 = require("./provider/IProvider");
|
|
11
11
|
Object.defineProperty(exports, "visible", { enumerable: true, get: function () { return IProvider_1.visible; } });
|
|
12
|
+
Object.defineProperty(exports, "provider", { enumerable: true, get: function () { return IProvider_1.provider; } });
|
|
12
13
|
var DependencyNotFoundError_1 = require("./errors/DependencyNotFoundError");
|
|
13
14
|
Object.defineProperty(exports, "DependencyNotFoundError", { enumerable: true, get: function () { return DependencyNotFoundError_1.DependencyNotFoundError; } });
|
|
14
15
|
var MethodNotImplementedError_1 = require("./errors/MethodNotImplementedError");
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.visible = exports.isProviderMapper = exports.markAsProvider = void 0;
|
|
3
|
+
exports.visible = exports.isProviderMapper = exports.markAsProvider = exports.getTransformers = exports.provider = void 0;
|
|
4
|
+
const metadata_1 = require("../metadata");
|
|
5
|
+
const METADATA_KEY = 'provider';
|
|
6
|
+
const provider = (...mappers) => (0, metadata_1.setMetadata)(METADATA_KEY, mappers);
|
|
7
|
+
exports.provider = provider;
|
|
8
|
+
const getTransformers = (Target) => (0, metadata_1.getMetadata)(Target, METADATA_KEY) ?? [];
|
|
9
|
+
exports.getTransformers = getTransformers;
|
|
4
10
|
const markAsProvider = (fn) => {
|
|
5
11
|
// @ts-ignore
|
|
6
12
|
fn.__provider = true;
|
package/cjm/provider/Provider.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Provider = void 0;
|
|
4
|
+
const IProvider_1 = require("./IProvider");
|
|
4
5
|
const utils_1 = require("../utils");
|
|
5
6
|
class Provider {
|
|
6
7
|
static fromClass(Target) {
|
|
7
|
-
|
|
8
|
+
const transformers = (0, IProvider_1.getTransformers)(Target);
|
|
9
|
+
return new Provider((container, ...args) => container.resolve(Target, { args })).pipe(...transformers);
|
|
8
10
|
}
|
|
9
11
|
static fromValue(value) {
|
|
10
12
|
return new Provider(() => value);
|
package/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { isDependencyKey, } from './container/IContainer';
|
|
2
2
|
export { Container } from './container/Container';
|
|
3
3
|
export { EmptyContainer } from './container/EmptyContainer';
|
|
4
|
-
export { visible } from './provider/IProvider';
|
|
4
|
+
export { visible, provider } from './provider/IProvider';
|
|
5
5
|
export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
|
|
6
6
|
export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
|
|
7
7
|
export { ContainerDisposedError } from './errors/ContainerDisposedError';
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { getMetadata, setMetadata } from '../metadata';
|
|
2
|
+
const METADATA_KEY = 'provider';
|
|
3
|
+
export const provider = (...mappers) => setMetadata(METADATA_KEY, mappers);
|
|
4
|
+
export const getTransformers = (Target) => getMetadata(Target, METADATA_KEY) ?? [];
|
|
1
5
|
export const markAsProvider = (fn) => {
|
|
2
6
|
// @ts-ignore
|
|
3
7
|
fn.__provider = true;
|
package/esm/provider/Provider.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { getTransformers } from './IProvider';
|
|
1
2
|
import { pipe } from '../utils';
|
|
2
3
|
export class Provider {
|
|
3
4
|
static fromClass(Target) {
|
|
4
|
-
|
|
5
|
+
const transformers = getTransformers(Target);
|
|
6
|
+
return new Provider((container, ...args) => container.resolve(Target, { args })).pipe(...transformers);
|
|
5
7
|
}
|
|
6
8
|
static fromValue(value) {
|
|
7
9
|
return new Provider(() => value);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-ioc-container",
|
|
3
|
-
"version": "31.2.
|
|
3
|
+
"version": "31.2.1",
|
|
4
4
|
"description": "Typescript IoC container",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"ts-node": "^10.9.1",
|
|
60
60
|
"typescript": "5.4.3"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "eee110d8f86784f5fae9cdecd5672cb00e440afe"
|
|
63
63
|
}
|
package/typings/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { IContainer, Resolvable, IContainerModule, isDependencyKey, DependencyKe
|
|
|
2
2
|
export { constructor } from './utils';
|
|
3
3
|
export { Container } from './container/Container';
|
|
4
4
|
export { EmptyContainer } from './container/EmptyContainer';
|
|
5
|
-
export { ResolveDependency, IProvider, visible } from './provider/IProvider';
|
|
5
|
+
export { ResolveDependency, IProvider, visible, provider } from './provider/IProvider';
|
|
6
6
|
export { IInjector } from './injector/IInjector';
|
|
7
7
|
export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
|
|
8
8
|
export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IContainer, Tagged } from '../container/IContainer';
|
|
2
|
-
import { MapFn } from '../utils';
|
|
2
|
+
import { constructor, MapFn } from '../utils';
|
|
3
3
|
export type ResolveDependency<T = unknown> = (container: IContainer, ...args: unknown[]) => T;
|
|
4
4
|
export type ChildrenVisibilityPredicate = (options: {
|
|
5
5
|
child: Tagged;
|
|
@@ -11,6 +11,8 @@ export interface IProvider<T = unknown> {
|
|
|
11
11
|
pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
|
|
12
12
|
setVisibility(isVisibleWhen: ChildrenVisibilityPredicate): this;
|
|
13
13
|
}
|
|
14
|
+
export declare const provider: (...mappers: MapFn<IProvider>[]) => ClassDecorator;
|
|
15
|
+
export declare const getTransformers: <T>(Target: constructor<T>) => MapFn<IProvider<T>>[];
|
|
14
16
|
export declare const markAsProvider: <T>(fn: MapFn<IProvider<T>>) => MapFn<IProvider<T>>;
|
|
15
17
|
export declare const isProviderMapper: <T>(fn: unknown) => fn is MapFn<IProvider<T>>;
|
|
16
18
|
export declare const visible: (isVisibleWhen: ChildrenVisibilityPredicate) => MapFn<IProvider>;
|