@nodelith/injection 0.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/LICENCE.txt +21 -0
- package/README.md +23 -0
- package/dist/injection-bundle.d.ts +17 -0
- package/dist/injection-bundle.d.ts.map +1 -0
- package/dist/injection-bundle.js +33 -0
- package/dist/injection-bundle.js.map +1 -0
- package/dist/injection-container.d.ts +55 -0
- package/dist/injection-container.d.ts.map +1 -0
- package/dist/injection-container.js +161 -0
- package/dist/injection-container.js.map +1 -0
- package/dist/injection-context.d.ts +9 -0
- package/dist/injection-context.d.ts.map +1 -0
- package/dist/injection-context.js +27 -0
- package/dist/injection-context.js.map +1 -0
- package/dist/injection-entry.d.ts +3 -0
- package/dist/injection-entry.d.ts.map +1 -0
- package/dist/injection-entry.js +3 -0
- package/dist/injection-entry.js.map +1 -0
- package/dist/injection-initializer.d.ts +24 -0
- package/dist/injection-initializer.d.ts.map +1 -0
- package/dist/injection-initializer.js +37 -0
- package/dist/injection-initializer.js.map +1 -0
- package/dist/injection-module.d.ts +25 -0
- package/dist/injection-module.d.ts.map +1 -0
- package/dist/injection-module.js +71 -0
- package/dist/injection-module.js.map +1 -0
- package/dist/injection-registration.d.ts +68 -0
- package/dist/injection-registration.d.ts.map +1 -0
- package/dist/injection-registration.js +76 -0
- package/dist/injection-registration.js.map +1 -0
- package/dist/injection-resolver.d.ts +16 -0
- package/dist/injection-resolver.d.ts.map +1 -0
- package/dist/injection-resolver.js +69 -0
- package/dist/injection-resolver.js.map +1 -0
- package/dist/injection-trace.d.ts +11 -0
- package/dist/injection-trace.d.ts.map +1 -0
- package/dist/injection-trace.js +33 -0
- package/dist/injection-trace.js.map +1 -0
- package/dist/library.d.ts +8 -0
- package/dist/library.d.ts.map +1 -0
- package/dist/library.js +18 -0
- package/dist/library.js.map +1 -0
- package/package.json +48 -0
package/LICENCE.txt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Thomaz Zandonotto
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# @nodelith/injection
|
|
2
|
+
|
|
3
|
+
A flexible and lightweight dependency injection library for JavaScript and TypeScript. Resolve complex dependency graphs using classes, factories, functions, or static values. Manage dependency visibility and lifecycles with ease. Build composable, reusable modules for clean and maintainable architectures.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Containers** for creating dependency graphs;
|
|
10
|
+
- **Modules** for composing dependency graphs;
|
|
11
|
+
- **Lifecycle controls** manage registration lifecycle through `singleton`, `scoped`, and `transient` registrations.
|
|
12
|
+
- **Visibility controls** to expose only what you want through `public` and `private` visibility modes.
|
|
13
|
+
- **Lazy bundles** and tracing to help avoid cycles and resolve only when accessed.
|
|
14
|
+
- **Initialization pipeline** to run setup steps before registrations are made available.
|
|
15
|
+
- **Parameter inference** via AST parsing and manually overrides when desired.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 📦 Installation
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install @nodelith/injection
|
|
23
|
+
```
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { InjectionContext } from './injection-context';
|
|
2
|
+
import { InjectionEntry } from './injection-entry';
|
|
3
|
+
export declare namespace InjectionBundle {
|
|
4
|
+
type DeclarationOptions = {
|
|
5
|
+
readonly entries?: InjectionEntry[] | undefined;
|
|
6
|
+
readonly context?: InjectionContext | undefined;
|
|
7
|
+
readonly bundle?: InjectionBundle | undefined;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export type InjectionBundle = {
|
|
11
|
+
readonly [key: string]: any;
|
|
12
|
+
};
|
|
13
|
+
export declare function createBundle(options?: InjectionBundle.DeclarationOptions): InjectionBundle;
|
|
14
|
+
export declare const InjectionBundle: Readonly<{
|
|
15
|
+
create: typeof createBundle;
|
|
16
|
+
}>;
|
|
17
|
+
//# sourceMappingURL=injection-bundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-bundle.d.ts","sourceRoot":"","sources":["../src/injection-bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,MAAM,CAAC,OAAO,WAAW,eAAe,CAAC;IACvC,KAAY,kBAAkB,GAAG;QAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,GAAG,SAAS,CAAA;QAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;QAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,SAAS,CAAA;KAC9C,CAAA;CACF;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAC5B,CAAA;AAED,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,kBAAkB,GAAG,eAAe,CA2B1F;AAED,eAAO,MAAM,eAAe;;EAE1B,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectionBundle = void 0;
|
|
4
|
+
exports.createBundle = createBundle;
|
|
5
|
+
const injection_context_1 = require("./injection-context");
|
|
6
|
+
function createBundle(options) {
|
|
7
|
+
if (!options?.context) {
|
|
8
|
+
return createBundle({ ...options,
|
|
9
|
+
context: injection_context_1.InjectionContext.create()
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
if (!options?.entries) {
|
|
13
|
+
return createBundle({ ...options,
|
|
14
|
+
entries: []
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return options.entries.reduce((bundle, [token, registration]) => {
|
|
18
|
+
const resolver = () => registration.resolve({
|
|
19
|
+
context: options.context,
|
|
20
|
+
bundle,
|
|
21
|
+
});
|
|
22
|
+
const descriptor = {
|
|
23
|
+
configurable: false,
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: resolver,
|
|
26
|
+
};
|
|
27
|
+
return Object.defineProperty(bundle, token, descriptor);
|
|
28
|
+
}, Object.create(options.bundle ?? {}));
|
|
29
|
+
}
|
|
30
|
+
exports.InjectionBundle = Object.freeze({
|
|
31
|
+
create: createBundle
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=injection-bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-bundle.js","sourceRoot":"","sources":["../src/injection-bundle.ts"],"names":[],"mappings":";;;AAeA,oCA2BC;AA1CD,2DAAsD;AAetD,SAAgB,YAAY,CAAC,OAA4C;IACvE,IAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,OAAO,YAAY,CAAC,EAAE,GAAG,OAAO;YAC9B,OAAO,EAAE,oCAAgB,CAAC,MAAM,EAAE;SACnC,CAAC,CAAA;IACJ,CAAC;IAED,IAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,OAAO,YAAY,CAAC,EAAE,GAAG,OAAO;YAC9B,OAAO,EAAE,EAAE;SACZ,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,EAAE;QAC9D,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;YAC1C,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM;SACP,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG;YACjB,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,IAAI;YAChB,GAAG,EAAE,QAAQ;SACd,CAAA;QAED,OAAO,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;IACzD,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAA;AACzC,CAAC;AAEY,QAAA,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,YAAY;CACrB,CAAC,CAAA","sourcesContent":["import { InjectionContext } from './injection-context'\nimport { InjectionEntry } from './injection-entry'\n\nexport declare namespace InjectionBundle {\n export type DeclarationOptions = {\n readonly entries?: InjectionEntry[] | undefined\n readonly context?: InjectionContext | undefined\n readonly bundle?: InjectionBundle | undefined\n }\n}\n\nexport type InjectionBundle = {\n readonly [key: string]: any\n}\n\nexport function createBundle(options?: InjectionBundle.DeclarationOptions): InjectionBundle {\n if(!options?.context) {\n return createBundle({ ...options,\n context: InjectionContext.create()\n })\n }\n\n if(!options?.entries) {\n return createBundle({ ...options,\n entries: []\n })\n }\n\n return options.entries.reduce((bundle, [token, registration]) => {\n const resolver = () => registration.resolve({\n context: options.context,\n bundle,\n })\n\n const descriptor = {\n configurable: false,\n enumerable: true,\n get: resolver,\n }\n\n return Object.defineProperty(bundle, token, descriptor)\n }, Object.create(options.bundle ?? {}))\n}\n\nexport const InjectionBundle = Object.freeze({\n create: createBundle\n})\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ConstructorType } from '@nodelith/utilities';
|
|
2
|
+
import { FunctionType } from '@nodelith/utilities';
|
|
3
|
+
import { FactoryType } from '@nodelith/utilities';
|
|
4
|
+
import { CoreInitializer } from '@nodelith/core';
|
|
5
|
+
import { InjectionRegistration } from './injection-registration';
|
|
6
|
+
import { InjectionInitializer } from './injection-initializer';
|
|
7
|
+
import { InjectionContext } from './injection-context';
|
|
8
|
+
import { InjectionTrace } from './injection-trace';
|
|
9
|
+
import { InjectionEntry } from './injection-entry';
|
|
10
|
+
export declare namespace InjectionContainer {
|
|
11
|
+
type DeclarationOptions = {
|
|
12
|
+
context: InjectionContext;
|
|
13
|
+
stack: InjectionTrace;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export declare class InjectionContainer {
|
|
17
|
+
static create(options?: Partial<InjectionContainer.DeclarationOptions>): InjectionContainer;
|
|
18
|
+
private readonly _registrations;
|
|
19
|
+
private readonly _initializers;
|
|
20
|
+
protected readonly context: InjectionContext;
|
|
21
|
+
protected readonly trace: InjectionTrace;
|
|
22
|
+
protected constructor(options: InjectionContainer.DeclarationOptions);
|
|
23
|
+
protected hasRegistration(token: string): boolean;
|
|
24
|
+
protected hasInitializer(token: string): boolean;
|
|
25
|
+
protected get registrations(): InjectionRegistration[];
|
|
26
|
+
protected get initializers(): InjectionInitializer[];
|
|
27
|
+
protected get entries(): InjectionEntry[];
|
|
28
|
+
protected getRegistration(token: string): InjectionRegistration;
|
|
29
|
+
protected getInitializer(token: string): InjectionInitializer;
|
|
30
|
+
protected setRegistration(registration: InjectionRegistration): void;
|
|
31
|
+
protected setInitializer(initializer: InjectionInitializer): void;
|
|
32
|
+
useRegistrations(registrations: InjectionRegistration[]): this;
|
|
33
|
+
useRegistration(registration: InjectionRegistration): this;
|
|
34
|
+
useInitializers(initializers: InjectionInitializer[]): this;
|
|
35
|
+
useInitializer(initializer: InjectionInitializer): this;
|
|
36
|
+
useValueRegistration<T>(...args: Parameters<typeof InjectionRegistration.createValueRegistration<T>>): this;
|
|
37
|
+
useFunctionRegistration<T>(...args: Parameters<typeof InjectionRegistration.createFunctionRegistration<T>>): this;
|
|
38
|
+
useFactoryRegistration<T extends object>(...args: Parameters<typeof InjectionRegistration.createFactoryRegistration<T>>): this;
|
|
39
|
+
useClassRegistration<T extends object>(...args: Parameters<typeof InjectionRegistration.createClassRegistration<T>>): this;
|
|
40
|
+
useFactoryInitializer<T extends CoreInitializer<object>>(...args: Parameters<typeof InjectionInitializer.createFactoryInitializer<T>>): this;
|
|
41
|
+
useClassInitializer<T extends CoreInitializer<object>>(...args: Parameters<typeof InjectionInitializer.createClassInitializer<T>>): this;
|
|
42
|
+
mapValueRegistration<T>(token: string, target: T, options?: Omit<InjectionRegistration.ValueOptions, 'token'>): this;
|
|
43
|
+
mapFunctionRegistration<T>(token: string, target: FunctionType<T>, options?: Omit<InjectionRegistration.FunctionOptions, 'token'>): this;
|
|
44
|
+
mapFactoryRegistration<T extends object>(token: string, target: FactoryType<T>, options?: Omit<InjectionRegistration.FactoryOptions, 'token'>): this;
|
|
45
|
+
mapClassRegistration<T extends object>(token: string, target: ConstructorType<T>, options?: Omit<InjectionRegistration.ClassOptions, 'token'>): this;
|
|
46
|
+
mapFactoryInitializer<T extends CoreInitializer>(token: string, target: FactoryType<T>, options?: Omit<InjectionInitializer.DeclarationOptions, 'token'>): this;
|
|
47
|
+
mapClassInitializer<T extends CoreInitializer>(token: string, target: ConstructorType<T>, options?: Omit<InjectionInitializer.DeclarationOptions, 'token'>): this;
|
|
48
|
+
initialize(options?: InjectionRegistration.ResolutionOptions): Promise<void>;
|
|
49
|
+
resolve<T>(token: string, options?: InjectionRegistration.ResolutionOptions): T;
|
|
50
|
+
resolveClass<T extends object>(target: ConstructorType<T>, options?: InjectionRegistration.ResolutionOptions): T;
|
|
51
|
+
resolveFactory<T extends object>(target: FactoryType<T>, options?: InjectionRegistration.ResolutionOptions): T;
|
|
52
|
+
resolveFunction<T>(target: FunctionType<T>, options?: InjectionRegistration.ResolutionOptions): T;
|
|
53
|
+
resolveRegistration<T>(registration: InjectionRegistration<T>, options?: InjectionRegistration.ResolutionOptions): T;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=injection-container.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-container.d.ts","sourceRoot":"","sources":["../src/injection-container.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectionContainer = void 0;
|
|
4
|
+
const injection_registration_1 = require("./injection-registration");
|
|
5
|
+
const injection_initializer_1 = require("./injection-initializer");
|
|
6
|
+
const injection_context_1 = require("./injection-context");
|
|
7
|
+
const injection_bundle_1 = require("./injection-bundle");
|
|
8
|
+
const injection_trace_1 = require("./injection-trace");
|
|
9
|
+
class InjectionContainer {
|
|
10
|
+
static create(options) {
|
|
11
|
+
return new InjectionContainer({
|
|
12
|
+
stack: options?.stack ?? injection_trace_1.InjectionTrace.create(),
|
|
13
|
+
context: options?.context ?? injection_context_1.InjectionContext.create(),
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
_registrations;
|
|
17
|
+
_initializers;
|
|
18
|
+
context;
|
|
19
|
+
trace;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this._registrations = new Map();
|
|
22
|
+
this._initializers = new Map();
|
|
23
|
+
this.context = options.context;
|
|
24
|
+
this.trace = options.stack;
|
|
25
|
+
}
|
|
26
|
+
hasRegistration(token) {
|
|
27
|
+
return this._registrations.has(token);
|
|
28
|
+
}
|
|
29
|
+
hasInitializer(token) {
|
|
30
|
+
return this._initializers.has(token);
|
|
31
|
+
}
|
|
32
|
+
get registrations() {
|
|
33
|
+
return [...this._registrations.values()];
|
|
34
|
+
}
|
|
35
|
+
get initializers() {
|
|
36
|
+
return [...this._initializers.values()];
|
|
37
|
+
}
|
|
38
|
+
get entries() {
|
|
39
|
+
return this.registrations.map((registration) => {
|
|
40
|
+
return [registration.token, Object.create(registration, {
|
|
41
|
+
resolve: { value: (...options) => {
|
|
42
|
+
return this.resolve(registration.token, ...options);
|
|
43
|
+
} }
|
|
44
|
+
})];
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
getRegistration(token) {
|
|
48
|
+
if (!this.hasRegistration(token)) {
|
|
49
|
+
throw new Error(`Could not get registration with token "${token}". InjectionContainer instance does not have a registration for the specified token.`);
|
|
50
|
+
}
|
|
51
|
+
return this._registrations.get(token);
|
|
52
|
+
}
|
|
53
|
+
getInitializer(token) {
|
|
54
|
+
if (!this.hasInitializer(token)) {
|
|
55
|
+
throw new Error(`Could not get initializer with token "${token}". InjectionContainer instance does not have a initializer for the specified token.`);
|
|
56
|
+
}
|
|
57
|
+
return this._initializers.get(token);
|
|
58
|
+
}
|
|
59
|
+
setRegistration(registration) {
|
|
60
|
+
if (this.hasRegistration(registration.token)) {
|
|
61
|
+
throw new Error(`Could not set registration with token "${registration.token}". InjectionContainer instance already has a registration for the specified token.`);
|
|
62
|
+
}
|
|
63
|
+
this._registrations.set(registration.token, registration);
|
|
64
|
+
}
|
|
65
|
+
setInitializer(initializer) {
|
|
66
|
+
if (this.hasInitializer(initializer.token)) {
|
|
67
|
+
throw new Error(`Could not set initializer with token "${initializer.token}". InjectionContainer instance already has a initializer for the specified token.`);
|
|
68
|
+
}
|
|
69
|
+
this._initializers.set(initializer.token, initializer);
|
|
70
|
+
}
|
|
71
|
+
useRegistrations(registrations) {
|
|
72
|
+
registrations.forEach((registration) => this.useRegistration(registration));
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
useRegistration(registration) {
|
|
76
|
+
this.setRegistration(registration.clone({ context: this.context }));
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
useInitializers(initializers) {
|
|
80
|
+
initializers.forEach((initializer) => this.useInitializer(initializer));
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
useInitializer(initializer) {
|
|
84
|
+
this.setInitializer(initializer.clone({ context: this.context }));
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
useValueRegistration(...args) {
|
|
88
|
+
return this.useRegistration(injection_registration_1.InjectionRegistration.createValueRegistration(...args));
|
|
89
|
+
}
|
|
90
|
+
useFunctionRegistration(...args) {
|
|
91
|
+
return this.useRegistration(injection_registration_1.InjectionRegistration.createFunctionRegistration(...args));
|
|
92
|
+
}
|
|
93
|
+
useFactoryRegistration(...args) {
|
|
94
|
+
return this.useRegistration(injection_registration_1.InjectionRegistration.createFactoryRegistration(...args));
|
|
95
|
+
}
|
|
96
|
+
useClassRegistration(...args) {
|
|
97
|
+
return this.useRegistration(injection_registration_1.InjectionRegistration.createClassRegistration(...args));
|
|
98
|
+
}
|
|
99
|
+
useFactoryInitializer(...args) {
|
|
100
|
+
return this.useInitializer(injection_initializer_1.InjectionInitializer.createFactoryInitializer(...args));
|
|
101
|
+
}
|
|
102
|
+
useClassInitializer(...args) {
|
|
103
|
+
return this.useInitializer(injection_initializer_1.InjectionInitializer.createClassInitializer(...args));
|
|
104
|
+
}
|
|
105
|
+
mapValueRegistration(token, target, options) {
|
|
106
|
+
return this.useValueRegistration(target, { ...options, token });
|
|
107
|
+
}
|
|
108
|
+
mapFunctionRegistration(token, target, options) {
|
|
109
|
+
return this.useFunctionRegistration(target, { ...options, token });
|
|
110
|
+
}
|
|
111
|
+
mapFactoryRegistration(token, target, options) {
|
|
112
|
+
return this.useFactoryRegistration(target, { ...options, token });
|
|
113
|
+
}
|
|
114
|
+
mapClassRegistration(token, target, options) {
|
|
115
|
+
return this.useClassRegistration(target, { ...options, token });
|
|
116
|
+
}
|
|
117
|
+
mapFactoryInitializer(token, target, options) {
|
|
118
|
+
return this.useFactoryInitializer(target, { ...options, token });
|
|
119
|
+
}
|
|
120
|
+
mapClassInitializer(token, target, options) {
|
|
121
|
+
return this.useClassInitializer(target, { ...options, token });
|
|
122
|
+
}
|
|
123
|
+
async initialize(options) {
|
|
124
|
+
for await (const initializer of this.initializers) {
|
|
125
|
+
this.setRegistration((await initializer.initialize({ ...options, bundle: injection_bundle_1.InjectionBundle.create({
|
|
126
|
+
context: options?.context ?? this.context,
|
|
127
|
+
bundle: options?.bundle,
|
|
128
|
+
entries: this.entries,
|
|
129
|
+
}) })));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
resolve(token, options) {
|
|
133
|
+
return this.resolveRegistration(this.getRegistration(token), options);
|
|
134
|
+
}
|
|
135
|
+
resolveClass(target, options) {
|
|
136
|
+
return this.resolveRegistration(injection_registration_1.InjectionRegistration.createClassRegistration(target), options);
|
|
137
|
+
}
|
|
138
|
+
resolveFactory(target, options) {
|
|
139
|
+
return this.resolveRegistration(injection_registration_1.InjectionRegistration.createFactoryRegistration(target), options);
|
|
140
|
+
}
|
|
141
|
+
resolveFunction(target, options) {
|
|
142
|
+
return this.resolveRegistration(injection_registration_1.InjectionRegistration.createFunctionRegistration(target), options);
|
|
143
|
+
}
|
|
144
|
+
resolveRegistration(registration, options) {
|
|
145
|
+
if (!options?.context) {
|
|
146
|
+
return this.resolveRegistration(registration, { ...options,
|
|
147
|
+
context: injection_context_1.InjectionContext.create()
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
return registration.resolve({
|
|
151
|
+
context: options.context,
|
|
152
|
+
bundle: injection_bundle_1.InjectionBundle.create({
|
|
153
|
+
context: options.context,
|
|
154
|
+
bundle: options.bundle,
|
|
155
|
+
entries: this.entries,
|
|
156
|
+
}),
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.InjectionContainer = InjectionContainer;
|
|
161
|
+
//# sourceMappingURL=injection-container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-container.js","sourceRoot":"","sources":["../src/injection-container.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConstructorType } from '@nodelith/utilities'\nimport { FunctionType } from '@nodelith/utilities'\nimport { FactoryType } from '@nodelith/utilities'\nimport { CoreInitializer } from '@nodelith/core'\n\nimport { InjectionRegistration } from './injection-registration'\nimport { InjectionInitializer } from './injection-initializer'\nimport { InjectionContext } from './injection-context'\nimport { InjectionBundle } from './injection-bundle'\nimport { InjectionTrace } from './injection-trace'\nimport { InjectionEntry } from './injection-entry'\n\nexport declare namespace InjectionContainer {\n export type DeclarationOptions = {\n context: InjectionContext\n stack: InjectionTrace\n }\n}\n\nexport class InjectionContainer {\n public static create(options?: Partial<InjectionContainer.DeclarationOptions>): InjectionContainer {\n return new InjectionContainer({\n stack: options?.stack ?? InjectionTrace.create(),\n context: options?.context ?? InjectionContext.create(),\n })\n }\n\n private readonly _registrations: Map<string, InjectionRegistration>\n \n private readonly _initializers: Map<string, InjectionInitializer>\n\n protected readonly context: InjectionContext;\n\n protected readonly trace: InjectionTrace;\n\n protected constructor(options: InjectionContainer.DeclarationOptions) {\n this._registrations = new Map()\n this._initializers = new Map()\n this.context = options.context\n this.trace = options.stack\n }\n\n protected hasRegistration(token: string): boolean {\n return this._registrations.has(token)\n }\n\n protected hasInitializer(token: string): boolean {\n return this._initializers.has(token)\n }\n\n protected get registrations(): InjectionRegistration[] {\n return [ ...this._registrations.values() ]\n }\n\n protected get initializers(): InjectionInitializer[] {\n return [ ...this._initializers.values() ]\n }\n\n protected get entries(): InjectionEntry[] {\n return this.registrations.map((registration) => {\n return [registration.token, Object.create(registration, {\n resolve: { value: (...options: Parameters<InjectionRegistration['resolve']>) => {\n return this.resolve(registration.token, ...options )\n }}\n })]\n })\n }\n\n protected getRegistration(token: string): InjectionRegistration {\n if(!this.hasRegistration(token)) {\n throw new Error(`Could not get registration with token \"${token}\". InjectionContainer instance does not have a registration for the specified token.`)\n }\n\n return this._registrations.get(token)!\n }\n\n protected getInitializer(token: string): InjectionInitializer {\n if(!this.hasInitializer(token)) {\n throw new Error(`Could not get initializer with token \"${token}\". InjectionContainer instance does not have a initializer for the specified token.`)\n }\n\n return this._initializers.get(token)!\n }\n\n protected setRegistration(registration: InjectionRegistration): void {\n if(this.hasRegistration(registration.token)) {\n throw new Error(`Could not set registration with token \"${registration.token}\". InjectionContainer instance already has a registration for the specified token.`)\n }\n\n this._registrations.set(registration.token, registration)\n }\n\n protected setInitializer(initializer: InjectionInitializer): void {\n if(this.hasInitializer(initializer.token)) {\n throw new Error(`Could not set initializer with token \"${initializer.token}\". InjectionContainer instance already has a initializer for the specified token.`)\n }\n\n this._initializers.set(initializer.token, initializer)\n }\n\n public useRegistrations(registrations: InjectionRegistration[]) {\n registrations.forEach((registration) => this.useRegistration(registration))\n return this\n }\n\n public useRegistration(registration: InjectionRegistration) {\n this.setRegistration(registration.clone({ context: this.context }))\n return this\n }\n\n public useInitializers(initializers: InjectionInitializer[]) {\n initializers.forEach((initializer) => this.useInitializer(initializer))\n return this\n }\n\n public useInitializer(initializer: InjectionInitializer) {\n this.setInitializer(initializer.clone({ context: this.context }))\n return this\n }\n\n public useValueRegistration<T>(...args: Parameters<typeof InjectionRegistration.createValueRegistration<T>>): this {\n return this.useRegistration(InjectionRegistration.createValueRegistration(...args))\n }\n\n public useFunctionRegistration<T>(...args: Parameters<typeof InjectionRegistration.createFunctionRegistration<T>>): this {\n return this.useRegistration(InjectionRegistration.createFunctionRegistration(...args))\n }\n\n public useFactoryRegistration<T extends object>(...args: Parameters<typeof InjectionRegistration.createFactoryRegistration<T>>): this {\n return this.useRegistration(InjectionRegistration.createFactoryRegistration(...args))\n }\n\n public useClassRegistration<T extends object>(...args: Parameters<typeof InjectionRegistration.createClassRegistration<T>>): this {\n return this.useRegistration(InjectionRegistration.createClassRegistration(...args))\n }\n\n public useFactoryInitializer<T extends CoreInitializer<object>>(...args: Parameters<typeof InjectionInitializer.createFactoryInitializer<T>>): this {\n return this.useInitializer(InjectionInitializer.createFactoryInitializer(...args))\n }\n\n public useClassInitializer<T extends CoreInitializer<object>>(...args: Parameters<typeof InjectionInitializer.createClassInitializer<T>>): this {\n return this.useInitializer(InjectionInitializer.createClassInitializer(...args))\n }\n\n public mapValueRegistration<T>(token: string, target: T, options?: Omit<InjectionRegistration.ValueOptions, 'token'>): this {\n return this.useValueRegistration(target, { ...options, token })\n }\n\n public mapFunctionRegistration<T>(token: string, target: FunctionType<T>, options?: Omit<InjectionRegistration.FunctionOptions, 'token'>): this {\n return this.useFunctionRegistration(target, { ...options, token })\n }\n\n public mapFactoryRegistration<T extends object>(token: string, target: FactoryType<T>, options?: Omit<InjectionRegistration.FactoryOptions, 'token'>): this {\n return this.useFactoryRegistration(target, { ...options, token })\n }\n\n public mapClassRegistration<T extends object>(token: string, target: ConstructorType<T>, options?: Omit<InjectionRegistration.ClassOptions, 'token'>): this {\n return this.useClassRegistration(target, { ...options, token })\n }\n\n public mapFactoryInitializer<T extends CoreInitializer>(token: string, target: FactoryType<T>, options?: Omit<InjectionInitializer.DeclarationOptions, 'token'>): this {\n return this.useFactoryInitializer(target, { ...options, token })\n }\n\n public mapClassInitializer<T extends CoreInitializer>(token: string, target: ConstructorType<T>, options?: Omit<InjectionInitializer.DeclarationOptions, 'token'>): this {\n return this.useClassInitializer(target, { ...options, token })\n }\n\n public async initialize(options?: InjectionRegistration.ResolutionOptions): Promise<void> {\n for await (const initializer of this.initializers) {\n this.setRegistration((await initializer.initialize({ ...options, bundle: InjectionBundle.create({\n context: options?.context ?? this.context,\n bundle: options?.bundle,\n entries: this.entries,\n })})))\n }\n }\n\n public resolve<T>(token: string, options?: InjectionRegistration.ResolutionOptions): T {\n return this.resolveRegistration(this.getRegistration(token), options)\n }\n\n public resolveClass<T extends object>(target: ConstructorType<T>, options?: InjectionRegistration.ResolutionOptions): T {\n return this.resolveRegistration(InjectionRegistration.createClassRegistration(target), options)\n }\n\n public resolveFactory<T extends object>(target: FactoryType<T>, options?: InjectionRegistration.ResolutionOptions): T {\n return this.resolveRegistration(InjectionRegistration.createFactoryRegistration(target), options)\n }\n\n public resolveFunction<T>(target: FunctionType<T>, options?: InjectionRegistration.ResolutionOptions): T {\n return this.resolveRegistration(InjectionRegistration.createFunctionRegistration<T>(target), options)\n }\n\n public resolveRegistration<T>(registration: InjectionRegistration<T>, options?: InjectionRegistration.ResolutionOptions): T {\n if(!options?.context) {\n return this.resolveRegistration(registration, { ...options,\n context: InjectionContext.create()\n })\n }\n\n return registration.resolve({\n context: options.context,\n bundle: InjectionBundle.create({\n context: options.context,\n bundle: options.bundle,\n entries: this.entries,\n }),\n })\n }\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Identity } from '@nodelith/identity';
|
|
2
|
+
export declare class InjectionContext {
|
|
3
|
+
static create(): InjectionContext;
|
|
4
|
+
private constructor();
|
|
5
|
+
get identity(): Identity | undefined;
|
|
6
|
+
private instances;
|
|
7
|
+
resolve<T>(target: (...args: any[]) => T, ...args: any[]): T;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=injection-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-context.d.ts","sourceRoot":"","sources":["../src/injection-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,qBAAa,gBAAgB;WACb,MAAM;IAIpB,OAAO;IAIP,IAAW,QAAQ,yBAElB;IAED,OAAO,CAAC,SAAS,CAAgC;IAE1C,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;CAapE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectionContext = void 0;
|
|
4
|
+
const identity_1 = require("@nodelith/identity");
|
|
5
|
+
class InjectionContext {
|
|
6
|
+
static create() {
|
|
7
|
+
return new InjectionContext();
|
|
8
|
+
}
|
|
9
|
+
constructor() {
|
|
10
|
+
identity_1.Identity.assign(this);
|
|
11
|
+
}
|
|
12
|
+
get identity() {
|
|
13
|
+
return identity_1.Identity.extract(this);
|
|
14
|
+
}
|
|
15
|
+
instances = new Map();
|
|
16
|
+
resolve(target, ...args) {
|
|
17
|
+
const identity = identity_1.Identity.obtain(target);
|
|
18
|
+
if (this.instances.has(identity)) {
|
|
19
|
+
return this.instances.get(identity);
|
|
20
|
+
}
|
|
21
|
+
const result = target(...args);
|
|
22
|
+
this.instances.set(identity, result);
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.InjectionContext = InjectionContext;
|
|
27
|
+
//# sourceMappingURL=injection-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-context.js","sourceRoot":"","sources":["../src/injection-context.ts"],"names":[],"mappings":";;;AAAA,iDAA6C;AAE7C,MAAa,gBAAgB;IACpB,MAAM,CAAC,MAAM;QAClB,OAAO,IAAI,gBAAgB,EAAE,CAAA;IAC/B,CAAC;IAED;QACE,mBAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,mBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAEO,SAAS,GAAuB,IAAI,GAAG,EAAE,CAAA;IAE1C,OAAO,CAAI,MAA6B,EAAE,GAAG,IAAW;QAC7D,MAAM,QAAQ,GAAG,mBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAExC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACrC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAA;QAE9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAEpC,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AA5BD,4CA4BC","sourcesContent":["import { Identity } from '@nodelith/identity'\n\nexport class InjectionContext {\n public static create() {\n return new InjectionContext()\n }\n\n private constructor() {\n Identity.assign(this)\n }\n\n public get identity() {\n return Identity.extract(this)\n }\n\n private instances: Map<Identity, any> = new Map()\n \n public resolve<T>(target: (...args: any[]) => T, ...args: any[]): T {\n const identity = Identity.obtain(target)\n\n if (this.instances.has(identity)) {\n return this.instances.get(identity)\n }\n\n const result = target(...args)\n\n this.instances.set(identity, result)\n\n return result\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-entry.d.ts","sourceRoot":"","sources":["../src/injection-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-entry.js","sourceRoot":"","sources":["../src/injection-entry.ts"],"names":[],"mappings":"","sourcesContent":["import { InjectionRegistration } from './injection-registration';\n\nexport type InjectionEntry = [string, InjectionRegistration]"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ConstructorType } from '@nodelith/utilities';
|
|
2
|
+
import { FactoryType } from '@nodelith/utilities';
|
|
3
|
+
import { CoreInitializer } from '@nodelith/core';
|
|
4
|
+
import { InjectionRegistration } from './injection-registration';
|
|
5
|
+
import { InjectionContext } from './injection-context';
|
|
6
|
+
export declare namespace InjectionInitializer {
|
|
7
|
+
type DeclarationOptions = {
|
|
8
|
+
readonly token?: string | undefined;
|
|
9
|
+
readonly params?: string[] | undefined;
|
|
10
|
+
readonly context?: InjectionContext | undefined;
|
|
11
|
+
readonly visibility?: InjectionRegistration.VisibilityMode | undefined;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare class InjectionInitializer<T = any> {
|
|
15
|
+
static createClassInitializer<T extends CoreInitializer>(target: ConstructorType<T>, options?: InjectionInitializer.DeclarationOptions): InjectionInitializer<T>;
|
|
16
|
+
static createFactoryInitializer<T extends CoreInitializer>(target: FactoryType<T>, options?: InjectionInitializer.DeclarationOptions): InjectionInitializer<T>;
|
|
17
|
+
private readonly registration;
|
|
18
|
+
get token(): string;
|
|
19
|
+
get visibility(): "public" | "private";
|
|
20
|
+
protected constructor(registration: InjectionRegistration<CoreInitializer<T>>);
|
|
21
|
+
clone(options?: InjectionRegistration.DeclarationOptions): InjectionInitializer<T>;
|
|
22
|
+
initialize(...args: Parameters<typeof this.registration.resolve>): Promise<InjectionRegistration<T>>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=injection-initializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-initializer.d.ts","sourceRoot":"","sources":["../src/injection-initializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,MAAM,CAAC,OAAO,WAAW,oBAAoB,CAAC;IAC5C,KAAY,kBAAkB,GAAG;QAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;QACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;QAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC,cAAc,GAAG,SAAS,CAAA;KACvE,CAAA;CACF;AAED,qBAAa,oBAAoB,CAAC,CAAC,GAAG,GAAG;WACzB,sBAAsB,CAAC,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,oBAAoB,CAAC,kBAAkB,GAAG,oBAAoB,CAAC,CAAC,CAAC;WAKzJ,wBAAwB,CAAC,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,oBAAoB,CAAC,kBAAkB,GAAG,oBAAoB,CAAC,CAAC,CAAC;IAKrK,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2C;IAExE,IAAW,KAAK,WAEf;IAED,IAAW,UAAU,yBAEpB;IAED,SAAS,aAAa,YAAY,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAItE,KAAK,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,kBAAkB,GAAG,oBAAoB,CAAC,CAAC,CAAC;IAK5E,UAAU,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;CAOlH"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectionInitializer = void 0;
|
|
4
|
+
const injection_registration_1 = require("./injection-registration");
|
|
5
|
+
class InjectionInitializer {
|
|
6
|
+
static createClassInitializer(target, options) {
|
|
7
|
+
const registration = injection_registration_1.InjectionRegistration.createClassRegistration(target, options);
|
|
8
|
+
return new InjectionInitializer(registration);
|
|
9
|
+
}
|
|
10
|
+
static createFactoryInitializer(target, options) {
|
|
11
|
+
const registration = injection_registration_1.InjectionRegistration.createFactoryRegistration(target, options);
|
|
12
|
+
return new InjectionInitializer(registration);
|
|
13
|
+
}
|
|
14
|
+
registration;
|
|
15
|
+
get token() {
|
|
16
|
+
return this.registration.token;
|
|
17
|
+
}
|
|
18
|
+
get visibility() {
|
|
19
|
+
return this.registration.visibility;
|
|
20
|
+
}
|
|
21
|
+
constructor(registration) {
|
|
22
|
+
this.registration = registration;
|
|
23
|
+
}
|
|
24
|
+
clone(options) {
|
|
25
|
+
const registration = this.registration.clone(options);
|
|
26
|
+
return new InjectionInitializer(registration);
|
|
27
|
+
}
|
|
28
|
+
async initialize(...args) {
|
|
29
|
+
const value = await this.registration.resolve(...args).initialize();
|
|
30
|
+
return injection_registration_1.InjectionRegistration.createValueRegistration(value, {
|
|
31
|
+
visibility: this.registration.visibility,
|
|
32
|
+
token: this.registration.token,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.InjectionInitializer = InjectionInitializer;
|
|
37
|
+
//# sourceMappingURL=injection-initializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-initializer.js","sourceRoot":"","sources":["../src/injection-initializer.ts"],"names":[],"mappings":";;;AAIA,qEAAgE;AAYhE,MAAa,oBAAoB;IACxB,MAAM,CAAC,sBAAsB,CAA4B,MAA0B,EAAE,OAAiD;QAC3I,MAAM,YAAY,GAAG,8CAAqB,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACnF,OAAO,IAAI,oBAAoB,CAAC,YAAY,CAAC,CAAA;IAC/C,CAAC;IAEM,MAAM,CAAC,wBAAwB,CAA4B,MAAsB,EAAE,OAAiD;QACzI,MAAM,YAAY,GAAG,8CAAqB,CAAC,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACrF,OAAO,IAAI,oBAAoB,CAAC,YAAY,CAAC,CAAA;IAC/C,CAAC;IAEgB,YAAY,CAA2C;IAExE,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAA;IAChC,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAA;IACrC,CAAC;IAED,YAAsB,YAAuD;QAC3E,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,OAAkD;QAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACrD,OAAO,IAAI,oBAAoB,CAAC,YAAY,CAAC,CAAA;IAC/C,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,GAAG,IAAkD;QAC3E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU,EAAE,CAAA;QACnE,OAAO,8CAAqB,CAAC,uBAAuB,CAAC,KAAK,EAAE;YAC1D,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU;YACxC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;SAC/B,CAAC,CAAA;IACJ,CAAC;CACF;AArCD,oDAqCC","sourcesContent":["import { ConstructorType } from '@nodelith/utilities'\nimport { FactoryType } from '@nodelith/utilities'\nimport { CoreInitializer } from '@nodelith/core'\n\nimport { InjectionRegistration } from './injection-registration'\nimport { InjectionContext } from './injection-context'\n\nexport declare namespace InjectionInitializer {\n export type DeclarationOptions = {\n readonly token?: string | undefined\n readonly params?: string[] | undefined\n readonly context?: InjectionContext | undefined\n readonly visibility?: InjectionRegistration.VisibilityMode | undefined\n }\n}\n\nexport class InjectionInitializer<T = any> {\n public static createClassInitializer<T extends CoreInitializer>(target: ConstructorType<T>, options?: InjectionInitializer.DeclarationOptions): InjectionInitializer<T> {\n const registration = InjectionRegistration.createClassRegistration(target, options)\n return new InjectionInitializer(registration)\n }\n\n public static createFactoryInitializer<T extends CoreInitializer>(target: FactoryType<T>, options?: InjectionInitializer.DeclarationOptions): InjectionInitializer<T> {\n const registration = InjectionRegistration.createFactoryRegistration(target, options)\n return new InjectionInitializer(registration)\n }\n\n private readonly registration: InjectionRegistration<CoreInitializer<T>>\n\n public get token() {\n return this.registration.token\n }\n\n public get visibility() {\n return this.registration.visibility\n }\n\n protected constructor(registration: InjectionRegistration<CoreInitializer<T>>) {\n this.registration = registration\n }\n\n public clone(options?: InjectionRegistration.DeclarationOptions): InjectionInitializer<T> {\n const registration = this.registration.clone(options)\n return new InjectionInitializer(registration)\n }\n\n public async initialize(...args: Parameters<typeof this.registration.resolve>): Promise<InjectionRegistration<T>> {\n const value = await this.registration.resolve(...args).initialize()\n return InjectionRegistration.createValueRegistration(value, {\n visibility: this.registration.visibility,\n token: this.registration.token,\n })\n }\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { InjectionRegistration } from './injection-registration';
|
|
2
|
+
import { InjectionContainer } from './injection-container';
|
|
3
|
+
import { InjectionContext } from './injection-context';
|
|
4
|
+
import { InjectionTrace } from './injection-trace';
|
|
5
|
+
export declare namespace InjectionModule {
|
|
6
|
+
type DeclarationOptions = {
|
|
7
|
+
context: InjectionContext;
|
|
8
|
+
stack: InjectionTrace;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export declare class InjectionModule extends InjectionContainer {
|
|
12
|
+
static create(options?: Partial<InjectionModule.DeclarationOptions>): InjectionModule;
|
|
13
|
+
private readonly _modules;
|
|
14
|
+
protected get modules(): InjectionModule[];
|
|
15
|
+
protected hasModule(module: InjectionModule): boolean;
|
|
16
|
+
protected addModule(module: InjectionModule): Set<InjectionModule>;
|
|
17
|
+
protected get entries(): [string, InjectionRegistration][];
|
|
18
|
+
protected findRegistration(token: string): InjectionRegistration | undefined;
|
|
19
|
+
useModules(modules: InjectionModule[]): this;
|
|
20
|
+
useModule(module: InjectionModule): this;
|
|
21
|
+
resolve<T>(token: string, options?: InjectionRegistration.ResolutionOptions): T;
|
|
22
|
+
initialize(options?: InjectionRegistration.ResolutionOptions): Promise<void>;
|
|
23
|
+
clone(options?: Partial<InjectionModule.DeclarationOptions>): InjectionModule;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=injection-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-module.d.ts","sourceRoot":"","sources":["../src/injection-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,MAAM,CAAC,OAAO,WAAW,eAAe,CAAC;IACvC,KAAY,kBAAkB,GAAG;QAC/B,OAAO,EAAE,gBAAgB,CAAA;QACzB,KAAK,EAAE,cAAc,CAAA;KACtB,CAAA;CACF;AAED,qBAAa,eAAgB,SAAQ,kBAAkB;WAC9B,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,kBAAkB,CAAC,GAAG,eAAe;IAOrG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAE3D,SAAS,KAAK,OAAO,sBAEpB;IAED,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe;IAI3C,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe;IAI3C,cAAuB,OAAO,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAAE,CAIlE;IAED,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAerE,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI;IAK5C,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAK/B,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,CAAC,iBAAiB,GAAG,CAAC;IAUzE,UAAU,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3F,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,kBAAkB,CAAC,GAAG,eAAe;CAOrF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectionModule = void 0;
|
|
4
|
+
const injection_container_1 = require("./injection-container");
|
|
5
|
+
const injection_context_1 = require("./injection-context");
|
|
6
|
+
const injection_trace_1 = require("./injection-trace");
|
|
7
|
+
class InjectionModule extends injection_container_1.InjectionContainer {
|
|
8
|
+
static create(options) {
|
|
9
|
+
return new InjectionModule({
|
|
10
|
+
stack: options?.stack ?? injection_trace_1.InjectionTrace.create(),
|
|
11
|
+
context: options?.context ?? injection_context_1.InjectionContext.create(),
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
_modules = new Set();
|
|
15
|
+
get modules() {
|
|
16
|
+
return [...this._modules];
|
|
17
|
+
}
|
|
18
|
+
hasModule(module) {
|
|
19
|
+
return this._modules.has(module);
|
|
20
|
+
}
|
|
21
|
+
addModule(module) {
|
|
22
|
+
return this._modules.add(module);
|
|
23
|
+
}
|
|
24
|
+
get entries() {
|
|
25
|
+
return [...this.modules.flatMap((module) => {
|
|
26
|
+
return module.entries;
|
|
27
|
+
}), ...super.entries];
|
|
28
|
+
}
|
|
29
|
+
findRegistration(token) {
|
|
30
|
+
if (this.hasRegistration(token)) {
|
|
31
|
+
return this['getRegistration'](token);
|
|
32
|
+
}
|
|
33
|
+
for (const module of this.modules) {
|
|
34
|
+
const registration = module.findRegistration(token);
|
|
35
|
+
if (registration) {
|
|
36
|
+
return registration;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
useModules(modules) {
|
|
42
|
+
modules.forEach((module) => this.useModule(module));
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
useModule(module) {
|
|
46
|
+
this.addModule(module.clone({ context: this.context }));
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
resolve(token, options) {
|
|
50
|
+
const registration = this.findRegistration(token);
|
|
51
|
+
if (!registration) {
|
|
52
|
+
throw new Error(`Could not get registration with token "${token}". InjectionModule instance does not have a registration for the specified token.`);
|
|
53
|
+
}
|
|
54
|
+
return this.resolveRegistration(registration, options);
|
|
55
|
+
}
|
|
56
|
+
async initialize(options) {
|
|
57
|
+
for await (const module of this.modules) {
|
|
58
|
+
await module.initialize(options);
|
|
59
|
+
}
|
|
60
|
+
await super.initialize(options);
|
|
61
|
+
}
|
|
62
|
+
clone(options) {
|
|
63
|
+
const module = InjectionModule.create(options);
|
|
64
|
+
module.useRegistrations(this.registrations);
|
|
65
|
+
module.useInitializers(this.initializers);
|
|
66
|
+
module.useModules(this.modules);
|
|
67
|
+
return module;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.InjectionModule = InjectionModule;
|
|
71
|
+
//# sourceMappingURL=injection-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-module.js","sourceRoot":"","sources":["../src/injection-module.ts"],"names":[],"mappings":"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","sourcesContent":["import { InjectionRegistration } from './injection-registration'\nimport { InjectionContainer } from './injection-container'\nimport { InjectionContext } from './injection-context'\nimport { InjectionTrace } from './injection-trace'\n\nexport declare namespace InjectionModule {\n export type DeclarationOptions = {\n context: InjectionContext\n stack: InjectionTrace\n }\n}\n\nexport class InjectionModule extends InjectionContainer {\n public static override create(options?: Partial<InjectionModule.DeclarationOptions>): InjectionModule {\n return new InjectionModule({\n stack: options?.stack ?? InjectionTrace.create(),\n context: options?.context ?? InjectionContext.create(),\n })\n }\n\n private readonly _modules: Set<InjectionModule> = new Set()\n\n protected get modules() {\n return [...this._modules]\n }\n\n protected hasModule(module: InjectionModule) {\n return this._modules.has(module)\n }\n\n protected addModule(module: InjectionModule) {\n return this._modules.add(module)\n }\n\n protected override get entries(): [string, InjectionRegistration][] {\n return [...this.modules.flatMap((module) => {\n return module.entries\n }), ...super.entries]\n }\n\n protected findRegistration(token: string): InjectionRegistration | undefined {\n if (this.hasRegistration(token)) {\n return this['getRegistration'](token)\n }\n\n for (const module of this.modules) {\n const registration = module.findRegistration(token)\n if (registration) {\n return registration\n }\n }\n\n return undefined\n }\n\n public useModules(modules: InjectionModule[]): this {\n modules.forEach((module) => this.useModule(module))\n return this\n }\n\n public useModule(module: InjectionModule): this {\n this.addModule(module.clone({ context: this.context }))\n return this\n }\n\n public override resolve<T>(token: string, options?: InjectionRegistration.ResolutionOptions): T {\n const registration = this.findRegistration(token)\n\n if (!registration) {\n throw new Error(`Could not get registration with token \"${token}\". InjectionModule instance does not have a registration for the specified token.`)\n }\n\n return this.resolveRegistration(registration, options)\n }\n\n public override async initialize(options?: InjectionRegistration.ResolutionOptions): Promise<void> {\n for await (const module of this.modules) {\n await module.initialize(options)\n }\n await super.initialize(options)\n }\n\n public clone(options?: Partial<InjectionModule.DeclarationOptions>): InjectionModule {\n const module = InjectionModule.create(options)\n module.useRegistrations(this.registrations)\n module.useInitializers(this.initializers)\n module.useModules(this.modules)\n return module\n }\n}\n"]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ConstructorType } from '@nodelith/utilities';
|
|
2
|
+
import { FunctionType } from '@nodelith/utilities';
|
|
3
|
+
import { FactoryType } from '@nodelith/utilities';
|
|
4
|
+
import { InjectionContext } from './injection-context';
|
|
5
|
+
import { InjectionBundle } from './injection-bundle';
|
|
6
|
+
export declare namespace InjectionRegistration {
|
|
7
|
+
type VisibilityMode = (typeof InjectionRegistration.VISIBILITY_MODES)[number];
|
|
8
|
+
type LifecycleMode = (typeof InjectionRegistration.LIFECYCLE_MODES)[number];
|
|
9
|
+
type ResolutionOptions = DeclarationOptions & {
|
|
10
|
+
readonly bundle?: InjectionBundle | undefined;
|
|
11
|
+
};
|
|
12
|
+
type DeclarationOptions = {
|
|
13
|
+
readonly context?: InjectionContext | undefined;
|
|
14
|
+
};
|
|
15
|
+
type ValueOptions = {
|
|
16
|
+
readonly token?: string | undefined;
|
|
17
|
+
readonly visibility?: InjectionRegistration.VisibilityMode | undefined;
|
|
18
|
+
};
|
|
19
|
+
type FunctionOptions = {
|
|
20
|
+
readonly token?: string | undefined;
|
|
21
|
+
readonly params?: string[] | undefined;
|
|
22
|
+
readonly context?: InjectionContext | undefined;
|
|
23
|
+
readonly lifecycle?: InjectionRegistration.LifecycleMode | undefined;
|
|
24
|
+
readonly visibility?: InjectionRegistration.VisibilityMode | undefined;
|
|
25
|
+
};
|
|
26
|
+
type ClassOptions = {
|
|
27
|
+
readonly token?: string | undefined;
|
|
28
|
+
readonly params?: string[] | undefined;
|
|
29
|
+
readonly context?: InjectionContext | undefined;
|
|
30
|
+
readonly lifecycle?: InjectionRegistration.LifecycleMode | undefined;
|
|
31
|
+
readonly visibility?: InjectionRegistration.VisibilityMode | undefined;
|
|
32
|
+
};
|
|
33
|
+
type FactoryOptions = {
|
|
34
|
+
readonly token?: string | undefined;
|
|
35
|
+
readonly params?: string[] | undefined;
|
|
36
|
+
readonly context?: InjectionContext | undefined;
|
|
37
|
+
readonly lifecycle?: InjectionRegistration.LifecycleMode | undefined;
|
|
38
|
+
readonly visibility?: InjectionRegistration.VisibilityMode | undefined;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface InjectionRegistration<T = any> {
|
|
42
|
+
clone(options?: InjectionRegistration.DeclarationOptions): InjectionRegistration<T>;
|
|
43
|
+
resolve(options?: InjectionRegistration.ResolutionOptions): T;
|
|
44
|
+
}
|
|
45
|
+
export declare class InjectionRegistration<T = any> {
|
|
46
|
+
static createValueRegistration<T>(target: T, options?: InjectionRegistration.ValueOptions): InjectionRegistration<T>;
|
|
47
|
+
static createFunctionRegistration<T>(target: FunctionType<T>, options?: InjectionRegistration.FunctionOptions): InjectionRegistration<T>;
|
|
48
|
+
static createClassRegistration<T extends object>(target: ConstructorType<T>, options?: InjectionRegistration.ClassOptions): InjectionRegistration<T>;
|
|
49
|
+
static createFactoryRegistration<T extends object>(target: FactoryType<T>, options?: InjectionRegistration.FactoryOptions): InjectionRegistration<T>;
|
|
50
|
+
static readonly DEFAULT_LIFECYCLE_MODE: InjectionRegistration.LifecycleMode;
|
|
51
|
+
static readonly DEFAULT_VISIBILITY_MODE: InjectionRegistration.VisibilityMode;
|
|
52
|
+
static readonly LIFECYCLE_MODES: readonly ["singleton", "transient", "scoped"];
|
|
53
|
+
static readonly VISIBILITY_MODES: readonly ["public", "private"];
|
|
54
|
+
private readonly resolver;
|
|
55
|
+
private readonly context;
|
|
56
|
+
readonly token: string;
|
|
57
|
+
readonly params: string[];
|
|
58
|
+
readonly lifecycle: InjectionRegistration.LifecycleMode;
|
|
59
|
+
readonly visibility: InjectionRegistration.VisibilityMode;
|
|
60
|
+
protected constructor(resolver: FunctionType<T>, options?: {
|
|
61
|
+
readonly token?: string | undefined;
|
|
62
|
+
readonly params?: string[] | undefined;
|
|
63
|
+
readonly context?: InjectionContext | undefined;
|
|
64
|
+
readonly lifecycle?: InjectionRegistration.LifecycleMode | undefined;
|
|
65
|
+
readonly visibility?: InjectionRegistration.VisibilityMode | undefined;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=injection-registration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-registration.d.ts","sourceRoot":"","sources":["../src/injection-registration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectionRegistration = void 0;
|
|
4
|
+
const utilities_1 = require("@nodelith/utilities");
|
|
5
|
+
const utilities_2 = require("@nodelith/utilities");
|
|
6
|
+
const utilities_3 = require("@nodelith/utilities");
|
|
7
|
+
const identity_1 = require("@nodelith/identity");
|
|
8
|
+
const injection_resolver_1 = require("./injection-resolver");
|
|
9
|
+
const injection_context_1 = require("./injection-context");
|
|
10
|
+
const injection_bundle_1 = require("./injection-bundle");
|
|
11
|
+
class InjectionRegistration {
|
|
12
|
+
static createValueRegistration(target, options) {
|
|
13
|
+
return new InjectionRegistration(injection_resolver_1.InjectionResolver.createValueResolver(target), options);
|
|
14
|
+
}
|
|
15
|
+
static createFunctionRegistration(target, options) {
|
|
16
|
+
return new InjectionRegistration(injection_resolver_1.InjectionResolver.createFunctionResolver(target), { ...options,
|
|
17
|
+
params: options?.params ?? utilities_2.FunctionUtilities.extractParameters(target)
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
static createClassRegistration(target, options) {
|
|
21
|
+
return new InjectionRegistration(injection_resolver_1.InjectionResolver.createClassResolver(target), { ...options,
|
|
22
|
+
params: options?.params ?? utilities_1.ConstructorUtilities.extractParameters(target)
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
static createFactoryRegistration(target, options) {
|
|
26
|
+
return new InjectionRegistration(injection_resolver_1.InjectionResolver.createFactoryResolver(target), { ...options,
|
|
27
|
+
params: options?.params ?? utilities_3.FactoryUtilities.extractParameters(target)
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
static DEFAULT_LIFECYCLE_MODE = 'singleton';
|
|
31
|
+
static DEFAULT_VISIBILITY_MODE = 'public';
|
|
32
|
+
static LIFECYCLE_MODES = ['singleton', 'transient', 'scoped'];
|
|
33
|
+
static VISIBILITY_MODES = ['public', 'private'];
|
|
34
|
+
resolver;
|
|
35
|
+
context;
|
|
36
|
+
token;
|
|
37
|
+
params;
|
|
38
|
+
lifecycle;
|
|
39
|
+
visibility;
|
|
40
|
+
constructor(resolver, options) {
|
|
41
|
+
this.resolver = resolver;
|
|
42
|
+
this.params = options?.params ?? [];
|
|
43
|
+
this.token = options?.token ?? identity_1.Identity.obtain(resolver);
|
|
44
|
+
this.context = options?.context ?? injection_context_1.InjectionContext.create();
|
|
45
|
+
this.lifecycle = options?.lifecycle ?? InjectionRegistration.DEFAULT_LIFECYCLE_MODE;
|
|
46
|
+
this.visibility = options?.visibility ?? InjectionRegistration.DEFAULT_VISIBILITY_MODE;
|
|
47
|
+
}
|
|
48
|
+
clone(options) {
|
|
49
|
+
return new InjectionRegistration(this.resolver, {
|
|
50
|
+
context: options?.context ?? this.context,
|
|
51
|
+
token: this.token,
|
|
52
|
+
params: this.params,
|
|
53
|
+
lifecycle: this.lifecycle,
|
|
54
|
+
visibility: this.visibility,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
resolve(options) {
|
|
58
|
+
const context = options?.context ?? injection_context_1.InjectionContext.create();
|
|
59
|
+
const bundle = options?.bundle ?? injection_bundle_1.InjectionBundle.create();
|
|
60
|
+
const args = this.params?.map(param => {
|
|
61
|
+
return bundle[param];
|
|
62
|
+
}) ?? [];
|
|
63
|
+
if (this.lifecycle === 'transient') {
|
|
64
|
+
return this.resolver(...args);
|
|
65
|
+
}
|
|
66
|
+
if (this.lifecycle === 'singleton') {
|
|
67
|
+
return this.context.resolve(this.resolver, ...args);
|
|
68
|
+
}
|
|
69
|
+
if (this.lifecycle === 'scoped') {
|
|
70
|
+
return context.resolve(this.resolver, ...args);
|
|
71
|
+
}
|
|
72
|
+
throw new Error(`Could not resolve registration. Invalid "${this.lifecycle}" lifecycle.`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.InjectionRegistration = InjectionRegistration;
|
|
76
|
+
//# sourceMappingURL=injection-registration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-registration.js","sourceRoot":"","sources":["../src/injection-registration.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConstructorUtilities } from '@nodelith/utilities'\nimport { FunctionUtilities } from '@nodelith/utilities'\nimport { FactoryUtilities } from '@nodelith/utilities'\nimport { ConstructorType } from '@nodelith/utilities'\nimport { FunctionType } from '@nodelith/utilities'\nimport { FactoryType } from '@nodelith/utilities'\nimport { Identity } from '@nodelith/identity'\n\nimport { InjectionResolver } from './injection-resolver'\nimport { InjectionContext } from './injection-context'\nimport { InjectionBundle } from './injection-bundle'\n\nexport declare namespace InjectionRegistration {\n export type VisibilityMode = (typeof InjectionRegistration.VISIBILITY_MODES)[number]\n\n export type LifecycleMode = (typeof InjectionRegistration.LIFECYCLE_MODES)[number]\n\n export type ResolutionOptions = DeclarationOptions & {\n readonly bundle?: InjectionBundle | undefined\n }\n\n export type DeclarationOptions = {\n readonly context?: InjectionContext | undefined\n }\n\n export type ValueOptions = {\n readonly token?: string | undefined\n readonly visibility?: InjectionRegistration.VisibilityMode | undefined\n }\n\n export type FunctionOptions = { \n readonly token?: string | undefined\n readonly params?: string[] | undefined\n readonly context?: InjectionContext | undefined\n readonly lifecycle?: InjectionRegistration.LifecycleMode | undefined\n readonly visibility?: InjectionRegistration.VisibilityMode | undefined\n }\n\n export type ClassOptions = {\n readonly token?: string | undefined\n readonly params?: string[] | undefined\n readonly context?: InjectionContext | undefined\n readonly lifecycle?: InjectionRegistration.LifecycleMode | undefined\n readonly visibility?: InjectionRegistration.VisibilityMode | undefined\n }\n\n export type FactoryOptions = {\n readonly token?: string | undefined\n readonly params?: string[] | undefined\n readonly context?: InjectionContext | undefined\n readonly lifecycle?: InjectionRegistration.LifecycleMode | undefined\n readonly visibility?: InjectionRegistration.VisibilityMode | undefined\n }\n}\n\nexport interface InjectionRegistration<T = any> {\n clone(options?: InjectionRegistration.DeclarationOptions): InjectionRegistration<T> \n resolve(options?: InjectionRegistration.ResolutionOptions): T\n}\n\nexport class InjectionRegistration<T = any> {\n public static createValueRegistration<T>(target: T, options?: InjectionRegistration.ValueOptions) {\n return new InjectionRegistration(InjectionResolver.createValueResolver(target), options)\n }\n\n public static createFunctionRegistration<T>(target: FunctionType<T>, options?: InjectionRegistration.FunctionOptions) {\n return new InjectionRegistration(InjectionResolver.createFunctionResolver<T>(target), { ...options,\n params: options?.params ?? FunctionUtilities.extractParameters(target)\n })\n }\n\n public static createClassRegistration<T extends object>(target: ConstructorType<T>, options?: InjectionRegistration.ClassOptions) {\n return new InjectionRegistration(InjectionResolver.createClassResolver<T>(target), { ...options,\n params: options?.params ?? ConstructorUtilities.extractParameters(target)\n })\n }\n\n public static createFactoryRegistration<T extends object>(target: FactoryType<T>, options?: InjectionRegistration.FactoryOptions) {\n return new InjectionRegistration(InjectionResolver.createFactoryResolver<T>(target), { ...options,\n params: options?.params ?? FactoryUtilities.extractParameters(target)\n })\n }\n\n public static readonly DEFAULT_LIFECYCLE_MODE: InjectionRegistration.LifecycleMode = 'singleton'\n\n public static readonly DEFAULT_VISIBILITY_MODE: InjectionRegistration.VisibilityMode = 'public'\n\n public static readonly LIFECYCLE_MODES = ['singleton', 'transient', 'scoped'] as const\n \n public static readonly VISIBILITY_MODES = ['public', 'private'] as const\n\n private readonly resolver: FunctionType<T>\n \n private readonly context: InjectionContext\n \n public readonly token: string\n \n public readonly params: string[]\n\n public readonly lifecycle: InjectionRegistration.LifecycleMode\n\n public readonly visibility: InjectionRegistration.VisibilityMode\n\n protected constructor(resolver: FunctionType<T>, options?: {\n readonly token?: string | undefined\n readonly params?: string[] | undefined\n readonly context?: InjectionContext | undefined\n readonly lifecycle?: InjectionRegistration.LifecycleMode | undefined\n readonly visibility?: InjectionRegistration.VisibilityMode | undefined\n }) {\n this.resolver = resolver\n this.params = options?.params ?? []\n this.token = options?.token ?? Identity.obtain(resolver)\n this.context = options?.context ?? InjectionContext.create()\n this.lifecycle = options?.lifecycle ?? InjectionRegistration.DEFAULT_LIFECYCLE_MODE\n this.visibility = options?.visibility ?? InjectionRegistration.DEFAULT_VISIBILITY_MODE\n }\n\n public clone(options?: InjectionRegistration.DeclarationOptions): InjectionRegistration<T> {\n return new InjectionRegistration<T>(this.resolver, {\n context: options?.context ?? this.context,\n token: this.token,\n params: this.params,\n lifecycle: this.lifecycle,\n visibility: this.visibility,\n })\n }\n\n public resolve(options?: InjectionRegistration.ResolutionOptions): T {\n const context = options?.context ?? InjectionContext.create()\n const bundle = options?.bundle ?? InjectionBundle.create()\n\n const args = this.params?.map(param => {\n return bundle[param]\n }) ?? []\n\n if(this.lifecycle === 'transient') {\n return this.resolver(...args)\n }\n\n if(this.lifecycle === 'singleton') {\n return this.context.resolve(this.resolver, ...args)\n }\n\n if(this.lifecycle === 'scoped') {\n return context.resolve(this.resolver, ...args)\n }\n\n throw new Error(`Could not resolve registration. Invalid \"${this.lifecycle}\" lifecycle.`)\n }\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ConstructorType } from '@nodelith/utilities';
|
|
2
|
+
import { FunctionType } from '@nodelith/utilities';
|
|
3
|
+
import { FactoryType } from '@nodelith/utilities';
|
|
4
|
+
export declare function createResolverProxy<T extends object = any>(resolver: FunctionType<T>, prototype?: object): FunctionType<T>;
|
|
5
|
+
export declare function createClassResolver<T extends object>(target: ConstructorType<T>): InjectionResolver<T>;
|
|
6
|
+
export declare function createFactoryResolver<T extends object>(target: FactoryType<T>): InjectionResolver<T>;
|
|
7
|
+
export declare function createFunctionResolver<T>(target: FunctionType<T>): InjectionResolver<T>;
|
|
8
|
+
export declare function createValueResolver<T>(target: T): InjectionResolver<T>;
|
|
9
|
+
export type InjectionResolver<T = any, A extends any[] = any[]> = (...args: A) => T;
|
|
10
|
+
export declare const InjectionResolver: Readonly<{
|
|
11
|
+
createFunctionResolver: typeof createFunctionResolver;
|
|
12
|
+
createFactoryResolver: typeof createFactoryResolver;
|
|
13
|
+
createValueResolver: typeof createValueResolver;
|
|
14
|
+
createClassResolver: typeof createClassResolver;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=injection-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-resolver.d.ts","sourceRoot":"","sources":["../src/injection-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGjD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAuC1H;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAGtG;AAED,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAGpG;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAEvF;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAEtE;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAA;AAEnF,eAAO,MAAM,iBAAiB;;;;;EAK5B,CAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectionResolver = void 0;
|
|
4
|
+
exports.createResolverProxy = createResolverProxy;
|
|
5
|
+
exports.createClassResolver = createClassResolver;
|
|
6
|
+
exports.createFactoryResolver = createFactoryResolver;
|
|
7
|
+
exports.createFunctionResolver = createFunctionResolver;
|
|
8
|
+
exports.createValueResolver = createValueResolver;
|
|
9
|
+
const identity_1 = require("@nodelith/identity");
|
|
10
|
+
function createResolverProxy(resolver, prototype) {
|
|
11
|
+
return identity_1.Identity.bind(resolver, (...args) => {
|
|
12
|
+
const getResolution = ((resolution) => () => {
|
|
13
|
+
return resolution ? resolution : resolution = {
|
|
14
|
+
value: resolver(...args)
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
return new Proxy(Object.create(prototype ?? null), {
|
|
18
|
+
get(_target, property, receiver) {
|
|
19
|
+
const resolution = getResolution();
|
|
20
|
+
return Reflect.get(resolution.value, property, receiver);
|
|
21
|
+
},
|
|
22
|
+
set(_target, property, value, receiver) {
|
|
23
|
+
const resolution = getResolution();
|
|
24
|
+
return Reflect.set(resolution.value, property, value, receiver);
|
|
25
|
+
},
|
|
26
|
+
has(_target, property) {
|
|
27
|
+
const resolution = getResolution();
|
|
28
|
+
return Reflect.has(resolution.value, property);
|
|
29
|
+
},
|
|
30
|
+
apply(_target, thisArg, argumentsList) {
|
|
31
|
+
const resolution = getResolution();
|
|
32
|
+
return Reflect.apply(resolution.value, thisArg, argumentsList);
|
|
33
|
+
},
|
|
34
|
+
ownKeys(_target) {
|
|
35
|
+
const resolution = getResolution();
|
|
36
|
+
return Reflect.ownKeys(resolution.value);
|
|
37
|
+
},
|
|
38
|
+
getPrototypeOf(_target) {
|
|
39
|
+
const resolution = getResolution();
|
|
40
|
+
return Reflect.getPrototypeOf(resolution.value);
|
|
41
|
+
},
|
|
42
|
+
getOwnPropertyDescriptor(_target, property) {
|
|
43
|
+
const resolution = getResolution();
|
|
44
|
+
return Reflect.getOwnPropertyDescriptor(resolution.value, property);
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function createClassResolver(target) {
|
|
50
|
+
const classResolver = identity_1.Identity.bind(target, (...args) => new target(...args));
|
|
51
|
+
return createResolverProxy(classResolver, target);
|
|
52
|
+
}
|
|
53
|
+
function createFactoryResolver(target) {
|
|
54
|
+
const factoryResolver = identity_1.Identity.bind(target, (...args) => target(...args));
|
|
55
|
+
return createResolverProxy(factoryResolver, target);
|
|
56
|
+
}
|
|
57
|
+
function createFunctionResolver(target) {
|
|
58
|
+
return identity_1.Identity.bind(target, (...args) => target(...args));
|
|
59
|
+
}
|
|
60
|
+
function createValueResolver(target) {
|
|
61
|
+
return (..._args) => target;
|
|
62
|
+
}
|
|
63
|
+
exports.InjectionResolver = Object.freeze({
|
|
64
|
+
createFunctionResolver,
|
|
65
|
+
createFactoryResolver,
|
|
66
|
+
createValueResolver,
|
|
67
|
+
createClassResolver,
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=injection-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-resolver.js","sourceRoot":"","sources":["../src/injection-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConstructorType } from '@nodelith/utilities'\nimport { FunctionType } from '@nodelith/utilities'\nimport { FactoryType } from '@nodelith/utilities'\nimport { Identity } from '@nodelith/identity'\n\nexport function createResolverProxy<T extends object = any>(resolver: FunctionType<T>, prototype?: object): FunctionType<T> {\n return Identity.bind(resolver, (...args: any[]) => {\n const getResolution = ((resolution?: { value: any }) => () => {\n return resolution ? resolution : resolution = {\n value: resolver(...args)\n }\n })()\n\n return new Proxy<T>(Object.create(prototype ?? null), {\n get(_target, property, receiver) {\n const resolution = getResolution()\n return Reflect.get(resolution.value, property, receiver)\n },\n set(_target, property, value, receiver) {\n const resolution = getResolution()\n return Reflect.set(resolution.value, property, value, receiver)\n },\n has(_target, property) {\n const resolution = getResolution()\n return Reflect.has(resolution.value, property)\n },\n apply(_target, thisArg, argumentsList) {\n const resolution = getResolution()\n return Reflect.apply(resolution.value, thisArg, argumentsList)\n },\n ownKeys(_target) {\n const resolution = getResolution()\n return Reflect.ownKeys(resolution.value)\n },\n getPrototypeOf(_target) {\n const resolution = getResolution()\n return Reflect.getPrototypeOf(resolution.value)\n },\n getOwnPropertyDescriptor(_target, property) {\n const resolution = getResolution()\n return Reflect.getOwnPropertyDescriptor(resolution.value, property)\n },\n })\n })\n}\n\nexport function createClassResolver<T extends object>(target: ConstructorType<T>): InjectionResolver<T> {\n const classResolver = Identity.bind(target, (...args: any[]) => new target(...args))\n return createResolverProxy(classResolver, target)\n}\n\nexport function createFactoryResolver<T extends object>(target: FactoryType<T>): InjectionResolver<T> {\n const factoryResolver = Identity.bind(target, (...args: any[]) => target(...args))\n return createResolverProxy(factoryResolver, target)\n}\n\nexport function createFunctionResolver<T>(target: FunctionType<T>): InjectionResolver<T> {\n return Identity.bind(target, (...args: any[]) => target(...args))\n}\n\nexport function createValueResolver<T>(target: T): InjectionResolver<T> {\n return (..._args: any[]) => target\n}\n\nexport type InjectionResolver<T = any, A extends any[] = any[]> = (...args: A) => T\n\nexport const InjectionResolver = Object.freeze({\n createFunctionResolver,\n createFactoryResolver,\n createValueResolver,\n createClassResolver,\n})\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { InjectionRegistration } from './injection-registration';
|
|
2
|
+
import { Identity } from '@nodelith/identity';
|
|
3
|
+
export declare class InjectionTrace {
|
|
4
|
+
static create(): InjectionTrace;
|
|
5
|
+
private stack;
|
|
6
|
+
private constructor();
|
|
7
|
+
get identity(): Identity | undefined;
|
|
8
|
+
private stringfy;
|
|
9
|
+
resolve<T>(registration: InjectionRegistration<T>, ...args: Parameters<InjectionRegistration<T>['resolve']>): ReturnType<InjectionRegistration<T>['resolve']>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=injection-trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-trace.d.ts","sourceRoot":"","sources":["../src/injection-trace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,qBAAa,cAAc;WACX,MAAM;IAIpB,OAAO,CAAC,KAAK,CAAe;IAE5B,OAAO;IAIP,IAAW,QAAQ,yBAElB;IAED,OAAO,CAAC,QAAQ;IAIT,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;CAYrK"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectionTrace = void 0;
|
|
4
|
+
const identity_1 = require("@nodelith/identity");
|
|
5
|
+
class InjectionTrace {
|
|
6
|
+
static create() {
|
|
7
|
+
return new InjectionTrace();
|
|
8
|
+
}
|
|
9
|
+
stack = [];
|
|
10
|
+
constructor() {
|
|
11
|
+
identity_1.Identity.assign(this);
|
|
12
|
+
}
|
|
13
|
+
get identity() {
|
|
14
|
+
return identity_1.Identity.extract(this);
|
|
15
|
+
}
|
|
16
|
+
stringfy(...tokens) {
|
|
17
|
+
return [...this.stack, ...tokens].join(' > ');
|
|
18
|
+
}
|
|
19
|
+
resolve(registration, ...args) {
|
|
20
|
+
if (this.stack.includes(registration.token)) {
|
|
21
|
+
throw new Error(`Could not resolve token "${registration.token}". Cyclic dependency graph: ${this.stringfy(registration.token)}.`);
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
this.stack.push(registration.token);
|
|
25
|
+
return registration.resolve(...args);
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
this.stack.pop();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.InjectionTrace = InjectionTrace;
|
|
33
|
+
//# sourceMappingURL=injection-trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-trace.js","sourceRoot":"","sources":["../src/injection-trace.ts"],"names":[],"mappings":";;;AACA,iDAA6C;AAE7C,MAAa,cAAc;IAClB,MAAM,CAAC,MAAM;QAClB,OAAO,IAAI,cAAc,EAAE,CAAA;IAC7B,CAAC;IAEO,KAAK,GAAa,EAAE,CAAA;IAE5B;QACE,mBAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,mBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAEO,QAAQ,CAAC,GAAG,MAAgB;QAClC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/C,CAAC;IAEM,OAAO,CAAI,YAAsC,EAAE,GAAG,IAAqD;QAChH,IAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,CAAC,KAAK,+BAA+B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpI,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;YACnC,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;QACtC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;QAClB,CAAC;IACH,CAAC;CACF;AA/BD,wCA+BC","sourcesContent":["import { InjectionRegistration } from './injection-registration'\nimport { Identity } from '@nodelith/identity'\n\nexport class InjectionTrace {\n public static create() {\n return new InjectionTrace()\n }\n\n private stack: string[] = []\n \n private constructor() {\n Identity.assign(this)\n }\n\n public get identity() {\n return Identity.extract(this)\n }\n\n private stringfy(...tokens: string[]): string {\n return [...this.stack, ...tokens].join(' > ')\n }\n\n public resolve<T>(registration: InjectionRegistration<T>, ...args: Parameters<InjectionRegistration<T>['resolve']>): ReturnType<InjectionRegistration<T>['resolve']> {\n if(this.stack.includes(registration.token)) {\n throw new Error(`Could not resolve token \"${registration.token}\". Cyclic dependency graph: ${this.stringfy(registration.token)}.`)\n }\n\n try {\n this.stack.push(registration.token)\n return registration.resolve(...args)\n } finally {\n this.stack.pop()\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { InjectionTrace } from './injection-trace';
|
|
2
|
+
export { InjectionBundle } from './injection-bundle';
|
|
3
|
+
export { InjectionModule } from './injection-module';
|
|
4
|
+
export { InjectionContext } from './injection-context';
|
|
5
|
+
export { InjectionContainer } from './injection-container';
|
|
6
|
+
export { InjectionInitializer } from './injection-initializer';
|
|
7
|
+
export { InjectionRegistration } from './injection-registration';
|
|
8
|
+
//# sourceMappingURL=library.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA"}
|
package/dist/library.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InjectionRegistration = exports.InjectionInitializer = exports.InjectionContainer = exports.InjectionContext = exports.InjectionModule = exports.InjectionBundle = exports.InjectionTrace = void 0;
|
|
4
|
+
var injection_trace_1 = require("./injection-trace");
|
|
5
|
+
Object.defineProperty(exports, "InjectionTrace", { enumerable: true, get: function () { return injection_trace_1.InjectionTrace; } });
|
|
6
|
+
var injection_bundle_1 = require("./injection-bundle");
|
|
7
|
+
Object.defineProperty(exports, "InjectionBundle", { enumerable: true, get: function () { return injection_bundle_1.InjectionBundle; } });
|
|
8
|
+
var injection_module_1 = require("./injection-module");
|
|
9
|
+
Object.defineProperty(exports, "InjectionModule", { enumerable: true, get: function () { return injection_module_1.InjectionModule; } });
|
|
10
|
+
var injection_context_1 = require("./injection-context");
|
|
11
|
+
Object.defineProperty(exports, "InjectionContext", { enumerable: true, get: function () { return injection_context_1.InjectionContext; } });
|
|
12
|
+
var injection_container_1 = require("./injection-container");
|
|
13
|
+
Object.defineProperty(exports, "InjectionContainer", { enumerable: true, get: function () { return injection_container_1.InjectionContainer; } });
|
|
14
|
+
var injection_initializer_1 = require("./injection-initializer");
|
|
15
|
+
Object.defineProperty(exports, "InjectionInitializer", { enumerable: true, get: function () { return injection_initializer_1.InjectionInitializer; } });
|
|
16
|
+
var injection_registration_1 = require("./injection-registration");
|
|
17
|
+
Object.defineProperty(exports, "InjectionRegistration", { enumerable: true, get: function () { return injection_registration_1.InjectionRegistration; } });
|
|
18
|
+
//# sourceMappingURL=library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":";;;AAAA,qDAAkD;AAAzC,iHAAA,cAAc,OAAA;AACvB,uDAAoD;AAA3C,mHAAA,eAAe,OAAA;AACxB,uDAAoD;AAA3C,mHAAA,eAAe,OAAA;AACxB,yDAAsD;AAA7C,qHAAA,gBAAgB,OAAA;AACzB,6DAA0D;AAAjD,yHAAA,kBAAkB,OAAA;AAC3B,iEAA8D;AAArD,6HAAA,oBAAoB,OAAA;AAC7B,mEAAgE;AAAvD,+HAAA,qBAAqB,OAAA","sourcesContent":["export { InjectionTrace } from './injection-trace'\nexport { InjectionBundle } from './injection-bundle'\nexport { InjectionModule } from './injection-module'\nexport { InjectionContext } from './injection-context'\nexport { InjectionContainer } from './injection-container'\nexport { InjectionInitializer } from './injection-initializer'\nexport { InjectionRegistration } from './injection-registration'\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nodelith/injection",
|
|
3
|
+
"version": "0.8.0",
|
|
4
|
+
"type": "commonjs",
|
|
5
|
+
"access": "public",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist",
|
|
8
|
+
"README.md",
|
|
9
|
+
"LICENCE.txt",
|
|
10
|
+
"package.json"
|
|
11
|
+
],
|
|
12
|
+
"keywords": [
|
|
13
|
+
"typescript",
|
|
14
|
+
"javascript",
|
|
15
|
+
"dependency",
|
|
16
|
+
"injection",
|
|
17
|
+
"di"
|
|
18
|
+
],
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/library.d.ts",
|
|
22
|
+
"import": "./dist/library.js",
|
|
23
|
+
"require": "./dist/library.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"acorn": "^8.15.0",
|
|
28
|
+
"@nodelith/identity": "^0.8.0",
|
|
29
|
+
"@nodelith/core": "^0.8.0",
|
|
30
|
+
"@nodelith/utilities": "^0.8.0"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/jest": "^30.0.0",
|
|
34
|
+
"@types/node": "^24.2.1",
|
|
35
|
+
"typescript": "^5.9.2",
|
|
36
|
+
"ts-jest": "^29.4.1",
|
|
37
|
+
"acorn": "^8.15.0",
|
|
38
|
+
"jest": "^30.0.5",
|
|
39
|
+
"@nodelith/utilities": "^0.8.0",
|
|
40
|
+
"@nodelith/core": "^0.8.0",
|
|
41
|
+
"@nodelith/identity": "^0.8.0"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"test": "jest --config ./jest.json",
|
|
45
|
+
"build": "tsc --project ./build.json",
|
|
46
|
+
"build:watch": "tsc --watch --project ./build.json"
|
|
47
|
+
}
|
|
48
|
+
}
|