Compare commits

..

13 Commits

Author SHA1 Message Date
4e39970dd7 1.1.1 2016-08-04 16:44:48 +02:00
2a7c239176 fix interface naming 2016-08-04 16:44:42 +02:00
35e71ccf00 1.1.0 2016-08-04 16:09:44 +02:00
11a2cf83ee add keyValueObjectArray 2016-08-04 16:09:39 +02:00
d7a0541d81 1.0.8 2016-06-21 16:25:09 +02:00
c03e17d522 improve log output 2016-06-21 16:25:03 +02:00
b9d1080829 1.0.7 2016-06-21 16:13:45 +02:00
a84a257e4b improve log output 2016-06-21 16:13:29 +02:00
2fa659a22a 1.0.6 2016-06-20 22:19:11 +02:00
bdc99cc3a6 link typings om package.json 2016-06-20 22:18:48 +02:00
2956278369 cosmetics 2016-06-20 12:05:35 +02:00
c61ef2eeba 1.0.5 2016-06-20 11:21:26 +02:00
41c97c4c05 improve README 2016-06-20 11:21:21 +02:00
8 changed files with 129 additions and 79 deletions

View File

@ -2,10 +2,10 @@
provides an easy way for promised environments
## Usage
qenv needs two files to work:
qenv works with two files:
* **qenv.yml** - specified which ENV vars are required
* **env.yml** specified all env vars that are not already set in the current environment
* **qenv.yml** - specifies which ENV vars are required.
* **env.yml** - specifies all env vars that are not already set in the current environment.
Now obviously you can set build specific env vars in many CI environments.
So there we do not need an **env.yml** since all ENV vars are in place

7
dist/index.d.ts vendored
View File

@ -1,6 +1,11 @@
export interface IKeyValueObject {
key: string;
value: string;
}
export declare class Qenv {
requiredEnvVars: string[];
availableEnvVars: string[];
missingEnvVars: string[];
constructor(basePathArg: string, envYmlPathArg: any);
keyValueObjectArray: IKeyValueObject[];
constructor(basePathArg: string, envYmlPathArg: any, failOnMissing?: boolean);
}

75
dist/index.js vendored

File diff suppressed because one or more lines are too long

View File

@ -4,5 +4,4 @@ exports.beautylog = require("beautylog");
exports.lodash = require("lodash");
exports.path = require("path");
exports.smartfile = require("smartfile");
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInFlbnYucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ1YsaUJBQVMsV0FBVyxXQUFXLENBQUMsQ0FBQztBQUNwQyxjQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hCLFlBQUksV0FBVyxNQUFNLENBQUMsQ0FBQztBQUN2QixpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDIiwiZmlsZSI6InFlbnYucGx1Z2lucy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInR5cGluZ3MtZ2xvYmFsXCI7XG5leHBvcnQgaW1wb3J0IGJlYXV0eWxvZyA9IHJlcXVpcmUoXCJiZWF1dHlsb2dcIik7XG5leHBvcnQgbGV0IGxvZGFzaCA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5leHBvcnQgaW1wb3J0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmV4cG9ydCBpbXBvcnQgc21hcnRmaWxlID0gcmVxdWlyZShcInNtYXJ0ZmlsZVwiKTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWVudi5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcWVudi5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDVixpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDO0FBQ3BDLGNBQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEIsWUFBSSxXQUFXLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUMifQ==

View File

@ -1,8 +1,9 @@
{
"name": "qenv",
"version": "1.0.4",
"version": "1.1.1",
"description": "promised environments",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"scripts": {
"test": "(npmts)"
},
@ -22,15 +23,15 @@
},
"homepage": "https://gitlab.com/pushrocks/qenv#README",
"devDependencies": {
"npmts-g": "^5.2.6",
"should": "^9.0.2",
"npmts-g": "^5.2.8",
"should": "^10.0.0",
"typings-test": "^1.0.1"
},
"dependencies": {
"beautylog": "^5.0.12",
"lodash": "^4.13.1",
"beautylog": "^5.0.20",
"lodash": "^4.14.1",
"q": "^1.4.1",
"smartfile": "^3.0.10",
"typings-global": "^1.0.3"
"smartfile": "^4.0.13",
"typings-global": "^1.0.6"
}
}

View File

