@push.rocks/qenv 5.0.2 → 5.0.5
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 +3 -3
- package/dist_ts/qenv.classes.qenv.d.ts +13 -27
- package/dist_ts/qenv.classes.qenv.js +79 -125
- package/dist_ts/qenv.plugins.d.ts +2 -2
- package/dist_ts/qenv.plugins.js +3 -3
- package/npmextra.json +2 -2
- package/package.json +11 -10
- package/readme.md +14 -16
- package/ts/00_commitinfo_data.ts +2 -2
- package/ts/qenv.classes.qenv.ts +91 -152
- package/ts/qenv.plugins.ts +2 -2
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* autocreated commitinfo by @pushrocks/commitinfo
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
|
-
name: '@
|
|
6
|
-
version: '5.0.
|
|
5
|
+
name: '@push.rocks/qenv',
|
|
6
|
+
version: '5.0.5',
|
|
7
7
|
description: 'easy promised environments'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDRCQUE0QjtDQUMxQyxDQUFBIn0=
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import * as plugins from './qenv.plugins.js';
|
|
2
|
-
/**
|
|
3
|
-
* class Qenv
|
|
4
|
-
* allows to make assertions about the environments while being more flexibel in how to meet them
|
|
5
|
-
*/
|
|
6
2
|
export declare class Qenv {
|
|
7
3
|
requiredEnvVars: string[];
|
|
8
4
|
availableEnvVars: string[];
|
|
@@ -13,27 +9,17 @@ export declare class Qenv {
|
|
|
13
9
|
logger: plugins.smartlog.ConsoleLog;
|
|
14
10
|
qenvFilePathAbsolute: string;
|
|
15
11
|
envFilePathAbsolute: string;
|
|
16
|
-
constructor(qenvFileBasePathArg: string, envFileBasePathArg:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
*/
|
|
30
|
-
private getRequiredEnvVars;
|
|
31
|
-
/**
|
|
32
|
-
* gets the available env vars
|
|
33
|
-
*/
|
|
34
|
-
private getAvailableEnvVars;
|
|
35
|
-
/**
|
|
36
|
-
* gets missing env vars
|
|
37
|
-
*/
|
|
38
|
-
private getMissingEnvVars;
|
|
12
|
+
constructor(qenvFileBasePathArg: string, envFileBasePathArg: string, failOnMissing?: boolean);
|
|
13
|
+
private initializeFilePaths;
|
|
14
|
+
private loadRequiredEnvVars;
|
|
15
|
+
private loadAvailableEnvVars;
|
|
16
|
+
private checkForMissingEnvVars;
|
|
17
|
+
getEnvVarOnDemand(envVarName: string): string | undefined;
|
|
18
|
+
getEnvVarOnDemandAsObject(envVarName: string): any;
|
|
19
|
+
private getFromEnvironmentVariable;
|
|
20
|
+
private getFromEnvJsonFile;
|
|
21
|
+
private getFromDockerSecret;
|
|
22
|
+
private getFromDockerSecretJson;
|
|
23
|
+
private encodeBase64;
|
|
24
|
+
private decodeBase64;
|
|
39
25
|
}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import * as plugins from './qenv.plugins.js';
|
|
2
|
-
/**
|
|
3
|
-
* class Qenv
|
|
4
|
-
* allows to make assertions about the environments while being more flexibel in how to meet them
|
|
5
|
-
*/
|
|
6
2
|
export class Qenv {
|
|
7
3
|
constructor(qenvFileBasePathArg = process.cwd(), envFileBasePathArg, failOnMissing = true) {
|
|
8
4
|
this.requiredEnvVars = [];
|
|
@@ -10,61 +6,42 @@ export class Qenv {
|
|
|
10
6
|
this.missingEnvVars = [];
|
|
11
7
|
this.keyValueObject = {};
|
|
12
8
|
this.logger = new plugins.smartlog.ConsoleLog();
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
this.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
9
|
+
this.initializeFilePaths(qenvFileBasePathArg, envFileBasePathArg);
|
|
10
|
+
this.loadRequiredEnvVars();
|
|
11
|
+
this.loadAvailableEnvVars();
|
|
12
|
+
this.checkForMissingEnvVars(failOnMissing);
|
|
13
|
+
}
|
|
14
|
+
initializeFilePaths(qenvFileBasePathArg, envFileBasePathArg) {
|
|
15
|
+
this.qenvFilePathAbsolute = plugins.path.join(plugins.path.resolve(qenvFileBasePathArg), 'qenv.yml');
|
|
16
|
+
this.envFilePathAbsolute = plugins.path.join(plugins.path.resolve(envFileBasePathArg), 'env.json');
|
|
17
|
+
}
|
|
18
|
+
loadRequiredEnvVars() {
|
|
19
|
+
if (plugins.smartfile.fs.fileExistsSync(this.qenvFilePathAbsolute)) {
|
|
20
|
+
const qenvFile = plugins.smartfile.fs.toObjectSync(this.qenvFilePathAbsolute);
|
|
21
|
+
if (qenvFile?.required && Array.isArray(qenvFile.required)) {
|
|
22
|
+
this.requiredEnvVars.push(...qenvFile.required);
|
|
23
23
|
}
|
|
24
24
|
else {
|
|
25
|
-
|
|
26
|
-
this.requiredEnvVars.push(qenvFile.required[keyArg]);
|
|
27
|
-
}
|
|
25
|
+
this.logger.log('warn', 'qenv.yml does not contain a "required" Array!');
|
|
28
26
|
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
this.availableEnvVars.push(requiredEnvVar);
|
|
38
|
-
this.keyValueObject[requiredEnvVar] = chosenVar;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* gets missing env vars
|
|
44
|
-
*/
|
|
45
|
-
this.getMissingEnvVars = () => {
|
|
46
|
-
const missingEnvVars = [];
|
|
47
|
-
for (const envVar of this.requiredEnvVars) {
|
|
48
|
-
if (!this.availableEnvVars.includes(envVar)) {
|
|
49
|
-
missingEnvVars.push(envVar);
|
|
50
|
-
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
loadAvailableEnvVars() {
|
|
30
|
+
for (const envVar of this.requiredEnvVars) {
|
|
31
|
+
const value = this.getEnvVarOnDemand(envVar);
|
|
32
|
+
if (value) {
|
|
33
|
+
this.availableEnvVars.push(envVar);
|
|
34
|
+
this.keyValueObject[envVar] = value;
|
|
51
35
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
this.
|
|
56
|
-
this.envFilePathAbsolute = plugins.path.join(plugins.path.resolve(envFileBasePathArg), 'env.json');
|
|
57
|
-
this.getRequiredEnvVars();
|
|
58
|
-
this.getAvailableEnvVars();
|
|
59
|
-
this.missingEnvVars = this.getMissingEnvVars();
|
|
60
|
-
// handle missing variables
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
checkForMissingEnvVars(failOnMissing) {
|
|
39
|
+
this.missingEnvVars = this.requiredEnvVars.filter((envVar) => !this.availableEnvVars.includes(envVar));
|
|
61
40
|
if (this.missingEnvVars.length > 0) {
|
|
62
|
-
console.info('Required Env Vars are:');
|
|
63
|
-
console.
|
|
64
|
-
console.error('However some Env variables could not be resolved:');
|
|
65
|
-
console.log(this.missingEnvVars);
|
|
41
|
+
console.info('Required Env Vars are:', this.requiredEnvVars);
|
|
42
|
+
console.error('Missing Env Vars:', this.missingEnvVars);
|
|
66
43
|
if (failOnMissing) {
|
|
67
|
-
this.logger.log('error', 'Exiting!');
|
|
44
|
+
this.logger.log('error', 'Exiting due to missing env vars!');
|
|
68
45
|
process.exit(1);
|
|
69
46
|
}
|
|
70
47
|
else {
|
|
@@ -72,89 +49,66 @@ export class Qenv {
|
|
|
72
49
|
}
|
|
73
50
|
}
|
|
74
51
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return this.keyValueObject[envVarName];
|
|
52
|
+
getEnvVarOnDemand(envVarName) {
|
|
53
|
+
return (this.getFromEnvironmentVariable(envVarName) ||
|
|
54
|
+
this.getFromEnvJsonFile(envVarName) ||
|
|
55
|
+
this.getFromDockerSecret(envVarName) ||
|
|
56
|
+
this.getFromDockerSecretJson(envVarName));
|
|
81
57
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
let envVarFromEnvironmentVariable;
|
|
88
|
-
let envVarFromEnvJsonFile;
|
|
89
|
-
let envVarFromDockerSecret;
|
|
90
|
-
let dockerSecretJson;
|
|
91
|
-
// env var check
|
|
92
|
-
if (process.env[wantedEnvVar]) {
|
|
93
|
-
this.availableEnvVars.push(wantedEnvVar);
|
|
94
|
-
envVarFromEnvironmentVariable = process.env[wantedEnvVar];
|
|
58
|
+
getEnvVarOnDemandAsObject(envVarName) {
|
|
59
|
+
const rawValue = this.getEnvVarOnDemand(envVarName);
|
|
60
|
+
if (rawValue && rawValue.startsWith('base64Object:')) {
|
|
61
|
+
const base64Part = rawValue.split('base64Object:')[1];
|
|
62
|
+
return this.decodeBase64(base64Part);
|
|
95
63
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
64
|
+
return rawValue;
|
|
65
|
+
}
|
|
66
|
+
getFromEnvironmentVariable(envVarName) {
|
|
67
|
+
return process.env[envVarName];
|
|
68
|
+
}
|
|
69
|
+
getFromEnvJsonFile(envVarName) {
|
|
99
70
|
try {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
71
|
+
const envJson = plugins.smartfile.fs.toObjectSync(this.envFilePathAbsolute);
|
|
72
|
+
const value = envJson[envVarName];
|
|
73
|
+
if (typeof value === 'object') {
|
|
74
|
+
return 'base64Object:' + this.encodeBase64(value);
|
|
75
|
+
}
|
|
76
|
+
return value;
|
|
104
77
|
}
|
|
105
|
-
|
|
106
|
-
|
|
78
|
+
catch (error) {
|
|
79
|
+
return undefined;
|
|
107
80
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
81
|
+
}
|
|
82
|
+
getFromDockerSecret(envVarName) {
|
|
83
|
+
const secretPath = `/run/secrets/${envVarName}`;
|
|
84
|
+
if (plugins.smartfile.fs.fileExistsSync(secretPath)) {
|
|
85
|
+
return plugins.smartfile.fs.toStringSync(secretPath);
|
|
113
86
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
getFromDockerSecretJson(envVarName) {
|
|
90
|
+
if (plugins.smartfile.fs.isDirectory('/run/secrets')) {
|
|
117
91
|
const availableSecrets = plugins.smartfile.fs.listAllItemsSync('/run/secrets');
|
|
118
92
|
for (const secret of availableSecrets) {
|
|
119
|
-
if (secret.includes('secret.json')
|
|
93
|
+
if (secret.includes('secret.json')) {
|
|
120
94
|
const secretObject = plugins.smartfile.fs.toObjectSync(`/run/secrets/${secret}`);
|
|
121
|
-
|
|
95
|
+
const value = secretObject[envVarName];
|
|
96
|
+
if (typeof value === 'object') {
|
|
97
|
+
return 'base64Object:' + this.encodeBase64(value);
|
|
98
|
+
}
|
|
99
|
+
return value;
|
|
122
100
|
}
|
|
123
101
|
}
|
|
124
102
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
availableCcandidates.push(candidate);
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
if (availableCcandidates.length > 1) {
|
|
138
|
-
this.logger.log('warn', `found multiple candidates for ${wantedEnvVar} Choosing in the order of envVar, envFileVar, dockerSecret, dockerSecretJson`);
|
|
139
|
-
console.log(availableCcandidates);
|
|
140
|
-
}
|
|
141
|
-
switch (true) {
|
|
142
|
-
case !!envVarFromEnvironmentVariable:
|
|
143
|
-
this.logger.log('ok', `found ${wantedEnvVar} as environment variable`);
|
|
144
|
-
return envVarFromEnvironmentVariable;
|
|
145
|
-
case !!envVarFromEnvJsonFile:
|
|
146
|
-
this.logger.log('ok', `found ${wantedEnvVar} as env.json variable`);
|
|
147
|
-
return envVarFromEnvJsonFile;
|
|
148
|
-
case !!envVarFromDockerSecret:
|
|
149
|
-
this.logger.log('ok', `found ${wantedEnvVar} as docker secret`);
|
|
150
|
-
return envVarFromDockerSecret;
|
|
151
|
-
case !!dockerSecretJson:
|
|
152
|
-
this.logger.log('ok', `found ${wantedEnvVar} as docker secret.json`);
|
|
153
|
-
return dockerSecretJson;
|
|
154
|
-
default:
|
|
155
|
-
this.logger.log('warn', `could not find the wanted environment variable ${wantedEnvVar} anywhere`);
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
encodeBase64(data) {
|
|
106
|
+
const jsonString = JSON.stringify(data);
|
|
107
|
+
return Buffer.from(jsonString).toString('base64');
|
|
108
|
+
}
|
|
109
|
+
decodeBase64(encodedString) {
|
|
110
|
+
const decodedString = Buffer.from(encodedString, 'base64').toString('utf-8');
|
|
111
|
+
return JSON.parse(decodedString);
|
|
158
112
|
}
|
|
159
113
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWVudi5jbGFzc2VzLnFlbnYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9xZW52LmNsYXNzZXMucWVudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBRTdDLE1BQU0sT0FBTyxJQUFJO0lBVWYsWUFDRSxzQkFBOEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUMzQyxrQkFBMEIsRUFDMUIsZ0JBQXlCLElBQUk7UUFaeEIsb0JBQWUsR0FBYSxFQUFFLENBQUM7UUFDL0IscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQzlCLG1CQUFjLEdBQTJCLEVBQUUsQ0FBQztRQUM1QyxXQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBVWhELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsbUJBQTJCLEVBQUUsa0JBQTBCO1FBQ2pGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFB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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
2
|
export { path };
|
|
3
|
-
import * as smartfile from '@
|
|
4
|
-
import * as smartlog from '@
|
|
3
|
+
import * as smartfile from '@push.rocks/smartfile';
|
|
4
|
+
import * as smartlog from '@push.rocks/smartlog';
|
|
5
5
|
export { smartfile, smartlog };
|
package/dist_ts/qenv.plugins.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
export { path };
|
|
4
4
|
// @pushrocks scope
|
|
5
|
-
import * as smartfile from '@
|
|
6
|
-
import * as smartlog from '@
|
|
5
|
+
import * as smartfile from '@push.rocks/smartfile';
|
|
6
|
+
import * as smartlog from '@push.rocks/smartlog';
|
|
7
7
|
export { smartfile, smartlog };
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWVudi5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcWVudi5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVM7QUFDVCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFFaEIsbUJBQW1CO0FBQ25CLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDIn0=
|
package/npmextra.json
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
"projectType": "npm",
|
|
8
8
|
"module": {
|
|
9
9
|
"githost": "gitlab.com",
|
|
10
|
-
"gitscope": "
|
|
10
|
+
"gitscope": "push.rocks",
|
|
11
11
|
"gitrepo": "qenv",
|
|
12
12
|
"description": "easy promised environments",
|
|
13
|
-
"npmPackagename": "@
|
|
13
|
+
"npmPackagename": "@push.rocks/qenv",
|
|
14
14
|
"license": "MIT"
|
|
15
15
|
}
|
|
16
16
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/qenv",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.5",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "easy promised environments",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -27,16 +27,17 @@
|
|
|
27
27
|
},
|
|
28
28
|
"homepage": "https://gitlab.com/pushrocks/qenv#README",
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@gitzone/tsbuild": "^2.1.
|
|
31
|
-
"@gitzone/tsrun": "^1.2.
|
|
32
|
-
"@gitzone/tstest": "^1.0.
|
|
33
|
-
"@
|
|
34
|
-
"@types/node": "^
|
|
30
|
+
"@gitzone/tsbuild": "^2.1.66",
|
|
31
|
+
"@gitzone/tsrun": "^1.2.44",
|
|
32
|
+
"@gitzone/tstest": "^1.0.77",
|
|
33
|
+
"@push.rocks/tapbundle": "^5.0.12",
|
|
34
|
+
"@types/node": "^20.4.6"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@
|
|
38
|
-
"@
|
|
39
|
-
"@
|
|
37
|
+
"@configvault.io/interfaces": "^1.0.2",
|
|
38
|
+
"@push.rocks/smartfile": "^10.0.28",
|
|
39
|
+
"@push.rocks/smartlog": "^3.0.3",
|
|
40
|
+
"@push.rocks/smartpath": "^5.0.11"
|
|
40
41
|
},
|
|
41
42
|
"files": [
|
|
42
43
|
"ts/**/*",
|
|
@@ -53,4 +54,4 @@
|
|
|
53
54
|
"browserslist": [
|
|
54
55
|
"last 1 chrome versions"
|
|
55
56
|
]
|
|
56
|
-
}
|
|
57
|
+
}
|
package/readme.md
CHANGED
|
@@ -1,27 +1,26 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @push.rocks/qenv
|
|
2
2
|
easy promised environments
|
|
3
3
|
|
|
4
4
|
## Availabililty and Links
|
|
5
|
-
* [npmjs.org (npm package)](https://www.npmjs.com/package/@
|
|
6
|
-
* [gitlab.com (source)](https://gitlab.com/
|
|
7
|
-
* [github.com (source mirror)](https://github.com/
|
|
8
|
-
* [docs (typedoc)](https://
|
|
5
|
+
* [npmjs.org (npm package)](https://www.npmjs.com/package/@push.rocks/qenv)
|
|
6
|
+
* [gitlab.com (source)](https://gitlab.com/push.rocks/qenv)
|
|
7
|
+
* [github.com (source mirror)](https://github.com/push.rocks/qenv)
|
|
8
|
+
* [docs (typedoc)](https://push.rocks.gitlab.io/qenv/)
|
|
9
9
|
|
|
10
10
|
## Status for master
|
|
11
11
|
|
|
12
12
|
Status Category | Status Badge
|
|
13
13
|
-- | --
|
|
14
|
-
GitLab Pipelines | [](https://lossless.cloud)
|
|
15
|
+
GitLab Pipline Test Coverage | [](https://lossless.cloud)
|
|
16
|
+
npm | [](https://lossless.cloud)
|
|
17
|
+
Snyk | [](https://lossless.cloud)
|
|
18
18
|
TypeScript Support | [](https://lossless.cloud)
|
|
19
19
|
node Support | [](https://nodejs.org/dist/latest-v10.x/docs/api/)
|
|
20
20
|
Code Style | [](https://lossless.cloud)
|
|
21
|
-
PackagePhobia (total standalone install weight) | [ | [ | [](https://lossless.cloud) [](https://lossless.cloud)
|
|
21
|
+
PackagePhobia (total standalone install weight) | [](https://lossless.cloud)
|
|
22
|
+
PackagePhobia (package size on registry) | [](https://lossless.cloud)
|
|
23
|
+
BundlePhobia (total size when bundled) | [](https://lossless.cloud)
|
|
25
24
|
|
|
26
25
|
## Usage
|
|
27
26
|
|
|
@@ -48,7 +47,6 @@ We are always happy for code contributions. If you are not the code contributing
|
|
|
48
47
|
|
|
49
48
|
For further information read the linked docs at the top of this readme.
|
|
50
49
|
|
|
51
|
-
|
|
50
|
+
## Legal
|
|
51
|
+
> MIT licensed | **©** [Task Venture Capital GmbH](https://task.vc)
|
|
52
52
|
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
|
|
53
|
-
|
|
54
|
-
[](https://maintainedby.lossless.com)
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/qenv.classes.qenv.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import * as plugins from './qenv.plugins.js';
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* class Qenv
|
|
5
|
-
* allows to make assertions about the environments while being more flexibel in how to meet them
|
|
6
|
-
*/
|
|
7
3
|
export class Qenv {
|
|
8
4
|
public requiredEnvVars: string[] = [];
|
|
9
5
|
public availableEnvVars: string[] = [];
|
|
@@ -11,34 +7,54 @@ export class Qenv {
|
|
|
11
7
|
public keyValueObject: { [key: string]: any } = {};
|
|
12
8
|
public logger = new plugins.smartlog.ConsoleLog();
|
|
13
9
|
|
|
14
|
-
// filePaths
|
|
15
10
|
public qenvFilePathAbsolute: string;
|
|
16
11
|
public envFilePathAbsolute: string;
|
|
17
12
|
|
|
18
|
-
constructor(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
);
|
|
24
|
-
this.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
13
|
+
constructor(
|
|
14
|
+
qenvFileBasePathArg: string = process.cwd(),
|
|
15
|
+
envFileBasePathArg: string,
|
|
16
|
+
failOnMissing: boolean = true
|
|
17
|
+
) {
|
|
18
|
+
this.initializeFilePaths(qenvFileBasePathArg, envFileBasePathArg);
|
|
19
|
+
this.loadRequiredEnvVars();
|
|
20
|
+
this.loadAvailableEnvVars();
|
|
21
|
+
this.checkForMissingEnvVars(failOnMissing);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
private initializeFilePaths(qenvFileBasePathArg: string, envFileBasePathArg: string) {
|
|
25
|
+
this.qenvFilePathAbsolute = plugins.path.join(plugins.path.resolve(qenvFileBasePathArg), 'qenv.yml');
|
|
26
|
+
this.envFilePathAbsolute = plugins.path.join(plugins.path.resolve(envFileBasePathArg), 'env.json');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private loadRequiredEnvVars() {
|
|
30
|
+
if (plugins.smartfile.fs.fileExistsSync(this.qenvFilePathAbsolute)) {
|
|
31
|
+
const qenvFile = plugins.smartfile.fs.toObjectSync(this.qenvFilePathAbsolute);
|
|
32
|
+
if (qenvFile?.required && Array.isArray(qenvFile.required)) {
|
|
33
|
+
this.requiredEnvVars.push(...qenvFile.required);
|
|
34
|
+
} else {
|
|
35
|
+
this.logger.log('warn', 'qenv.yml does not contain a "required" Array!');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
28
39
|
|
|
29
|
-
|
|
30
|
-
this.
|
|
40
|
+
private loadAvailableEnvVars() {
|
|
41
|
+
for (const envVar of this.requiredEnvVars) {
|
|
42
|
+
const value = this.getEnvVarOnDemand(envVar);
|
|
43
|
+
if (value) {
|
|
44
|
+
this.availableEnvVars.push(envVar);
|
|
45
|
+
this.keyValueObject[envVar] = value;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
31
49
|
|
|
32
|
-
|
|
50
|
+
private checkForMissingEnvVars(failOnMissing: boolean) {
|
|
51
|
+
this.missingEnvVars = this.requiredEnvVars.filter((envVar) => !this.availableEnvVars.includes(envVar));
|
|
33
52
|
|
|
34
|
-
// handle missing variables
|
|
35
53
|
if (this.missingEnvVars.length > 0) {
|
|
36
|
-
console.info('Required Env Vars are:');
|
|
37
|
-
console.
|
|
38
|
-
console.error('However some Env variables could not be resolved:');
|
|
39
|
-
console.log(this.missingEnvVars);
|
|
54
|
+
console.info('Required Env Vars are:', this.requiredEnvVars);
|
|
55
|
+
console.error('Missing Env Vars:', this.missingEnvVars);
|
|
40
56
|
if (failOnMissing) {
|
|
41
|
-
this.logger.log('error', 'Exiting!');
|
|
57
|
+
this.logger.log('error', 'Exiting due to missing env vars!');
|
|
42
58
|
process.exit(1);
|
|
43
59
|
} else {
|
|
44
60
|
this.logger.log('warn', 'qenv is not set to fail on missing environment variables');
|
|
@@ -46,150 +62,73 @@ export class Qenv {
|
|
|
46
62
|
}
|
|
47
63
|
}
|
|
48
64
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
65
|
+
public getEnvVarOnDemand(envVarName: string): string | undefined {
|
|
66
|
+
return (
|
|
67
|
+
this.getFromEnvironmentVariable(envVarName) ||
|
|
68
|
+
this.getFromEnvJsonFile(envVarName) ||
|
|
69
|
+
this.getFromDockerSecret(envVarName) ||
|
|
70
|
+
this.getFromDockerSecretJson(envVarName)
|
|
71
|
+
);
|
|
55
72
|
}
|
|
56
73
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
let envVarFromEnvironmentVariable: string;
|
|
63
|
-
let envVarFromEnvJsonFile: string;
|
|
64
|
-
let envVarFromDockerSecret: string;
|
|
65
|
-
let dockerSecretJson: string;
|
|
66
|
-
|
|
67
|
-
// env var check
|
|
68
|
-
if (process.env[wantedEnvVar]) {
|
|
69
|
-
this.availableEnvVars.push(wantedEnvVar);
|
|
70
|
-
envVarFromEnvironmentVariable = process.env[wantedEnvVar];
|
|
74
|
+
public getEnvVarOnDemandAsObject(envVarName: string): any {
|
|
75
|
+
const rawValue = this.getEnvVarOnDemand(envVarName);
|
|
76
|
+
if (rawValue && rawValue.startsWith('base64Object:')) {
|
|
77
|
+
const base64Part = rawValue.split('base64Object:')[1];
|
|
78
|
+
return this.decodeBase64(base64Part);
|
|
71
79
|
}
|
|
80
|
+
return rawValue;
|
|
81
|
+
}
|
|
72
82
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
83
|
+
private getFromEnvironmentVariable(envVarName: string): string | undefined {
|
|
84
|
+
return process.env[envVarName];
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
private getFromEnvJsonFile(envVarName: string): string | undefined {
|
|
76
88
|
try {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
89
|
+
const envJson = plugins.smartfile.fs.toObjectSync(this.envFilePathAbsolute);
|
|
90
|
+
const value = envJson[envVarName];
|
|
91
|
+
if (typeof value === 'object') {
|
|
92
|
+
return 'base64Object:' + this.encodeBase64(value);
|
|
93
|
+
}
|
|
94
|
+
return value;
|
|
95
|
+
} catch (error) {
|
|
96
|
+
return undefined;
|
|
83
97
|
}
|
|
98
|
+
}
|
|
84
99
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
plugins.smartfile.fs.
|
|
89
|
-
plugins.smartfile.fs.fileExistsSync(`/run/secrets/${wantedEnvVar}`)
|
|
90
|
-
) {
|
|
91
|
-
envVarFromDockerSecret = plugins.smartfile.fs.toStringSync(`/run/secrets/${wantedEnvVar}`);
|
|
100
|
+
private getFromDockerSecret(envVarName: string): string | undefined {
|
|
101
|
+
const secretPath = `/run/secrets/${envVarName}`;
|
|
102
|
+
if (plugins.smartfile.fs.fileExistsSync(secretPath)) {
|
|
103
|
+
return plugins.smartfile.fs.toStringSync(secretPath);
|
|
92
104
|
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
93
107
|
|
|
94
|
-
|
|
95
|
-
if (
|
|
96
|
-
plugins.smartfile.fs.isDirectory('/run') &&
|
|
97
|
-
plugins.smartfile.fs.isDirectory('/run/secrets')
|
|
98
|
-
) {
|
|
108
|
+
private getFromDockerSecretJson(envVarName: string): string | undefined {
|
|
109
|
+
if (plugins.smartfile.fs.isDirectory('/run/secrets')) {
|
|
99
110
|
const availableSecrets = plugins.smartfile.fs.listAllItemsSync('/run/secrets');
|
|
100
111
|
for (const secret of availableSecrets) {
|
|
101
|
-
if (secret.includes('secret.json')
|
|
112
|
+
if (secret.includes('secret.json')) {
|
|
102
113
|
const secretObject = plugins.smartfile.fs.toObjectSync(`/run/secrets/${secret}`);
|
|
103
|
-
|
|
114
|
+
const value = secretObject[envVarName];
|
|
115
|
+
if (typeof value === 'object') {
|
|
116
|
+
return 'base64Object:' + this.encodeBase64(value);
|
|
117
|
+
}
|
|
118
|
+
return value;
|
|
104
119
|
}
|
|
105
120
|
}
|
|
106
121
|
}
|
|
107
|
-
|
|
108
|
-
// warn if there is more than one candidate
|
|
109
|
-
const availableCcandidates: any[] = [];
|
|
110
|
-
[
|
|
111
|
-
envVarFromEnvironmentVariable,
|
|
112
|
-
envVarFromEnvJsonFile,
|
|
113
|
-
envVarFromDockerSecret,
|
|
114
|
-
dockerSecretJson,
|
|
115
|
-
].forEach((candidate) => {
|
|
116
|
-
if (candidate) {
|
|
117
|
-
availableCcandidates.push(candidate);
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
if (availableCcandidates.length > 1) {
|
|
121
|
-
this.logger.log(
|
|
122
|
-
'warn',
|
|
123
|
-
`found multiple candidates for ${wantedEnvVar} Choosing in the order of envVar, envFileVar, dockerSecret, dockerSecretJson`
|
|
124
|
-
);
|
|
125
|
-
console.log(availableCcandidates);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
switch (true) {
|
|
129
|
-
case !!envVarFromEnvironmentVariable:
|
|
130
|
-
this.logger.log('ok', `found ${wantedEnvVar} as environment variable`);
|
|
131
|
-
return envVarFromEnvironmentVariable;
|
|
132
|
-
case !!envVarFromEnvJsonFile:
|
|
133
|
-
this.logger.log('ok', `found ${wantedEnvVar} as env.json variable`);
|
|
134
|
-
return envVarFromEnvJsonFile;
|
|
135
|
-
case !!envVarFromDockerSecret:
|
|
136
|
-
this.logger.log('ok', `found ${wantedEnvVar} as docker secret`);
|
|
137
|
-
return envVarFromDockerSecret;
|
|
138
|
-
case !!dockerSecretJson:
|
|
139
|
-
this.logger.log('ok', `found ${wantedEnvVar} as docker secret.json`);
|
|
140
|
-
return dockerSecretJson;
|
|
141
|
-
default:
|
|
142
|
-
this.logger.log(
|
|
143
|
-
'warn',
|
|
144
|
-
`could not find the wanted environment variable ${wantedEnvVar} anywhere`
|
|
145
|
-
);
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
122
|
+
return undefined;
|
|
148
123
|
}
|
|
149
124
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
let qenvFile: any = {};
|
|
155
|
-
if (plugins.smartfile.fs.fileExistsSync(this.qenvFilePathAbsolute)) {
|
|
156
|
-
qenvFile = plugins.smartfile.fs.toObjectSync(this.qenvFilePathAbsolute);
|
|
157
|
-
}
|
|
158
|
-
if (!qenvFile || !qenvFile.required || !Array.isArray(qenvFile.required)) {
|
|
159
|
-
this.logger.log(
|
|
160
|
-
'warn',
|
|
161
|
-
`qenv (promised environment): ./qenv.yml File does not contain a 'required' Array! This might be ok though.`
|
|
162
|
-
);
|
|
163
|
-
} else {
|
|
164
|
-
for (const keyArg of Object.keys(qenvFile.required)) {
|
|
165
|
-
this.requiredEnvVars.push(qenvFile.required[keyArg]);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* gets the available env vars
|
|
172
|
-
*/
|
|
173
|
-
private getAvailableEnvVars = () => {
|
|
174
|
-
for (const requiredEnvVar of this.requiredEnvVars) {
|
|
175
|
-
const chosenVar = this.getEnvVarOnDemand(requiredEnvVar);
|
|
176
|
-
if (chosenVar) {
|
|
177
|
-
this.availableEnvVars.push(requiredEnvVar);
|
|
178
|
-
this.keyValueObject[requiredEnvVar] = chosenVar;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
};
|
|
125
|
+
private encodeBase64(data: any): string {
|
|
126
|
+
const jsonString = JSON.stringify(data);
|
|
127
|
+
return Buffer.from(jsonString).toString('base64');
|
|
128
|
+
}
|
|
182
129
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
const missingEnvVars: string[] = [];
|
|
188
|
-
for (const envVar of this.requiredEnvVars) {
|
|
189
|
-
if (!this.availableEnvVars.includes(envVar)) {
|
|
190
|
-
missingEnvVars.push(envVar);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
return missingEnvVars;
|
|
194
|
-
};
|
|
130
|
+
private decodeBase64(encodedString: string): any {
|
|
131
|
+
const decodedString = Buffer.from(encodedString, 'base64').toString('utf-8');
|
|
132
|
+
return JSON.parse(decodedString);
|
|
133
|
+
}
|
|
195
134
|
}
|
package/ts/qenv.plugins.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as path from 'path';
|
|
|
4
4
|
export { path };
|
|
5
5
|
|
|
6
6
|
// @pushrocks scope
|
|
7
|
-
import * as smartfile from '@
|
|
8
|
-
import * as smartlog from '@
|
|
7
|
+
import * as smartfile from '@push.rocks/smartfile';
|
|
8
|
+
import * as smartlog from '@push.rocks/smartlog';
|
|
9
9
|
|
|
10
10
|
export { smartfile, smartlog };
|