@zeltjs/testing 0.0.1 → 0.6.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 ADDED
@@ -0,0 +1,28 @@
1
+ # @zeltjs/testing
2
+
3
+ [![Documentation](https://img.shields.io/badge/docs-zeltjs.com-blue)](https://zeltjs.com)
4
+
5
+ Testing utilities for Zelt applications.
6
+
7
+ **[Read the Documentation](https://zeltjs.com)**
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npm install -D @zeltjs/testing
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ```typescript
18
+ import { createTestApp } from '@zeltjs/testing';
19
+ import { describe, it, expect } from 'vitest';
20
+
21
+ describe('HelloController', () => {
22
+ it('returns hello message', async () => {
23
+ const app = createTestApp({ controllers: [HelloController] });
24
+ const res = await app.request('/hello');
25
+ expect(res.status).toBe(200);
26
+ });
27
+ });
28
+ ```
@@ -0,0 +1,2 @@
1
+ import { a as TestApp, c as getTestDefaults, i as shutdownAll, n as TestTargetResult, o as onTest, r as createTestTarget, s as configureTestDefaults, t as CreateTestTargetOptions } from "../index-BQPhTvBe.js";
2
+ export { CreateTestTargetOptions, TestApp, TestTargetResult, configureTestDefaults, createTestTarget, getTestDefaults, onTest, shutdownAll };
@@ -0,0 +1,8 @@
1
+ import { a as getTestDefaults, i as configureTestDefaults, n as onTest, r as shutdownAll, t as createTestTarget } from "../src-CUYWocvI.js";
2
+ import { afterAll } from "bun:test";
3
+ //#region src/adapters/bun.ts
4
+ afterAll(shutdownAll);
5
+ //#endregion
6
+ export { configureTestDefaults, createTestTarget, getTestDefaults, onTest, shutdownAll };
7
+
8
+ //# sourceMappingURL=bun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bun.js","names":["afterAll","shutdownAll"],"sources":["../../src/adapters/bun.ts"],"sourcesContent":["import { afterAll } from 'bun:test';\n\nimport { shutdownAll } from '../shutdown-registry';\n\nafterAll(shutdownAll);\n\nexport * from '../index';\n"],"mappings":";;;AAIAA,SAASC,YAAAA"}
@@ -0,0 +1,2 @@
1
+ import { a as TestApp, c as getTestDefaults, i as shutdownAll, n as TestTargetResult, o as onTest, r as createTestTarget, s as configureTestDefaults, t as CreateTestTargetOptions } from "../index-BQPhTvBe.js";
2
+ export { CreateTestTargetOptions, TestApp, TestTargetResult, configureTestDefaults, createTestTarget, getTestDefaults, onTest, shutdownAll };
@@ -0,0 +1,8 @@
1
+ import { a as getTestDefaults, i as configureTestDefaults, n as onTest, r as shutdownAll, t as createTestTarget } from "../src-CUYWocvI.js";
2
+ import { afterAll } from "@jest/globals";
3
+ //#region src/adapters/jest.ts
4
+ afterAll(shutdownAll);
5
+ //#endregion
6
+ export { configureTestDefaults, createTestTarget, getTestDefaults, onTest, shutdownAll };
7
+
8
+ //# sourceMappingURL=jest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest.js","names":["afterAll","shutdownAll"],"sources":["../../src/adapters/jest.ts"],"sourcesContent":["import { afterAll } from '@jest/globals';\n\nimport { shutdownAll } from '../shutdown-registry';\n\nafterAll(shutdownAll);\n\nexport * from '../index';\n"],"mappings":";;;AAIAA,SAASC,YAAAA"}
@@ -0,0 +1,2 @@
1
+ import { a as TestApp, c as getTestDefaults, i as shutdownAll, n as TestTargetResult, o as onTest, r as createTestTarget, s as configureTestDefaults, t as CreateTestTargetOptions } from "../index-BQPhTvBe.js";
2
+ export { CreateTestTargetOptions, TestApp, TestTargetResult, configureTestDefaults, createTestTarget, getTestDefaults, onTest, shutdownAll };
@@ -0,0 +1,8 @@
1
+ import { a as getTestDefaults, i as configureTestDefaults, n as onTest, r as shutdownAll, t as createTestTarget } from "../src-CUYWocvI.js";
2
+ import { after } from "node:test";
3
+ //#region src/adapters/node.ts
4
+ after(shutdownAll);
5
+ //#endregion
6
+ export { configureTestDefaults, createTestTarget, getTestDefaults, onTest, shutdownAll };
7
+
8
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","names":["after","shutdownAll"],"sources":["../../src/adapters/node.ts"],"sourcesContent":["import { after } from 'node:test';\n\nimport { shutdownAll } from '../shutdown-registry';\n\nafter(shutdownAll);\n\nexport * from '../index';\n"],"mappings":";;;AAIAA,MAAMC,YAAAA"}
@@ -0,0 +1,2 @@
1
+ import { a as TestApp, c as getTestDefaults, i as shutdownAll, n as TestTargetResult, o as onTest, r as createTestTarget, s as configureTestDefaults, t as CreateTestTargetOptions } from "../index-BQPhTvBe.js";
2
+ export { CreateTestTargetOptions, TestApp, TestTargetResult, configureTestDefaults, createTestTarget, getTestDefaults, onTest, shutdownAll };
@@ -0,0 +1,8 @@
1
+ import { a as getTestDefaults, i as configureTestDefaults, n as onTest, r as shutdownAll, t as createTestTarget } from "../src-CUYWocvI.js";
2
+ import { afterAll } from "vitest";
3
+ //#region src/adapters/vitest.ts
4
+ afterAll(shutdownAll);
5
+ //#endregion
6
+ export { configureTestDefaults, createTestTarget, getTestDefaults, onTest, shutdownAll };
7
+
8
+ //# sourceMappingURL=vitest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.js","names":["afterAll","shutdownAll"],"sources":["../../src/adapters/vitest.ts"],"sourcesContent":["import { afterAll } from 'vitest';\n\nimport { shutdownAll } from '../shutdown-registry';\n\nafterAll(shutdownAll);\n\nexport * from '../index';\n"],"mappings":";;;AAIAA,SAASC,YAAAA"}
@@ -0,0 +1,35 @@
1
+ import { CreateTestTargetOptions, CreateTestTargetOptions as CreateTestTargetOptions$1, TestTargetResult, TestTargetResult as TestTargetResult$1 } from "@zeltjs/core/internal-bridge/testing";
2
+ import { ConfigClass, HttpApp } from "@zeltjs/core";
3
+
4
+ //#region src/global-config.d.ts
5
+ type AnyConfigClass$1 = ConfigClass<object>;
6
+ type TestDefaults = {
7
+ readonly configs: readonly AnyConfigClass$1[];
8
+ };
9
+ type ConfigureOptions = {
10
+ readonly configs: readonly AnyConfigClass$1[];
11
+ };
12
+ declare const configureTestDefaults: (options: ConfigureOptions) => void;
13
+ declare const getTestDefaults: () => TestDefaults;
14
+ //#endregion
15
+ //#region src/on-test.d.ts
16
+ type AnyConfigClass = ConfigClass<object>;
17
+ type OnTestOptions = {
18
+ readonly configs?: readonly AnyConfigClass[];
19
+ };
20
+ type TestApp = {
21
+ readonly fetch: (request: Request) => Promise<Response>;
22
+ readonly request: (input: string | Request, init?: RequestInit) => Promise<Response>;
23
+ readonly shutdown: () => Promise<void>;
24
+ };
25
+ declare const onTest: (app: HttpApp, options?: OnTestOptions) => Promise<TestApp>;
26
+ //#endregion
27
+ //#region src/shutdown-registry.d.ts
28
+ declare const shutdownAll: () => Promise<void>;
29
+ //#endregion
30
+ //#region src/test-target.d.ts
31
+ /** @throws {ZeltLifecycleStateError} */
32
+ declare const createTestTarget: <T extends object>(targetClass: new (...args: never[]) => T, options?: CreateTestTargetOptions) => Promise<TestTargetResult<T>>;
33
+ //#endregion
34
+ export { TestApp as a, getTestDefaults as c, shutdownAll as i, TestTargetResult$1 as n, onTest as o, createTestTarget as r, configureTestDefaults as s, CreateTestTargetOptions$1 as t };
35
+ //# sourceMappingURL=index-BQPhTvBe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BQPhTvBe.d.ts","names":[],"sources":["../src/global-config.ts","../src/on-test.ts","../src/shutdown-registry.ts","../src/test-target.ts"],"mappings":";;;;KAEK,gBAAA,GAAiB,WAAA;AAAA,KAEjB,YAAA;EAAA,SACM,OAAA,WAAkB,gBAAA;AAAA;AAAA,KAGxB,gBAAA;EAAA,SACM,OAAA,WAAkB,gBAAA;AAAA;AAAA,cAKhB,qBAAA,GAAyB,OAAA,EAAS,gBAAA;AAAA,cAIlC,eAAA,QAAsB,YAAA;;;KCb9B,cAAA,GAAiB,WAAA;AAAA,KAEjB,aAAA;EAAA,SACM,OAAA,YAAmB,cAAA;AAAA;AAAA,KAGlB,OAAA;EAAA,SACD,KAAA,GAAQ,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA;EAAA,SACrC,OAAA,GAAU,KAAA,WAAgB,OAAA,EAAS,IAAA,GAAO,WAAA,KAAgB,OAAA,CAAQ,QAAA;EAAA,SAClE,QAAA,QAAgB,OAAA;AAAA;AAAA,cASd,MAAA,GAAgB,GAAA,EAAK,OAAA,EAAS,OAAA,GAAS,aAAA,KAAqB,OAAA,CAAQ,OAAA;;;cCfpE,WAAA,QAAwB,OAAA;;;;cCcxB,gBAAA,qBACX,WAAA,UAAqB,IAAA,cAAkB,CAAA,EACvC,OAAA,GAAS,uBAAA,KACR,OAAA,CAAQ,gBAAA,CAAiB,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,15 +1,2 @@
1
- import { Container, Token } from "@needle-di/core";
2
-
3
- //#region src/test-container.d.ts
4
- type PickedProvider<T> = {
5
- provide: Token<T>;
6
- useValue: Partial<T>;
7
- };
8
- type CreateContainerParams = <T, A extends unknown[]>(token: Token<T>, providers?: { [K in keyof A]: PickedProvider<A[K]> }) => {
9
- target: T;
10
- container: Container;
11
- };
12
- declare const createTestContainer: CreateContainerParams;
13
- //#endregion
14
- export { createTestContainer };
15
- //# sourceMappingURL=index.d.ts.map
1
+ import { a as TestApp, c as getTestDefaults, i as shutdownAll, n as TestTargetResult, o as onTest, r as createTestTarget, s as configureTestDefaults, t as CreateTestTargetOptions } from "./index-BQPhTvBe.js";
2
+ export { CreateTestTargetOptions, TestApp, TestTargetResult, configureTestDefaults, createTestTarget, getTestDefaults, onTest, shutdownAll };
package/dist/index.js CHANGED
@@ -1,20 +1,2 @@
1
- import { Container } from "@needle-di/core";
2
- //#region src/test-container.ts
3
- let baseContainer = null;
4
- const createTestContainer = (targetClass, providers) => {
5
- const childContainer = getBaseContainer().createChild();
6
- providers?.map((p) => childContainer.bind(p));
7
- return {
8
- target: childContainer.get(targetClass),
9
- container: childContainer
10
- };
11
- };
12
- const getBaseContainer = () => {
13
- if (baseContainer) return baseContainer;
14
- baseContainer = new Container();
15
- return baseContainer;
16
- };
17
- //#endregion
18
- export { createTestContainer };
19
-
20
- //# sourceMappingURL=index.js.map
1
+ import { a as getTestDefaults, i as configureTestDefaults, n as onTest, r as shutdownAll, t as createTestTarget } from "./src-CUYWocvI.js";
2
+ export { configureTestDefaults, createTestTarget, getTestDefaults, onTest, shutdownAll };
@@ -0,0 +1,51 @@
1
+ import { createTestTargetBase } from "@zeltjs/core/internal-bridge/testing";
2
+ //#region src/global-config.ts
3
+ const globalConfigs = [];
4
+ const configureTestDefaults = (options) => {
5
+ globalConfigs.push(...options.configs);
6
+ };
7
+ const getTestDefaults = () => ({ configs: globalConfigs });
8
+ //#endregion
9
+ //#region src/shutdown-registry.ts
10
+ const shutdownFns = [];
11
+ const registerShutdown = (fn) => {
12
+ shutdownFns.push(fn);
13
+ };
14
+ const shutdownAll = async () => {
15
+ const fns = shutdownFns.splice(0);
16
+ for (const fn of fns) await fn();
17
+ };
18
+ //#endregion
19
+ //#region src/on-test.ts
20
+ const applyOverrides = (app, configs) => {
21
+ for (const configClass of configs) app.overrideConfig(configClass);
22
+ };
23
+ const onTest = async (app, options = {}) => {
24
+ applyOverrides(app, getTestDefaults().configs);
25
+ applyOverrides(app, options.configs ?? []);
26
+ await app.ready();
27
+ registerShutdown(app.shutdown.bind(app));
28
+ return {
29
+ fetch: app.fetch.bind(app),
30
+ request: app.request.bind(app),
31
+ shutdown: app.shutdown.bind(app)
32
+ };
33
+ };
34
+ //#endregion
35
+ //#region src/test-target.ts
36
+ const mergeGlobalDefaults = (configs) => {
37
+ return [...getTestDefaults().configs, ...configs];
38
+ };
39
+ /** @throws {ZeltLifecycleStateError} */ const createTestTarget = async (targetClass, options = {}) => {
40
+ const mergedConfigs = mergeGlobalDefaults(options.configs ?? []);
41
+ const result = await createTestTargetBase(targetClass, {
42
+ ...options,
43
+ configs: mergedConfigs
44
+ });
45
+ registerShutdown(result.shutdown);
46
+ return result;
47
+ };
48
+ //#endregion
49
+ export { getTestDefaults as a, configureTestDefaults as i, onTest as n, shutdownAll as r, createTestTarget as t };
50
+
51
+ //# sourceMappingURL=src-CUYWocvI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src-CUYWocvI.js","names":["globalConfigs","configureTestDefaults","options","push","configs","getTestDefaults","shutdownFns","registerShutdown","fn","push","shutdownAll","fns","splice","getTestDefaults","registerShutdown","applyOverrides","app","configs","configClass","overrideConfig","onTest","options","defaults","ready","shutdown","bind","fetch","request","createTestTargetBase","getTestDefaults","registerShutdown","mergeGlobalDefaults","configs","defaults","createTestTarget","targetClass","options","mergedConfigs","result","shutdown"],"sources":["../src/global-config.ts","../src/shutdown-registry.ts","../src/on-test.ts","../src/test-target.ts"],"sourcesContent":["import type { ConfigClass } from '@zeltjs/core';\n\ntype AnyConfigClass = ConfigClass<object>;\n\ntype TestDefaults = {\n readonly configs: readonly AnyConfigClass[];\n};\n\ntype ConfigureOptions = {\n readonly configs: readonly AnyConfigClass[];\n};\n\nconst globalConfigs: AnyConfigClass[] = [];\n\nexport const configureTestDefaults = (options: ConfigureOptions): void => {\n globalConfigs.push(...options.configs);\n};\n\nexport const getTestDefaults = (): TestDefaults => ({ configs: globalConfigs });\n","type ShutdownFn = () => Promise<void>;\n\nconst shutdownFns: ShutdownFn[] = [];\n\nexport const registerShutdown = (fn: ShutdownFn): void => {\n shutdownFns.push(fn);\n};\n\nexport const shutdownAll = async (): Promise<void> => {\n const fns = shutdownFns.splice(0);\n for (const fn of fns) {\n await fn();\n }\n};\n","import type { ConfigClass, HttpApp } from '@zeltjs/core';\n\nimport { getTestDefaults } from './global-config';\nimport { registerShutdown } from './shutdown-registry';\n\ntype AnyConfigClass = ConfigClass<object>;\n\ntype OnTestOptions = {\n readonly configs?: readonly AnyConfigClass[];\n};\n\nexport type TestApp = {\n readonly fetch: (request: Request) => Promise<Response>;\n readonly request: (input: string | Request, init?: RequestInit) => Promise<Response>;\n readonly shutdown: () => Promise<void>;\n};\n\nconst applyOverrides = (app: HttpApp, configs: readonly AnyConfigClass[]): void => {\n for (const configClass of configs) {\n app.overrideConfig(configClass);\n }\n};\n\nexport const onTest = async (app: HttpApp, options: OnTestOptions = {}): Promise<TestApp> => {\n const defaults = getTestDefaults();\n applyOverrides(app, defaults.configs);\n applyOverrides(app, options.configs ?? []);\n\n await app.ready();\n registerShutdown(app.shutdown.bind(app));\n\n return {\n fetch: app.fetch.bind(app),\n request: app.request.bind(app),\n shutdown: app.shutdown.bind(app),\n };\n};\n","import type {\n CreateTestTargetOptions,\n TestTargetResult,\n} from '@zeltjs/core/internal-bridge/testing';\nimport { createTestTargetBase } from '@zeltjs/core/internal-bridge/testing';\n\nimport { getTestDefaults } from './global-config';\nimport { registerShutdown } from './shutdown-registry';\n\nexport type {\n CreateTestTargetOptions,\n TestTargetResult,\n} from '@zeltjs/core/internal-bridge/testing';\n\ntype AnyConstructor = new (...args: never[]) => unknown;\n\nconst mergeGlobalDefaults = (configs: readonly AnyConstructor[]): AnyConstructor[] => {\n const defaults = getTestDefaults();\n return [...defaults.configs, ...configs];\n};\n\n/** @throws {ZeltLifecycleStateError} */\nexport const createTestTarget = async <T extends object>(\n targetClass: new (...args: never[]) => T,\n options: CreateTestTargetOptions = {},\n): Promise<TestTargetResult<T>> => {\n const mergedConfigs = mergeGlobalDefaults(options.configs ?? []);\n const result = await createTestTargetBase(targetClass, {\n ...options,\n configs: mergedConfigs,\n });\n registerShutdown(result.shutdown);\n return result;\n};\n"],"mappings":";;AAYA,MAAMA,gBAAkC,EAAE;AAE1C,MAAaC,yBAAyBC,YAAAA;AACpCF,eAAcG,KAAI,GAAID,QAAQE,QAAO;;AAGvC,MAAaC,yBAAuC,EAAED,SAASJ,eAAc;;;AChB7E,MAAMM,cAA4B,EAAE;AAEpC,MAAaC,oBAAoBC,OAAAA;AAC/BF,aAAYG,KAAKD,GAAAA;;AAGnB,MAAaE,cAAc,YAAA;CACzB,MAAMC,MAAML,YAAYM,OAAO,EAAA;AAC/B,MAAK,MAAMJ,MAAMG,IACf,OAAMH,IAAAA;;;;ACMV,MAAMO,kBAAkBC,KAAcC,YAAAA;AACpC,MAAK,MAAMC,eAAeD,QACxBD,KAAIG,eAAeD,YAAAA;;AAIvB,MAAaE,SAAS,OAAOJ,KAAcK,UAAyB,EAAE,KAAA;AAEpEN,gBAAeC,KADEH,iBACGS,CAASL,QAAO;AACpCF,gBAAeC,KAAKK,QAAQJ,WAAW,EAAE,CAAA;AAEzC,OAAMD,IAAIO,OAAK;AACfT,kBAAiBE,IAAIQ,SAASC,KAAKT,IAAAA,CAAAA;AAEnC,QAAO;EACLU,OAAOV,IAAIU,MAAMD,KAAKT,IAAAA;EACtBW,SAASX,IAAIW,QAAQF,KAAKT,IAAAA;EAC1BQ,UAAUR,IAAIQ,SAASC,KAAKT,IAAAA;EAC9B;;;;ACnBF,MAAMe,uBAAuBC,YAAAA;AAE3B,QAAO,CAAA,GADUH,iBACNI,CAASD,SAAAA,GAAYA,QAAQ;;yCAI1C,MAAaE,mBAAmB,OAC9BC,aACAC,UAAmC,EAAE,KAAA;CAErC,MAAMC,gBAAgBN,oBAAoBK,QAAQJ,WAAW,EAAE,CAAA;CAC/D,MAAMM,SAAS,MAAMV,qBAAqBO,aAAa;EACrD,GAAGC;EACHJ,SAASK;EACX,CAAA;AACAP,kBAAiBQ,OAAOC,SAAQ;AAChC,QAAOD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeltjs/testing",
3
- "version": "0.0.1",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -15,18 +15,55 @@
15
15
  ".": {
16
16
  "types": "./dist/index.d.ts",
17
17
  "import": "./dist/index.js"
18
+ },
19
+ "./vitest": {
20
+ "types": "./dist/adapters/vitest.d.ts",
21
+ "import": "./dist/adapters/vitest.js"
22
+ },
23
+ "./jest": {
24
+ "types": "./dist/adapters/jest.d.ts",
25
+ "import": "./dist/adapters/jest.js"
26
+ },
27
+ "./bun": {
28
+ "types": "./dist/adapters/bun.d.ts",
29
+ "import": "./dist/adapters/bun.js"
30
+ },
31
+ "./node": {
32
+ "types": "./dist/adapters/node.d.ts",
33
+ "import": "./dist/adapters/node.js"
18
34
  }
19
35
  },
20
36
  "files": [
21
37
  "dist"
22
38
  ],
23
39
  "peerDependencies": {
24
- "@needle-di/core": "1.1.2",
25
- "vitest": ">=4 <5",
26
- "@zeltjs/core": "0.0.1"
40
+ "vitest": ">=2",
41
+ "@jest/globals": ">=29",
42
+ "bun-types": ">=1",
43
+ "@types/node": ">=20",
44
+ "@zeltjs/core": "0.6.0"
45
+ },
46
+ "peerDependenciesMeta": {
47
+ "vitest": {
48
+ "optional": true
49
+ },
50
+ "@jest/globals": {
51
+ "optional": true
52
+ },
53
+ "bun-types": {
54
+ "optional": true
55
+ },
56
+ "@types/node": {
57
+ "optional": true
58
+ }
27
59
  },
28
60
  "devDependencies": {
29
- "@needle-di/core": "1.1.2"
61
+ "@jest/globals": "29.7.0",
62
+ "bun-types": "1.2.14",
63
+ "vitest": "4.1.5"
64
+ },
65
+ "volta": {
66
+ "extends": "../../package.json"
30
67
  },
31
68
  "scripts": {
32
69
  "build": "tsdown",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/test-container.ts"],"mappings":";;;KAKK,cAAA;EACH,OAAA,EAAS,KAAA,CAAM,CAAA;EACf,QAAA,EAAU,OAAA,CAAQ,CAAA;AAAA;AAAA,KAGf,qBAAA,4BACH,KAAA,EAAO,KAAA,CAAM,CAAA,GACb,SAAA,iBAA0B,CAAA,GAAI,cAAA,CAAe,CAAA,CAAE,CAAA;EAC1C,MAAA,EAAQ,CAAA;EAAG,SAAA,EAAW,SAAA;AAAA;AAAA,cAEhB,mBAAA,EAAqB,qBAAA"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/test-container.ts"],"sourcesContent":["import { Container } from '@needle-di/core';\nimport type { Token } from '@needle-di/core';\n\nlet baseContainer: Container | null = null;\n\ntype PickedProvider<T> = {\n provide: Token<T>;\n useValue: Partial<T>;\n};\n\ntype CreateContainerParams = <T, A extends unknown[]>(\n token: Token<T>,\n providers?: { [K in keyof A]: PickedProvider<A[K]> },\n) => { target: T; container: Container };\n\nexport const createTestContainer: CreateContainerParams = (targetClass, providers) => {\n const baseContainer = getBaseContainer();\n const childContainer = baseContainer.createChild();\n providers?.map((p) => childContainer.bind(p));\n const target = childContainer.get(targetClass); // 依存関係を解決してインスタンスを生成\n return { target, container: childContainer };\n};\n\nconst getBaseContainer = () => {\n if (baseContainer) {\n return baseContainer;\n }\n baseContainer = new Container();\n\n // 本来は利用側で必要なものをdummy inject する\n // (zelt framework 自体は default 持たない)\n\n return baseContainer;\n};\n"],"mappings":";;AAGA,IAAI,gBAAkC;AAYtC,MAAa,uBAA8C,aAAa,cAAc;CAEpF,MAAM,iBADgB,kBACc,CAAC,aAAa;AAClD,YAAW,KAAK,MAAM,eAAe,KAAK,EAAE,CAAC;AAE7C,QAAO;EAAE,QADM,eAAe,IAAI,YACnB;EAAE,WAAW;EAAgB;;AAG9C,MAAM,yBAAyB;AAC7B,KAAI,cACF,QAAO;AAET,iBAAgB,IAAI,WAAW;AAK/B,QAAO"}