tiny-di.js 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -21
- package/dist/core/container.d.ts +11 -5
- package/dist/core/container.d.ts.map +1 -1
- package/dist/core/container.js +76 -22
- package/dist/core/container.js.map +1 -1
- package/dist/core/entry.builder.d.ts +2 -1
- package/dist/core/entry.builder.d.ts.map +1 -1
- package/dist/core/entry.builder.js +6 -2
- package/dist/core/entry.builder.js.map +1 -1
- package/dist/core/scope.d.ts.map +1 -1
- package/dist/core/scope.js.map +1 -1
- package/dist/types/definition.d.ts +2 -0
- package/dist/types/definition.d.ts.map +1 -1
- package/package.json +1 -4
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# tiny-di.js
|
|
2
2
|
|
|
3
3
|
A lightweight, type-safe **Dependency Injection** container for TypeScript and Node.js. Define your dependencies programmatically with full type inference — no decorators required.
|
|
4
4
|
|
|
@@ -15,17 +15,17 @@ A lightweight, type-safe **Dependency Injection** container for TypeScript and N
|
|
|
15
15
|
## Installation
|
|
16
16
|
|
|
17
17
|
```sh
|
|
18
|
-
npm install
|
|
18
|
+
npm install tiny-di.js
|
|
19
19
|
# or
|
|
20
|
-
pnpm add
|
|
20
|
+
pnpm add tiny-di.js
|
|
21
21
|
# or
|
|
22
|
-
yarn add
|
|
22
|
+
yarn add tiny-di.js
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
## Quick Start
|
|
26
26
|
|
|
27
27
|
```typescript
|
|
28
|
-
import { Container } from "
|
|
28
|
+
import { Container } from "tiny-di.js";
|
|
29
29
|
|
|
30
30
|
class Logger {
|
|
31
31
|
log(msg: string) {
|
|
@@ -58,26 +58,26 @@ db.query("SELECT 1"); // "Executing: SELECT 1"
|
|
|
58
58
|
const container = new Container();
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
| Method
|
|
62
|
-
|
|
61
|
+
| Method | Description |
|
|
62
|
+
| --------------------- | ---------------------------------------------------------- |
|
|
63
63
|
| `singleton<T>(token)` | Register a singleton provider (one instance per container) |
|
|
64
|
-
| `transient<T>(token)` | Register a transient provider (new instance each time)
|
|
65
|
-
| `scoped<T>(token)`
|
|
66
|
-
| `get<T>(token)`
|
|
67
|
-
| `createScope(id?)`
|
|
64
|
+
| `transient<T>(token)` | Register a transient provider (new instance each time) |
|
|
65
|
+
| `scoped<T>(token)` | Register a scoped provider (one instance per `Scope`) |
|
|
66
|
+
| `get<T>(token)` | Resolve a dependency |
|
|
67
|
+
| `createScope(id?)` | Create a child `Scope` |
|
|
68
68
|
|
|
69
69
|
### EntryBuilder (fluent registration)
|
|
70
70
|
|
|
71
71
|
Every registration method returns an `EntryBuilder` that lets you chain configuration:
|
|
72
72
|
|
|
73
|
-
| Method
|
|
74
|
-
|
|
75
|
-
| `.import(...tokens)` | Declare dependencies to inject
|
|
76
|
-
| `.to(class)`
|
|
77
|
-
| `.to(value)`
|
|
78
|
-
| `.toSelf()`
|
|
79
|
-
| `.toFactory(fn)`
|
|
80
|
-
| `.none()`
|
|
73
|
+
| Method | Description |
|
|
74
|
+
| -------------------- | ----------------------------------------------- |
|
|
75
|
+
| `.import(...tokens)` | Declare dependencies to inject |
|
|
76
|
+
| `.to(class)` | Map token to a class constructor |
|
|
77
|
+
| `.to(value)` | Map token to an already-created value |
|
|
78
|
+
| `.toSelf()` | Use the token itself as the constructor |
|
|
79
|
+
| `.toFactory(fn)` | Provide a factory function |
|
|
80
|
+
| `.none()` | Register with no provider (set later via scope) |
|
|
81
81
|
|
|
82
82
|
### Lifetimes
|
|
83
83
|
|
|
@@ -105,12 +105,21 @@ const c = scope2.get(MyScopedService);
|
|
|
105
105
|
|
|
106
106
|
```typescript
|
|
107
107
|
import express, { Request } from "express";
|
|
108
|
-
import { Container, Scope } from "
|
|
109
|
-
import { scopedMiddleware, ScopedRequest } from "dijs/express";
|
|
108
|
+
import { Container, Scope } from "tiny-di.js";
|
|
110
109
|
|
|
111
110
|
const container = new Container();
|
|
112
111
|
container.scoped(AUTH_CTX).none();
|
|
113
112
|
|
|
113
|
+
export type ScopedRequest = Request & { scope: Scope };
|
|
114
|
+
|
|
115
|
+
export const scopedMiddleware = (container: Container): RequestHandler => {
|
|
116
|
+
return (req, _res, next): void => {
|
|
117
|
+
const scope = container.createScope();
|
|
118
|
+
(req as ScopedRequest)["scope"] = scope;
|
|
119
|
+
next();
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
|
|
114
123
|
const app = express();
|
|
115
124
|
app.use(scopedMiddleware(container));
|
|
116
125
|
|
package/dist/core/container.d.ts
CHANGED
|
@@ -2,16 +2,22 @@ import { Entry, Token } from "../types";
|
|
|
2
2
|
import { EntryBuilder } from "./entry.builder";
|
|
3
3
|
import { Scope } from "./scope";
|
|
4
4
|
export declare class Container {
|
|
5
|
-
private
|
|
5
|
+
private isValidated;
|
|
6
|
+
private bootstrapped;
|
|
7
|
+
private bootstrapPromise;
|
|
6
8
|
private readonly singletons;
|
|
7
9
|
private readonly entries;
|
|
10
|
+
bootstrap(): Promise<void>;
|
|
8
11
|
createScope(id?: string): Scope;
|
|
9
|
-
singleton<T>(
|
|
10
|
-
transient<T>(
|
|
11
|
-
scoped<T>(
|
|
12
|
-
add<T>(
|
|
12
|
+
singleton<T>(token: Token<T>): Omit<EntryBuilder<T>, "provide">;
|
|
13
|
+
transient<T>(token: Token<T>): Omit<EntryBuilder<T>, "provide">;
|
|
14
|
+
scoped<T>(token: Token<T>): Omit<EntryBuilder<T>, "provide">;
|
|
15
|
+
add<T>(entry: Entry<T>): void;
|
|
13
16
|
get<T>(key: Token<T>, scope?: Scope): T;
|
|
14
17
|
private create;
|
|
18
|
+
private initialize;
|
|
19
|
+
private createAsync;
|
|
20
|
+
private getAsync;
|
|
15
21
|
private strKey;
|
|
16
22
|
private detectCycle;
|
|
17
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/core/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,qBAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/core/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,qBAAa,SAAS;IAEpB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;IAG7B,OAAO,CAAC,gBAAgB,CAA8B;IAGtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IAE/D,SAAS;IAQf,WAAW,CAAC,EAAE,CAAC,EAAE,MAAM;IAIvB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAI5B,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAI5B,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAIzB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAItB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC;IAkCvC,OAAO,CAAC,MAAM;YAYA,UAAU;YAYV,WAAW;YAeX,QAAQ;IActB,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,WAAW;CA8BpB"}
|
package/dist/core/container.js
CHANGED
|
@@ -4,31 +4,48 @@ exports.Container = void 0;
|
|
|
4
4
|
const entry_builder_1 = require("./entry.builder");
|
|
5
5
|
const scope_1 = require("./scope");
|
|
6
6
|
class Container {
|
|
7
|
-
|
|
7
|
+
// Flags
|
|
8
|
+
isValidated = false;
|
|
9
|
+
bootstrapped = false;
|
|
10
|
+
// Promises
|
|
11
|
+
bootstrapPromise = null;
|
|
12
|
+
// Collections
|
|
8
13
|
singletons = new Map();
|
|
9
14
|
entries = new Map();
|
|
15
|
+
async bootstrap() {
|
|
16
|
+
if (this.bootstrapped)
|
|
17
|
+
return;
|
|
18
|
+
if (this.bootstrapPromise)
|
|
19
|
+
return this.bootstrapPromise;
|
|
20
|
+
this.bootstrapPromise = this.initialize();
|
|
21
|
+
await this.bootstrapPromise;
|
|
22
|
+
this.bootstrapped = true;
|
|
23
|
+
}
|
|
10
24
|
createScope(id) {
|
|
11
25
|
return new scope_1.Scope(this, id);
|
|
12
26
|
}
|
|
13
|
-
singleton(
|
|
14
|
-
return new entry_builder_1.EntryBuilder(this, "singleton").provide(
|
|
27
|
+
singleton(token) {
|
|
28
|
+
return new entry_builder_1.EntryBuilder(this, "singleton").provide(token);
|
|
15
29
|
}
|
|
16
|
-
transient(
|
|
17
|
-
return new entry_builder_1.EntryBuilder(this, "transient").provide(
|
|
30
|
+
transient(token) {
|
|
31
|
+
return new entry_builder_1.EntryBuilder(this, "transient").provide(token);
|
|
18
32
|
}
|
|
19
|
-
scoped(
|
|
20
|
-
return new entry_builder_1.EntryBuilder(this, "scoped").provide(
|
|
33
|
+
scoped(token) {
|
|
34
|
+
return new entry_builder_1.EntryBuilder(this, "scoped").provide(token);
|
|
21
35
|
}
|
|
22
|
-
add(
|
|
23
|
-
this.entries.set(
|
|
36
|
+
add(entry) {
|
|
37
|
+
this.entries.set(entry.provide, entry);
|
|
24
38
|
}
|
|
25
39
|
get(key, scope) {
|
|
26
40
|
const entry = this.entries.get(key);
|
|
27
41
|
if (!entry)
|
|
28
|
-
throw new Error(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
42
|
+
throw new Error(`'${this.strKey(key)}' is not registered.`);
|
|
43
|
+
if (!this.isValidated) {
|
|
44
|
+
const visiting = new Set();
|
|
45
|
+
const checked = new Set();
|
|
46
|
+
this.detectCycle(key, [], visiting, checked);
|
|
47
|
+
this.isValidated = true;
|
|
48
|
+
}
|
|
32
49
|
if (entry.lifetime === "singleton") {
|
|
33
50
|
if (this.singletons.has(key))
|
|
34
51
|
return this.singletons.get(key);
|
|
@@ -36,24 +53,61 @@ class Container {
|
|
|
36
53
|
this.singletons.set(key, instance);
|
|
37
54
|
return instance;
|
|
38
55
|
}
|
|
39
|
-
if (entry.lifetime === "
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return instance;
|
|
56
|
+
if (entry.lifetime === "transient") {
|
|
57
|
+
return this.create(entry, scope);
|
|
58
|
+
}
|
|
59
|
+
if (!scope) {
|
|
60
|
+
throw new Error(`'${this.strKey(entry.provide)}' requires a scope to be resolved.`);
|
|
45
61
|
}
|
|
46
|
-
|
|
62
|
+
if (scope.cache.has(key))
|
|
63
|
+
return scope.cache.get(key);
|
|
64
|
+
const instance = this.create(entry, scope);
|
|
65
|
+
scope.cache.set(key, instance);
|
|
66
|
+
return instance;
|
|
47
67
|
}
|
|
48
68
|
create(entry, scope) {
|
|
49
69
|
let deps = entry.imports.map((d) => this.get(d, scope));
|
|
50
|
-
if (entry.useValue)
|
|
70
|
+
if (entry.useValue !== undefined)
|
|
51
71
|
return entry.useValue;
|
|
72
|
+
if (entry.useFactory !== undefined)
|
|
73
|
+
return entry.useFactory(...deps);
|
|
74
|
+
if (entry.useClass !== undefined)
|
|
75
|
+
return new entry.useClass(...deps);
|
|
76
|
+
throw new Error(`There is no provider strategy for '${this.strKey(entry.provide)}'.`);
|
|
77
|
+
}
|
|
78
|
+
async initialize() {
|
|
79
|
+
for (const [token, entry] of this.entries) {
|
|
80
|
+
if (entry.lifetime === "singleton" &&
|
|
81
|
+
entry.useAsyncFactory !== undefined) {
|
|
82
|
+
const instance = await this.createAsync(entry);
|
|
83
|
+
this.singletons.set(token, instance);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async createAsync(entry) {
|
|
88
|
+
const deps = await Promise.all(entry.imports.map((dep) => this.getAsync(dep)));
|
|
89
|
+
if (entry.useAsyncFactory)
|
|
90
|
+
return entry.useAsyncFactory(...deps);
|
|
52
91
|
if (entry.useFactory)
|
|
53
92
|
return entry.useFactory(...deps);
|
|
54
93
|
if (entry.useClass)
|
|
55
94
|
return new entry.useClass(...deps);
|
|
56
|
-
|
|
95
|
+
if (entry.useValue !== undefined)
|
|
96
|
+
return entry.useValue;
|
|
97
|
+
throw new Error(`There is no provider strategy for '${this.strKey(entry.provide)}'.`);
|
|
98
|
+
}
|
|
99
|
+
async getAsync(key) {
|
|
100
|
+
const entry = this.entries.get(key);
|
|
101
|
+
if (!entry)
|
|
102
|
+
throw new Error(`No provider ${this.strKey(key)}`);
|
|
103
|
+
if (entry.lifetime === "singleton") {
|
|
104
|
+
if (this.singletons.has(key))
|
|
105
|
+
return this.singletons.get(key);
|
|
106
|
+
const instance = await this.createAsync(entry);
|
|
107
|
+
this.singletons.set(key, instance);
|
|
108
|
+
return instance;
|
|
109
|
+
}
|
|
110
|
+
return this.createAsync(entry);
|
|
57
111
|
}
|
|
58
112
|
strKey(key) {
|
|
59
113
|
if (typeof key === "string") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/core/container.ts"],"names":[],"mappings":";;;AACA,mDAA+C;AAC/C,mCAAgC;AAEhC,MAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/core/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Token, UseFactory } from "../types";
|
|
1
|
+
import { Token, UseAsyncFactory, UseFactory } from "../types";
|
|
2
2
|
import { Constructor, Lifetime } from "../types";
|
|
3
3
|
import { Container } from "./container";
|
|
4
4
|
export declare class EntryBuilder<T> {
|
|
@@ -8,6 +8,7 @@ export declare class EntryBuilder<T> {
|
|
|
8
8
|
provide(token: Token<T>): Omit<EntryBuilder<T>, "provide">;
|
|
9
9
|
import(...deps: Token<unknown>[]): Omit<EntryBuilder<T>, "import">;
|
|
10
10
|
toFactory(fn: UseFactory<T>): void;
|
|
11
|
+
toAsyncFactory(fn: UseAsyncFactory<T>): void;
|
|
11
12
|
to(v: T): void;
|
|
12
13
|
to(v: Constructor<T>): void;
|
|
13
14
|
none(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.builder.d.ts","sourceRoot":"","sources":["../../src/core/entry.builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"entry.builder.d.ts","sourceRoot":"","sources":["../../src/core/entry.builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,YAAY,CAAC,CAAC;IAMvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAErB;gBAGiB,SAAS,EAAE,SAAS,EACrC,IAAI,GAAE,QAAsB;IAK9B,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;IAK1D,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;IAKlE,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;IAKlC,cAAc,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;IAK5C,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI;IACd,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAiB3B,IAAI,IAAI,IAAI;IAIZ,MAAM,IAAI,IAAI;CASf"}
|
|
@@ -22,6 +22,10 @@ class EntryBuilder {
|
|
|
22
22
|
this.config.useFactory = fn;
|
|
23
23
|
this.container.add(this.config);
|
|
24
24
|
}
|
|
25
|
+
toAsyncFactory(fn) {
|
|
26
|
+
this.config.useAsyncFactory = fn;
|
|
27
|
+
this.container.add(this.config);
|
|
28
|
+
}
|
|
25
29
|
to(v) {
|
|
26
30
|
if (typeof v !== "function") {
|
|
27
31
|
this.config.useValue = v;
|
|
@@ -30,7 +34,7 @@ class EntryBuilder {
|
|
|
30
34
|
this.config.useClass = v;
|
|
31
35
|
}
|
|
32
36
|
if (this.config.lifetime === "transient" && this.config.useValue) {
|
|
33
|
-
throw new Error("transient
|
|
37
|
+
throw new Error("transient lifetime cannot be used with useValue provider strategy.");
|
|
34
38
|
}
|
|
35
39
|
this.container.add(this.config);
|
|
36
40
|
}
|
|
@@ -39,7 +43,7 @@ class EntryBuilder {
|
|
|
39
43
|
}
|
|
40
44
|
toSelf() {
|
|
41
45
|
if (typeof this.config.provide !== "function") {
|
|
42
|
-
throw new Error("toSelf cannot be used if
|
|
46
|
+
throw new Error("toSelf cannot be used if token is not a class constructor.");
|
|
43
47
|
}
|
|
44
48
|
this.config.useClass = this.config.provide;
|
|
45
49
|
this.container.add(this.config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.builder.js","sourceRoot":"","sources":["../../src/core/entry.builder.ts"],"names":[],"mappings":";;;AAIA,MAAa,YAAY;IAMJ;IALF,MAAM,GAAsB;QAC3C,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,YACmB,SAAoB,EACrC,OAAiB,WAAW;QADX,cAAS,GAAT,SAAS,CAAW;QAGrC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,KAAe;QACrB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,GAAG,IAAsB;QAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,EAAiB;QACzB,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAkB,CAAC,CAAC;IAC9C,CAAC;IAID,EAAE,CAAC,CAAqB;QACtB,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAmB,CAAC;QAC7C,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"entry.builder.js","sourceRoot":"","sources":["../../src/core/entry.builder.ts"],"names":[],"mappings":";;;AAIA,MAAa,YAAY;IAMJ;IALF,MAAM,GAAsB;QAC3C,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,YACmB,SAAoB,EACrC,OAAiB,WAAW;QADX,cAAS,GAAT,SAAS,CAAW;QAGrC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,KAAe;QACrB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,GAAG,IAAsB;QAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,EAAiB;QACzB,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAkB,CAAC,CAAC;IAC9C,CAAC;IAED,cAAc,CAAC,EAAsB;QACnC,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAkB,CAAC,CAAC;IAC9C,CAAC;IAID,EAAE,CAAC,CAAqB;QACtB,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAmB,CAAC;QAC7C,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAkB,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI;QACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAkB,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM;QACJ,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAkB,CAAC,CAAC;IAC9C,CAAC;CACF;AA/DD,oCA+DC"}
|
package/dist/core/scope.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/core/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,KAAK;
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/core/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,KAAK;IAKd,OAAO,CAAC,QAAQ,CAAC,SAAS;IAJ5B,QAAQ,CAAC,EAAE,SAAC;IACZ,QAAQ,CAAC,KAAK,+BAAsC;gBAGjC,SAAS,EAAE,SAAS,EACrC,EAAE,GAAE,MAA4B;IAKlC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IAIxB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;CAG/B"}
|
package/dist/core/scope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/core/scope.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAiC;AAGjC,MAAa,KAAK;
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/core/scope.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAiC;AAGjC,MAAa,KAAK;IAKG;IAJV,EAAE,CAAC;IACH,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEpD,YACmB,SAAoB,EACrC,KAAa,MAAM,CAAC,UAAU,EAAE;QADf,cAAS,GAAT,SAAS,CAAW;QAGrC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,GAAG,CAAI,GAAa;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,GAAG,CAAI,GAAa,EAAE,KAAQ;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF;AAlBD,sBAkBC"}
|
|
@@ -3,6 +3,7 @@ export type Lifetime = "singleton" | "transient" | "scoped";
|
|
|
3
3
|
export type TokenMetadata = Record<number, Token<unknown>>;
|
|
4
4
|
export type Token<T> = symbol | string | Constructor<T>;
|
|
5
5
|
export type UseFactory<T> = (...dependencies: any[]) => T;
|
|
6
|
+
export type UseAsyncFactory<T> = (...dependencies: any[]) => Promise<T>;
|
|
6
7
|
export type Entry<T> = {
|
|
7
8
|
lifetime: Lifetime;
|
|
8
9
|
provide: Token<T>;
|
|
@@ -11,5 +12,6 @@ export type Entry<T> = {
|
|
|
11
12
|
useValue?: T;
|
|
12
13
|
instance?: T;
|
|
13
14
|
useFactory?: UseFactory<T>;
|
|
15
|
+
useAsyncFactory?: UseAsyncFactory<T>;
|
|
14
16
|
};
|
|
15
17
|
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/types/definition.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEvD,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE5D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3D,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAExD,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAE1D,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,CAAC;IACb,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/types/definition.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEvD,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE5D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3D,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAExD,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAE1D,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAExE,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,CAAC;IACb,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3B,eAAe,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;CACtC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tiny-di.js",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Lightweight dependency injection container",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -27,8 +27,5 @@
|
|
|
27
27
|
"supertest": "^7.2.2",
|
|
28
28
|
"typescript": "^6.0.3",
|
|
29
29
|
"vitest": "^4.1.8"
|
|
30
|
-
},
|
|
31
|
-
"dependencies": {
|
|
32
|
-
"reflect-metadata": "^0.2.2"
|
|
33
30
|
}
|
|
34
31
|
}
|