@toijs/modular 1.0.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/dist/config/constants/config.constant.d.ts +5 -0
- package/dist/config/constants/config.constant.d.ts.map +1 -0
- package/dist/config/constants/config.constant.js +5 -0
- package/dist/config/constants/config.constant.js.map +1 -0
- package/dist/config/constants/index.d.ts +2 -0
- package/dist/config/constants/index.d.ts.map +1 -0
- package/dist/config/constants/index.js +2 -0
- package/dist/config/constants/index.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/services/config.service.d.ts +18 -0
- package/dist/config/services/config.service.d.ts.map +1 -0
- package/dist/config/services/config.service.js +33 -0
- package/dist/config/services/config.service.js.map +1 -0
- package/dist/config/services/index.d.ts +2 -0
- package/dist/config/services/index.d.ts.map +1 -0
- package/dist/config/services/index.js +2 -0
- package/dist/config/services/index.js.map +1 -0
- package/dist/config/utils/env.util.d.ts +4 -0
- package/dist/config/utils/env.util.d.ts.map +1 -0
- package/dist/config/utils/env.util.js +35 -0
- package/dist/config/utils/env.util.js.map +1 -0
- package/dist/config/utils/index.d.ts +2 -0
- package/dist/config/utils/index.d.ts.map +1 -0
- package/dist/config/utils/index.js +2 -0
- package/dist/config/utils/index.js.map +1 -0
- package/dist/di/constants/di.constant.d.ts +21 -0
- package/dist/di/constants/di.constant.d.ts.map +1 -0
- package/dist/di/constants/di.constant.js +21 -0
- package/dist/di/constants/di.constant.js.map +1 -0
- package/dist/di/constants/index.d.ts +2 -0
- package/dist/di/constants/index.d.ts.map +1 -0
- package/dist/di/constants/index.js +2 -0
- package/dist/di/constants/index.js.map +1 -0
- package/dist/di/decorators/index.d.ts +2 -0
- package/dist/di/decorators/index.d.ts.map +1 -0
- package/dist/di/decorators/index.js +2 -0
- package/dist/di/decorators/index.js.map +1 -0
- package/dist/di/decorators/injectable.decorator.d.ts +39 -0
- package/dist/di/decorators/injectable.decorator.d.ts.map +1 -0
- package/dist/di/decorators/injectable.decorator.js +82 -0
- package/dist/di/decorators/injectable.decorator.js.map +1 -0
- package/dist/di/index.d.ts +5 -0
- package/dist/di/index.d.ts.map +1 -0
- package/dist/di/index.js +5 -0
- package/dist/di/index.js.map +1 -0
- package/dist/di/services/container.service.d.ts +52 -0
- package/dist/di/services/container.service.d.ts.map +1 -0
- package/dist/di/services/container.service.js +188 -0
- package/dist/di/services/container.service.js.map +1 -0
- package/dist/di/services/index.d.ts +2 -0
- package/dist/di/services/index.d.ts.map +1 -0
- package/dist/di/services/index.js +2 -0
- package/dist/di/services/index.js.map +1 -0
- package/dist/di/types/di.type.d.ts +85 -0
- package/dist/di/types/di.type.d.ts.map +1 -0
- package/dist/di/types/di.type.js +2 -0
- package/dist/di/types/di.type.js.map +1 -0
- package/dist/di/types/index.d.ts +2 -0
- package/dist/di/types/index.d.ts.map +1 -0
- package/dist/di/types/index.js +2 -0
- package/dist/di/types/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/launcher/constants/core.constant.d.ts +5 -0
- package/dist/launcher/constants/core.constant.d.ts.map +1 -0
- package/dist/launcher/constants/core.constant.js +5 -0
- package/dist/launcher/constants/core.constant.js.map +1 -0
- package/dist/launcher/constants/index.d.ts +2 -0
- package/dist/launcher/constants/index.d.ts.map +1 -0
- package/dist/launcher/constants/index.js +2 -0
- package/dist/launcher/constants/index.js.map +1 -0
- package/dist/launcher/constants/task.constant.d.ts +3 -0
- package/dist/launcher/constants/task.constant.d.ts.map +1 -0
- package/dist/launcher/constants/task.constant.js +3 -0
- package/dist/launcher/constants/task.constant.js.map +1 -0
- package/dist/launcher/index.d.ts +4 -0
- package/dist/launcher/index.d.ts.map +1 -0
- package/dist/launcher/index.js +4 -0
- package/dist/launcher/index.js.map +1 -0
- package/dist/launcher/services/index.d.ts +3 -0
- package/dist/launcher/services/index.d.ts.map +1 -0
- package/dist/launcher/services/index.js +3 -0
- package/dist/launcher/services/index.js.map +1 -0
- package/dist/launcher/services/launcher.service.d.ts +33 -0
- package/dist/launcher/services/launcher.service.d.ts.map +1 -0
- package/dist/launcher/services/launcher.service.js +95 -0
- package/dist/launcher/services/launcher.service.js.map +1 -0
- package/dist/launcher/services/shell.service.d.ts +24 -0
- package/dist/launcher/services/shell.service.d.ts.map +1 -0
- package/dist/launcher/services/shell.service.js +34 -0
- package/dist/launcher/services/shell.service.js.map +1 -0
- package/dist/launcher/types/extensions.type.d.ts +16 -0
- package/dist/launcher/types/extensions.type.d.ts.map +1 -0
- package/dist/launcher/types/extensions.type.js +2 -0
- package/dist/launcher/types/extensions.type.js.map +1 -0
- package/dist/launcher/types/index.d.ts +2 -0
- package/dist/launcher/types/index.d.ts.map +1 -0
- package/dist/launcher/types/index.js +2 -0
- package/dist/launcher/types/index.js.map +1 -0
- package/dist/launcher/types/module.type.d.ts +29 -0
- package/dist/launcher/types/module.type.d.ts.map +1 -0
- package/dist/launcher/types/module.type.js +2 -0
- package/dist/launcher/types/module.type.js.map +1 -0
- package/dist/metadata/constants/index.d.ts +2 -0
- package/dist/metadata/constants/index.d.ts.map +1 -0
- package/dist/metadata/constants/index.js +2 -0
- package/dist/metadata/constants/index.js.map +1 -0
- package/dist/metadata/constants/metadata.constant.d.ts +2 -0
- package/dist/metadata/constants/metadata.constant.d.ts.map +1 -0
- package/dist/metadata/constants/metadata.constant.js +2 -0
- package/dist/metadata/constants/metadata.constant.js.map +1 -0
- package/dist/metadata/index.d.ts +4 -0
- package/dist/metadata/index.d.ts.map +1 -0
- package/dist/metadata/index.js +4 -0
- package/dist/metadata/index.js.map +1 -0
- package/dist/metadata/services/index.d.ts +2 -0
- package/dist/metadata/services/index.d.ts.map +1 -0
- package/dist/metadata/services/index.js +2 -0
- package/dist/metadata/services/index.js.map +1 -0
- package/dist/metadata/services/metadata.service.d.ts +44 -0
- package/dist/metadata/services/metadata.service.d.ts.map +1 -0
- package/dist/metadata/services/metadata.service.js +95 -0
- package/dist/metadata/services/metadata.service.js.map +1 -0
- package/dist/metadata/types/index.d.ts +2 -0
- package/dist/metadata/types/index.d.ts.map +1 -0
- package/dist/metadata/types/index.js +2 -0
- package/dist/metadata/types/index.js.map +1 -0
- package/dist/metadata/types/metadata.type.d.ts +3 -0
- package/dist/metadata/types/metadata.type.d.ts.map +1 -0
- package/dist/metadata/types/metadata.type.js +2 -0
- package/dist/metadata/types/metadata.type.js.map +1 -0
- package/dist/task/index.d.ts +3 -0
- package/dist/task/index.d.ts.map +1 -0
- package/dist/task/index.js +3 -0
- package/dist/task/index.js.map +1 -0
- package/dist/task/services/index.d.ts +2 -0
- package/dist/task/services/index.d.ts.map +1 -0
- package/dist/task/services/index.js +2 -0
- package/dist/task/services/index.js.map +1 -0
- package/dist/task/services/task.service.d.ts +25 -0
- package/dist/task/services/task.service.d.ts.map +1 -0
- package/dist/task/services/task.service.js +58 -0
- package/dist/task/services/task.service.js.map +1 -0
- package/dist/task/types/index.d.ts +2 -0
- package/dist/task/types/index.d.ts.map +1 -0
- package/dist/task/types/index.js +2 -0
- package/dist/task/types/index.js.map +1 -0
- package/dist/task/types/task.type.d.ts +9 -0
- package/dist/task/types/task.type.d.ts.map +1 -0
- package/dist/task/types/task.type.js +2 -0
- package/dist/task/types/task.type.js.map +1 -0
- package/package.json +27 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.constant.d.ts","sourceRoot":"","sources":["../../../src/config/constants/config.constant.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.constant.js","sourceRoot":"","sources":["../../../src/config/constants/config.constant.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Metadata } from "../../metadata";
|
|
2
|
+
export declare class Config {
|
|
3
|
+
private readonly metadata;
|
|
4
|
+
constructor(metadata: Metadata);
|
|
5
|
+
/**
|
|
6
|
+
* Get the config. Supports nested access via dot notation,
|
|
7
|
+
* including array indices (e.g. `servers.0.host`).
|
|
8
|
+
* @param key - Optional path (dot-separated)
|
|
9
|
+
* @returns The config value at the path, or the full config
|
|
10
|
+
*/
|
|
11
|
+
resolve(key?: string | undefined): unknown;
|
|
12
|
+
/**
|
|
13
|
+
* Set the config
|
|
14
|
+
* @param config - The config
|
|
15
|
+
*/
|
|
16
|
+
define(config: any): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=config.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.service.d.ts","sourceRoot":"","sources":["../../../src/config/services/config.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAE/C;;;;;OAKG;IACH,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS;IAchC;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,GAAG;CAGnB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { METADATA_CONFIG } from "../constants";
|
|
2
|
+
export class Config {
|
|
3
|
+
metadata;
|
|
4
|
+
constructor(metadata) {
|
|
5
|
+
this.metadata = metadata;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Get the config. Supports nested access via dot notation,
|
|
9
|
+
* including array indices (e.g. `servers.0.host`).
|
|
10
|
+
* @param key - Optional path (dot-separated)
|
|
11
|
+
* @returns The config value at the path, or the full config
|
|
12
|
+
*/
|
|
13
|
+
resolve(key) {
|
|
14
|
+
const value = this.metadata.resolve(METADATA_CONFIG) || {};
|
|
15
|
+
if (!key) {
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
return key.split(".").reduce((current, segment) => {
|
|
19
|
+
if (current == null || typeof current !== "object") {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
return current[segment];
|
|
23
|
+
}, value);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Set the config
|
|
27
|
+
* @param config - The config
|
|
28
|
+
*/
|
|
29
|
+
define(config) {
|
|
30
|
+
this.metadata.define(METADATA_CONFIG, config, true);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=config.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/config/services/config.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,OAAO,MAAM;IACY;IAA7B,YAA6B,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEnD;;;;;OAKG;IACH,OAAO,CAAC,GAAwB;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAgB,EAAE,OAAO,EAAE,EAAE;YACzD,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACnD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAQ,OAA4C,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC,EAAE,KAAgB,CAAC,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function readStringEnv(name: string, fallback?: string): string;
|
|
2
|
+
export declare function readNumberEnv(name: string, fallback: number): number;
|
|
3
|
+
export declare function readBooleanEnv(name: string, fallback: boolean): boolean;
|
|
4
|
+
//# sourceMappingURL=env.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.util.d.ts","sourceRoot":"","sources":["../../../src/config/utils/env.util.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAYrE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAcpE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAgBvE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export function readStringEnv(name, fallback) {
|
|
2
|
+
const value = process.env[name]?.trim();
|
|
3
|
+
if (value) {
|
|
4
|
+
return value;
|
|
5
|
+
}
|
|
6
|
+
if (fallback !== undefined) {
|
|
7
|
+
return fallback;
|
|
8
|
+
}
|
|
9
|
+
throw new Error(`[config] Missing required environment variable: ${name}`);
|
|
10
|
+
}
|
|
11
|
+
export function readNumberEnv(name, fallback) {
|
|
12
|
+
const rawValue = process.env[name]?.trim();
|
|
13
|
+
if (!rawValue) {
|
|
14
|
+
return fallback;
|
|
15
|
+
}
|
|
16
|
+
const value = Number(rawValue);
|
|
17
|
+
if (Number.isNaN(value)) {
|
|
18
|
+
throw new Error(`[config] Environment variable ${name} must be a number`);
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
export function readBooleanEnv(name, fallback) {
|
|
23
|
+
const rawValue = process.env[name]?.trim().toLowerCase();
|
|
24
|
+
if (!rawValue) {
|
|
25
|
+
return fallback;
|
|
26
|
+
}
|
|
27
|
+
if (["1", "true", "yes", "on"].includes(rawValue)) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
if (["0", "false", "no", "off"].includes(rawValue)) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
throw new Error(`[config] Environment variable ${name} must be a boolean`);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=env.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.util.js","sourceRoot":"","sources":["../../../src/config/utils/env.util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAiB;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IAExC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mDAAmD,IAAI,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAgB;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IAE3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE/B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,mBAAmB,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,QAAiB;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEzD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,oBAAoB,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metadata key for injectable class deps (set by @Injectable)
|
|
3
|
+
*/
|
|
4
|
+
export declare const META_INJECTABLE: unique symbol;
|
|
5
|
+
/**
|
|
6
|
+
* Metadata key for constructor param tokens (set by @Inject)
|
|
7
|
+
*/
|
|
8
|
+
export declare const META_INJECT: unique symbol;
|
|
9
|
+
/**
|
|
10
|
+
* Metadata key for optional constructor params (set by @Optional)
|
|
11
|
+
*/
|
|
12
|
+
export declare const META_OPTIONAL: unique symbol;
|
|
13
|
+
/**
|
|
14
|
+
* Provider scope: one instance per container
|
|
15
|
+
*/
|
|
16
|
+
export declare const SCOPE_SINGLETON: "singleton";
|
|
17
|
+
/**
|
|
18
|
+
* Provider scope: new instance on every resolve
|
|
19
|
+
*/
|
|
20
|
+
export declare const SCOPE_TRANSIENT: "transient";
|
|
21
|
+
//# sourceMappingURL=di.constant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"di.constant.d.ts","sourceRoot":"","sources":["../../../src/di/constants/di.constant.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,eAAe,eAAqC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,WAAW,eAAiC,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,aAAa,eAAmC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,eAAe,EAAG,WAAoB,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAG,WAAoB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metadata key for injectable class deps (set by @Injectable)
|
|
3
|
+
*/
|
|
4
|
+
export const META_INJECTABLE = Symbol.for("lamtoi.di.injectable");
|
|
5
|
+
/**
|
|
6
|
+
* Metadata key for constructor param tokens (set by @Inject)
|
|
7
|
+
*/
|
|
8
|
+
export const META_INJECT = Symbol.for("lamtoi.di.inject");
|
|
9
|
+
/**
|
|
10
|
+
* Metadata key for optional constructor params (set by @Optional)
|
|
11
|
+
*/
|
|
12
|
+
export const META_OPTIONAL = Symbol.for("lamtoi.di.optional");
|
|
13
|
+
/**
|
|
14
|
+
* Provider scope: one instance per container
|
|
15
|
+
*/
|
|
16
|
+
export const SCOPE_SINGLETON = "singleton";
|
|
17
|
+
/**
|
|
18
|
+
* Provider scope: new instance on every resolve
|
|
19
|
+
*/
|
|
20
|
+
export const SCOPE_TRANSIENT = "transient";
|
|
21
|
+
//# sourceMappingURL=di.constant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"di.constant.js","sourceRoot":"","sources":["../../../src/di/constants/di.constant.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,WAAoB,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,WAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/di/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/di/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/di/decorators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,QAAQ,EACR,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/di/decorators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,QAAQ,EACR,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Constructor, InjectableMetadata, InjectionToken } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Mark a class as injectable and optionally declare constructor tokens.
|
|
4
|
+
* Prefer explicit `inject` when not using emitDecoratorMetadata.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* @Injectable([LoggerService, CONFIG])
|
|
9
|
+
* class UserService {
|
|
10
|
+
* constructor(logger: LoggerService, config: Config) {}
|
|
11
|
+
* }
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare function Injectable(inject?: InjectionToken[]): ClassDecorator;
|
|
15
|
+
/**
|
|
16
|
+
* Bind a constructor parameter to an injection token (string/symbol/class).
|
|
17
|
+
*/
|
|
18
|
+
export declare function Inject(token: InjectionToken): ParameterDecorator;
|
|
19
|
+
/**
|
|
20
|
+
* Allow a constructor dependency to resolve as `undefined` when missing.
|
|
21
|
+
*/
|
|
22
|
+
export declare function Optional(): ParameterDecorator;
|
|
23
|
+
/**
|
|
24
|
+
* Read injectable metadata from a class
|
|
25
|
+
*/
|
|
26
|
+
export declare function getInjectableMetadata(target: Constructor): InjectableMetadata | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Read per-parameter inject tokens from a class
|
|
29
|
+
*/
|
|
30
|
+
export declare function getInjectMetadata(target: Constructor): InjectionToken[];
|
|
31
|
+
/**
|
|
32
|
+
* Read which constructor params are optional
|
|
33
|
+
*/
|
|
34
|
+
export declare function getOptionalMetadata(target: Constructor): Set<number>;
|
|
35
|
+
/**
|
|
36
|
+
* Merge decorator inject lists into a single ordered token list
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveInjectTokens(target: Constructor, explicit?: InjectionToken[]): InjectionToken[];
|
|
39
|
+
//# sourceMappingURL=injectable.decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable.decorator.d.ts","sourceRoot":"","sources":["../../../src/di/decorators/injectable.decorator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAQhF;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,MAAM,GAAE,cAAc,EAAO,GAAG,cAAc,CAKxE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,kBAAkB,CAUhE;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,kBAAkB,CAU7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,GAClB,kBAAkB,GAAG,SAAS,CAEhC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAEpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,QAAQ,CAAC,EAAE,cAAc,EAAE,GAC1B,cAAc,EAAE,CAuBlB"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { META_INJECT, META_INJECTABLE, META_OPTIONAL } from "../constants";
|
|
2
|
+
/**
|
|
3
|
+
* Mark a class as injectable and optionally declare constructor tokens.
|
|
4
|
+
* Prefer explicit `inject` when not using emitDecoratorMetadata.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* @Injectable([LoggerService, CONFIG])
|
|
9
|
+
* class UserService {
|
|
10
|
+
* constructor(logger: LoggerService, config: Config) {}
|
|
11
|
+
* }
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function Injectable(inject = []) {
|
|
15
|
+
return (target) => {
|
|
16
|
+
const ctor = target;
|
|
17
|
+
ctor[META_INJECTABLE] = { inject: [...inject] };
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Bind a constructor parameter to an injection token (string/symbol/class).
|
|
22
|
+
*/
|
|
23
|
+
export function Inject(token) {
|
|
24
|
+
return (target, _propertyKey, parameterIndex) => {
|
|
25
|
+
const ctor = (typeof target === "function" ? target : target.constructor);
|
|
26
|
+
const inject = ctor[META_INJECT] ? [...ctor[META_INJECT]] : [];
|
|
27
|
+
inject[parameterIndex] = token;
|
|
28
|
+
ctor[META_INJECT] = inject;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Allow a constructor dependency to resolve as `undefined` when missing.
|
|
33
|
+
*/
|
|
34
|
+
export function Optional() {
|
|
35
|
+
return (target, _propertyKey, parameterIndex) => {
|
|
36
|
+
const ctor = (typeof target === "function" ? target : target.constructor);
|
|
37
|
+
const optional = ctor[META_OPTIONAL] ?? new Set();
|
|
38
|
+
optional.add(parameterIndex);
|
|
39
|
+
ctor[META_OPTIONAL] = optional;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Read injectable metadata from a class
|
|
44
|
+
*/
|
|
45
|
+
export function getInjectableMetadata(target) {
|
|
46
|
+
return target[META_INJECTABLE];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Read per-parameter inject tokens from a class
|
|
50
|
+
*/
|
|
51
|
+
export function getInjectMetadata(target) {
|
|
52
|
+
return target[META_INJECT] ?? [];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Read which constructor params are optional
|
|
56
|
+
*/
|
|
57
|
+
export function getOptionalMetadata(target) {
|
|
58
|
+
return target[META_OPTIONAL] ?? new Set();
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Merge decorator inject lists into a single ordered token list
|
|
62
|
+
*/
|
|
63
|
+
export function resolveInjectTokens(target, explicit) {
|
|
64
|
+
if (explicit && explicit.length > 0) {
|
|
65
|
+
return explicit;
|
|
66
|
+
}
|
|
67
|
+
const fromInjectable = getInjectableMetadata(target)?.inject ?? [];
|
|
68
|
+
const fromInject = getInjectMetadata(target);
|
|
69
|
+
if (fromInject.length === 0) {
|
|
70
|
+
return fromInjectable;
|
|
71
|
+
}
|
|
72
|
+
const length = Math.max(fromInjectable.length, fromInject.length);
|
|
73
|
+
const tokens = [];
|
|
74
|
+
for (let i = 0; i < length; i++) {
|
|
75
|
+
const token = fromInject[i] ?? fromInjectable[i];
|
|
76
|
+
if (token !== undefined) {
|
|
77
|
+
tokens[i] = token;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return tokens;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=injectable.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable.decorator.js","sourceRoot":"","sources":["../../../src/di/decorators/injectable.decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/di/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
package/dist/di/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/di/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { InjectionToken, Provider } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Lightweight dependency injection container.
|
|
4
|
+
*/
|
|
5
|
+
export declare class Container {
|
|
6
|
+
private readonly providers;
|
|
7
|
+
private readonly instances;
|
|
8
|
+
private readonly resolving;
|
|
9
|
+
private readonly parent;
|
|
10
|
+
constructor(parent?: Container | null);
|
|
11
|
+
/**
|
|
12
|
+
* Register one or more providers
|
|
13
|
+
* @param providers - Class or provider definition(s)
|
|
14
|
+
*/
|
|
15
|
+
register(providers: Provider | Provider[]): this;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve an instance for a token
|
|
18
|
+
* @param token - Injection token
|
|
19
|
+
* @returns The resolved instance
|
|
20
|
+
*/
|
|
21
|
+
resolve<T>(token: InjectionToken<T>): T;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve an instance, or `undefined` if the token is not registered
|
|
24
|
+
* @param token - Injection token
|
|
25
|
+
*/
|
|
26
|
+
tryResolve<T>(token: InjectionToken<T>): T | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Whether this container (or a parent) can resolve the token
|
|
29
|
+
* @param token - Injection token
|
|
30
|
+
*/
|
|
31
|
+
has(token: InjectionToken): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Create a child container that inherits parent providers
|
|
34
|
+
*/
|
|
35
|
+
createChild(): Container;
|
|
36
|
+
/**
|
|
37
|
+
* Clear local providers and cached singleton instances
|
|
38
|
+
*/
|
|
39
|
+
clear(): void;
|
|
40
|
+
private resolveInternal;
|
|
41
|
+
private create;
|
|
42
|
+
private resolveDeps;
|
|
43
|
+
private resolveClassDeps;
|
|
44
|
+
private normalize;
|
|
45
|
+
private normalizeScope;
|
|
46
|
+
private isValueProvider;
|
|
47
|
+
private isExistingProvider;
|
|
48
|
+
private isFactoryProvider;
|
|
49
|
+
private isClassProvider;
|
|
50
|
+
private tokenName;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=container.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.service.d.ts","sourceRoot":"","sources":["../../../src/di/services/container.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,cAAc,EACd,QAAQ,EAOT,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6C;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;gBAE9B,MAAM,GAAE,SAAS,GAAG,IAAW;IAI3C;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAAG,IAAI;IAYhD;;;;OAIG;IACH,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC;IAIvC;;;OAGG;IACH,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;IAItD;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO;IAQnC;;OAEG;IACH,WAAW,IAAI,SAAS;IAIxB;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,eAAe;IAuCvB,OAAO,CAAC,MAAM;IAoBd,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,SAAS;IAoDjB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,SAAS;CAKlB"}
|