@ -1,16 +1,16 @@
"use strict";
require("typings-test");
var path = require("path");
const path = require("path");
require("should");
var index_1 = require("../dist/index");
process.cwd = function () {
const index_1 = require("../dist/index");
process.cwd = () => {
return path.join(__dirname, "./assets/");
};
process.env["key1"] = "original";
var qenvTestObject;
let qenvTestObject;
describe("Qenv class", function () {
it("should create a new class", function () {
qenvTestObject = new index_1.Qenv(process.cwd(), process.cwd());
qenvTestObject = new index_1.Qenv(process.cwd(), process.cwd(), false);
});
it("key1 should be not be overwritten since it is already present", function () {
process.env.key1.should.equal("original");
@ -18,6 +18,9 @@ describe("Qenv class", function () {
it("key2 should be read from Yml", function () {
process.env.key2.should.equal("fromYml");
});
it("keyValueObjectArray should hold all retrieved values", function () {
qenvTestObject.keyValueObjectArray[0].value.should.equal("original");
qenvTestObject.keyValueObjectArray[1].value.should.equal("fromYml");
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsSUFBWSxJQUFJLFdBQU0sTUFBTSxDQUFDLENBQUE7QUFDN0IsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQixzQkFBbUIsZUFBZSxDQUFDLENBQUE7QUFFbkMsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUE7QUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQTtBQUVoQyxJQUFJLGNBQW1CLENBQUM7QUFDeEIsUUFBUSxDQUFDLFlBQVksRUFBQztJQUNsQixFQUFFLENBQUMsMkJBQTJCLEVBQUM7UUFDM0IsY0FBYyxHQUFHLElBQUksWUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQywrREFBK0QsRUFBQztRQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLDhCQUE4QixFQUFDO1FBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUE7QUFFTixDQUFDLENBQUMsQ0FBQyIsImZpbGUiOiJ0ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy10ZXN0XCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgXCJzaG91bGRcIjtcbmltcG9ydCB7UWVudn0gZnJvbSBcIi4uL2Rpc3QvaW5kZXhcIjtcblxucHJvY2Vzcy5jd2QgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHBhdGguam9pbihfX2Rpcm5hbWUsXCIuL2Fzc2V0cy9cIik7XG59XG5cbnByb2Nlc3MuZW52W1wia2V5MVwiXSA9IFwib3JpZ2luYWxcIlxuXG5sZXQgcWVudlRlc3RPYmplY3Q6UWVudjtcbmRlc2NyaWJlKFwiUWVudiBjbGFzc1wiLGZ1bmN0aW9uKCl7XG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIGEgbmV3IGNsYXNzXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgcWVudlRlc3RPYmplY3QgPSBuZXcgUWVudihwcm9jZXNzLmN3ZCgpLHByb2Nlc3MuY3dkKCkpO1xuICAgIH0pO1xuICAgIGl0KFwia2V5MSBzaG91bGQgYmUgbm90IGJlIG92ZXJ3cml0dGVuIHNpbmNlIGl0IGlzIGFscmVhZHkgcHJlc2VudFwiLGZ1bmN0aW9uKCl7XG4gICAgICAgIHByb2Nlc3MuZW52LmtleTEuc2hvdWxkLmVxdWFsKFwib3JpZ2luYWxcIik7XG4gICAgfSk7XG4gICAgaXQoXCJrZXkyIHNob3VsZCBiZSByZWFkIGZyb20gWW1sXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgcHJvY2Vzcy5lbnYua2V5Mi5zaG91bGQuZXF1YWwoXCJmcm9tWW1sXCIpO1xuICAgIH0pXG5cbn0pOyJdfQ==
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsTUFBWSxJQUFJLFdBQU0sTUFBTSxDQUFDLENBQUE7QUFDN0IsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUNoQix3QkFBbUIsZUFBZSxDQUFDLENBQUE7QUFFbkMsT0FBTyxDQUFDLEdBQUcsR0FBRztJQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxXQUFXLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUE7QUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQTtBQUVoQyxJQUFJLGNBQW1CLENBQUM7QUFDeEIsUUFBUSxDQUFDLFlBQVksRUFBQztJQUNsQixFQUFFLENBQUMsMkJBQTJCLEVBQUM7UUFDM0IsY0FBYyxHQUFHLElBQUksWUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsK0RBQStELEVBQUM7UUFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyw4QkFBOEIsRUFBQztRQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLHNEQUFzRCxFQUFDO1FBQ3RELGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUE7QUFFTixDQUFDLENBQUMsQ0FBQyJ9

View File

@ -12,13 +12,17 @@ process.env["key1"] = "original"
let qenvTestObject:Qenv;
describe("Qenv class",function(){
it("should create a new class",function(){
qenvTestObject = new Qenv(process.cwd(),process.cwd());
qenvTestObject = new Qenv(process.cwd(),process.cwd(),false);
});
it("key1 should be not be overwritten since it is already present",function(){
process.env.key1.should.equal("original");
});
it("key2 should be read from Yml",function(){
process.env.key2.should.equal("fromYml");
});
it("keyValueObjectArray should hold all retrieved values",function(){
qenvTestObject.keyValueObjectArray[0].value.should.equal("original");
qenvTestObject.keyValueObjectArray[1].value.should.equal("fromYml");
})
});

View File

@ -1,51 +1,72 @@
import * as plugins from "./qenv.plugins";
export interface IKeyValueObject {
key: string,
value: string
};
export class Qenv {
requiredEnvVars:string[];
availableEnvVars:string[];
missingEnvVars:string[];
constructor(basePathArg = process.cwd(),envYmlPathArg){
this.requiredEnvVars = getRequiredEnvVars(basePathArg);
this.availableEnvVars = getAvailableEnvVars(this.requiredEnvVars,envYmlPathArg);
requiredEnvVars:string[] = [];
availableEnvVars:string[] = [];
missingEnvVars:string[] = [];
keyValueObjectArray:IKeyValueObject[] = [];
constructor(basePathArg = process.cwd(),envYmlPathArg,failOnMissing = true){
getRequiredEnvVars(basePathArg,this.requiredEnvVars);
getAvailableEnvVars(this.requiredEnvVars,envYmlPathArg,this.availableEnvVars,this.keyValueObjectArray);
this.missingEnvVars = getMissingEnvVars(this.requiredEnvVars,this.availableEnvVars);
for(let keyArg in this.missingEnvVars){
plugins.beautylog.warn(this.missingEnvVars[keyArg] + " is required, but missing!")
//handle missing variables
if (this.missingEnvVars.length > 0){
plugins.beautylog.info("Required Env Vars are:")
console.log(this.requiredEnvVars);
plugins.beautylog.error("However some Env variables could not be resolved:");
console.log(this.missingEnvVars);
if(failOnMissing){
plugins.beautylog.error("Exiting!")
process.exit(1);
}
}
};
};
let getRequiredEnvVars = (pathArg:string):string[] => {
let result:string[] = [];
let getRequiredEnvVars = (pathArg:string, requiredEnvVarsArray:string[]) => {
let qenvFilePath = plugins.path.join(pathArg,"qenv.yml");
let qenvFile = plugins.smartfile.local.toObjectSync(qenvFilePath);
let qenvFile = plugins.smartfile.fs.toObjectSync(qenvFilePath);
for(let keyArg in qenvFile.vars){
result.push(qenvFile.vars[keyArg]);
}
return result;
requiredEnvVarsArray.push(qenvFile.vars[keyArg]);
};
}
let getAvailableEnvVars = (requiredEnvVarsArg:string[],envYmlPathArg:string):string[] => {
let result = [];
let getAvailableEnvVars = (requiredEnvVarsArg:string[],envYmlPathArg:string,availableEnvVarsArray:string[],keyValueObjectArrayArg:IKeyValueObject[]) => {
envYmlPathArg = plugins.path.join(envYmlPathArg,"env.yml")
let envYml;
try {
envYml = plugins.smartfile.local.toObjectSync(envYmlPathArg);
envYml = plugins.smartfile.fs.toObjectSync(envYmlPathArg);
}
catch(err){
plugins.beautylog.log("env file couldn't be found at " + envYmlPathArg)
envYml = {};
}
for(let keyArg in requiredEnvVarsArg){
let requiredEnvVar:string = requiredEnvVarsArg[keyArg];
for(let requiredEnvVar of requiredEnvVarsArg){
if(process.env[requiredEnvVar]){
result.push(requiredEnvVar);
availableEnvVarsArray.push(requiredEnvVar);
keyValueObjectArrayArg.push({
key: requiredEnvVar,
value: process.env[requiredEnvVar]
});
} else if(envYml.hasOwnProperty(requiredEnvVar)){
process.env[requiredEnvVar] = envYml[requiredEnvVar];
result.push(requiredEnvVar);
}
}
return result;
availableEnvVarsArray.push(requiredEnvVar);
keyValueObjectArrayArg.push({
key: requiredEnvVar,
value: process.env[requiredEnvVar]
});
}
};
};
let getMissingEnvVars = (requiredEnvVarsArray:string[],availableEnvVarsArray:string[]) => {
return plugins.lodash.difference(requiredEnvVarsArray,availableEnvVarsArray);
}
};