From 612f8307b842026cf3851956034b903e6b3441b5 Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Mon, 20 Jun 2016 07:06:15 +0200 Subject: [PATCH] improve --- dist/index.d.ts | 6 ++++++ dist/index.js | 49 ++++++++++++++++++++++++++++++++++++++++-- dist/qenv.plugins.d.ts | 2 ++ dist/qenv.plugins.js | 4 +++- package.json | 1 + test/test.ts | 0 ts/index.ts | 35 ++++++++++++++++++++---------- ts/qenv.plugins.ts | 1 + 8 files changed, 84 insertions(+), 14 deletions(-) create mode 100644 test/test.ts diff --git a/dist/index.d.ts b/dist/index.d.ts index e69de29..bcccce1 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -0,0 +1,6 @@ +export declare class qenv { + requiredEnvVars: string[]; + availableEnvVars: string[]; + missingEnvVars: string[]; + constructor(basePathArg: string, envYmlPathArg: any); +} diff --git a/dist/index.js b/dist/index.js index b8dbb98..5cea318 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,3 +1,48 @@ +"use strict"; +var plugins = require("./qenv.plugins"); +var qenv = (function () { + function qenv(basePathArg, envYmlPathArg) { + if (basePathArg === void 0) { basePathArg = process.cwd(); } + this.requiredEnvVars = getRequiredEnvVars(basePathArg); + this.availableEnvVars = getAvailableEnvVars(this.requiredEnvVars, envYmlPathArg); + this.missingEnvVars = getMissingEnvVars(this.requiredEnvVars, this.availableEnvVars); + } + return qenv; +}()); +exports.qenv = qenv; +; +var getRequiredEnvVars = function (pathArg) { + var result = []; + var qenvFilePath = plugins.path.join(pathArg, "qenv.yml"); + var qenvFile = plugins.smartfile.local.toObjectSync(qenvFilePath); + for (var keyArg in qenvFile.vars) { + result.push(qenvFile.vars[keyArg]); + } + return result; +}; +var getAvailableEnvVars = function (requiredEnvVarsArg, envYmlPathArg) { + var result = []; + var envYml; + try { + envYml = plugins.smartfile.local.toObjectSync(envYmlPathArg); + } + catch (err) { + envYml = {}; + } + for (var keyArg in requiredEnvVarsArg) { + var envVar = requiredEnvVarsArg[keyArg]; + if (process.env[envVar]) { + result.push(envVar); + } + else if (envYml.hasOwnPropery(envVar)) { + process.env[envVar] = envYml.envVar; + result.push(envVar); + } + } + return result; +}; +var getMissingEnvVars = function (requiredEnvVarsArray, availableEnvVarsArray) { + return plugins.lodash.difference(requiredEnvVarsArray, availableEnvVarsArray); +}; - -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbXX0= +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFZLE9BQU8sV0FBTSxnQkFBZ0IsQ0FBQyxDQUFBO0FBRTFDO0lBSUksY0FBWSxXQUEyQixFQUFDLGFBQWE7UUFBekMsMkJBQTJCLEdBQTNCLGNBQWMsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBQ0wsV0FBQztBQUFELENBVEEsQUFTQyxJQUFBO0FBVFksWUFBSSxPQVNoQixDQUFBO0FBQUEsQ0FBQztBQUVGLElBQUksa0JBQWtCLEdBQUcsVUFBQyxPQUFjO0lBQ3BDLElBQUksTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUN6QixJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDekQsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xFLEdBQUcsQ0FBQSxDQUFDLElBQUksTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQTtBQUVELElBQUksbUJBQW1CLEdBQUcsVUFBQyxrQkFBMkIsRUFBQyxhQUFvQjtJQUN2RSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxNQUFNLENBQUM7SUFDWCxJQUFJLENBQUM7UUFDRCxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2pFLENBQ0E7SUFBQSxLQUFLLENBQUEsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDO1FBQ1AsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBQ0QsR0FBRyxDQUFBLENBQUMsSUFBSSxNQUFNLElBQUksa0JBQWtCLENBQUMsQ0FBQSxDQUFDO1FBQ2xDLElBQUksTUFBTSxHQUFVLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLEVBQUUsQ0FBQSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFBO0FBRUQsSUFBSSxpQkFBaUIsR0FBRyxVQUFDLG9CQUE2QixFQUFDLHFCQUE4QjtJQUNqRixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUNqRixDQUFDLENBQUEiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gXCIuL3FlbnYucGx1Z2luc1wiO1xuXG5leHBvcnQgY2xhc3MgcWVudiB7XG4gICAgcmVxdWlyZWRFbnZWYXJzOnN0cmluZ1tdO1xuICAgIGF2YWlsYWJsZUVudlZhcnM6c3RyaW5nW107XG4gICAgbWlzc2luZ0VudlZhcnM6c3RyaW5nW107XG4gICAgY29uc3RydWN0b3IoYmFzZVBhdGhBcmcgPSBwcm9jZXNzLmN3ZCgpLGVudlltbFBhdGhBcmcpe1xuICAgICAgICB0aGlzLnJlcXVpcmVkRW52VmFycyA9IGdldFJlcXVpcmVkRW52VmFycyhiYXNlUGF0aEFyZyk7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlRW52VmFycyA9IGdldEF2YWlsYWJsZUVudlZhcnModGhpcy5yZXF1aXJlZEVudlZhcnMsZW52WW1sUGF0aEFyZyk7XG4gICAgICAgIHRoaXMubWlzc2luZ0VudlZhcnMgPSBnZXRNaXNzaW5nRW52VmFycyh0aGlzLnJlcXVpcmVkRW52VmFycyx0aGlzLmF2YWlsYWJsZUVudlZhcnMpO1xuICAgIH1cbn07XG5cbmxldCBnZXRSZXF1aXJlZEVudlZhcnMgPSAocGF0aEFyZzpzdHJpbmcpOnN0cmluZ1tdID0+IHtcbiAgICBsZXQgcmVzdWx0OnN0cmluZ1tdID0gW107XG4gICAgbGV0IHFlbnZGaWxlUGF0aCA9IHBsdWdpbnMucGF0aC5qb2luKHBhdGhBcmcsXCJxZW52LnltbFwiKTtcbiAgICBsZXQgcWVudkZpbGUgPSBwbHVnaW5zLnNtYXJ0ZmlsZS5sb2NhbC50b09iamVjdFN5bmMocWVudkZpbGVQYXRoKTtcbiAgICBmb3IobGV0IGtleUFyZyBpbiBxZW52RmlsZS52YXJzKXtcbiAgICAgICAgcmVzdWx0LnB1c2gocWVudkZpbGUudmFyc1trZXlBcmddKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxubGV0IGdldEF2YWlsYWJsZUVudlZhcnMgPSAocmVxdWlyZWRFbnZWYXJzQXJnOnN0cmluZ1tdLGVudlltbFBhdGhBcmc6c3RyaW5nKTpzdHJpbmdbXSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGxldCBlbnZZbWw7XG4gICAgdHJ5IHtcbiAgICAgICAgZW52WW1sID0gcGx1Z2lucy5zbWFydGZpbGUubG9jYWwudG9PYmplY3RTeW5jKGVudlltbFBhdGhBcmcpO1xuICAgIH1cbiAgICBjYXRjaChlcnIpe1xuICAgICAgICBlbnZZbWwgPSB7fTtcbiAgICB9XG4gICAgZm9yKGxldCBrZXlBcmcgaW4gcmVxdWlyZWRFbnZWYXJzQXJnKXtcbiAgICAgICAgbGV0IGVudlZhcjpzdHJpbmcgPSByZXF1aXJlZEVudlZhcnNBcmdba2V5QXJnXTtcbiAgICAgICAgaWYocHJvY2Vzcy5lbnZbZW52VmFyXSl7XG4gICAgICAgICAgICByZXN1bHQucHVzaChlbnZWYXIpO1xuICAgICAgICB9IGVsc2UgaWYoZW52WW1sLmhhc093blByb3BlcnkoZW52VmFyKSl7XG4gICAgICAgICAgICBwcm9jZXNzLmVudltlbnZWYXJdID0gZW52WW1sLmVudlZhcjtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVudlZhcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxubGV0IGdldE1pc3NpbmdFbnZWYXJzID0gKHJlcXVpcmVkRW52VmFyc0FycmF5OnN0cmluZ1tdLGF2YWlsYWJsZUVudlZhcnNBcnJheTpzdHJpbmdbXSkgPT4ge1xuICAgIHJldHVybiBwbHVnaW5zLmxvZGFzaC5kaWZmZXJlbmNlKHJlcXVpcmVkRW52VmFyc0FycmF5LGF2YWlsYWJsZUVudlZhcnNBcnJheSk7XG59Il19 diff --git a/dist/qenv.plugins.d.ts b/dist/qenv.plugins.d.ts index 40ea398..b95162f 100644 --- a/dist/qenv.plugins.d.ts +++ b/dist/qenv.plugins.d.ts @@ -1,3 +1,5 @@ import "typings-global"; export import beautylog = require("beautylog"); +export declare let lodash: any; +export import path = require("path"); export import smartfile = require("smartfile"); diff --git a/dist/qenv.plugins.js b/dist/qenv.plugins.js index 6af8cba..c03a6e1 100644 --- a/dist/qenv.plugins.js +++ b/dist/qenv.plugins.js @@ -1,6 +1,8 @@ "use strict"; require("typings-global"); exports.beautylog = require("beautylog"); +exports.lodash = require("lodash"); +exports.path = require("path"); exports.smartfile = require("smartfile"); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInFlbnYucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ1YsaUJBQVMsV0FBVyxXQUFXLENBQUMsQ0FBQztBQUNqQyxpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDIiwiZmlsZSI6InFlbnYucGx1Z2lucy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInR5cGluZ3MtZ2xvYmFsXCI7XG5leHBvcnQgaW1wb3J0IGJlYXV0eWxvZyA9IHJlcXVpcmUoXCJiZWF1dHlsb2dcIik7XG5leHBvcnQgaW1wb3J0IHNtYXJ0ZmlsZSA9IHJlcXVpcmUoXCJzbWFydGZpbGVcIik7XG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInFlbnYucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ1YsaUJBQVMsV0FBVyxXQUFXLENBQUMsQ0FBQztBQUNwQyxjQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hCLFlBQUksV0FBVyxNQUFNLENBQUMsQ0FBQztBQUN2QixpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDIiwiZmlsZSI6InFlbnYucGx1Z2lucy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInR5cGluZ3MtZ2xvYmFsXCI7XG5leHBvcnQgaW1wb3J0IGJlYXV0eWxvZyA9IHJlcXVpcmUoXCJiZWF1dHlsb2dcIik7XG5leHBvcnQgbGV0IGxvZGFzaCA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7XG5leHBvcnQgaW1wb3J0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmV4cG9ydCBpbXBvcnQgc21hcnRmaWxlID0gcmVxdWlyZShcInNtYXJ0ZmlsZVwiKTtcbiJdfQ== diff --git a/package.json b/package.json index 9c2f0ce..b963290 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ }, "dependencies": { "beautylog": "^5.0.12", + "lodash": "^4.13.1", "q": "^1.4.1", "smartfile": "^3.0.10", "typings-global": "^1.0.3" diff --git a/test/test.ts b/test/test.ts new file mode 100644 index 0000000..e69de29 diff --git a/ts/index.ts b/ts/index.ts index fecad8d..cf395fa 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,16 +1,17 @@ import * as plugins from "./qenv.plugins"; export class qenv { - envVarsRequired:string[]; - envVarsAvailable:string[]; - envVarsMissing:string[]; - constructor(basePathArg = "./qenv.yml",envYmlPathArg){ - this.envVarsRequired = getEnvVarsRequired(basePathArg); - this.envVarsAvailable; + requiredEnvVars:string[]; + availableEnvVars:string[]; + missingEnvVars:string[]; + constructor(basePathArg = process.cwd(),envYmlPathArg){ + this.requiredEnvVars = getRequiredEnvVars(basePathArg); + this.availableEnvVars = getAvailableEnvVars(this.requiredEnvVars,envYmlPathArg); + this.missingEnvVars = getMissingEnvVars(this.requiredEnvVars,this.availableEnvVars); } }; -let getEnvVarsRequired = (pathArg:string):string[] => { +let getRequiredEnvVars = (pathArg:string):string[] => { let result:string[] = []; let qenvFilePath = plugins.path.join(pathArg,"qenv.yml"); let qenvFile = plugins.smartfile.local.toObjectSync(qenvFilePath); @@ -20,15 +21,27 @@ let getEnvVarsRequired = (pathArg:string):string[] => { return result; } -let getEnvVarsAvailable = (requiredEnvVarsArg:string[]):string[] => { +let getAvailableEnvVars = (requiredEnvVarsArg:string[],envYmlPathArg:string):string[] => { let result = []; + let envYml; + try { + envYml = plugins.smartfile.local.toObjectSync(envYmlPathArg); + } + catch(err){ + envYml = {}; + } for(let keyArg in requiredEnvVarsArg){ - let envVar = requiredEnvVarsArg[keyArg]; + let envVar:string = requiredEnvVarsArg[keyArg]; if(process.env[envVar]){ result.push(envVar); - } else { - + } else if(envYml.hasOwnPropery(envVar)){ + process.env[envVar] = envYml.envVar; + result.push(envVar); } } return result; +} + +let getMissingEnvVars = (requiredEnvVarsArray:string[],availableEnvVarsArray:string[]) => { + return plugins.lodash.difference(requiredEnvVarsArray,availableEnvVarsArray); } \ No newline at end of file diff --git a/ts/qenv.plugins.ts b/ts/qenv.plugins.ts index 18ecf52..686956e 100644 --- a/ts/qenv.plugins.ts +++ b/ts/qenv.plugins.ts @@ -1,4 +1,5 @@ import "typings-global"; export import beautylog = require("beautylog"); +export let lodash = require("lodash"); export import path = require("path"); export import smartfile = require("smartfile");