fix(qenv): Handle falsy environment values correctly, improve env source resolution, add tests and update test script
This commit is contained in:
@@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@push.rocks/qenv',
|
||||
version: '6.1.2',
|
||||
version: '6.1.3',
|
||||
description: 'A module for easily handling environment variables in Node.js projects with support for .yml and .json configuration.'
|
||||
}
|
||||
|
@@ -71,7 +71,7 @@ export class Qenv {
|
||||
private loadAvailableEnvVars() {
|
||||
for (const envVar of this.requiredEnvVars) {
|
||||
const value = this.getEnvVarOnDemand(envVar);
|
||||
if (value) {
|
||||
if (value !== undefined) {
|
||||
this.availableEnvVars.push(envVar);
|
||||
this.keyValueObject[envVar] = value;
|
||||
}
|
||||
@@ -101,7 +101,7 @@ export class Qenv {
|
||||
if (Array.isArray(envVarNameOrNames)) {
|
||||
for (const envVarName of envVarNameOrNames) {
|
||||
const value = await this.tryGetEnvVar(envVarName);
|
||||
if (value) {
|
||||
if (value !== undefined) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@@ -120,7 +120,7 @@ export class Qenv {
|
||||
envVarNameOrNames: TEnvVarRef | TEnvVarRef[]
|
||||
): Promise<string> {
|
||||
const value = await this.getEnvVarOnDemand(envVarNameOrNames);
|
||||
if (!value) {
|
||||
if (value === undefined) {
|
||||
throw new Error(`Env var ${envVarNameOrNames} is not set!`);
|
||||
}
|
||||
return value;
|
||||
@@ -132,7 +132,7 @@ export class Qenv {
|
||||
if (Array.isArray(envVarNameOrNames)) {
|
||||
for (const envVarName of envVarNameOrNames) {
|
||||
const value = this.tryGetEnvVarSync(envVarName);
|
||||
if (value) {
|
||||
if (value !== undefined) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@@ -156,21 +156,37 @@ export class Qenv {
|
||||
return await envVarRefArg();
|
||||
}
|
||||
|
||||
return (
|
||||
this.getFromEnvironmentVariable(envVarRefArg) ||
|
||||
this.getFromEnvYamlOrJsonFile(envVarRefArg) ||
|
||||
this.getFromDockerSecret(envVarRefArg) ||
|
||||
const sources = [
|
||||
this.getFromEnvironmentVariable(envVarRefArg),
|
||||
this.getFromEnvYamlOrJsonFile(envVarRefArg),
|
||||
this.getFromDockerSecret(envVarRefArg),
|
||||
this.getFromDockerSecretJson(envVarRefArg)
|
||||
);
|
||||
];
|
||||
|
||||
for (const value of sources) {
|
||||
if (value !== undefined) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
private tryGetEnvVarSync(envVarName: string): string | undefined {
|
||||
return (
|
||||
this.getFromEnvironmentVariable(envVarName) ||
|
||||
this.getFromEnvYamlOrJsonFile(envVarName) ||
|
||||
this.getFromDockerSecret(envVarName) ||
|
||||
const sources = [
|
||||
this.getFromEnvironmentVariable(envVarName),
|
||||
this.getFromEnvYamlOrJsonFile(envVarName),
|
||||
this.getFromDockerSecret(envVarName),
|
||||
this.getFromDockerSecretJson(envVarName)
|
||||
);
|
||||
];
|
||||
|
||||
for (const value of sources) {
|
||||
if (value !== undefined) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
private getFromEnvironmentVariable(envVarName: string): string | undefined {
|
||||
@@ -184,10 +200,13 @@ export class Qenv {
|
||||
try {
|
||||
const envJson = plugins.smartfile.fs.toObjectSync(this.envFilePathAbsolute);
|
||||
const value = envJson[envVarName];
|
||||
if (value === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
if (typeof value === 'object') {
|
||||
return 'base64Object:' + this.encodeBase64(value);
|
||||
}
|
||||
return value;
|
||||
return String(value);
|
||||
} catch (error) {
|
||||
return undefined;
|
||||
}
|
||||
@@ -208,10 +227,13 @@ export class Qenv {
|
||||
if (secret.includes('secret.json')) {
|
||||
const secretObject = plugins.smartfile.fs.toObjectSync(`/run/secrets/${secret}`);
|
||||
const value = secretObject[envVarName];
|
||||
if (value === undefined) {
|
||||
continue;
|
||||
}
|
||||
if (typeof value === 'object') {
|
||||
return 'base64Object:' + this.encodeBase64(value);
|
||||
}
|
||||
return value;
|
||||
return String(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user