@needle-di/core 0.8.4 → 0.10.1
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 +9 -2
- package/dist/container.d.ts +3 -2
- package/dist/container.js +12 -6
- package/dist/container.js.map +1 -1
- package/dist/decorators.d.ts +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/providers.d.ts +5 -4
- package/dist/providers.js.map +1 -1
- package/dist/tokens.d.ts +4 -4
- package/package.json +14 -11
package/README.md
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
[](https://www.npmjs.com/package/@needle-di/core)
|
|
6
6
|
[](https://jsr.io/@needle-di/core)
|
|
7
7
|
[](https://www.npmjs.com/package/@needle-di/core)
|
|
8
|
-
[](https://github.com/needle-di/core/actions/workflows/ci.yml)
|
|
9
|
+
[](https://github.com/needle-di/core/actions/workflows/ci.yml)
|
|
9
10
|
|
|
10
11
|
Needle DI is a lightweight, TypeScript-first library for dependency injection (DI). It is designed to be both easy to use and highly efficient.
|
|
11
12
|
|
|
@@ -15,7 +16,7 @@ Needle DI is a lightweight, TypeScript-first library for dependency injection (D
|
|
|
15
16
|
- Intended for both JavaScript-only and TypeScript projects
|
|
16
17
|
- Supports [tree-shakeable injection tokens](https://needle-di.io/advanced/tree-shaking.html): optimize your builds for production.
|
|
17
18
|
- Inspired by [Angular](https://angular.dev/) and [InversifyJS](https://github.com/inversify/InversifyJS), familiar to developers coming from these frameworks.
|
|
18
|
-
- Uses native [ECMAScript
|
|
19
|
+
- Uses native [ECMAScript decorators](https://github.com/tc39/proposal-decorators) (currently stage 3)
|
|
19
20
|
- No need for `experimentalDecorators` and `emitDecoratorMetadata`
|
|
20
21
|
- No reflection libraries needed, like `reflect-metadata` or other reflection mechanisms.
|
|
21
22
|
|
|
@@ -55,6 +56,12 @@ Check out the [docs](https://needle-di.io/concepts/binding.html) to learn more!
|
|
|
55
56
|
npm install --save @needle-di/core
|
|
56
57
|
```
|
|
57
58
|
|
|
59
|
+
Needle DI also works with [Deno](https://deno.com/) and is published to [JSR](https://jsr.io/@needle-di/core) as well:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
deno add jsr:@needle-di/core
|
|
63
|
+
```
|
|
64
|
+
|
|
58
65
|
## Docs
|
|
59
66
|
|
|
60
67
|
Check out our docs on [https://needle-di.io](https://needle-di.io/concepts/binding.html).
|
package/dist/container.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type Token } from "./tokens.
|
|
2
|
-
import { type Provider } from "./providers.
|
|
1
|
+
import { type Token } from "./tokens.ts";
|
|
2
|
+
import { type Provider } from "./providers.ts";
|
|
3
3
|
/**
|
|
4
4
|
* A dependency injection (DI) container will keep track of all bindings
|
|
5
5
|
* and hold the actual instances of your services.
|
|
@@ -7,6 +7,7 @@ import { type Provider } from "./providers.js";
|
|
|
7
7
|
export declare class Container {
|
|
8
8
|
private readonly providers;
|
|
9
9
|
private readonly singletons;
|
|
10
|
+
constructor();
|
|
10
11
|
bindAll<A>(p1: Provider<A>): this;
|
|
11
12
|
bindAll<A, B>(p1: Provider<A>, p2: Provider<B>): this;
|
|
12
13
|
bindAll<A, B, C>(p1: Provider<A>, p2: Provider<B>, p3: Provider<C>): this;
|
package/dist/container.js
CHANGED
|
@@ -9,6 +9,12 @@ import { assertPresent, getParentClasses, windowedSlice } from "./utils.js";
|
|
|
9
9
|
export class Container {
|
|
10
10
|
providers = new Map();
|
|
11
11
|
singletons = new Map();
|
|
12
|
+
constructor() {
|
|
13
|
+
this.bind({
|
|
14
|
+
provide: Container,
|
|
15
|
+
useValue: this,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
12
18
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
19
|
bindAll(...providers) {
|
|
14
20
|
providers.forEach((it) => this.bind(it));
|
|
@@ -70,7 +76,7 @@ export class Container {
|
|
|
70
76
|
if (providers.some(isAsyncFactoryProvider)) {
|
|
71
77
|
throw new AsyncProvidersInSyncInjectionContextError(token);
|
|
72
78
|
}
|
|
73
|
-
this.singletons.set(token, providers.flatMap((it) => this.construct(it
|
|
79
|
+
this.singletons.set(token, providers.flatMap((it) => this.construct(it)));
|
|
74
80
|
}
|
|
75
81
|
const singletons = assertPresent(this.singletons.get(token));
|
|
76
82
|
if (multi) {
|
|
@@ -96,7 +102,7 @@ export class Container {
|
|
|
96
102
|
}
|
|
97
103
|
const existingProviders = this.providers.get(token) ?? [];
|
|
98
104
|
if (!this.singletons.has(token)) {
|
|
99
|
-
const values = await Promise.all(existingProviders.map((it) => this.constructAsync(it
|
|
105
|
+
const values = await Promise.all(existingProviders.map((it) => this.constructAsync(it)));
|
|
100
106
|
this.singletons.set(token, values.flat());
|
|
101
107
|
}
|
|
102
108
|
const singletons = assertPresent(this.singletons.get(token));
|
|
@@ -111,7 +117,7 @@ export class Container {
|
|
|
111
117
|
return promisify(singletons.at(0));
|
|
112
118
|
}
|
|
113
119
|
}
|
|
114
|
-
construct(provider, scope) {
|
|
120
|
+
construct(provider, scope = this) {
|
|
115
121
|
const originalScope = currentScope;
|
|
116
122
|
try {
|
|
117
123
|
currentScope = scope;
|
|
@@ -121,7 +127,7 @@ export class Container {
|
|
|
121
127
|
currentScope = originalScope;
|
|
122
128
|
}
|
|
123
129
|
}
|
|
124
|
-
async constructAsync(provider, scope) {
|
|
130
|
+
async constructAsync(provider, scope = this) {
|
|
125
131
|
const originalScope = currentScope;
|
|
126
132
|
try {
|
|
127
133
|
currentScope = scope;
|
|
@@ -133,7 +139,7 @@ export class Container {
|
|
|
133
139
|
}
|
|
134
140
|
async doConstructAsync(provider, scope) {
|
|
135
141
|
if (isAsyncFactoryProvider(provider)) {
|
|
136
|
-
return [await provider.useFactory()];
|
|
142
|
+
return [await provider.useFactory(scope)];
|
|
137
143
|
}
|
|
138
144
|
else if (isExistingProvider(provider)) {
|
|
139
145
|
return scope.getAsync(provider.useExisting, { multi: true });
|
|
@@ -230,7 +236,7 @@ function doConstruct(provider, scope) {
|
|
|
230
236
|
return [provider.useValue];
|
|
231
237
|
}
|
|
232
238
|
else if (isFactoryProvider(provider)) {
|
|
233
|
-
return [provider.useFactory()];
|
|
239
|
+
return [provider.useFactory(scope)];
|
|
234
240
|
}
|
|
235
241
|
else if (isAsyncFactoryProvider(provider)) {
|
|
236
242
|
throw Error("Invalid state");
|
package/dist/container.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EAEf,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5E;;;GAGG;AACH,MAAM,OAAO,SAAS;IACH,SAAS,GAAgB,IAAI,GAAG,EAAE,CAAC;IACnC,UAAU,GAAiB,IAAI,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}
|
package/dist/decorators.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AbstractClass, type Class } from "./utils.
|
|
1
|
+
import { type AbstractClass, type Class } from "./utils.ts";
|
|
2
2
|
type ClassDecorator<C extends Class<unknown>> = (target: C) => C | void;
|
|
3
3
|
export declare const injectableSymbol: unique symbol;
|
|
4
4
|
export type InjectableClass<T = unknown> = (Class<T> | AbstractClass<T>) & {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { inject, Container, bootstrap, bootstrapAsync, injectAsync } from "./container.
|
|
2
|
-
export { injectable } from "./decorators.
|
|
3
|
-
export type { FactoryProvider, ExistingProvider, Provider, ConstructorProvider, ClassProvider, ValueProvider, AsyncFactoryProvider, } from "./providers.
|
|
4
|
-
export { InjectionToken } from "./tokens.
|
|
5
|
-
export type { Token } from "./tokens.
|
|
1
|
+
export { inject, Container, bootstrap, bootstrapAsync, injectAsync } from "./container.ts";
|
|
2
|
+
export { injectable } from "./decorators.ts";
|
|
3
|
+
export type { FactoryProvider, ExistingProvider, Provider, ConstructorProvider, ClassProvider, ValueProvider, AsyncFactoryProvider, } from "./providers.ts";
|
|
4
|
+
export { InjectionToken } from "./tokens.ts";
|
|
5
|
+
export type { Token } from "./tokens.ts";
|
package/dist/providers.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { Token } from "./tokens.
|
|
2
|
-
import { type Class } from "./utils.
|
|
1
|
+
import type { Token } from "./tokens.ts";
|
|
2
|
+
import { type Class } from "./utils.ts";
|
|
3
|
+
import type { Container } from './container.ts';
|
|
3
4
|
/**
|
|
4
5
|
* A provider states how, for a given token, a service should be constructed.
|
|
5
6
|
*/
|
|
@@ -34,7 +35,7 @@ export interface FactoryProvider<T> {
|
|
|
34
35
|
provide: Token<T>;
|
|
35
36
|
async?: false;
|
|
36
37
|
multi?: true;
|
|
37
|
-
useFactory: () => NoInfer<T>;
|
|
38
|
+
useFactory: (container: Container) => NoInfer<T>;
|
|
38
39
|
}
|
|
39
40
|
/**
|
|
40
41
|
* An async factory provider refers to a value which is lazily returned
|
|
@@ -44,7 +45,7 @@ export interface AsyncFactoryProvider<T> {
|
|
|
44
45
|
provide: Token<T>;
|
|
45
46
|
async: true;
|
|
46
47
|
multi?: true;
|
|
47
|
-
useFactory: () => Promise<NoInfer<T>>;
|
|
48
|
+
useFactory: (container: Container) => Promise<NoInfer<T>>;
|
|
48
49
|
}
|
|
49
50
|
/**
|
|
50
51
|
* An existing provider refers to a value provided by another provider.
|
package/dist/providers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,WAAW,EAAE,MAAM,YAAY,CAAC;AAsErD,MAAM,UAAU,qBAAqB,CAAI,QAAqB;IAC5D,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,eAAe,CAAI,QAAqB;IACtD,OAAO,SAAS,IAAI,QAAQ,IAAI,UAAU,IAAI,QAAQ,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,eAAe,CAAI,QAAqB;IACtD,OAAO,SAAS,IAAI,QAAQ,IAAI,UAAU,IAAI,QAAQ,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAI,QAAqB;IACxD,OAAO,SAAS,IAAI,QAAQ,IAAI,YAAY,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAI,QAAqB;IAC7D,OAAO,SAAS,IAAI,QAAQ,IAAI,YAAY,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAI,QAAqB;IACzD,OAAO,SAAS,IAAI,QAAQ,IAAI,aAAa,IAAI,QAAQ,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,eAAe,CAAI,QAAqB;IACtD,OAAO,SAAS,IAAI,QAAQ,IAAI,OAAO,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;AACjF,CAAC"}
|
package/dist/tokens.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AbstractClass, type Class } from "./utils.
|
|
1
|
+
import { type AbstractClass, type Class } from "./utils.ts";
|
|
2
2
|
/**
|
|
3
3
|
* A token is a reference to a service in the dependency injection (DI) container.
|
|
4
4
|
* When obtaining a service from the container, you should use this token.
|
|
@@ -15,11 +15,11 @@ export declare class InjectionToken<T> {
|
|
|
15
15
|
toString(): string;
|
|
16
16
|
}
|
|
17
17
|
type InjectionTokenOptions<T> = {
|
|
18
|
-
async?: false;
|
|
19
|
-
factory: () => T;
|
|
20
|
-
} | {
|
|
21
18
|
async: true;
|
|
22
19
|
factory: () => Promise<T>;
|
|
20
|
+
} | {
|
|
21
|
+
async?: false;
|
|
22
|
+
factory: () => T;
|
|
23
23
|
};
|
|
24
24
|
/**
|
|
25
25
|
* Type-guard to check if a token is a class reference.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@needle-di/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "A simple TypeScript library for dependency injection",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -25,19 +25,21 @@
|
|
|
25
25
|
"url": "git+https://github.com/needle-di/core.git"
|
|
26
26
|
},
|
|
27
27
|
"type": "module",
|
|
28
|
-
"module": "dist/index.js",
|
|
28
|
+
"module": "./dist/index.js",
|
|
29
29
|
"exports": "./dist/index.js",
|
|
30
|
-
"types": "dist/index.d.ts",
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
31
|
"sideEffects": false,
|
|
32
32
|
"files": [
|
|
33
|
-
"dist/**/**"
|
|
33
|
+
"./dist/**/**"
|
|
34
34
|
],
|
|
35
35
|
"scripts": {
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
36
|
+
"check-types": "tsc",
|
|
37
|
+
"check-types:watch": "tsc -w",
|
|
38
|
+
"build": "tsc -p tsconfig.build.json",
|
|
39
|
+
"build:watch": "tsc -p tsconfig.build.json -w",
|
|
40
|
+
"test": "vitest run",
|
|
39
41
|
"test:watch": "vitest",
|
|
40
|
-
"test:ci": "vitest run --silent --coverage",
|
|
42
|
+
"test:ci": "vitest run --silent --coverage --coverage.reporter=json-summary",
|
|
41
43
|
"lint": "eslint src",
|
|
42
44
|
"lint:fix": "eslint src --fix",
|
|
43
45
|
"reformat": "prettier src/**/*.ts README.md --write",
|
|
@@ -48,11 +50,12 @@
|
|
|
48
50
|
"devDependencies": {
|
|
49
51
|
"@eslint/js": "^9.10.0",
|
|
50
52
|
"@release-it/bumper": "^6.0.1",
|
|
51
|
-
"@
|
|
53
|
+
"@tsconfig/node20": "^20.1.4",
|
|
54
|
+
"@types/node": "^22.9.1",
|
|
52
55
|
"@vitest/coverage-v8": "^2.1.1",
|
|
53
|
-
"eslint": "
|
|
56
|
+
"eslint": "~9.14.0",
|
|
54
57
|
"prettier": "^3.3.3",
|
|
55
|
-
"typescript": "
|
|
58
|
+
"typescript": "5.7.0-beta",
|
|
56
59
|
"typescript-eslint": "^8.6.0",
|
|
57
60
|
"vitepress": "^1.3.4",
|
|
58
61
|
"vitest": "^2.1.1"
|