ts-ioc-container 32.6.2 → 32.8.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
@@ -14,6 +14,8 @@
14
14
  - supports `tagged scopes`
15
15
  - fully test covered :100:
16
16
  - can be used with decorators `@inject`
17
+ - can [inject properties](#inject-property)
18
+ - can inject [lazy dependencies](#lazy)
17
19
  - composable and open to extend
18
20
  - awesome for testing (auto mocking)
19
21
 
@@ -43,6 +45,7 @@
43
45
  - [Hook](#hook) `@hook`
44
46
  - [OnConstruct](#onconstruct) `@onConstruct`
45
47
  - [OnDispose](#ondispose) `@onDispose`
48
+ - [Inject Property](#inject-property)
46
49
  - [Mock](#mock)
47
50
  - [Error](#error)
48
51
 
@@ -357,6 +360,7 @@ describe('lazy provider', () => {
357
360
 
358
361
  ### Metadata
359
362
  This type of injector uses `@inject` decorator to mark where dependencies should be injected. It's bases on `reflect-metadata` package. That's why I call it `MetadataInjector`.
363
+ Also you can [inject property.](#inject-property)
360
364
 
361
365
  ```typescript
362
366
  import 'reflect-metadata';
@@ -1255,6 +1259,29 @@ describe('onDispose', function () {
1255
1259
 
1256
1260
  ```
1257
1261
 
1262
+ ### Inject property
1263
+
1264
+ ```typescript
1265
+ import { by, Container, executeHooks, hook, injectProp, MetadataInjector, Registration } from 'ts-ioc-container';
1266
+
1267
+ describe('inject property', () => {
1268
+ it('should inject property', () => {
1269
+ class App {
1270
+ @hook('onInit', injectProp(by.key('greeting')))
1271
+ greeting!: string;
1272
+ }
1273
+ const expected = 'Hello world!';
1274
+
1275
+ const container = new Container(new MetadataInjector()).add(Registration.fromValue(expected).to('greeting'));
1276
+ const app = container.resolve(App);
1277
+ executeHooks(app, 'onInit', { scope: container });
1278
+
1279
+ expect(app.greeting).toBe(expected);
1280
+ });
1281
+ });
1282
+
1283
+ ```
1284
+
1258
1285
  ## Mock
1259
1286
  Sometimes you need to automatically mock all dependencies in container. This is what `AutoMockedContainer` is for.
1260
1287
 
@@ -15,5 +15,9 @@ class ExecutionContext {
15
15
  // @ts-ignore
16
16
  return this.instance[this.methodName](...args);
17
17
  }
18
+ injectProperty(fn) {
19
+ // @ts-ignore
20
+ this.instance[this.methodName] = fn(this.scope);
21
+ }
18
22
  }
19
23
  exports.ExecutionContext = ExecutionContext;
package/cjm/hooks/hook.js CHANGED
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.executeHooks = exports.hasHooks = exports.getHooks = exports.hook = void 0;
3
+ exports.executeHooks = exports.hasHooks = exports.getHooks = exports.hook = exports.injectProp = void 0;
4
4
  const ExecutionContext_1 = require("./ExecutionContext");
5
- const createStore = () => new Map();
5
+ const injectProp = (fn) => (context) => context.injectProperty(fn);
6
+ exports.injectProp = injectProp;
6
7
  const hook = (key, ...fns) => (target, propertyKey) => {
7
8
  const hooks = Reflect.hasMetadata(key, target.constructor)
8
9
  ? Reflect.getMetadata(key, target.constructor)
9
- : createStore();
10
+ : new Map();
10
11
  hooks.set(propertyKey, (hooks.get(propertyKey) ?? []).concat(fns));
11
12
  Reflect.defineMetadata(key, hooks, target.constructor); // eslint-disable-line @typescript-eslint/ban-types
12
13
  };
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.byAliases = exports.byAlias = exports.IMemoKey = exports.by = exports.ExecutionContext = exports.executeHooks = exports.hasHooks = exports.hook = exports.getHooks = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.Registration = exports.register = exports.scope = exports.key = exports.decorate = exports.multiCache = exports.MultiCache = exports.SingletonProvider = exports.singleton = exports.Provider = exports.ProviderDecorator = exports.args = exports.argsFn = exports.alias = exports.visible = exports.provider = exports.ProxyInjector = exports.SimpleInjector = exports.getInjectFns = exports.resolveArgs = exports.inject = exports.MetadataInjector = exports.AutoMockedContainer = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
3
+ exports.getParameterMetadata = exports.getMethodMetadata = exports.setMethodMetadata = exports.setParameterMetadata = exports.getMetadata = exports.setMetadata = exports.byAliases = exports.byAlias = exports.IMemoKey = exports.by = exports.ExecutionContext = exports.injectProp = exports.executeHooks = exports.hasHooks = exports.hook = exports.getHooks = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.Registration = exports.register = exports.scope = exports.key = exports.decorate = exports.multiCache = exports.MultiCache = exports.SingletonProvider = exports.singleton = exports.Provider = exports.ProviderDecorator = exports.args = exports.argsFn = exports.alias = exports.visible = exports.provider = exports.ProxyInjector = exports.SimpleInjector = exports.getInjectFns = exports.resolveArgs = exports.inject = exports.MetadataInjector = exports.AutoMockedContainer = exports.EmptyContainer = exports.Container = exports.isDependencyKey = void 0;
4
4
  // Containers
5
5
  var IContainer_1 = require("./container/IContainer");
6
6
  Object.defineProperty(exports, "isDependencyKey", { enumerable: true, get: function () { return IContainer_1.isDependencyKey; } });
@@ -51,14 +51,16 @@ var MethodNotImplementedError_1 = require("./errors/MethodNotImplementedError");
51
51
  Object.defineProperty(exports, "MethodNotImplementedError", { enumerable: true, get: function () { return MethodNotImplementedError_1.MethodNotImplementedError; } });
52
52
  var ContainerDisposedError_1 = require("./errors/ContainerDisposedError");
53
53
  Object.defineProperty(exports, "ContainerDisposedError", { enumerable: true, get: function () { return ContainerDisposedError_1.ContainerDisposedError; } });
54
- // Others
54
+ // Hooks
55
55
  var hook_1 = require("./hooks/hook");
56
56
  Object.defineProperty(exports, "getHooks", { enumerable: true, get: function () { return hook_1.getHooks; } });
57
57
  Object.defineProperty(exports, "hook", { enumerable: true, get: function () { return hook_1.hook; } });
58
58
  Object.defineProperty(exports, "hasHooks", { enumerable: true, get: function () { return hook_1.hasHooks; } });
59
59
  Object.defineProperty(exports, "executeHooks", { enumerable: true, get: function () { return hook_1.executeHooks; } });
60
+ Object.defineProperty(exports, "injectProp", { enumerable: true, get: function () { return hook_1.injectProp; } });
60
61
  var ExecutionContext_1 = require("./hooks/ExecutionContext");
61
62
  Object.defineProperty(exports, "ExecutionContext", { enumerable: true, get: function () { return ExecutionContext_1.ExecutionContext; } });
63
+ // Others
62
64
  var by_1 = require("./by");
63
65
  Object.defineProperty(exports, "by", { enumerable: true, get: function () { return by_1.by; } });
64
66
  Object.defineProperty(exports, "IMemoKey", { enumerable: true, get: function () { return by_1.IMemoKey; } });
@@ -8,7 +8,7 @@ class DecoratorProvider extends IProvider_1.ProviderDecorator {
8
8
  this.provider = provider;
9
9
  this.decorateFn = decorateFn;
10
10
  }
11
- resolveInstantly(scope, options) {
11
+ resolve(scope, options) {
12
12
  const dependency = this.provider.resolve(scope, options);
13
13
  return this.decorateFn(dependency, scope);
14
14
  }
@@ -31,8 +31,8 @@ class ProviderDecorator {
31
31
  isVisible(parent, child) {
32
32
  return this.decorated.isVisible(parent, child);
33
33
  }
34
- resolve(container, { args, lazy }) {
35
- return (0, utils_1.lazyInstance)(() => this.resolveInstantly(container, { args }), lazy);
34
+ resolve(container, options) {
35
+ return this.decorated.resolve(container, options);
36
36
  }
37
37
  pipe(...mappers) {
38
38
  return (0, utils_1.pipe)(...mappers)(this);
@@ -21,8 +21,12 @@ class Provider {
21
21
  pipe(...mappers) {
22
22
  return (0, utils_1.pipe)(...mappers)(this);
23
23
  }
24
- resolve(container, { args, lazy }) {
25
- return (0, utils_1.lazyInstance)(() => this.resolveDependency(container, { args: [...this.argsFn(container, ...args), ...args] }), lazy);
24
+ resolve(container, { args, lazy: isLazy }) {
25
+ const resolveDependency = () => {
26
+ const deps = [...this.argsFn(container, ...args), ...args];
27
+ return this.resolveDependency(container, { args: deps });
28
+ };
29
+ return isLazy ? (0, utils_1.lazyProxy)(resolveDependency) : resolveDependency();
26
30
  }
27
31
  setVisibility(predicate) {
28
32
  this.isVisibleWhen = predicate;
@@ -13,7 +13,7 @@ class SingletonProvider extends IProvider_1.ProviderDecorator {
13
13
  this.provider = provider;
14
14
  this.cache = cache;
15
15
  }
16
- resolveInstantly(container, options) {
16
+ resolve(container, options) {
17
17
  const key = this.cache.getKey(...options.args);
18
18
  if (!this.cache.hasValue(key)) {
19
19
  this.cache.setValue(key, this.provider.resolve(container, options));
package/cjm/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.lazyInstance = exports.isConstructor = exports.constant = exports.fillEmptyIndexes = exports.pipe = void 0;
3
+ exports.lazyProxy = 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,10 +18,7 @@ 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 lazyInstance(resolveInstance, isLazy) {
22
- if (!isLazy) {
23
- return resolveInstance();
24
- }
21
+ function lazyProxy(resolveInstance) {
25
22
  let instance;
26
23
  return new Proxy({}, {
27
24
  get: (_, prop) => {
@@ -31,4 +28,4 @@ function lazyInstance(resolveInstance, isLazy) {
31
28
  },
32
29
  });
33
30
  }
34
- exports.lazyInstance = lazyInstance;
31
+ exports.lazyProxy = lazyProxy;
@@ -12,4 +12,8 @@ export class ExecutionContext {
12
12
  // @ts-ignore
13
13
  return this.instance[this.methodName](...args);
14
14
  }
15
+ injectProperty(fn) {
16
+ // @ts-ignore
17
+ this.instance[this.methodName] = fn(this.scope);
18
+ }
15
19
  }
package/esm/hooks/hook.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { ExecutionContext } from './ExecutionContext';
2
- const createStore = () => new Map();
2
+ export const injectProp = (fn) => (context) => context.injectProperty(fn);
3
3
  export const hook = (key, ...fns) => (target, propertyKey) => {
4
4
  const hooks = Reflect.hasMetadata(key, target.constructor)
5
5
  ? Reflect.getMetadata(key, target.constructor)
6
- : createStore();
6
+ : new Map();
7
7
  hooks.set(propertyKey, (hooks.get(propertyKey) ?? []).concat(fns));
8
8
  Reflect.defineMetadata(key, hooks, target.constructor); // eslint-disable-line @typescript-eslint/ban-types
9
9
  };
package/esm/index.js CHANGED
@@ -19,8 +19,9 @@ export { Registration } from './registration/Registration';
19
19
  export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
20
20
  export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
21
21
  export { ContainerDisposedError } from './errors/ContainerDisposedError';
22
- // Others
23
- export { getHooks, hook, hasHooks, executeHooks } from './hooks/hook';
22
+ // Hooks
23
+ export { getHooks, hook, hasHooks, executeHooks, injectProp } from './hooks/hook';
24
24
  export { ExecutionContext } from './hooks/ExecutionContext';
25
+ // Others
25
26
  export { by, IMemoKey, byAlias, byAliases } from './by';
26
27
  export { setMetadata, getMetadata, setParameterMetadata, setMethodMetadata, getMethodMetadata, getParameterMetadata, } from './metadata';
@@ -5,7 +5,7 @@ export class DecoratorProvider extends ProviderDecorator {
5
5
  this.provider = provider;
6
6
  this.decorateFn = decorateFn;
7
7
  }
8
- resolveInstantly(scope, options) {
8
+ resolve(scope, options) {
9
9
  const dependency = this.provider.resolve(scope, options);
10
10
  return this.decorateFn(dependency, scope);
11
11
  }
@@ -1,4 +1,4 @@
1
- import { lazyInstance, pipe } from '../utils';
1
+ import { pipe } from '../utils';
2
2
  import { getMetadata, setMetadata } from '../metadata';
3
3
  export function args(...extraArgs) {
4
4
  return (provider) => provider.setArgs(() => extraArgs);
@@ -22,8 +22,8 @@ export class ProviderDecorator {
22
22
  isVisible(parent, child) {
23
23
  return this.decorated.isVisible(parent, child);
24
24
  }
25
- resolve(container, { args, lazy }) {
26
- return lazyInstance(() => this.resolveInstantly(container, { args }), lazy);
25
+ resolve(container, options) {
26
+ return this.decorated.resolve(container, options);
27
27
  }
28
28
  pipe(...mappers) {
29
29
  return pipe(...mappers)(this);
@@ -1,5 +1,5 @@
1
1
  import { getTransformers, } from './IProvider';
2
- import { isConstructor, lazyInstance, pipe } from '../utils';
2
+ import { isConstructor, lazyProxy, pipe } from '../utils';
3
3
  export class Provider {
4
4
  static fromClass(Target) {
5
5
  const transformers = getTransformers(Target);
@@ -18,8 +18,12 @@ export class Provider {
18
18
  pipe(...mappers) {
19
19
  return pipe(...mappers)(this);
20
20
  }
21
- resolve(container, { args, lazy }) {
22
- return lazyInstance(() => this.resolveDependency(container, { args: [...this.argsFn(container, ...args), ...args] }), lazy);
21
+ resolve(container, { args, lazy: isLazy }) {
22
+ const resolveDependency = () => {
23
+ const deps = [...this.argsFn(container, ...args), ...args];
24
+ return this.resolveDependency(container, { args: deps });
25
+ };
26
+ return isLazy ? lazyProxy(resolveDependency) : resolveDependency();
23
27
  }
24
28
  setVisibility(predicate) {
25
29
  this.isVisibleWhen = predicate;
@@ -9,7 +9,7 @@ export class SingletonProvider extends ProviderDecorator {
9
9
  this.provider = provider;
10
10
  this.cache = cache;
11
11
  }
12
- resolveInstantly(container, options) {
12
+ resolve(container, options) {
13
13
  const key = this.cache.getKey(...options.args);
14
14
  if (!this.cache.hasValue(key)) {
15
15
  this.cache.setValue(key, this.provider.resolve(container, options));
package/esm/utils.js CHANGED
@@ -11,10 +11,7 @@ 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 lazyInstance(resolveInstance, isLazy) {
15
- if (!isLazy) {
16
- return resolveInstance();
17
- }
14
+ export function lazyProxy(resolveInstance) {
18
15
  let instance;
19
16
  return new Proxy({}, {
20
17
  get: (_, prop) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-ioc-container",
3
- "version": "32.6.2",
3
+ "version": "32.8.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": "b51eb6fbe46b4e144453a5b6a421b2ceb486d8a7"
62
+ "gitHead": "a2647045895a5eae9199e84d613cc5cb735c111c"
63
63
  }
@@ -1,3 +1,4 @@
1
+ import { InjectFn } from '../injector/MetadataInjector';
1
2
  import { IContainer } from '../container/IContainer';
2
3
  export declare class ExecutionContext {
3
4
  instance: object;
@@ -8,4 +9,5 @@ export declare class ExecutionContext {
8
9
  invokeMethod({ args }: {
9
10
  args: unknown[];
10
11
  }): unknown;
12
+ injectProperty(fn: InjectFn): void;
11
13
  }
@@ -1,6 +1,8 @@
1
1
  import { IContainer } from '../container/IContainer';
2
2
  import { ExecutionContext } from './ExecutionContext';
3
+ import { InjectFn } from '../injector/MetadataInjector';
3
4
  export type Execution<T extends ExecutionContext = ExecutionContext> = (context: T) => void;
5
+ export declare const injectProp: (fn: InjectFn) => Execution;
4
6
  export declare const hook: (key: string | symbol, ...fns: Execution[]) => (target: object, propertyKey: string | symbol) => void;
5
7
  export declare function getHooks(target: object, key: string | symbol): Map<string, Execution[]>;
6
8
  export declare function hasHooks(target: object, key: string | symbol): boolean;
@@ -6,7 +6,7 @@ export { IInjector } from './injector/IInjector';
6
6
  export { MetadataInjector, inject, resolveArgs, getInjectFns, InjectFn } from './injector/MetadataInjector';
7
7
  export { SimpleInjector } from './injector/SimpleInjector';
8
8
  export { ProxyInjector } from './injector/ProxyInjector';
9
- export { ResolveDependency, IProvider, provider, visible, alias, argsFn, args, ArgsFn, ProviderDecorator, InstantDependencyOptions, ProviderResolveOptions, } from './provider/IProvider';
9
+ export { ResolveDependency, IProvider, provider, visible, alias, argsFn, args, ArgsFn, ProviderDecorator, ProviderResolveOptions, } from './provider/IProvider';
10
10
  export { Provider } from './provider/Provider';
11
11
  export { singleton, SingletonProvider } from './provider/singleton/SingletonProvider';
12
12
  export { MultiCache, multiCache } from './provider/singleton/MultiCache';
@@ -17,7 +17,7 @@ export { Registration } from './registration/Registration';
17
17
  export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
18
18
  export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
19
19
  export { ContainerDisposedError } from './errors/ContainerDisposedError';
20
- export { getHooks, hook, hasHooks, Execution, executeHooks } from './hooks/hook';
20
+ export { getHooks, hook, hasHooks, Execution, executeHooks, injectProp } from './hooks/hook';
21
21
  export { ExecutionContext } from './hooks/ExecutionContext';
22
22
  export { by, InstancePredicate, IMemo, IMemoKey, byAlias, byAliases } from './by';
23
23
  export { constructor } from './utils';
@@ -1,10 +1,10 @@
1
1
  import { IContainer } from '../container/IContainer';
2
- import { InstantDependencyOptions, IProvider, ProviderDecorator } from './IProvider';
2
+ import { IProvider, ProviderDecorator, ProviderResolveOptions } from './IProvider';
3
3
  export type DecorateFn<Instance> = (dep: Instance, scope: IContainer) => Instance;
4
4
  export declare class DecoratorProvider<Instance> extends ProviderDecorator<Instance> {
5
5
  private provider;
6
6
  private decorateFn;
7
7
  constructor(provider: IProvider<Instance>, decorateFn: DecorateFn<Instance>);
8
- resolveInstantly(scope: IContainer, options: InstantDependencyOptions): Instance;
8
+ resolve(scope: IContainer, options: ProviderResolveOptions): Instance;
9
9
  }
10
10
  export declare const decorate: <Instance>(decorateFn: DecorateFn<Instance>) => (provider: IProvider<Instance>) => DecoratorProvider<Instance>;
@@ -4,7 +4,6 @@ export type ProviderResolveOptions = {
4
4
  args: unknown[];
5
5
  lazy?: boolean;
6
6
  };
7
- export type InstantDependencyOptions = Omit<ProviderResolveOptions, 'lazy'>;
8
7
  export type ResolveDependency<T = unknown> = (container: IContainer, options: ProviderResolveOptions) => T;
9
8
  export type ChildrenVisibilityPredicate = (options: {
10
9
  child: Tagged;
@@ -31,8 +30,7 @@ export declare abstract class ProviderDecorator<T> implements IProvider<T> {
31
30
  protected constructor(decorated: IProvider<T>);
32
31
  setVisibility(predicate: ChildrenVisibilityPredicate): this;
33
32
  isVisible(parent: IContainer, child: Tagged): boolean;
34
- resolve(container: IContainer, { args, lazy }: ProviderResolveOptions): T;
35
- protected abstract resolveInstantly(container: IContainer, options: InstantDependencyOptions): T;
33
+ resolve(container: IContainer, options: ProviderResolveOptions): T;
36
34
  pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
37
35
  matchAliases(predicate: AliasPredicate): boolean;
38
36
  addAliases(...aliases: Alias[]): this;
@@ -10,7 +10,7 @@ export declare class Provider<T> implements IProvider<T> {
10
10
  private isVisibleWhen;
11
11
  constructor(resolveDependency: ResolveDependency<T>);
12
12
  pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
13
- resolve(container: IContainer, { args, lazy }: ProviderResolveOptions): T;
13
+ resolve(container: IContainer, { args, lazy: isLazy }: ProviderResolveOptions): T;
14
14
  setVisibility(predicate: ChildrenVisibilityPredicate): this;
15
15
  setArgs(argsFn: ArgsFn): this;
16
16
  isVisible(parent: Tagged, child: Tagged): boolean;
@@ -1,5 +1,5 @@
1
1
  import { IContainer } from '../../container/IContainer';
2
- import { InstantDependencyOptions, IProvider, ProviderDecorator } from '../IProvider';
2
+ import { IProvider, ProviderDecorator, ProviderResolveOptions } from '../IProvider';
3
3
  import { MapFn } from '../../utils';
4
4
  import { Cache } from './Cache';
5
5
  export declare function singleton<T = unknown>(cacheProvider?: () => Cache<unknown, T>): MapFn<IProvider<T>>;
@@ -7,5 +7,5 @@ export declare class SingletonProvider<T> extends ProviderDecorator<T> {
7
7
  private readonly provider;
8
8
  private readonly cache;
9
9
  constructor(provider: IProvider<T>, cache: Cache<unknown, T>);
10
- resolveInstantly(container: IContainer, options: InstantDependencyOptions): T;
10
+ resolve(container: IContainer, options: ProviderResolveOptions): T;
11
11
  }
@@ -4,4 +4,4 @@ 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 lazyInstance<T>(resolveInstance: () => T, isLazy?: boolean): T;
7
+ export declare function lazyProxy<T>(resolveInstance: () => T): T;