ts-ioc-container 30.5.0 → 30.7.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/cjm/index.js +5 -4
- package/cjm/metadata.js +0 -1
- package/cjm/provider/IProvider.js +11 -0
- package/cjm/provider/Provider.js +5 -12
- package/cjm/provider/Registration.js +6 -2
- package/cjm/utils.js +3 -1
- package/esm/index.js +2 -1
- package/esm/metadata.js +0 -1
- package/esm/provider/IProvider.js +7 -1
- package/esm/provider/Provider.js +5 -9
- package/esm/provider/Registration.js +7 -3
- package/esm/utils.js +1 -0
- package/package.json +2 -2
- package/typings/index.d.ts +2 -2
- package/typings/metadata.d.ts +1 -1
- package/typings/provider/IProvider.d.ts +4 -0
- package/typings/provider/Provider.d.ts +1 -4
- package/typings/provider/Registration.d.ts +3 -3
- package/typings/utils.d.ts +1 -0
package/cjm/index.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setParameterMetadata = exports.getMetadata = exports.setMetadata = exports.by = exports.hook = exports.getHooks = exports.ProxyInjector = exports.SimpleInjector = exports.inject = exports.MetadataInjector = exports.alias = exports.register = exports.Registration = exports.key = exports.AutoMockedContainer = exports.SingletonProvider = exports.singleton = exports.ArgsProvider = exports.args = exports.argsFn = exports.
|
|
3
|
+
exports.setParameterMetadata = exports.getMetadata = exports.setMetadata = exports.by = exports.hook = exports.getHooks = exports.ProxyInjector = exports.SimpleInjector = exports.inject = exports.MetadataInjector = exports.alias = exports.register = exports.Registration = exports.key = exports.AutoMockedContainer = exports.SingletonProvider = exports.singleton = exports.ArgsProvider = exports.args = exports.argsFn = exports.Provider = exports.ContainerDisposedError = exports.MethodNotImplementedError = exports.DependencyNotFoundError = exports.visible = exports.scope = 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");
|
|
7
7
|
Object.defineProperty(exports, "Container", { enumerable: true, get: function () { return Container_1.Container; } });
|
|
8
8
|
var EmptyContainer_1 = require("./container/EmptyContainer");
|
|
9
9
|
Object.defineProperty(exports, "EmptyContainer", { enumerable: true, get: function () { return EmptyContainer_1.EmptyContainer; } });
|
|
10
|
+
var IProvider_1 = require("./provider/IProvider");
|
|
11
|
+
Object.defineProperty(exports, "provider", { enumerable: true, get: function () { return IProvider_1.provider; } });
|
|
12
|
+
Object.defineProperty(exports, "scope", { enumerable: true, get: function () { return IProvider_1.scope; } });
|
|
13
|
+
Object.defineProperty(exports, "visible", { enumerable: true, get: function () { return IProvider_1.visible; } });
|
|
10
14
|
var DependencyNotFoundError_1 = require("./errors/DependencyNotFoundError");
|
|
11
15
|
Object.defineProperty(exports, "DependencyNotFoundError", { enumerable: true, get: function () { return DependencyNotFoundError_1.DependencyNotFoundError; } });
|
|
12
16
|
var MethodNotImplementedError_1 = require("./errors/MethodNotImplementedError");
|
|
@@ -15,9 +19,6 @@ var ContainerDisposedError_1 = require("./errors/ContainerDisposedError");
|
|
|
15
19
|
Object.defineProperty(exports, "ContainerDisposedError", { enumerable: true, get: function () { return ContainerDisposedError_1.ContainerDisposedError; } });
|
|
16
20
|
var Provider_1 = require("./provider/Provider");
|
|
17
21
|
Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return Provider_1.Provider; } });
|
|
18
|
-
Object.defineProperty(exports, "provider", { enumerable: true, get: function () { return Provider_1.provider; } });
|
|
19
|
-
Object.defineProperty(exports, "visible", { enumerable: true, get: function () { return Provider_1.visible; } });
|
|
20
|
-
Object.defineProperty(exports, "scope", { enumerable: true, get: function () { return Provider_1.scope; } });
|
|
21
22
|
var ArgsProvider_1 = require("./provider/ArgsProvider");
|
|
22
23
|
Object.defineProperty(exports, "argsFn", { enumerable: true, get: function () { return ArgsProvider_1.argsFn; } });
|
|
23
24
|
Object.defineProperty(exports, "args", { enumerable: true, get: function () { return ArgsProvider_1.args; } });
|
package/cjm/metadata.js
CHANGED
|
@@ -5,7 +5,6 @@ const setMetadata = (key, value) => (target) => {
|
|
|
5
5
|
Reflect.defineMetadata(key, value, target);
|
|
6
6
|
};
|
|
7
7
|
exports.setMetadata = setMetadata;
|
|
8
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
9
8
|
function getMetadata(target, key) {
|
|
10
9
|
return Reflect.getOwnMetadata(key, target);
|
|
11
10
|
}
|
|
@@ -1,2 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.scope = exports.visible = exports.provider = exports.PROVIDER_KEY = void 0;
|
|
4
|
+
const metadata_1 = require("../metadata");
|
|
5
|
+
exports.PROVIDER_KEY = 'provider';
|
|
6
|
+
const provider = (...mappers) => (0, metadata_1.setMetadata)(exports.PROVIDER_KEY, mappers);
|
|
7
|
+
exports.provider = provider;
|
|
8
|
+
const visible = (isVisibleWhen) => (p) => p.setVisibility(isVisibleWhen);
|
|
9
|
+
exports.visible = visible;
|
|
10
|
+
function scope(predicate) {
|
|
11
|
+
return (provider) => provider.setScopePredicate(predicate);
|
|
12
|
+
}
|
|
13
|
+
exports.scope = scope;
|
package/cjm/provider/Provider.js
CHANGED
|
@@ -1,24 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Provider =
|
|
3
|
+
exports.Provider = void 0;
|
|
4
|
+
const IProvider_1 = require("./IProvider");
|
|
4
5
|
const utils_1 = require("../utils");
|
|
5
6
|
const metadata_1 = require("../metadata");
|
|
6
|
-
const PROVIDER_KEY = 'provider';
|
|
7
|
-
const provider = (...mappers) => (0, metadata_1.setMetadata)(PROVIDER_KEY, mappers);
|
|
8
|
-
exports.provider = provider;
|
|
9
|
-
const visible = (isVisibleWhen) => (p) => p.setVisibility(isVisibleWhen);
|
|
10
|
-
exports.visible = visible;
|
|
11
|
-
function scope(predicate) {
|
|
12
|
-
return (provider) => provider.setScopePredicate(predicate);
|
|
13
|
-
}
|
|
14
|
-
exports.scope = scope;
|
|
15
7
|
class Provider {
|
|
16
8
|
static fromClass(Target) {
|
|
17
|
-
const mappers = (0, metadata_1.getMetadata)(Target, PROVIDER_KEY) ?? [];
|
|
9
|
+
const mappers = (0, metadata_1.getMetadata)(Target, IProvider_1.PROVIDER_KEY) ?? [];
|
|
18
10
|
return new Provider((container, ...args) => container.resolve(Target, { args })).pipe(...mappers);
|
|
19
11
|
}
|
|
20
12
|
static fromValue(value) {
|
|
21
|
-
|
|
13
|
+
const mappers = (0, utils_1.isConstructor)(value) ? (0, metadata_1.getMetadata)(value, IProvider_1.PROVIDER_KEY) ?? [] : [];
|
|
14
|
+
return new Provider(() => value).pipe(...mappers);
|
|
22
15
|
}
|
|
23
16
|
constructor(resolveDependency, isVisibleWhen = () => true, isValidWhen = () => true) {
|
|
24
17
|
this.resolveDependency = resolveDependency;
|
|
@@ -12,15 +12,19 @@ class Registration {
|
|
|
12
12
|
return transform(new Registration(Provider_1.Provider.fromClass(Target), Target.name));
|
|
13
13
|
}
|
|
14
14
|
static fromValue(value) {
|
|
15
|
+
if ((0, utils_1.isConstructor)(value)) {
|
|
16
|
+
const transform = (0, utils_1.pipe)(...((0, metadata_1.getMetadata)(value, DEPENDENCY_KEY) ?? []));
|
|
17
|
+
return transform(new Registration(Provider_1.Provider.fromValue(value), value.name));
|
|
18
|
+
}
|
|
15
19
|
return new Registration(Provider_1.Provider.fromValue(value));
|
|
16
20
|
}
|
|
17
21
|
static fromFn(fn) {
|
|
18
22
|
return new Registration(new Provider_1.Provider(fn));
|
|
19
23
|
}
|
|
20
|
-
constructor(provider, key
|
|
24
|
+
constructor(provider, key) {
|
|
21
25
|
this.provider = provider;
|
|
22
26
|
this.key = key;
|
|
23
|
-
this.aliases =
|
|
27
|
+
this.aliases = [];
|
|
24
28
|
}
|
|
25
29
|
to(key) {
|
|
26
30
|
this.key = key;
|
package/cjm/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
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) {
|
|
@@ -16,3 +16,5 @@ function fillEmptyIndexes(baseArr, insertArr) {
|
|
|
16
16
|
exports.fillEmptyIndexes = fillEmptyIndexes;
|
|
17
17
|
const constant = (value) => () => value;
|
|
18
18
|
exports.constant = constant;
|
|
19
|
+
const isConstructor = (T) => typeof T === 'function' && !!T.prototype;
|
|
20
|
+
exports.isConstructor = isConstructor;
|
package/esm/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export { isDependencyKey, } from './container/IContainer';
|
|
2
2
|
export { Container } from './container/Container';
|
|
3
3
|
export { EmptyContainer } from './container/EmptyContainer';
|
|
4
|
+
export { provider, scope, visible } from './provider/IProvider';
|
|
4
5
|
export { DependencyNotFoundError } from './errors/DependencyNotFoundError';
|
|
5
6
|
export { MethodNotImplementedError } from './errors/MethodNotImplementedError';
|
|
6
7
|
export { ContainerDisposedError } from './errors/ContainerDisposedError';
|
|
7
|
-
export { Provider
|
|
8
|
+
export { Provider } from './provider/Provider';
|
|
8
9
|
export { argsFn, args, ArgsProvider } from './provider/ArgsProvider';
|
|
9
10
|
export { singleton, SingletonProvider } from './provider/SingletonProvider';
|
|
10
11
|
export { AutoMockedContainer } from './container/AutoMockedContainer';
|
package/esm/metadata.js
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import { setMetadata } from '../metadata';
|
|
2
|
+
export const PROVIDER_KEY = 'provider';
|
|
3
|
+
export const provider = (...mappers) => setMetadata(PROVIDER_KEY, mappers);
|
|
4
|
+
export const visible = (isVisibleWhen) => (p) => p.setVisibility(isVisibleWhen);
|
|
5
|
+
export function scope(predicate) {
|
|
6
|
+
return (provider) => provider.setScopePredicate(predicate);
|
|
7
|
+
}
|
package/esm/provider/Provider.js
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export const provider = (...mappers) => setMetadata(PROVIDER_KEY, mappers);
|
|
5
|
-
export const visible = (isVisibleWhen) => (p) => p.setVisibility(isVisibleWhen);
|
|
6
|
-
export function scope(predicate) {
|
|
7
|
-
return (provider) => provider.setScopePredicate(predicate);
|
|
8
|
-
}
|
|
1
|
+
import { PROVIDER_KEY } from './IProvider';
|
|
2
|
+
import { isConstructor, pipe } from '../utils';
|
|
3
|
+
import { getMetadata } from '../metadata';
|
|
9
4
|
export class Provider {
|
|
10
5
|
static fromClass(Target) {
|
|
11
6
|
const mappers = getMetadata(Target, PROVIDER_KEY) ?? [];
|
|
12
7
|
return new Provider((container, ...args) => container.resolve(Target, { args })).pipe(...mappers);
|
|
13
8
|
}
|
|
14
9
|
static fromValue(value) {
|
|
15
|
-
|
|
10
|
+
const mappers = isConstructor(value) ? getMetadata(value, PROVIDER_KEY) ?? [] : [];
|
|
11
|
+
return new Provider(() => value).pipe(...mappers);
|
|
16
12
|
}
|
|
17
13
|
constructor(resolveDependency, isVisibleWhen = () => true, isValidWhen = () => true) {
|
|
18
14
|
this.resolveDependency = resolveDependency;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { pipe } from '../utils';
|
|
1
|
+
import { isConstructor, pipe } from '../utils';
|
|
2
2
|
import { getMetadata, setMetadata } from '../metadata';
|
|
3
3
|
import { Provider } from './Provider';
|
|
4
4
|
import { DependencyMissingKeyError } from '../errors/DependencyMissingKeyError';
|
|
@@ -9,15 +9,19 @@ export class Registration {
|
|
|
9
9
|
return transform(new Registration(Provider.fromClass(Target), Target.name));
|
|
10
10
|
}
|
|
11
11
|
static fromValue(value) {
|
|
12
|
+
if (isConstructor(value)) {
|
|
13
|
+
const transform = pipe(...(getMetadata(value, DEPENDENCY_KEY) ?? []));
|
|
14
|
+
return transform(new Registration(Provider.fromValue(value), value.name));
|
|
15
|
+
}
|
|
12
16
|
return new Registration(Provider.fromValue(value));
|
|
13
17
|
}
|
|
14
18
|
static fromFn(fn) {
|
|
15
19
|
return new Registration(new Provider(fn));
|
|
16
20
|
}
|
|
17
|
-
constructor(provider, key
|
|
21
|
+
constructor(provider, key) {
|
|
18
22
|
this.provider = provider;
|
|
19
23
|
this.key = key;
|
|
20
|
-
this.aliases =
|
|
24
|
+
this.aliases = [];
|
|
21
25
|
}
|
|
22
26
|
to(key) {
|
|
23
27
|
this.key = key;
|
package/esm/utils.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-ioc-container",
|
|
3
|
-
"version": "30.
|
|
3
|
+
"version": "30.7.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": "
|
|
62
|
+
"gitHead": "406ecdc2fbd80cece9bffa1af64d4c06291e9177"
|
|
63
63
|
}
|
package/typings/index.d.ts
CHANGED
|
@@ -2,12 +2,12 @@ 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 } from './provider/IProvider';
|
|
5
|
+
export { ResolveDependency, IProvider, provider, scope, 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';
|
|
9
9
|
export { ContainerDisposedError } from './errors/ContainerDisposedError';
|
|
10
|
-
export { Provider
|
|
10
|
+
export { Provider } from './provider/Provider';
|
|
11
11
|
export { ArgsFn, argsFn, args, ArgsProvider } from './provider/ArgsProvider';
|
|
12
12
|
export { singleton, SingletonProvider } from './provider/SingletonProvider';
|
|
13
13
|
export { AutoMockedContainer } from './container/AutoMockedContainer';
|
package/typings/metadata.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { constructor } from './utils';
|
|
2
2
|
export declare const setMetadata: <T>(key: string | symbol, value: T) => ClassDecorator;
|
|
3
|
-
export declare function getMetadata<T>(target:
|
|
3
|
+
export declare function getMetadata<T>(target: object, key: string | symbol): T | undefined;
|
|
4
4
|
export declare const setParameterMetadata: (key: string | symbol, value: unknown) => ParameterDecorator;
|
|
5
5
|
export declare const getParameterMetadata: (key: string | symbol, target: constructor<unknown>) => unknown[];
|
|
@@ -15,3 +15,7 @@ export interface IProvider<T = unknown> {
|
|
|
15
15
|
setVisibility(isVisibleWhen: ChildrenVisibilityPredicate): this;
|
|
16
16
|
setScopePredicate(isValidWhen: ScopePredicate): this;
|
|
17
17
|
}
|
|
18
|
+
export declare const PROVIDER_KEY = "provider";
|
|
19
|
+
export declare const provider: (...mappers: MapFn<IProvider>[]) => ClassDecorator;
|
|
20
|
+
export declare const visible: (isVisibleWhen: ChildrenVisibilityPredicate) => MapFn<IProvider>;
|
|
21
|
+
export declare function scope<T = unknown>(predicate: ScopePredicate): MapFn<IProvider<T>>;
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { ChildrenVisibilityPredicate, IProvider, ResolveDependency, ScopePredicate } from './IProvider';
|
|
2
2
|
import { IContainer, Tagged } from '../container/IContainer';
|
|
3
3
|
import { constructor, MapFn } from '../utils';
|
|
4
|
-
export declare const provider: (...mappers: MapFn<IProvider>[]) => ClassDecorator;
|
|
5
|
-
export declare const visible: (isVisibleWhen: ChildrenVisibilityPredicate) => MapFn<IProvider>;
|
|
6
|
-
export declare function scope<T = unknown>(predicate: ScopePredicate): MapFn<IProvider<T>>;
|
|
7
4
|
export declare class Provider<T> implements IProvider<T> {
|
|
8
5
|
private readonly resolveDependency;
|
|
9
6
|
private isVisibleWhen;
|
|
10
7
|
private isValidWhen;
|
|
11
8
|
static fromClass<T>(Target: constructor<T>): IProvider<T>;
|
|
12
|
-
static fromValue<T>(value: T):
|
|
9
|
+
static fromValue<T>(value: T): IProvider<T>;
|
|
13
10
|
constructor(resolveDependency: ResolveDependency<T>, isVisibleWhen?: ChildrenVisibilityPredicate, isValidWhen?: ScopePredicate);
|
|
14
11
|
pipe(...mappers: MapFn<IProvider<T>>[]): IProvider<T>;
|
|
15
12
|
clone(): Provider<T>;
|
|
@@ -4,11 +4,11 @@ import { IProvider, ResolveDependency } from './IProvider';
|
|
|
4
4
|
export declare class Registration<T = unknown> implements IContainerModule {
|
|
5
5
|
private provider;
|
|
6
6
|
private key?;
|
|
7
|
-
|
|
8
|
-
static fromClass<T>(Target: constructor<T>): Registration<unknown>;
|
|
7
|
+
static fromClass<T>(Target: constructor<T>): Registration<T>;
|
|
9
8
|
static fromValue<T>(value: T): Registration<T>;
|
|
10
9
|
static fromFn<T>(fn: ResolveDependency<T>): Registration<T>;
|
|
11
|
-
|
|
10
|
+
private aliases;
|
|
11
|
+
constructor(provider: IProvider<T>, key?: DependencyKey | undefined);
|
|
12
12
|
to(key: DependencyKey): this;
|
|
13
13
|
addAliases(...aliases: Alias[]): this;
|
|
14
14
|
pipe(...mappers: MapFn<IProvider<T>>[]): this;
|
package/typings/utils.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ export type MapFn<T> = (value: T) => T;
|
|
|
3
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
|
+
export declare const isConstructor: (T: unknown) => T is constructor<unknown>;
|