siringa 0.3.3 → 0.4.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/index.cjs +14 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.mjs +11 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/index.ts +72 -56
package/dist/index.cjs
CHANGED
|
@@ -18,12 +18,12 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
20
|
// index.ts
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
23
|
Injector: () => Injector,
|
|
24
24
|
promise: () => promise
|
|
25
25
|
});
|
|
26
|
-
module.exports = __toCommonJS(
|
|
26
|
+
module.exports = __toCommonJS(index_exports);
|
|
27
27
|
function bindingName(binding) {
|
|
28
28
|
return typeof binding === "function" ? `[class ${binding.name}]` : `"${binding}"`;
|
|
29
29
|
}
|
|
@@ -84,6 +84,17 @@ var Injector = class _Injector {
|
|
|
84
84
|
}));
|
|
85
85
|
return this;
|
|
86
86
|
}
|
|
87
|
+
/* ENVIRONMENT VARIABLES ================================================== */
|
|
88
|
+
/** Provision an environment variable. */
|
|
89
|
+
env(variable, defaultValue) {
|
|
90
|
+
const value = globalThis.process?.env?.[variable] || defaultValue;
|
|
91
|
+
if (!value) {
|
|
92
|
+
throw new Error(`Environment variable "${variable}" is not defined`);
|
|
93
|
+
} else {
|
|
94
|
+
this.#promises.set(variable, Promise.resolve(value));
|
|
95
|
+
}
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
87
98
|
// Overloaded implementation
|
|
88
99
|
use(binding, instance) {
|
|
89
100
|
this.#promises.set(binding, Promise.resolve(instance));
|
package/dist/index.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2JA,SAAS,YAAY,SAA0B;AAC7C,SAAO,OAAO,YAAY,aAAa,UAAU,QAAQ,IAAI,MAAM,IAAI,OAAO;AAChF;AAGA,IAAM,kBAAkB,OAAO,IAAI,yBAAyB;AAGrD,SAAS,QAA2B,SAAgC;AACzE,SAAO,EAAE,CAAC,eAAe,GAAG,QAAQ;AACtC;AA2DO,IAAM,WAAN,MAAM,UAGmC;AAAA,EACrC,aAA+D,oBAAI,IAAI;AAAA,EACvE,YAAwC,oBAAI,IAAI;AAAA,EACzD;AAAA;AAAA,EAIA,MAAM,KAAK,SAAkB,OAAgC;AAC3D,QAAI,MAAM,SAAS,OAAO,GAAG;AAC3B,UAAI,KAAK,QAAS,QAAO,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC;AACtD,YAAMA,WAAU,gCAAgC,YAAY,OAAO,CAAC;AACpE,aAAO,QAAQ,OAAO,IAAI,MAAMA,QAAO,CAAC;AAAA,IAC1C;AAEA,UAAMC,WAAU,KAAK,UAAU,IAAI,OAAO;AAC1C,QAAIA,SAAS,QAAOA;AAEpB,UAAM,UAAU,KAAK,WAAW,IAAI,OAAO;AAC3C,QAAI,SAAS;AACX,YAAMA,WAAU,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,CAAE,GAAG,OAAO,OAAQ,CAAC,CAAC;AAC3E,WAAK,UAAU,IAAI,SAASA,QAAO;AACnC,aAAOA;AAAA,IACT;AAEA,QAAI,KAAK,QAAS,QAAO,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC;AAEtD,UAAM,UAAU,6BAA6B,YAAY,OAAO,CAAC;AACjE,WAAO,QAAQ,OAAO,IAAI,MAAM,OAAO,CAAC;AAAA,EAC1C;AAAA,EAEA,MAAM,QAAQ,YAAgD,OAAgC;AAC5F,UAAM,WAAW,WAAW,SAAS,IAAI,CAAC,YAAuC;AAC/E,cAAQ,OAAO,SAAS;AAAA,QACtB,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,KAAK,KAAK,SAAS,KAAK;AAAA,QACjC;AACE,iBAAO;AAAA,MACX;AAAA,IACF,CAAC;AAED,UAAM,aAAa,YAAY,MAAM,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM;AACrE,aAAO,KAAM,OAAO,MAAM,YAAc,EAAE,eAAe,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["message", "promise"]
|
|
6
6
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -101,6 +101,8 @@ export declare class Injector<Components extends Constructor = never, Provisions
|
|
|
101
101
|
create<C extends Constructor>(component: C, factory: Factory<Components, Provisions, InstanceType<C>>): Injector<Components | C, Provisions>;
|
|
102
102
|
/** Use a `Factory` to create instances bound to the given name. */
|
|
103
103
|
create<P extends string, F extends Factory<Components, Provisions>>(provision: P, factory: F): Injector<Components, ExtendProvisions<Provisions, P, ReturnType<F>>>;
|
|
104
|
+
/** Provision an environment variable. */
|
|
105
|
+
env<E extends string>(variable: E, defaultValue?: string): Injector<Components, ExtendProvisions<Provisions, E, string>>;
|
|
104
106
|
/** Use the given instance binding it to to the given `Constructor`. */
|
|
105
107
|
use<C extends Constructor>(component: C, instance: InstanceType<C> | PromiseLike<InstanceType<C>>): Injector<Components | C, Provisions>;
|
|
106
108
|
/** Use the given instance binding it to to the given name. */
|
package/dist/index.mjs
CHANGED
|
@@ -59,6 +59,17 @@ var Injector = class _Injector {
|
|
|
59
59
|
}));
|
|
60
60
|
return this;
|
|
61
61
|
}
|
|
62
|
+
/* ENVIRONMENT VARIABLES ================================================== */
|
|
63
|
+
/** Provision an environment variable. */
|
|
64
|
+
env(variable, defaultValue) {
|
|
65
|
+
const value = globalThis.process?.env?.[variable] || defaultValue;
|
|
66
|
+
if (!value) {
|
|
67
|
+
throw new Error(`Environment variable "${variable}" is not defined`);
|
|
68
|
+
} else {
|
|
69
|
+
this.#promises.set(variable, Promise.resolve(value));
|
|
70
|
+
}
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
62
73
|
// Overloaded implementation
|
|
63
74
|
use(binding, instance) {
|
|
64
75
|
this.#promises.set(binding, Promise.resolve(instance));
|
package/dist/index.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"mappings": ";AA2JA,SAAS,YAAY,SAA0B;AAC7C,SAAO,OAAO,YAAY,aAAa,UAAU,QAAQ,IAAI,MAAM,IAAI,OAAO;AAChF;AAGA,IAAM,kBAAkB,OAAO,IAAI,yBAAyB;AAGrD,SAAS,QAA2B,SAAgC;AACzE,SAAO,EAAE,CAAC,eAAe,GAAG,QAAQ;AACtC;AA2DO,IAAM,WAAN,MAAM,UAGmC;AAAA,EACrC,aAA+D,oBAAI,IAAI;AAAA,EACvE,YAAwC,oBAAI,IAAI;AAAA,EACzD;AAAA;AAAA,EAIA,MAAM,KAAK,SAAkB,OAAgC;AAC3D,QAAI,MAAM,SAAS,OAAO,GAAG;AAC3B,UAAI,KAAK,QAAS,QAAO,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC;AACtD,YAAMA,WAAU,gCAAgC,YAAY,OAAO,CAAC;AACpE,aAAO,QAAQ,OAAO,IAAI,MAAMA,QAAO,CAAC;AAAA,IAC1C;AAEA,UAAMC,WAAU,KAAK,UAAU,IAAI,OAAO;AAC1C,QAAIA,SAAS,QAAOA;AAEpB,UAAM,UAAU,KAAK,WAAW,IAAI,OAAO;AAC3C,QAAI,SAAS;AACX,YAAMA,WAAU,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,CAAE,GAAG,OAAO,OAAQ,CAAC,CAAC;AAC3E,WAAK,UAAU,IAAI,SAASA,QAAO;AACnC,aAAOA;AAAA,IACT;AAEA,QAAI,KAAK,QAAS,QAAO,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC;AAEtD,UAAM,UAAU,6BAA6B,YAAY,OAAO,CAAC;AACjE,WAAO,QAAQ,OAAO,IAAI,MAAM,OAAO,CAAC;AAAA,EAC1C;AAAA,EAEA,MAAM,QAAQ,YAAgD,OAAgC;AAC5F,UAAM,WAAW,WAAW,SAAS,IAAI,CAAC,YAAuC;AAC/E,cAAQ,OAAO,SAAS;AAAA,QACtB,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,KAAK,KAAK,SAAS,KAAK;AAAA,QACjC;AACE,iBAAO;AAAA,MACX;AAAA,IACF,CAAC;AAED,UAAM,aAAa,YAAY,MAAM,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM;AACrE,aAAO,KAAM,OAAO,MAAM,YAAc,EAAE,eAAe,
|
|
4
|
+
"mappings": ";AA2JA,SAAS,YAAY,SAA0B;AAC7C,SAAO,OAAO,YAAY,aAAa,UAAU,QAAQ,IAAI,MAAM,IAAI,OAAO;AAChF;AAGA,IAAM,kBAAkB,OAAO,IAAI,yBAAyB;AAGrD,SAAS,QAA2B,SAAgC;AACzE,SAAO,EAAE,CAAC,eAAe,GAAG,QAAQ;AACtC;AA2DO,IAAM,WAAN,MAAM,UAGmC;AAAA,EACrC,aAA+D,oBAAI,IAAI;AAAA,EACvE,YAAwC,oBAAI,IAAI;AAAA,EACzD;AAAA;AAAA,EAIA,MAAM,KAAK,SAAkB,OAAgC;AAC3D,QAAI,MAAM,SAAS,OAAO,GAAG;AAC3B,UAAI,KAAK,QAAS,QAAO,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC;AACtD,YAAMA,WAAU,gCAAgC,YAAY,OAAO,CAAC;AACpE,aAAO,QAAQ,OAAO,IAAI,MAAMA,QAAO,CAAC;AAAA,IAC1C;AAEA,UAAMC,WAAU,KAAK,UAAU,IAAI,OAAO;AAC1C,QAAIA,SAAS,QAAOA;AAEpB,UAAM,UAAU,KAAK,WAAW,IAAI,OAAO;AAC3C,QAAI,SAAS;AACX,YAAMA,WAAU,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,CAAE,GAAG,OAAO,OAAQ,CAAC,CAAC;AAC3E,WAAK,UAAU,IAAI,SAASA,QAAO;AACnC,aAAOA;AAAA,IACT;AAEA,QAAI,KAAK,QAAS,QAAO,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC;AAEtD,UAAM,UAAU,6BAA6B,YAAY,OAAO,CAAC;AACjE,WAAO,QAAQ,OAAO,IAAI,MAAM,OAAO,CAAC;AAAA,EAC1C;AAAA,EAEA,MAAM,QAAQ,YAAgD,OAAgC;AAC5F,UAAM,WAAW,WAAW,SAAS,IAAI,CAAC,YAAuC;AAC/E,cAAQ,OAAO,SAAS;AAAA,QACtB,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,KAAK,KAAK,SAAS,KAAK;AAAA,QACjC;AACE,iBAAO;AAAA,MACX;AAAA,IACF,CAAC;AAED,UAAM,aAAa,YAAY,MAAM,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM;AACrE,aAAO,KAAM,OAAO,MAAM,YAAc,EAAE,eAAe,IACvD,KAAK,KAAK,EAAE,eAAe,GAAG,KAAK,IAAI;AAAA,IAC3C,CAAC,IAAI,CAAC;AAGN,WAAO,IAAI,WAAW,GAAG,UAAU;AAAA,EACrC;AAAA;AAAA,EAsBA,KACI,SACA,iBACI;AACN,UAAM,aAAa,kBAAkB,kBACnC;AAEF,SAAK,WAAW,IAAI,SAAS,OAAO,UAAU,KAAK,QAAQ,YAAY,KAAK,CAAC;AAC7E,WAAO;AAAA,EACT;AAAA;AAAA,EAiBA,OACI,SACA,SACI;AACN,SAAK,WAAW,IAAI,SAAS,OAAO,UAAU,QAAQ;AAAA,MACpD,KAAK,CAAC,cAAmB,KAAK,KAAK,WAAW,KAAK;AAAA,MACnD,QAAQ,OAAO,eAAoB,KAAK,QAAQ,YAAY,KAAK;AAAA,MACjE,UAAU,MAAM,KAAK,SAAS;AAAA,IAChC,CAAC,CAAC;AAEF,WAAO;AAAA,EACT;AAAA;AAAA;AAAA,EAKA,IACI,UACA,cAC6D;AAC/D,UAAM,QAAQ,WAAW,SAAS,MAAM,QAAQ,KAAK;AACrD,QAAI,CAAE,OAAO;AACX,YAAM,IAAI,MAAM,yBAAyB,QAAQ,kBAAkB;AAAA,IACrE,OAAO;AACL,WAAK,UAAU,IAAI,UAAU,QAAQ,QAAQ,KAAK,CAAC;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAiBA,IACI,SACA,UACI;AACN,SAAK,UAAU,IAAI,SAAS,QAAQ,QAAQ,QAAQ,CAAC;AACrD,WAAO;AAAA,EACT;AAAA;AAAA,EAWA,MAAM,IACF,SACY;AACd,WAAO,KAAK,KAAK,SAAS,CAAC,CAAC;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OACI,YACwB;AAC1B,WAAO,KAAK,QAAQ,YAAY,CAAC,CAAC;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KACI,SACa;AACf,WAAO,QAAQ;AAAA,MACb,KAAK,CAAC,cAAmB,KAAK,KAAK,WAAW,CAAC,CAAC;AAAA,MAChD,QAAQ,OAAO,eAAoB,KAAK,QAAQ,YAAY,CAAC,CAAC;AAAA,MAC9D,UAAU,MAAM,KAAK,SAAS;AAAA,IAChC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,WAA6C;AAC3C,UAAM,WAAW,IAAI,UAAiC;AACtD,aAAS,UAAU;AACnB,WAAO;AAAA,EACT;AACF;",
|
|
5
5
|
"names": ["message", "promise"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "siringa",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Simple type-checking injection library for Typescript",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"author": "Juit Developers <developers@juit.com>",
|
|
29
29
|
"license": "Apache-2.0",
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@plugjs/build": "^0.6.
|
|
32
|
-
"@plugjs/tsd": "^0.6.
|
|
33
|
-
"typescript": "^5.
|
|
31
|
+
"@plugjs/build": "^0.6.67",
|
|
32
|
+
"@plugjs/tsd": "^0.6.75",
|
|
33
|
+
"typescript": "^5.9.3"
|
|
34
34
|
},
|
|
35
35
|
"directories": {
|
|
36
36
|
"test": "test"
|
package/src/index.ts
CHANGED
|
@@ -34,30 +34,30 @@ type CheckInject<
|
|
|
34
34
|
|
|
35
35
|
// if "$inject" is a single-element tuple, check that that this element is
|
|
36
36
|
// actually included in the list of components
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
37
|
+
Inject extends readonly [ infer I1 ] ?
|
|
38
|
+
I1 extends PromisedBinding<infer I2> ?
|
|
39
|
+
I2 extends keyof Provisions ?
|
|
40
|
+
readonly [ PromisedBinding<I2> ] :
|
|
41
|
+
I2 extends Extract<Components, I2> ?
|
|
42
|
+
readonly [ PromisedBinding<I2> ] :
|
|
43
|
+
readonly [ PromisedBinding<never> ] :
|
|
44
|
+
I1 extends keyof Provisions ?
|
|
45
|
+
readonly [ I1 ] :
|
|
46
|
+
I1 extends Extract<Components, I1> ?
|
|
47
|
+
readonly [ I1 ] :
|
|
48
|
+
readonly [ never ] :
|
|
49
|
+
|
|
50
|
+
// if "$inject" is a multi-element tuple, recurse (twice) by cheking the first
|
|
51
|
+
// element as a single-element tuple (see above), and the remaining members.
|
|
52
|
+
Inject extends readonly [ infer I1, ...infer I2 ] ?
|
|
53
|
+
readonly [
|
|
54
|
+
...CheckInject<[ I1 ], Components, Provisions>,
|
|
55
|
+
...CheckInject<I2, Components, Provisions>,
|
|
56
|
+
] :
|
|
57
|
+
|
|
58
|
+
// "$inject" here is something else (likely, an array but not "as const")
|
|
59
|
+
// so we want to fail by re-declaring it as a tuple
|
|
60
|
+
readonly [ Components | keyof Provisions, ...(Components | keyof Provisions)[] ]
|
|
61
61
|
|
|
62
62
|
/* ========================================================================== */
|
|
63
63
|
|
|
@@ -74,30 +74,30 @@ type MapInject<
|
|
|
74
74
|
readonly [] :
|
|
75
75
|
|
|
76
76
|
// "$inject" is a single-element tuple
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
Inject extends readonly [ infer I1 ] ?
|
|
78
|
+
I1 extends PromisedBinding<infer I2> ?
|
|
79
79
|
// promised bindings
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
80
|
+
I2 extends keyof Provisions ?
|
|
81
|
+
readonly [ Promise<Provisions[I2]> ] :
|
|
82
|
+
I2 extends Constructor ?
|
|
83
|
+
readonly [ Promise<InstanceType<I2>> ] :
|
|
84
|
+
readonly [ never ] :
|
|
85
|
+
// resolved (non promised) bindings
|
|
86
|
+
I1 extends keyof Provisions ?
|
|
87
|
+
readonly [ Provisions[I1] ] :
|
|
88
|
+
I1 extends Constructor ?
|
|
89
|
+
readonly [ InstanceType<I1> ] :
|
|
90
|
+
readonly [ never ] :
|
|
91
|
+
|
|
92
|
+
// "$inject" is a multi-element tuple (recurse)
|
|
93
|
+
Inject extends readonly [ infer I1, ...infer I2 ] ?
|
|
94
|
+
readonly [
|
|
95
|
+
...MapInject<[ I1 ], Provisions>,
|
|
96
|
+
...MapInject<I2, Provisions>,
|
|
97
|
+
] :
|
|
98
|
+
|
|
99
|
+
// "$inject" is something else
|
|
100
|
+
readonly [ never ]
|
|
101
101
|
|
|
102
102
|
/* ========================================================================== */
|
|
103
103
|
|
|
@@ -119,11 +119,11 @@ type CheckInjectable<
|
|
|
119
119
|
|
|
120
120
|
// If "$inject" is not specified, the only valid injector is one with
|
|
121
121
|
// an empty (zero arguments) constructor
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
I extends new () => any ?
|
|
123
|
+
I :
|
|
124
124
|
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
// Anything else requires "$inject" to be present
|
|
126
|
+
{ $inject: InjectTuple<Components, Provisions> }
|
|
127
127
|
|
|
128
128
|
/* ========================================================================== */
|
|
129
129
|
|
|
@@ -143,9 +143,9 @@ type ExtendProvisions<
|
|
|
143
143
|
T, // the new type associated with the provision key
|
|
144
144
|
> = {
|
|
145
145
|
[ key in P | keyof Provisions ]:
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
146
|
+
key extends P ?
|
|
147
|
+
UnrollPromise<T> :
|
|
148
|
+
Provisions[key]
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
/* ========================================================================== *
|
|
@@ -268,7 +268,7 @@ export class Injector<
|
|
|
268
268
|
|
|
269
269
|
const injections = promises ? (await Promise.all(promises)).map((i) => {
|
|
270
270
|
return i && (typeof i === 'object') && (i[promisedBinding]) ?
|
|
271
|
-
|
|
271
|
+
this.#get(i[promisedBinding], stack) : i
|
|
272
272
|
}) : []
|
|
273
273
|
|
|
274
274
|
// eslint-disable-next-line new-cap
|
|
@@ -300,7 +300,7 @@ export class Injector<
|
|
|
300
300
|
maybeInjectable?: Injectable<Components, Provisions>,
|
|
301
301
|
): this {
|
|
302
302
|
const injectable = maybeInjectable ? maybeInjectable :
|
|
303
|
-
|
|
303
|
+
binding as Injectable<Components, Provisions>
|
|
304
304
|
|
|
305
305
|
this.#factories.set(binding, async (stack) => this.#inject(injectable, stack))
|
|
306
306
|
return this
|
|
@@ -334,6 +334,22 @@ export class Injector<
|
|
|
334
334
|
return this
|
|
335
335
|
}
|
|
336
336
|
|
|
337
|
+
/* ENVIRONMENT VARIABLES ================================================== */
|
|
338
|
+
|
|
339
|
+
/** Provision an environment variable. */
|
|
340
|
+
env<E extends string>(
|
|
341
|
+
variable: E,
|
|
342
|
+
defaultValue?: string,
|
|
343
|
+
): Injector<Components, ExtendProvisions<Provisions, E, string>> {
|
|
344
|
+
const value = globalThis.process?.env?.[variable] || defaultValue
|
|
345
|
+
if (! value) {
|
|
346
|
+
throw new Error(`Environment variable "${variable}" is not defined`)
|
|
347
|
+
} else {
|
|
348
|
+
this.#promises.set(variable, Promise.resolve(value))
|
|
349
|
+
}
|
|
350
|
+
return this
|
|
351
|
+
}
|
|
352
|
+
|
|
337
353
|
/* INSTANCES ============================================================== */
|
|
338
354
|
|
|
339
355
|
/** Use the given instance binding it to to the given `Constructor`. */
|