@push.rocks/qenv 6.0.0 → 6.0.2
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_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/qenv.classes.configvaultadapter.d.ts +6 -0
- package/dist_ts/qenv.classes.configvaultadapter.js +23 -0
- package/dist_ts/qenv.classes.qenv.d.ts +7 -3
- package/dist_ts/qenv.classes.qenv.js +42 -12
- package/dist_ts/qenv.plugins.d.ts +4 -0
- package/dist_ts/qenv.plugins.js +7 -1
- package/package.json +2 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/qenv.classes.configvaultadapter.ts +30 -0
- package/ts/qenv.classes.qenv.ts +58 -15
- package/ts/qenv.plugins.ts +12 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/qenv',
|
|
6
|
-
version: '6.0.
|
|
6
|
+
version: '6.0.2',
|
|
7
7
|
description: 'easy promised environments'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDRCQUE0QjtDQUMxQyxDQUFBIn0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as plugins from './qenv.plugins.js';
|
|
2
|
+
export class ConfigVaultAdapter {
|
|
3
|
+
constructor(configVaultUrl) {
|
|
4
|
+
this.configVaultUrl = configVaultUrl;
|
|
5
|
+
}
|
|
6
|
+
async getConfigBundle() {
|
|
7
|
+
if (this.configVaultUrl) {
|
|
8
|
+
console.log(`ConfigVault specified through constructor`);
|
|
9
|
+
}
|
|
10
|
+
else if (process.env['CONFIGVAULT_URL']) {
|
|
11
|
+
this.configVaultUrl = process.env['CONFIGVAULT_URL'];
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const parsedUrl = new URL(this.configVaultUrl);
|
|
17
|
+
const tr = new plugins.typedrequest.TypedRequest(`${parsedUrl.host}/typedrequest`, 'getConfigBundle');
|
|
18
|
+
const response = await tr.fire({
|
|
19
|
+
authorization: parsedUrl.pathname.replace('/', ''),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWVudi5jbGFzc2VzLmNvbmZpZ3ZhdWx0YWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3FlbnYuY2xhc3Nlcy5jb25maWd2YXVsdGFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLFlBQVksY0FBdUI7UUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDdkMsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlO1FBQzFCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUE7U0FDekQ7YUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUN0RDthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUvQyxNQUFNLEVBQUUsR0FDTixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLGVBQWUsRUFDaEMsaUJBQWlCLENBQ2xCLENBQUM7UUFDSixNQUFNLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDN0IsYUFBYSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7U0FDbkQsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIn0=
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ConfigVaultAdapter } from './qenv.classes.configvaultadapter.js';
|
|
1
2
|
import * as plugins from './qenv.plugins.js';
|
|
2
3
|
export declare class Qenv {
|
|
3
4
|
requiredEnvVars: string[];
|
|
@@ -7,6 +8,7 @@ export declare class Qenv {
|
|
|
7
8
|
[key: string]: any;
|
|
8
9
|
};
|
|
9
10
|
logger: plugins.smartlog.ConsoleLog;
|
|
11
|
+
configVaultAdapter: ConfigVaultAdapter;
|
|
10
12
|
qenvFilePathAbsolute: string;
|
|
11
13
|
envFilePathAbsolute: string;
|
|
12
14
|
constructor(qenvFileBasePathArg: string, envFileBasePathArg: string, failOnMissing?: boolean);
|
|
@@ -14,9 +16,11 @@ export declare class Qenv {
|
|
|
14
16
|
private loadRequiredEnvVars;
|
|
15
17
|
private loadAvailableEnvVars;
|
|
16
18
|
private checkForMissingEnvVars;
|
|
17
|
-
getEnvVarOnDemand(
|
|
18
|
-
getEnvVarOnDemandSync(
|
|
19
|
-
getEnvVarOnDemandAsObject(
|
|
19
|
+
getEnvVarOnDemand(envVarNameOrNames: string | string[]): Promise<string | undefined>;
|
|
20
|
+
getEnvVarOnDemandSync(envVarNameOrNames: string | string[]): string | undefined;
|
|
21
|
+
getEnvVarOnDemandAsObject(envVarNameOrNames: string | string[]): Promise<any>;
|
|
22
|
+
private tryGetEnvVar;
|
|
23
|
+
private tryGetEnvVarSync;
|
|
20
24
|
private getFromEnvironmentVariable;
|
|
21
25
|
private getFromEnvJsonFile;
|
|
22
26
|
private getFromDockerSecret;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ConfigVaultAdapter } from './qenv.classes.configvaultadapter.js';
|
|
1
2
|
import * as plugins from './qenv.plugins.js';
|
|
2
3
|
export class Qenv {
|
|
3
4
|
constructor(qenvFileBasePathArg = process.cwd(), envFileBasePathArg, failOnMissing = true) {
|
|
@@ -6,6 +7,7 @@ export class Qenv {
|
|
|
6
7
|
this.missingEnvVars = [];
|
|
7
8
|
this.keyValueObject = {};
|
|
8
9
|
this.logger = new plugins.smartlog.ConsoleLog();
|
|
10
|
+
this.configVaultAdapter = new ConfigVaultAdapter();
|
|
9
11
|
this.initializeFilePaths(qenvFileBasePathArg, envFileBasePathArg);
|
|
10
12
|
this.loadRequiredEnvVars();
|
|
11
13
|
this.loadAvailableEnvVars();
|
|
@@ -49,27 +51,55 @@ export class Qenv {
|
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
53
|
}
|
|
52
|
-
async getEnvVarOnDemand(
|
|
54
|
+
async getEnvVarOnDemand(envVarNameOrNames) {
|
|
55
|
+
if (Array.isArray(envVarNameOrNames)) {
|
|
56
|
+
for (const envVarName of envVarNameOrNames) {
|
|
57
|
+
const value = await this.tryGetEnvVar(envVarName);
|
|
58
|
+
if (value) {
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return await this.tryGetEnvVar(envVarNameOrNames);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
getEnvVarOnDemandSync(envVarNameOrNames) {
|
|
69
|
+
console.warn('requesting env var sync leaves out potentially important async env sources.');
|
|
70
|
+
if (Array.isArray(envVarNameOrNames)) {
|
|
71
|
+
for (const envVarName of envVarNameOrNames) {
|
|
72
|
+
const value = this.tryGetEnvVarSync(envVarName);
|
|
73
|
+
if (value) {
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
return this.tryGetEnvVarSync(envVarNameOrNames);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async getEnvVarOnDemandAsObject(envVarNameOrNames) {
|
|
84
|
+
const rawValue = await this.getEnvVarOnDemand(envVarNameOrNames);
|
|
85
|
+
if (rawValue && rawValue.startsWith('base64Object:')) {
|
|
86
|
+
const base64Part = rawValue.split('base64Object:')[1];
|
|
87
|
+
return this.decodeBase64(base64Part);
|
|
88
|
+
}
|
|
89
|
+
return rawValue;
|
|
90
|
+
}
|
|
91
|
+
async tryGetEnvVar(envVarName) {
|
|
53
92
|
return (this.getFromEnvironmentVariable(envVarName) ||
|
|
54
93
|
this.getFromEnvJsonFile(envVarName) ||
|
|
55
94
|
this.getFromDockerSecret(envVarName) ||
|
|
56
95
|
this.getFromDockerSecretJson(envVarName));
|
|
57
96
|
}
|
|
58
|
-
|
|
59
|
-
console.warn('requesting env var sync leaves out potentially important async env sources.');
|
|
97
|
+
tryGetEnvVarSync(envVarName) {
|
|
60
98
|
return (this.getFromEnvironmentVariable(envVarName) ||
|
|
61
99
|
this.getFromEnvJsonFile(envVarName) ||
|
|
62
100
|
this.getFromDockerSecret(envVarName) ||
|
|
63
101
|
this.getFromDockerSecretJson(envVarName));
|
|
64
102
|
}
|
|
65
|
-
async getEnvVarOnDemandAsObject(envVarName) {
|
|
66
|
-
const rawValue = await this.getEnvVarOnDemand(envVarName);
|
|
67
|
-
if (rawValue && rawValue.startsWith('base64Object:')) {
|
|
68
|
-
const base64Part = rawValue.split('base64Object:')[1];
|
|
69
|
-
return this.decodeBase64(base64Part);
|
|
70
|
-
}
|
|
71
|
-
return rawValue;
|
|
72
|
-
}
|
|
73
103
|
getFromEnvironmentVariable(envVarName) {
|
|
74
104
|
return process.env[envVarName];
|
|
75
105
|
}
|
|
@@ -118,4 +148,4 @@ export class Qenv {
|
|
|
118
148
|
return JSON.parse(decodedString);
|
|
119
149
|
}
|
|
120
150
|
}
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWVudi5jbGFzc2VzLnFlbnYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9xZW52LmNsYXNzZXMucWVudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBRTdDLE1BQU0sT0FBTyxJQUFJO0lBWWYsWUFDRSxzQkFBOEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUMzQyxrQkFBMEIsRUFDMUIsZ0JBQXlCLElBQUk7UUFkeEIsb0JBQWUsR0FBYSxFQUFFLENBQUM7UUFDL0IscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQzlCLG1CQUFjLEdBQTJCLEVBQUUsQ0FBQztRQUM1QyxXQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBWWhELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxtQkFBMkIsRUFBRSxrQkFBMEI7UUFDakYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUN6QyxVQUFVLENBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FD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
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
2
|
export { path };
|
|
3
|
+
import * as typedrequest from '@api.global/typedrequest';
|
|
4
|
+
export { typedrequest, };
|
|
3
5
|
import * as smartfile from '@push.rocks/smartfile';
|
|
4
6
|
import * as smartlog from '@push.rocks/smartlog';
|
|
5
7
|
export { smartfile, smartlog };
|
|
8
|
+
import * as configvaultInterfaces from '@configvault.io/interfaces';
|
|
9
|
+
export { configvaultInterfaces };
|
package/dist_ts/qenv.plugins.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
// native
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
export { path };
|
|
4
|
+
// @api.global scope
|
|
5
|
+
import * as typedrequest from '@api.global/typedrequest';
|
|
6
|
+
export { typedrequest, };
|
|
4
7
|
// @pushrocks scope
|
|
5
8
|
import * as smartfile from '@push.rocks/smartfile';
|
|
6
9
|
import * as smartlog from '@push.rocks/smartlog';
|
|
7
10
|
export { smartfile, smartlog };
|
|
8
|
-
|
|
11
|
+
// @configvault.io scope
|
|
12
|
+
import * as configvaultInterfaces from '@configvault.io/interfaces';
|
|
13
|
+
export { configvaultInterfaces };
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWVudi5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcWVudi5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVM7QUFDVCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFFaEIsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFFekQsT0FBTyxFQUNMLFlBQVksR0FDYixDQUFBO0FBRUQsbUJBQW1CO0FBQ25CLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBRS9CLHdCQUF3QjtBQUN4QixPQUFPLEtBQUsscUJBQXFCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/qenv",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "easy promised environments",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"@types/node": "^20.4.6"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
+
"@api.global/typedrequest": "^3.0.1",
|
|
37
38
|
"@configvault.io/interfaces": "^1.0.2",
|
|
38
39
|
"@push.rocks/smartfile": "^10.0.28",
|
|
39
40
|
"@push.rocks/smartlog": "^3.0.3",
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as plugins from './qenv.plugins.js';
|
|
2
|
+
|
|
3
|
+
export class ConfigVaultAdapter {
|
|
4
|
+
public configVaultUrl: string;
|
|
5
|
+
|
|
6
|
+
constructor(configVaultUrl?: string) {
|
|
7
|
+
this.configVaultUrl = configVaultUrl;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
public async getConfigBundle(): Promise<plugins.configvaultInterfaces.data.IConfigBundle> {
|
|
11
|
+
if (this.configVaultUrl) {
|
|
12
|
+
console.log(`ConfigVault specified through constructor`)
|
|
13
|
+
} else if (process.env['CONFIGVAULT_URL']) {
|
|
14
|
+
this.configVaultUrl = process.env['CONFIGVAULT_URL'];
|
|
15
|
+
} else {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const parsedUrl = new URL(this.configVaultUrl);
|
|
20
|
+
|
|
21
|
+
const tr =
|
|
22
|
+
new plugins.typedrequest.TypedRequest<plugins.configvaultInterfaces.requests.IReq_GetConfigBundle>(
|
|
23
|
+
`${parsedUrl.host}/typedrequest`,
|
|
24
|
+
'getConfigBundle'
|
|
25
|
+
);
|
|
26
|
+
const response = await tr.fire({
|
|
27
|
+
authorization: parsedUrl.pathname.replace('/', ''),
|
|
28
|
+
})
|
|
29
|
+
}
|
|
30
|
+
}
|
package/ts/qenv.classes.qenv.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ConfigVaultAdapter } from './qenv.classes.configvaultadapter.js';
|
|
1
2
|
import * as plugins from './qenv.plugins.js';
|
|
2
3
|
|
|
3
4
|
export class Qenv {
|
|
@@ -7,6 +8,8 @@ export class Qenv {
|
|
|
7
8
|
public keyValueObject: { [key: string]: any } = {};
|
|
8
9
|
public logger = new plugins.smartlog.ConsoleLog();
|
|
9
10
|
|
|
11
|
+
public configVaultAdapter: ConfigVaultAdapter;
|
|
12
|
+
|
|
10
13
|
public qenvFilePathAbsolute: string;
|
|
11
14
|
public envFilePathAbsolute: string;
|
|
12
15
|
|
|
@@ -15,6 +18,7 @@ export class Qenv {
|
|
|
15
18
|
envFileBasePathArg: string,
|
|
16
19
|
failOnMissing: boolean = true
|
|
17
20
|
) {
|
|
21
|
+
this.configVaultAdapter = new ConfigVaultAdapter();
|
|
18
22
|
this.initializeFilePaths(qenvFileBasePathArg, envFileBasePathArg);
|
|
19
23
|
this.loadRequiredEnvVars();
|
|
20
24
|
this.loadAvailableEnvVars();
|
|
@@ -22,8 +26,14 @@ export class Qenv {
|
|
|
22
26
|
}
|
|
23
27
|
|
|
24
28
|
private initializeFilePaths(qenvFileBasePathArg: string, envFileBasePathArg: string) {
|
|
25
|
-
this.qenvFilePathAbsolute = plugins.path.join(
|
|
26
|
-
|
|
29
|
+
this.qenvFilePathAbsolute = plugins.path.join(
|
|
30
|
+
plugins.path.resolve(qenvFileBasePathArg),
|
|
31
|
+
'qenv.yml'
|
|
32
|
+
);
|
|
33
|
+
this.envFilePathAbsolute = plugins.path.join(
|
|
34
|
+
plugins.path.resolve(envFileBasePathArg),
|
|
35
|
+
'env.json'
|
|
36
|
+
);
|
|
27
37
|
}
|
|
28
38
|
|
|
29
39
|
private loadRequiredEnvVars() {
|
|
@@ -48,7 +58,9 @@ export class Qenv {
|
|
|
48
58
|
}
|
|
49
59
|
|
|
50
60
|
private checkForMissingEnvVars(failOnMissing: boolean) {
|
|
51
|
-
this.missingEnvVars = this.requiredEnvVars.filter(
|
|
61
|
+
this.missingEnvVars = this.requiredEnvVars.filter(
|
|
62
|
+
(envVar) => !this.availableEnvVars.includes(envVar)
|
|
63
|
+
);
|
|
52
64
|
|
|
53
65
|
if (this.missingEnvVars.length > 0) {
|
|
54
66
|
console.info('Required Env Vars are:', this.requiredEnvVars);
|
|
@@ -62,7 +74,48 @@ export class Qenv {
|
|
|
62
74
|
}
|
|
63
75
|
}
|
|
64
76
|
|
|
65
|
-
public async getEnvVarOnDemand(
|
|
77
|
+
public async getEnvVarOnDemand(
|
|
78
|
+
envVarNameOrNames: string | string[]
|
|
79
|
+
): Promise<string | undefined> {
|
|
80
|
+
if (Array.isArray(envVarNameOrNames)) {
|
|
81
|
+
for (const envVarName of envVarNameOrNames) {
|
|
82
|
+
const value = await this.tryGetEnvVar(envVarName);
|
|
83
|
+
if (value) {
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return undefined;
|
|
88
|
+
} else {
|
|
89
|
+
return await this.tryGetEnvVar(envVarNameOrNames);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
public getEnvVarOnDemandSync(envVarNameOrNames: string | string[]): string | undefined {
|
|
94
|
+
console.warn('requesting env var sync leaves out potentially important async env sources.');
|
|
95
|
+
|
|
96
|
+
if (Array.isArray(envVarNameOrNames)) {
|
|
97
|
+
for (const envVarName of envVarNameOrNames) {
|
|
98
|
+
const value = this.tryGetEnvVarSync(envVarName);
|
|
99
|
+
if (value) {
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
} else {
|
|
105
|
+
return this.tryGetEnvVarSync(envVarNameOrNames);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
public async getEnvVarOnDemandAsObject(envVarNameOrNames: string | string[]): Promise<any> {
|
|
110
|
+
const rawValue = await this.getEnvVarOnDemand(envVarNameOrNames);
|
|
111
|
+
if (rawValue && rawValue.startsWith('base64Object:')) {
|
|
112
|
+
const base64Part = rawValue.split('base64Object:')[1];
|
|
113
|
+
return this.decodeBase64(base64Part);
|
|
114
|
+
}
|
|
115
|
+
return rawValue;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
private async tryGetEnvVar(envVarName: string): Promise<string | undefined> {
|
|
66
119
|
return (
|
|
67
120
|
this.getFromEnvironmentVariable(envVarName) ||
|
|
68
121
|
this.getFromEnvJsonFile(envVarName) ||
|
|
@@ -71,8 +124,7 @@ export class Qenv {
|
|
|
71
124
|
);
|
|
72
125
|
}
|
|
73
126
|
|
|
74
|
-
|
|
75
|
-
console.warn('requesting env var sync leaves out potentially important async env sources.');
|
|
127
|
+
private tryGetEnvVarSync(envVarName: string): string | undefined {
|
|
76
128
|
return (
|
|
77
129
|
this.getFromEnvironmentVariable(envVarName) ||
|
|
78
130
|
this.getFromEnvJsonFile(envVarName) ||
|
|
@@ -81,15 +133,6 @@ export class Qenv {
|
|
|
81
133
|
);
|
|
82
134
|
}
|
|
83
135
|
|
|
84
|
-
public async getEnvVarOnDemandAsObject(envVarName: string): Promise<any> {
|
|
85
|
-
const rawValue = await this.getEnvVarOnDemand(envVarName);
|
|
86
|
-
if (rawValue && rawValue.startsWith('base64Object:')) {
|
|
87
|
-
const base64Part = rawValue.split('base64Object:')[1];
|
|
88
|
-
return this.decodeBase64(base64Part);
|
|
89
|
-
}
|
|
90
|
-
return rawValue;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
136
|
private getFromEnvironmentVariable(envVarName: string): string | undefined {
|
|
94
137
|
return process.env[envVarName];
|
|
95
138
|
}
|
package/ts/qenv.plugins.ts
CHANGED
|
@@ -3,8 +3,20 @@ import * as path from 'path';
|
|
|
3
3
|
|
|
4
4
|
export { path };
|
|
5
5
|
|
|
6
|
+
// @api.global scope
|
|
7
|
+
import * as typedrequest from '@api.global/typedrequest';
|
|
8
|
+
|
|
9
|
+
export {
|
|
10
|
+
typedrequest,
|
|
11
|
+
}
|
|
12
|
+
|
|
6
13
|
// @pushrocks scope
|
|
7
14
|
import * as smartfile from '@push.rocks/smartfile';
|
|
8
15
|
import * as smartlog from '@push.rocks/smartlog';
|
|
9
16
|
|
|
10
17
|
export { smartfile, smartlog };
|
|
18
|
+
|
|
19
|
+
// @configvault.io scope
|
|
20
|
+
import * as configvaultInterfaces from '@configvault.io/interfaces';
|
|
21
|
+
|
|
22
|
+
export { configvaultInterfaces };
|