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 CHANGED
@@ -1,4 +1,4 @@
1
- # dijs
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 dijs
18
+ npm install tiny-di.js
19
19
  # or
20
- pnpm add dijs
20
+ pnpm add tiny-di.js
21
21
  # or
22
- yarn add dijs
22
+ yarn add tiny-di.js
23
23
  ```
24
24
 
25
25
  ## Quick Start
26
26
 
27
27
  ```typescript
28
- import { Container } from "dijs";
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 | Description |
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)` | Register a scoped provider (one instance per `Scope`) |
66
- | `get<T>(token)` | Resolve a dependency |
67
- | `createScope(id?)` | Create a child `Scope` |
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 | 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) |
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 "dijs";
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
 
@@ -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 readonly resolving;
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>(provide: Token<T>): Omit<EntryBuilder<T>, "provide">;
10
- transient<T>(provide: Token<T>): Omit<EntryBuilder<T>, "provide">;
11
- scoped<T>(provide: Token<T>): Omit<EntryBuilder<T>, "provide">;
12
- add<T>(dc: Entry<T>): void;
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;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IAErE,WAAW,CAAC,EAAE,CAAC,EAAE,MAAM;IAIvB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAI9B,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAI9B,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAI3B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAInB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC;IAyBvC,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,WAAW;CA8BpB"}
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"}
@@ -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
- resolving = new Set();
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(provide) {
14
- return new entry_builder_1.EntryBuilder(this, "singleton").provide(provide);
27
+ singleton(token) {
28
+ return new entry_builder_1.EntryBuilder(this, "singleton").provide(token);
15
29
  }
16
- transient(provide) {
17
- return new entry_builder_1.EntryBuilder(this, "transient").provide(provide);
30
+ transient(token) {
31
+ return new entry_builder_1.EntryBuilder(this, "transient").provide(token);
18
32
  }
19
- scoped(provide) {
20
- return new entry_builder_1.EntryBuilder(this, "scoped").provide(provide);
33
+ scoped(token) {
34
+ return new entry_builder_1.EntryBuilder(this, "scoped").provide(token);
21
35
  }
22
- add(dc) {
23
- this.entries.set(dc.provide, dc);
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("No provider");
29
- const visiting = new Set();
30
- const checked = new Set();
31
- this.detectCycle(key, [], visiting, checked);
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 === "scoped" && scope) {
40
- if (scope.cache.has(key))
41
- return scope.cache.get(key);
42
- const instance = this.create(entry, scope);
43
- scope.cache.set(key, instance);
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
- return this.create(entry, scope);
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
- throw new Error("Cannot create provider");
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":"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"}
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;AACpD,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,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI;IACd,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAe3B,IAAI,IAAI,IAAI;IAIZ,MAAM,IAAI,IAAI;CAOf"}
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 mode cannot be used with useValue provider");
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 provide is not a constructor");
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,CAAC,sDAAsD,CAAC,CAAC;QAC1E,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,CAAC,uDAAuD,CAAC,CAAC;QAC3E,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;AAtDD,oCAsDC"}
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"}
@@ -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;IAId,OAAO,CAAC,QAAQ,CAAC,SAAS;IAH5B,QAAQ,CAAC,EAAE,SAAC;IACZ,QAAQ,CAAC,KAAK,+BAAsC;gBAEjC,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"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/core/scope.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAiC;AAGjC,MAAa,KAAK;IAIG;IAHV,EAAE,CAAC;IACH,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;IACpD,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;AAjBD,sBAiBC"}
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;CAC5B,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.1",
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
  }