@needle-di/core 0.8.3 → 0.10.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/README.md +9 -2
- package/dist/container.d.ts +7 -2
- package/dist/container.js +16 -6
- package/dist/container.js.map +1 -1
- package/dist/decorators.d.ts +5 -1
- package/dist/decorators.js +4 -0
- package/dist/decorators.js.map +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 +1 -1
- 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,8 +1,13 @@
|
|
|
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
|
+
/**
|
|
4
|
+
* A dependency injection (DI) container will keep track of all bindings
|
|
5
|
+
* and hold the actual instances of your services.
|
|
6
|
+
*/
|
|
3
7
|
export declare class Container {
|
|
4
8
|
private readonly providers;
|
|
5
9
|
private readonly singletons;
|
|
10
|
+
constructor();
|
|
6
11
|
bindAll<A>(p1: Provider<A>): this;
|
|
7
12
|
bindAll<A, B>(p1: Provider<A>, p2: Provider<B>): this;
|
|
8
13
|
bindAll<A, B, C>(p1: Provider<A>, p2: Provider<B>, p3: Provider<C>): this;
|
package/dist/container.js
CHANGED
|
@@ -2,9 +2,19 @@ import { isClassToken, toString, isInjectionToken } from "./tokens.js";
|
|
|
2
2
|
import { isClassProvider, isFactoryProvider, isConstructorProvider, isValueProvider, isAsyncFactoryProvider, isMultiProvider, isExistingProvider, } from "./providers.js";
|
|
3
3
|
import { getInjectableTargets, isInjectable } from "./decorators.js";
|
|
4
4
|
import { assertPresent, getParentClasses, windowedSlice } from "./utils.js";
|
|
5
|
+
/**
|
|
6
|
+
* A dependency injection (DI) container will keep track of all bindings
|
|
7
|
+
* and hold the actual instances of your services.
|
|
8
|
+
*/
|
|
5
9
|
export class Container {
|
|
6
10
|
providers = new Map();
|
|
7
11
|
singletons = new Map();
|
|
12
|
+
constructor() {
|
|
13
|
+
this.bind({
|
|
14
|
+
provide: Container,
|
|
15
|
+
useValue: this,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
8
18
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
19
|
bindAll(...providers) {
|
|
10
20
|
providers.forEach((it) => this.bind(it));
|
|
@@ -66,7 +76,7 @@ export class Container {
|
|
|
66
76
|
if (providers.some(isAsyncFactoryProvider)) {
|
|
67
77
|
throw new AsyncProvidersInSyncInjectionContextError(token);
|
|
68
78
|
}
|
|
69
|
-
this.singletons.set(token, providers.flatMap((it) => this.construct(it
|
|
79
|
+
this.singletons.set(token, providers.flatMap((it) => this.construct(it)));
|
|
70
80
|
}
|
|
71
81
|
const singletons = assertPresent(this.singletons.get(token));
|
|
72
82
|
if (multi) {
|
|
@@ -92,7 +102,7 @@ export class Container {
|
|
|
92
102
|
}
|
|
93
103
|
const existingProviders = this.providers.get(token) ?? [];
|
|
94
104
|
if (!this.singletons.has(token)) {
|
|
95
|
-
const values = await Promise.all(existingProviders.map((it) => this.constructAsync(it
|
|
105
|
+
const values = await Promise.all(existingProviders.map((it) => this.constructAsync(it)));
|
|
96
106
|
this.singletons.set(token, values.flat());
|
|
97
107
|
}
|
|
98
108
|
const singletons = assertPresent(this.singletons.get(token));
|
|
@@ -107,7 +117,7 @@ export class Container {
|
|
|
107
117
|
return promisify(singletons.at(0));
|
|
108
118
|
}
|
|
109
119
|
}
|
|
110
|
-
construct(provider, scope) {
|
|
120
|
+
construct(provider, scope = this) {
|
|
111
121
|
const originalScope = currentScope;
|
|
112
122
|
try {
|
|
113
123
|
currentScope = scope;
|
|
@@ -117,7 +127,7 @@ export class Container {
|
|
|
117
127
|
currentScope = originalScope;
|
|
118
128
|
}
|
|
119
129
|
}
|
|
120
|
-
async constructAsync(provider, scope) {
|
|
130
|
+
async constructAsync(provider, scope = this) {
|
|
121
131
|
const originalScope = currentScope;
|
|
122
132
|
try {
|
|
123
133
|
currentScope = scope;
|
|
@@ -129,7 +139,7 @@ export class Container {
|
|
|
129
139
|
}
|
|
130
140
|
async doConstructAsync(provider, scope) {
|
|
131
141
|
if (isAsyncFactoryProvider(provider)) {
|
|
132
|
-
return [await provider.useFactory()];
|
|
142
|
+
return [await provider.useFactory(scope)];
|
|
133
143
|
}
|
|
134
144
|
else if (isExistingProvider(provider)) {
|
|
135
145
|
return scope.getAsync(provider.useExisting, { multi: true });
|
|
@@ -226,7 +236,7 @@ function doConstruct(provider, scope) {
|
|
|
226
236
|
return [provider.useValue];
|
|
227
237
|
}
|
|
228
238
|
else if (isFactoryProvider(provider)) {
|
|
229
|
-
return [provider.useFactory()];
|
|
239
|
+
return [provider.useFactory(scope)];
|
|
230
240
|
}
|
|
231
241
|
else if (isAsyncFactoryProvider(provider)) {
|
|
232
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,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,9 +1,13 @@
|
|
|
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>) & {
|
|
5
5
|
[injectableSymbol]: Class<unknown>[];
|
|
6
6
|
};
|
|
7
|
+
/**
|
|
8
|
+
* The @injectable() decorator allows you to automatically bind a class as singleton service
|
|
9
|
+
* when requesting it from a DI container.
|
|
10
|
+
*/
|
|
7
11
|
export declare function injectable<C extends Class<unknown>>(): ClassDecorator<C>;
|
|
8
12
|
export declare function isInjectable<T>(target: AbstractClass<T>): target is InjectableClass<T>;
|
|
9
13
|
export declare function getInjectableTargets<T>(target: InjectableClass<T>): Class<unknown>[];
|
package/dist/decorators.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { getParentClasses } from "./utils.js";
|
|
2
2
|
export const injectableSymbol = Symbol("injectable");
|
|
3
|
+
/**
|
|
4
|
+
* The @injectable() decorator allows you to automatically bind a class as singleton service
|
|
5
|
+
* when requesting it from a DI container.
|
|
6
|
+
*/
|
|
3
7
|
export function injectable() {
|
|
4
8
|
return (target) => {
|
|
5
9
|
getParentClasses(target).forEach((parentClass) => {
|
package/dist/decorators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAIrD,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,gBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;YAC/C,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,CAAC;gBACpE,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,gBAAgB,EAAE;oBACnD,KAAK,EAAE,CAAC,MAAM,CAAC;oBACf,QAAQ,EAAE,IAAI;oBACd,UAAU,EAAE,KAAK;iBAClB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,qBAAqB,GAAG,WAA8B,CAAC;gBAC7D,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;YACjG,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE;YAC9C,KAAK,EAAE,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,MAAwB;IACtD,iDAAiD;IACjD,OAAO,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAI,MAA0B;IAChE,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAClC,CAAC"}
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAIrD;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,gBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;YAC/C,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,CAAC;gBACpE,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,gBAAgB,EAAE;oBACnD,KAAK,EAAE,CAAC,MAAM,CAAC;oBACf,QAAQ,EAAE,IAAI;oBACd,UAAU,EAAE,KAAK;iBAClB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,qBAAqB,GAAG,WAA8B,CAAC;gBAC7D,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;YACjG,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE;YAC9C,KAAK,EAAE,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,MAAwB;IACtD,iDAAiD;IACjD,OAAO,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAI,MAA0B;IAChE,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAClC,CAAC"}
|
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.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@needle-di/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
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"
|