claire-framework
Version:
- được viết bằng TypeScript - hỗ trợ websocket và HTTP request - hỗ trợ CLI để generate base project (claire-cli)
81 lines • 6.83 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const AbstractEnvProvider_1 = require("../environment/AbstractEnvProvider");
const ClaireError_1 = require("../system/ClaireError");
const core_1 = require("../decorator/core");
const errors_1 = require("../system/errors");
class DefaultEnvProvider extends AbstractEnvProvider_1.AbstractEnvProvider {
constructor() {
super();
}
load(templateClass) {
if (!this.envVariables) {
this.envVariables = {};
if (!process.env.NODE_ENV) {
throw "NODE_ENV not set.";
}
this.currentEnv = process.env.NODE_ENV;
if (this.envFilePath && this.fileNameResolver) {
this.envFilePath = path_1.default.join(this.envFilePath, this.fileNameResolver(this.currentEnv));
}
if (!templateClass.prototype || !templateClass.prototype[core_1.METADATA]) {
throw "Invalid env prototype. Make sure to use the @Env() decorator.";
}
let env;
if (this.envFilePath) {
try {
env = require(this.envFilePath);
}
catch (err) {
throw new ClaireError_1.ClaireError(errors_1.FILE_ACCESS_ERROR, this.envFilePath);
}
//-- list all properties of env
let keys = Object.keys(env);
if (!keys || !keys.length) {
throw new ClaireError_1.ClaireError(errors_1.INVALID_ENV_FILE, this.envFilePath);
}
let envVars = env[keys[0]];
let envKeys = Object.keys(envVars);
//-- set values from env file
envKeys.forEach((key) => {
this.envVariables[key] = envVars[key];
});
}
//-- set value from environment variables
let allKeys = Object.keys(templateClass.prototype[core_1.METADATA]);
allKeys.forEach((key) => {
let envValue = process.env[key];
if (envValue !== undefined) {
switch (templateClass.prototype[core_1.METADATA][key]) {
case "Number":
let numberValue = Number(envValue);
if (isNaN(numberValue)) {
throw new ClaireError_1.ClaireError(errors_1.INVALID_NUMERIC_VALUE, `${key}: ${envValue}`);
}
this.envVariables[key] = numberValue;
break;
case "Boolean":
this.envVariables[key] = envValue === "true";
break;
case "String":
this.envVariables[key] = envValue;
break;
}
}
});
//-- check again for missing value
allKeys.forEach((key) => {
if (this.envVariables[key] === undefined) {
throw `Env var not set for key: ${key}`;
}
});
}
return this.envVariables;
}
}
exports.DefaultEnvProvider = DefaultEnvProvider;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdEVudlByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2RlZmF1bHQtaW1wbGVtZW50YXRpb25zL0RlZmF1bHRFbnZQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdEQUF3QjtBQUN4Qiw0RUFBdUU7QUFDdkUsdURBQWtEO0FBQ2xELDRDQUEyQztBQUMzQyw2Q0FJMEI7QUFFMUIsTUFBYSxrQkFBbUIsU0FBUSx5Q0FBbUI7SUFFdkQ7UUFDSSxLQUFLLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTSxJQUFJLENBQUksYUFBdUM7UUFFbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFFcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFFdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFO2dCQUN2QixNQUFNLG1CQUFtQixDQUFDO2FBQzdCO1lBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUV2QyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7YUFDMUY7WUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsZUFBUSxDQUFDLEVBQUU7Z0JBQ2hFLE1BQU0sK0RBQStELENBQUM7YUFDekU7WUFFRCxJQUFJLEdBQUcsQ0FBQztZQUNSLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSTtvQkFDQSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENB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