Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
53721a41c2 | |||
c9f79e6ea4 | |||
3c7e3e2589 | |||
205d27f9a0 |
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@push.rocks/qenv",
|
"name": "@push.rocks/qenv",
|
||||||
"version": "5.0.5",
|
"version": "6.0.1",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "easy promised environments",
|
"description": "easy promised environments",
|
||||||
"main": "dist_ts/index.js",
|
"main": "dist_ts/index.js",
|
||||||
|
12
test/test.ts
12
test/test.ts
@ -18,18 +18,18 @@ tap.test('should create a new class', async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
tap.test('key1 should be not be overwritten since it is already present', async () => {
|
tap.test('key1 should be not be overwritten since it is already present', async () => {
|
||||||
expect(testQenv.getEnvVarOnDemand('key1')).toEqual('original');
|
expect(await testQenv.getEnvVarOnDemand('key1')).toEqual('original');
|
||||||
expect(testQenv.getEnvVarOnDemand('key1')).toEqual('original');
|
expect(await testQenv.getEnvVarOnDemand('key1')).toEqual('original');
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test('key2 should be read from Yml', async () => {
|
tap.test('key2 should be read from Yml', async () => {
|
||||||
expect(testQenv.getEnvVarOnDemand('key2')).toEqual('fromJson');
|
expect(await testQenv.getEnvVarOnDemand('key2')).toEqual('fromJson');
|
||||||
expect(testQenv.getEnvVarOnDemand('key2')).toEqual('fromJson');
|
expect(await testQenv.getEnvVarOnDemand('key2')).toEqual('fromJson');
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test('keyValueObjectArray should hold all retrieved values', async () => {
|
tap.test('keyValueObjectArray should hold all retrieved values', async () => {
|
||||||
expect(testQenv.keyValueObject.key1).toEqual('original');
|
expect(await testQenv.keyValueObject.key1).toEqual('original');
|
||||||
expect(testQenv.keyValueObject.key2).toEqual('fromJson');
|
expect(await testQenv.keyValueObject.key2).toEqual('fromJson');
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.start();
|
tap.start();
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@push.rocks/qenv',
|
name: '@push.rocks/qenv',
|
||||||
version: '5.0.5',
|
version: '6.0.1',
|
||||||
description: 'easy promised environments'
|
description: 'easy promised environments'
|
||||||
}
|
}
|
||||||
|
@ -22,8 +22,14 @@ export class Qenv {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private initializeFilePaths(qenvFileBasePathArg: string, envFileBasePathArg: string) {
|
private initializeFilePaths(qenvFileBasePathArg: string, envFileBasePathArg: string) {
|
||||||
this.qenvFilePathAbsolute = plugins.path.join(plugins.path.resolve(qenvFileBasePathArg), 'qenv.yml');
|
this.qenvFilePathAbsolute = plugins.path.join(
|
||||||
this.envFilePathAbsolute = plugins.path.join(plugins.path.resolve(envFileBasePathArg), 'env.json');
|
plugins.path.resolve(qenvFileBasePathArg),
|
||||||
|
'qenv.yml'
|
||||||
|
);
|
||||||
|
this.envFilePathAbsolute = plugins.path.join(
|
||||||
|
plugins.path.resolve(envFileBasePathArg),
|
||||||
|
'env.json'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private loadRequiredEnvVars() {
|
private loadRequiredEnvVars() {
|
||||||
@ -48,7 +54,9 @@ export class Qenv {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private checkForMissingEnvVars(failOnMissing: boolean) {
|
private checkForMissingEnvVars(failOnMissing: boolean) {
|
||||||
this.missingEnvVars = this.requiredEnvVars.filter((envVar) => !this.availableEnvVars.includes(envVar));
|
this.missingEnvVars = this.requiredEnvVars.filter(
|
||||||
|
(envVar) => !this.availableEnvVars.includes(envVar)
|
||||||
|
);
|
||||||
|
|
||||||
if (this.missingEnvVars.length > 0) {
|
if (this.missingEnvVars.length > 0) {
|
||||||
console.info('Required Env Vars are:', this.requiredEnvVars);
|
console.info('Required Env Vars are:', this.requiredEnvVars);
|
||||||
@ -62,7 +70,48 @@ export class Qenv {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public getEnvVarOnDemand(envVarName: string): string | undefined {
|
public async getEnvVarOnDemand(
|
||||||
|
envVarNameOrNames: string | string[]
|
||||||
|
): Promise<string | undefined> {
|
||||||
|
if (Array.isArray(envVarNameOrNames)) {
|
||||||
|
for (const envVarName of envVarNameOrNames) {
|
||||||
|
const value = await this.tryGetEnvVar(envVarName);
|
||||||
|
if (value) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
} else {
|
||||||
|
return await this.tryGetEnvVar(envVarNameOrNames);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public getEnvVarOnDemandSync(envVarNameOrNames: string | string[]): string | undefined {
|
||||||
|
console.warn('requesting env var sync leaves out potentially important async env sources.');
|
||||||
|
|
||||||
|
if (Array.isArray(envVarNameOrNames)) {
|
||||||
|
for (const envVarName of envVarNameOrNames) {
|
||||||
|
const value = this.tryGetEnvVarSync(envVarName);
|
||||||
|
if (value) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
} else {
|
||||||
|
return this.tryGetEnvVarSync(envVarNameOrNames);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getEnvVarOnDemandAsObject(envVarNameOrNames: string | string[]): Promise<any> {
|
||||||
|
const rawValue = await this.getEnvVarOnDemand(envVarNameOrNames);
|
||||||
|
if (rawValue && rawValue.startsWith('base64Object:')) {
|
||||||
|
const base64Part = rawValue.split('base64Object:')[1];
|
||||||
|
return this.decodeBase64(base64Part);
|
||||||
|
}
|
||||||
|
return rawValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async tryGetEnvVar(envVarName: string): Promise<string | undefined> {
|
||||||
return (
|
return (
|
||||||
this.getFromEnvironmentVariable(envVarName) ||
|
this.getFromEnvironmentVariable(envVarName) ||
|
||||||
this.getFromEnvJsonFile(envVarName) ||
|
this.getFromEnvJsonFile(envVarName) ||
|
||||||
@ -71,13 +120,13 @@ export class Qenv {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public getEnvVarOnDemandAsObject(envVarName: string): any {
|
private tryGetEnvVarSync(envVarName: string): string | undefined {
|
||||||
const rawValue = this.getEnvVarOnDemand(envVarName);
|
return (
|
||||||
if (rawValue && rawValue.startsWith('base64Object:')) {
|
this.getFromEnvironmentVariable(envVarName) ||
|
||||||
const base64Part = rawValue.split('base64Object:')[1];
|
this.getFromEnvJsonFile(envVarName) ||
|
||||||
return this.decodeBase64(base64Part);
|
this.getFromDockerSecret(envVarName) ||
|
||||||
}
|
this.getFromDockerSecretJson(envVarName)
|
||||||
return rawValue;
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private getFromEnvironmentVariable(envVarName: string): string | undefined {
|
private getFromEnvironmentVariable(envVarName: string): string | undefined {
|
||||||
|
Reference in New Issue
Block a user