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 CHANGED
@@ -29,7 +29,7 @@
29
29
  - [Metadata](#metadata) `@inject`
30
30
  - [Simple](#simple)
31
31
  - [Proxy](#proxy)
32
- - [Provider](#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
- - `provider(args('someArgument'))`
476
- - `provider(argsFn((container) => [container.resolve(Logger), 'someValue']))`
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
- - `provider(visible(({ isParent, child }) => isParent || child.hasTag('root')))` - dependency will be accessible from scope `root` or from scope where it's registered
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;
@@ -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
- return new Provider((container, ...args) => container.resolve(Target, { args }));
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;
@@ -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
- return new Provider((container, ...args) => container.resolve(Target, { args }));
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.0",
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": "413dab1be8437542591bc234002125f237b9e7f8"
62
+ "gitHead": "eee110d8f86784f5fae9cdecd5672cb00e440afe"
63
63
  }
@@ -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>;