node-yaml-config
Version:
Write your configuration files for node.js in yaml
72 lines • 2.59 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DEFAULT_CONFIG_LOADER = exports.ConfigLoader = void 0;
const fs_1 = require("fs");
const js_yaml_1 = require("js-yaml");
const extend = require("node.extend");
const path_1 = require("path");
const util_1 = require("util");
const readFile = (0, util_1.promisify)(fs_1.readFile);
class ConfigLoader {
constructor(options) {
this.options = options;
this.loadedFiles = {};
}
read(filename) {
const path = this.getPath(filename);
const data = (0, js_yaml_1.load)((0, fs_1.readFileSync)(path, { encoding: 'utf-8' }));
this.loadedFiles[path] = data;
return data;
}
load(filename, env) {
const path = this.getPath(filename);
let data;
if (this.loadedFiles.hasOwnProperty(path)) {
data = this.loadedFiles[path];
}
else {
data = this.read(filename);
}
const _env = env || process.env.NODE_ENV || 'development';
const defaultConfig = data.default || {};
const extensionConfig = data[_env] || {};
return extend(true, extend(true, {}, defaultConfig), extensionConfig);
}
reload(filename, env) {
this.read(filename);
return this.load(filename, env);
}
async readAsync(filename) {
const path = this.getPath(filename);
const data = (0, js_yaml_1.load)(await readFile(path, { encoding: 'utf-8' }));
this.loadedFiles[path] = data;
return data;
}
async loadAsync(filename, env) {
const path = this.getPath(filename);
let data;
if (this.loadedFiles.hasOwnProperty(path)) {
data = this.loadedFiles[path];
}
else {
data = await this.readAsync(filename);
}
const _env = env || process.env.NODE_ENV || 'development';
const defaultConfig = data.default || {};
const extensionConfig = data[_env] || {};
return extend(true, extend(true, {}, defaultConfig), extensionConfig);
}
async reloadAsync(filename, env) {
await this.readAsync(filename);
return this.loadAsync(filename, env);
}
getPath(filename) {
if (this.options == undefined || this.options.basePath == undefined) {
return (0, path_1.resolve)(filename);
}
return (0, path_1.resolve)(this.options.basePath, filename);
}
}
exports.ConfigLoader = ConfigLoader;
exports.DEFAULT_CONFIG_LOADER = new ConfigLoader();
//# sourceMappingURL=config-loader.js.map