configuru
Version:
Manage the configuration of your Nodejs application with multiple environments and custom preferences, utilizing Configuru in CI and development as well!
73 lines • 2.71 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createLoader = exports.createAtomLoaderFactory = void 0;
var helpers_1 = require("./helpers");
var storage_1 = require("./storage");
var defaultOpts = {
defaultConfigPath: '.env',
userConfigPath: process.env.CFG_JSON_PATH,
envMode: 'default',
};
var createAtomLoaderFactory = function (storage) {
var load = function (transform, hidden, nullable) {
return function (key) {
var value = storage[key];
var safeTransform = function (x) {
try {
return transform(x);
}
catch (_error) {
throw new Error("Failed to transform value >".concat(String(value), "< from key >").concat(key, "<"));
}
};
var missing = value === undefined || value === null;
if (!nullable && missing) {
throw new Error("Missing required value ".concat(key));
}
return {
hidden: hidden,
nullable: nullable,
rawValue: value,
value: missing ? null : safeTransform(value),
__CONFIGURU_LEAF: true,
};
};
};
return function (transform) {
return Object.assign(load(transform, false, false), {
hidden: Object.assign(load(transform, true, false), {
nullable: load(transform, true, true),
}),
nullable: Object.assign(load(transform, false, true), {
hidden: load(transform, true, true),
}),
});
};
};
exports.createAtomLoaderFactory = createAtomLoaderFactory;
var createLoader = function (opts) {
if (opts === void 0) { opts = defaultOpts; }
opts = __assign(__assign({}, defaultOpts), opts);
var configStorage = (0, storage_1.createConfigStorage)(opts);
var atomLoader = (0, exports.createAtomLoaderFactory)(configStorage);
return {
number: atomLoader(Number),
string: atomLoader(String),
bool: atomLoader(helpers_1.parseBool),
json: atomLoader(JSON.parse),
custom: function (fn) { return atomLoader(fn); },
};
};
exports.createLoader = createLoader;
//# sourceMappingURL=loader.js.map