ts-ioc-container 31.2.2 → 31.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/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) `@provider`
33
33
  - [Singleton](#singleton) `singleton`
34
34
  - [Arguments](#arguments) `args`
35
35
  - [Visibility](#visibility) `visible`
@@ -138,6 +138,7 @@ import {
138
138
  Container,
139
139
  DependencyNotFoundError,
140
140
  key,
141
+ provider,
141
142
  MetadataInjector,
142
143
  Registration as R,
143
144
  by,
@@ -145,7 +146,8 @@ import {
145
146
  register,
146
147
  } from 'ts-ioc-container';
147
148
 
148
- @register(key('ILogger'), scope((s) => s.hasTag('child')), singleton())
149
+ @register(key('ILogger'), scope((s) => s.hasTag('child')))
150
+ @provider(singleton())
149
151
  class Logger {}
150
152
 
151
153
  describe('Scopes', function () {
@@ -330,7 +332,7 @@ This type of injector injects dependencies as dictionary `Record<string, unknown
330
332
 
331
333
  ```typescript
332
334
  import 'reflect-metadata';
333
- import { args, Container, ProxyInjector, Registration as R } from 'ts-ioc-container';
335
+ import { Container, ProxyInjector, args, Registration as R } from 'ts-ioc-container';
334
336
 
335
337
  describe('ProxyInjector', function () {
336
338
  it('should pass dependency to constructor as dictionary', function () {
@@ -387,6 +389,7 @@ describe('ProxyInjector', function () {
387
389
  ## Provider
388
390
  Provider is dependency factory which creates dependency.
389
391
 
392
+ - `@provider()`
390
393
  - `Provider.fromClass(Logger)`
391
394
  - `Provider.fromValue(logger)`
392
395
  - `new Provider((container, ...args) => container.resolve(Logger, {args}))`
@@ -436,9 +439,10 @@ Sometimes you need to create only one instance of dependency per scope. For exam
436
439
 
437
440
  ```typescript
438
441
  import 'reflect-metadata';
439
- import { singleton, Container, key, MetadataInjector, Registration as R, register } from 'ts-ioc-container';
442
+ import { singleton, Container, key, provider, MetadataInjector, Registration as R, register } from 'ts-ioc-container';
440
443
 
441
- @register(key('logger'), singleton())
444
+ @register(key('logger'))
445
+ @provider(singleton())
442
446
  class Logger {}
443
447
 
444
448
  describe('Singleton', function () {
@@ -471,14 +475,14 @@ describe('Singleton', function () {
471
475
 
472
476
  ### Arguments
473
477
  Sometimes you want to bind some arguments to provider. This is what `ArgsProvider` is for.
474
- - `args('someArgument')`
475
- - `argsFn((container) => [container.resolve(Logger), 'someValue'])`
478
+ - `@provider(args('someArgument'))`
479
+ - `@provider(argsFn((container) => [container.resolve(Logger), 'someValue']))`
476
480
  - `Provider.fromClass(Logger).pipe(args('someArgument'))`
477
481
  - NOTICE: args from this provider has higher priority than args from `resolve` method.
478
482
 
479
483
  ```typescript
480
484
  import 'reflect-metadata';
481
- import { args, argsFn, Container, key, MetadataInjector, register, Registration as R } from 'ts-ioc-container';
485
+ import { Container, key, argsFn, args, MetadataInjector, Registration as R, register } from 'ts-ioc-container';
482
486
 
483
487
  @register(key('logger'))
484
488
  class Logger {
@@ -521,7 +525,7 @@ describe('ArgsProvider', function () {
521
525
 
522
526
  ### Visibility
523
527
  Sometimes you want to hide dependency if somebody wants to resolve it from certain scope
524
- - `visible(({ isParent, child }) => isParent || child.hasTag('root'))` - dependency will be accessible from scope `root` or from scope where it's registered
528
+ - `@provider(visible(({ isParent, child }) => isParent || child.hasTag('root')))` - dependency will be accessible from scope `root` or from scope where it's registered
525
529
  - `Provider.fromClass(Logger).pipe(visible(({ isParent, child }) => isParent || child.hasTag('root')))`
526
530
 
527
531
  ```typescript
@@ -531,6 +535,7 @@ import {
531
535
  DependencyNotFoundError,
532
536
  key,
533
537
  MetadataInjector,
538
+ provider,
534
539
  register,
535
540
  Registration as R,
536
541
  scope,
@@ -540,7 +545,8 @@ import {
540
545
 
541
546
  describe('Visibility', function () {
542
547
  it('should hide from children', () => {
543
- @register(key('logger'), scope((s) => s.hasTag('root')), singleton(), visible(({ isParent }) => isParent))
548
+ @register(key('logger'), scope((s) => s.hasTag('root')))
549
+ @provider(singleton(), visible(({ isParent }) => isParent))
544
550
  class FileLogger {}
545
551
 
546
552
  const parent = new Container(new MetadataInjector(), { tags: ['root'] }).add(R.fromClass(FileLogger));
@@ -564,14 +570,15 @@ Registration is provider factory which registers provider in container.
564
570
 
565
571
  ```typescript
566
572
  import 'reflect-metadata';
567
- import { Container, key, MetadataInjector, register, Registration as R, scope, singleton } from 'ts-ioc-container';
573
+ import { Container, key, MetadataInjector, provider, register, Registration as R, scope, singleton } from 'ts-ioc-container';
568
574
  import { DependencyMissingKeyError } from '../../lib/errors/DependencyMissingKeyError';
569
575
 
570
576
  describe('Registration module', function () {
571
577
  const createContainer = () => new Container(new MetadataInjector(), { tags: ['root'] });
572
578
 
573
579
  it('should register class', function () {
574
- @register(key('ILogger'), scope((s) => s.hasTag('root')), singleton())
580
+ @register(key('ILogger'), scope((s) => s.hasTag('root')))
581
+ @provider(singleton())
575
582
  class Logger {}
576
583
 
577
584
  const root = createContainer().add(R.fromClass(Logger));
@@ -615,9 +622,10 @@ Sometimes you need to register provider only in scope which matches to certain c
615
622
 
616
623
  ```typescript
617
624
  import 'reflect-metadata';
618
- import { singleton, Container, key, MetadataInjector, Registration as R, scope, register } from 'ts-ioc-container';
625
+ import { singleton, Container, key, provider, MetadataInjector, Registration as R, scope, register } from 'ts-ioc-container';
619
626
 
620
- @register(key('ILogger'), scope((s) => s.hasTag('root')), singleton()) // the same as .pipe(singleton(), scope((s) => s.hasTag('root')))
627
+ @register(key('ILogger'), scope((s) => s.hasTag('root')))
628
+ @provider(singleton()) // the same as .pipe(singleton(), scope((s) => s.hasTag('root')))
621
629
  class Logger {}
622
630
  describe('ScopeProvider', function () {
623
631
  it('should return the same instance', function () {
@@ -832,19 +840,22 @@ describe('onConstruct', function () {
832
840
  ```typescript
833
841
  import 'reflect-metadata';
834
842
  import {
843
+ singleton,
835
844
  by,
836
845
  Container,
846
+ key,
837
847
  getHooks,
838
848
  hook,
839
849
  inject,
840
- key,
850
+ provider,
851
+ Registration as R,
841
852
  MetadataInjector,
842
853
  register,
843
- Registration as R,
844
- singleton,
845
854
  } from 'ts-ioc-container';
855
+ import * as console from 'node:console';
846
856
 
847
- @register(key('logsRepo'), singleton())
857
+ @register(key('logsRepo'))
858
+ @provider(singleton())
848
859
  class LogsRepo {
849
860
  savedLogs: string[] = [];
850
861
 
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.markAsProvider = exports.provider = 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.visible = exports.provider = 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");
@@ -8,9 +8,8 @@ Object.defineProperty(exports, "Container", { enumerable: true, get: function ()
8
8
  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
- Object.defineProperty(exports, "visible", { enumerable: true, get: function () { return IProvider_1.visible; } });
12
11
  Object.defineProperty(exports, "provider", { enumerable: true, get: function () { return IProvider_1.provider; } });
13
- Object.defineProperty(exports, "markAsProvider", { enumerable: true, get: function () { return IProvider_1.markAsProvider; } });
12
+ Object.defineProperty(exports, "visible", { enumerable: true, get: function () { return IProvider_1.visible; } });
14
13
  var DependencyNotFoundError_1 = require("./errors/DependencyNotFoundError");
15
14
  Object.defineProperty(exports, "DependencyNotFoundError", { enumerable: true, get: function () { return DependencyNotFoundError_1.DependencyNotFoundError; } });
16
15
  var MethodNotImplementedError_1 = require("./errors/MethodNotImplementedError");
@@ -2,13 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ArgsProvider = exports.argsFn = exports.args = void 0;
4
4
  const ProviderDecorator_1 = require("./ProviderDecorator");
5
- const IProvider_1 = require("./IProvider");
6
5
  function args(...extraArgs) {
7
- return (0, IProvider_1.markAsProvider)((provider) => new ArgsProvider(provider, () => extraArgs));
6
+ return (provider) => new ArgsProvider(provider, () => extraArgs);
8
7
  }
9
8
  exports.args = args;
10
9
  function argsFn(value) {
11
- return (0, IProvider_1.markAsProvider)((provider) => new ArgsProvider(provider, value));
10
+ return (provider) => new ArgsProvider(provider, value);
12
11
  }
13
12
  exports.argsFn = argsFn;
14
13
  class ArgsProvider extends ProviderDecorator_1.ProviderDecorator {
@@ -1,22 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.visible = exports.isProviderMapper = exports.markAsProvider = exports.getTransformers = exports.provider = void 0;
3
+ exports.visible = exports.getTransformers = exports.provider = void 0;
4
4
  const metadata_1 = require("../metadata");
5
5
  const METADATA_KEY = 'provider';
6
6
  const provider = (...mappers) => (0, metadata_1.setMetadata)(METADATA_KEY, mappers);
7
7
  exports.provider = provider;
8
8
  const getTransformers = (Target) => (0, metadata_1.getMetadata)(Target, METADATA_KEY) ?? [];
9
9
  exports.getTransformers = getTransformers;
10
- const markAsProvider = (fn) => {
11
- // @ts-ignore
12
- fn.__provider = true;
13
- return fn;
14
- };
15
- exports.markAsProvider = markAsProvider;
16
- const isProviderMapper = (fn) => {
17
- // @ts-ignore
18
- return fn.__provider === true;
19
- };
20
- exports.isProviderMapper = isProviderMapper;
21
- const visible = (isVisibleWhen) => (0, exports.markAsProvider)((p) => p.setVisibility(isVisibleWhen));
10
+ const visible = (isVisibleWhen) => (p) => p.setVisibility(isVisibleWhen);
22
11
  exports.visible = visible;
@@ -9,7 +9,8 @@ class Provider {
9
9
  return new Provider((container, ...args) => container.resolve(Target, { args })).pipe(...transformers);
10
10
  }
11
11
  static fromValue(value) {
12
- return new Provider(() => value);
12
+ const mappers = (0, utils_1.isConstructor)(value) ? (0, IProvider_1.getTransformers)(value) ?? [] : [];
13
+ return new Provider(() => value).pipe(...mappers);
13
14
  }
14
15
  constructor(resolveDependency, isVisibleWhen = () => true) {
15
16
  this.resolveDependency = resolveDependency;
@@ -2,9 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SingletonProvider = exports.singleton = void 0;
4
4
  const ProviderDecorator_1 = require("./ProviderDecorator");
5
- const IProvider_1 = require("./IProvider");
6
5
  function singleton() {
7
- return (0, IProvider_1.markAsProvider)((provider) => new SingletonProvider(provider));
6
+ return (provider) => new SingletonProvider(provider);
8
7
  }
9
8
  exports.singleton = singleton;
10
9
  class SingletonProvider extends ProviderDecorator_1.ProviderDecorator {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.provider = exports.register = exports.getTransformers = exports.scope = exports.alias = exports.key = void 0;
3
+ exports.register = exports.getTransformers = exports.scope = exports.alias = exports.key = void 0;
4
4
  const metadata_1 = require("../metadata");
5
5
  const key = (key) => (r) => r.to(key);
6
6
  exports.key = key;
@@ -13,5 +13,3 @@ const getTransformers = (Target) => (0, metadata_1.getMetadata)(Target, METADATA
13
13
  exports.getTransformers = getTransformers;
14
14
  const register = (...mappers) => (0, metadata_1.setMetadata)(METADATA_KEY, mappers);
15
15
  exports.register = register;
16
- const provider = (...mappers) => (r) => r.provider(...mappers);
17
- exports.provider = provider;
@@ -3,25 +3,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Registration = void 0;
4
4
  const utils_1 = require("../utils");
5
5
  const Provider_1 = require("../provider/Provider");
6
- const IProvider_1 = require("../provider/IProvider");
7
6
  const DependencyMissingKeyError_1 = require("../errors/DependencyMissingKeyError");
8
7
  const IRegistration_1 = require("./IRegistration");
9
8
  class Registration {
10
9
  static fromClass(Target) {
11
- return new Registration(() => Provider_1.Provider.fromClass(Target), Target.name).pipe(...(0, IRegistration_1.getTransformers)(Target));
10
+ const transform = (0, utils_1.pipe)(...(0, IRegistration_1.getTransformers)(Target));
11
+ return transform(new Registration(() => Provider_1.Provider.fromClass(Target), Target.name));
12
12
  }
13
13
  static fromValue(value) {
14
+ if ((0, utils_1.isConstructor)(value)) {
15
+ const transform = (0, utils_1.pipe)(...(0, IRegistration_1.getTransformers)(value));
16
+ return transform(new Registration(() => Provider_1.Provider.fromValue(value), value.name));
17
+ }
14
18
  return new Registration(() => Provider_1.Provider.fromValue(value));
15
19
  }
16
20
  static fromFn(fn) {
17
21
  return new Registration(() => new Provider_1.Provider(fn));
18
22
  }
19
- constructor(createProvider, key) {
23
+ constructor(createProvider, key, matchScope = () => true) {
20
24
  this.createProvider = createProvider;
21
25
  this.key = key;
26
+ this.matchScope = matchScope;
22
27
  this.aliases = [];
23
28
  this.mappers = [];
24
- this.matchScope = () => true;
25
29
  }
26
30
  to(key) {
27
31
  this.key = key;
@@ -34,11 +38,6 @@ class Registration {
34
38
  return this;
35
39
  }
36
40
  pipe(...mappers) {
37
- const [providerMappers, registrationMappers] = (0, utils_1.groupBy)(mappers, IProvider_1.isProviderMapper);
38
- this.mappers.push(...providerMappers);
39
- return (0, utils_1.pipe)(...registrationMappers)(this);
40
- }
41
- provider(...mappers) {
42
41
  this.mappers.push(...mappers);
43
42
  return this;
44
43
  }
package/cjm/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.groupBy = exports.isConstructor = exports.constant = exports.fillEmptyIndexes = exports.pipe = void 0;
3
+ exports.isConstructor = exports.constant = exports.fillEmptyIndexes = exports.pipe = void 0;
4
4
  const pipe = (...mappers) => (value) => mappers.reduce((acc, current) => current(acc), value);
5
5
  exports.pipe = pipe;
6
6
  function fillEmptyIndexes(baseArr, insertArr) {
@@ -18,13 +18,3 @@ const constant = (value) => () => value;
18
18
  exports.constant = constant;
19
19
  const isConstructor = (T) => typeof T === 'function' && !!T.prototype;
20
20
  exports.isConstructor = isConstructor;
21
- function groupBy(items, predicate) {
22
- const [a, b] = items.reduce(([a, b], item) => {
23
- if (predicate(item)) {
24
- return [a.concat(item), b];
25
- }
26
- return [a, b.concat(item)];
27
- }, [[], []]);
28
- return [a, b];
29
- }
30
- exports.groupBy = groupBy;
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, provider, markAsProvider } from './provider/IProvider';
4
+ export { provider, visible } 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,10 +1,9 @@
1
1
  import { ProviderDecorator } from './ProviderDecorator';
2
- import { markAsProvider } from './IProvider';
3
2
  export function args(...extraArgs) {
4
- return markAsProvider((provider) => new ArgsProvider(provider, () => extraArgs));
3
+ return (provider) => new ArgsProvider(provider, () => extraArgs);
5
4
  }
6
5
  export function argsFn(value) {
7
- return markAsProvider((provider) => new ArgsProvider(provider, value));
6
+ return (provider) => new ArgsProvider(provider, value);
8
7
  }
9
8
  export class ArgsProvider extends ProviderDecorator {
10
9
  constructor(provider, argsFn) {
@@ -2,13 +2,4 @@ import { getMetadata, setMetadata } from '../metadata';
2
2
  const METADATA_KEY = 'provider';
3
3
  export const provider = (...mappers) => setMetadata(METADATA_KEY, mappers);
4
4
  export const getTransformers = (Target) => getMetadata(Target, METADATA_KEY) ?? [];
5
- export const markAsProvider = (fn) => {
6
- // @ts-ignore
7
- fn.__provider = true;
8
- return fn;
9
- };
10
- export const isProviderMapper = (fn) => {
11
- // @ts-ignore
12
- return fn.__provider === true;
13
- };
14
- export const visible = (isVisibleWhen) => markAsProvider((p) => p.setVisibility(isVisibleWhen));
5
+ export const visible = (isVisibleWhen) => (p) => p.setVisibility(isVisibleWhen);
@@ -1,12 +1,13 @@
1
1
  import { getTransformers } from './IProvider';
2
- import { pipe } from '../utils';
2
+ import { isConstructor, pipe } from '../utils';
3
3
  export class Provider {
4
4
  static fromClass(Target) {
5
5
  const transformers = getTransformers(Target);
6
6
  return new Provider((container, ...args) => container.resolve(Target, { args })).pipe(...transformers);
7
7
  }
8
8
  static fromValue(value) {
9
- return new Provider(() => value);
9
+ const mappers = isConstructor(value) ? getTransformers(value) ?? [] : [];
10
+ return new Provider(() => value).pipe(...mappers);
10
11
  }
11
12
  constructor(resolveDependency, isVisibleWhen = () => true) {
12
13
  this.resolveDependency = resolveDependency;
@@ -1,7 +1,6 @@
1
1
  import { ProviderDecorator } from './ProviderDecorator';
2
- import { markAsProvider } from './IProvider';
3
2
  export function singleton() {
4
- return markAsProvider((provider) => new SingletonProvider(provider));
3
+ return (provider) => new SingletonProvider(provider);
5
4
  }
6
5
  export class SingletonProvider extends ProviderDecorator {
7
6
  constructor(provider) {
@@ -5,4 +5,3 @@ export const scope = (predicate) => (r) => r.when(predicate);
5
5
  const METADATA_KEY = 'registration';
6
6
  export const getTransformers = (Target) => getMetadata(Target, METADATA_KEY) ?? [];
7
7
  export const register = (...mappers) => setMetadata(METADATA_KEY, mappers);
8
- export const provider = (...mappers) => (r) => r.provider(...mappers);
@@ -1,24 +1,28 @@
1
- import { groupBy, pipe } from '../utils';
1
+ import { isConstructor, pipe } from '../utils';
2
2
  import { Provider } from '../provider/Provider';
3
- import { isProviderMapper } from '../provider/IProvider';
4
3
  import { DependencyMissingKeyError } from '../errors/DependencyMissingKeyError';
5
4
  import { getTransformers } from './IRegistration';
6
5
  export class Registration {
7
6
  static fromClass(Target) {
8
- return new Registration(() => Provider.fromClass(Target), Target.name).pipe(...getTransformers(Target));
7
+ const transform = pipe(...getTransformers(Target));
8
+ return transform(new Registration(() => Provider.fromClass(Target), Target.name));
9
9
  }
10
10
  static fromValue(value) {
11
+ if (isConstructor(value)) {
12
+ const transform = pipe(...getTransformers(value));
13
+ return transform(new Registration(() => Provider.fromValue(value), value.name));
14
+ }
11
15
  return new Registration(() => Provider.fromValue(value));
12
16
  }
13
17
  static fromFn(fn) {
14
18
  return new Registration(() => new Provider(fn));
15
19
  }
16
- constructor(createProvider, key) {
20
+ constructor(createProvider, key, matchScope = () => true) {
17
21
  this.createProvider = createProvider;
18
22
  this.key = key;
23
+ this.matchScope = matchScope;
19
24
  this.aliases = [];
20
25
  this.mappers = [];
21
- this.matchScope = () => true;
22
26
  }
23
27
  to(key) {
24
28
  this.key = key;
@@ -31,11 +35,6 @@ export class Registration {
31
35
  return this;
32
36
  }
33
37
  pipe(...mappers) {
34
- const [providerMappers, registrationMappers] = groupBy(mappers, isProviderMapper);
35
- this.mappers.push(...providerMappers);
36
- return pipe(...registrationMappers)(this);
37
- }
38
- provider(...mappers) {
39
38
  this.mappers.push(...mappers);
40
39
  return this;
41
40
  }
package/esm/utils.js CHANGED
@@ -11,12 +11,3 @@ export function fillEmptyIndexes(baseArr, insertArr) {
11
11
  }
12
12
  export const constant = (value) => () => value;
13
13
  export const isConstructor = (T) => typeof T === 'function' && !!T.prototype;
14
- export function groupBy(items, predicate) {
15
- const [a, b] = items.reduce(([a, b], item) => {
16
- if (predicate(item)) {
17
- return [a.concat(item), b];
18
- }
19
- return [a, b.concat(item)];
20
- }, [[], []]);
21
- return [a, b];
22
- }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-ioc-container",
3
- "version": "31.2.2",
3
+ "version": "31.3.0",
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": "c20921fb252b08d764f03504b01d54889c873324"
62
+ "gitHead": "868bc567109744dd58b00f6e3a26ed77539ef55c"
63
63
  }
@@ -16,7 +16,7 @@ export declare class Container implements IContainer {
16
16
  parent?: IContainer;
17
17
  tags?: Tag[];
18
18
  });
19
- add(registration: IRegistration<any>): this;
19
+ add(registration: IRegistration): this;
20
20
  register(key: DependencyKey, provider: IProvider, aliases?: Alias[]): this;
21
21
  resolve<T>(token: InjectionToken<T>, { args, child }?: ResolveOptions): T;
22
22
  createScope(...tags: Tag[]): Container;
@@ -25,7 +25,7 @@ export interface IContainer extends Resolvable, Tagged {
25
25
  readonly isDisposed: boolean;
26
26
  createScope(...tags: Tag[]): IContainer;
27
27
  register(key: DependencyKey, value: IProvider, aliases?: Alias[]): this;
28
- add(registration: IRegistration<any>): this;
28
+ add(registration: IRegistration): this;
29
29
  removeScope(child: IContainer): void;
30
30
  getInstances(): unknown[];
31
31
  dispose(): void;
@@ -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, provider, markAsProvider } from './provider/IProvider';
5
+ export { ResolveDependency, IProvider, provider, visible } from './provider/IProvider';
6
6
  export { IInjector } from './injector/IInjector';
7
7
  export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
8
8
  export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
@@ -13,6 +13,4 @@ export interface IProvider<T = unknown> {
13
13
  }
14
14
  export declare const provider: (...mappers: MapFn<IProvider>[]) => ClassDecorator;
15
15
  export declare const getTransformers: <T>(Target: constructor<T>) => MapFn<IProvider<T>>[];
16
- export declare const markAsProvider: <T>(fn: MapFn<IProvider<T>>) => MapFn<IProvider<T>>;
17
- export declare const isProviderMapper: <T>(fn: unknown) => fn is MapFn<IProvider<T>>;
18
16
  export declare const visible: (isVisibleWhen: ChildrenVisibilityPredicate) => MapFn<IProvider>;
@@ -6,12 +6,10 @@ export interface IRegistration<T = unknown> extends IContainerModule {
6
6
  addAliases(...aliases: Alias[]): this;
7
7
  when(isValidWhen: ScopePredicate): this;
8
8
  to(key: DependencyKey): this;
9
- pipe(...mappers: (MapFn<IRegistration<T>> | MapFn<IProvider<T>>)[]): IRegistration<T>;
10
- provider(...mappers: MapFn<IProvider<T>>[]): this;
9
+ pipe(...mappers: MapFn<IProvider<T>>[]): this;
11
10
  }
12
11
  export declare const key: (key: DependencyKey) => MapFn<IRegistration>;
13
12
  export declare const alias: (...aliases: Alias[]) => MapFn<IRegistration>;
14
13
  export declare const scope: (predicate: ScopePredicate) => MapFn<IRegistration>;
15
- export declare const getTransformers: <T>(Target: constructor<T>) => MapFn<IRegistration<T>>[];
16
- export declare const register: (...mappers: (MapFn<IRegistration> | MapFn<IProvider>)[]) => ClassDecorator;
17
- export declare const provider: (...mappers: MapFn<IProvider>[]) => MapFn<IRegistration>;
14
+ export declare const getTransformers: (Target: constructor<unknown>) => MapFn<IRegistration<unknown>>[];
15
+ export declare const register: (...mappers: MapFn<IRegistration>[]) => ClassDecorator;
@@ -5,17 +5,16 @@ import { IRegistration, ScopePredicate } from './IRegistration';
5
5
  export declare class Registration<T = unknown> implements IRegistration<T> {
6
6
  private createProvider;
7
7
  private key?;
8
- static fromClass<T>(Target: constructor<T>): IRegistration<T>;
9
- static fromValue<T>(value: T): Registration<T>;
8
+ private matchScope;
9
+ static fromClass<T>(Target: constructor<T>): IRegistration<unknown>;
10
+ static fromValue<T>(value: T): IRegistration<unknown>;
10
11
  static fromFn<T>(fn: ResolveDependency<T>): Registration<T>;
11
12
  private aliases;
12
13
  private mappers;
13
- private matchScope;
14
- constructor(createProvider: () => IProvider<T>, key?: DependencyKey | undefined);
14
+ constructor(createProvider: () => IProvider<T>, key?: DependencyKey | undefined, matchScope?: ScopePredicate);
15
15
  to(key: DependencyKey): this;
16
16
  addAliases(...aliases: Alias[]): this;
17
- pipe(...mappers: (MapFn<IRegistration<T>> | MapFn<IProvider<T>>)[]): IRegistration<T>;
18
- provider(...mappers: MapFn<IProvider<T>>[]): this;
17
+ pipe(...mappers: MapFn<IProvider<T>>[]): this;
19
18
  applyTo(container: IContainer): void;
20
19
  when(isValidWhen: ScopePredicate): this;
21
20
  }
@@ -4,4 +4,3 @@ export declare const pipe: <T>(...mappers: MapFn<T>[]) => MapFn<T>;
4
4
  export declare function fillEmptyIndexes<T>(baseArr: (T | undefined)[], insertArr: T[]): T[];
5
5
  export declare const constant: <T>(value: T) => () => T;
6
6
  export declare const isConstructor: (T: unknown) => T is constructor<unknown>;
7
- export declare function groupBy<T>(items: T[], predicate: (value: T) => boolean): T[][];