@creditkarma/dynamic-config
Version:
Dynamic Config for Node.js backed by Consul and Vault
124 lines • 3.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createConfigObject = exports.buildBaseConfigValue = exports.nullValueForPlaceholder = exports.invalidValueForPlaceholder = void 0;
const basic_1 = require("./basic");
const ConfigUtils = require("./config");
function invalidValueForPlaceholder(placeholder) {
return {
source: {
type: placeholder.resolver.type,
name: placeholder.resolver.name,
key: placeholder.key,
},
type: 'invalid',
value: null,
watcher: null,
nullable: placeholder.nullable || false,
};
}
exports.invalidValueForPlaceholder = invalidValueForPlaceholder;
function nullValueForPlaceholder(placeholder) {
return {
source: {
type: placeholder.resolver.type,
name: placeholder.resolver.name,
key: placeholder.key,
},
type: 'null',
value: null,
watcher: null,
nullable: placeholder.nullable || false,
};
}
exports.nullValueForPlaceholder = nullValueForPlaceholder;
function buildBaseConfigValue(source, obj, nullable = false) {
const objType = typeof obj;
if (obj instanceof Promise) {
return {
source,
type: 'promise',
value: obj,
watcher: null,
nullable,
};
}
else if (ConfigUtils.isConfigPlaceholder(obj)) {
return {
source,
type: 'placeholder',
value: obj,
watcher: null,
nullable,
};
}
else if (Array.isArray(obj)) {
return {
source,
type: 'array',
items: obj.reduce((acc, next) => {
acc.push(buildBaseConfigValue({
type: source.type,
name: source.name,
}, next));
return acc;
}, []),
watcher: null,
nullable,
};
}
else if ((0, basic_1.isObject)(obj)) {
return {
source,
type: 'object',
properties: Object.keys(obj).reduce((acc, next) => {
acc[next] = buildBaseConfigValue({
type: source.type,
name: source.name,
}, obj[next]);
return acc;
}, {}),
watcher: null,
nullable,
};
}
else if ((0, basic_1.isPrimitiveType)(objType)) {
return {
source,
type: objType,
value: obj,
watcher: null,
nullable,
};
}
else if (obj === null || obj === undefined) {
return {
source,
type: 'null',
value: null,
watcher: null,
nullable,
};
}
else {
throw new TypeError(`Cannot build config from object of type[${objType}]`);
}
}
exports.buildBaseConfigValue = buildBaseConfigValue;
function createConfigObject(source, obj) {
if ((0, basic_1.isObject)(obj)) {
const configObj = {
type: 'root',
properties: {},
watcher: null,
};
for (const key of Object.keys(obj)) {
configObj.properties[key] = buildBaseConfigValue(source, obj[key]);
}
return configObj;
}
else {
throw new TypeError(`Config value must be an object, instead found type[${typeof obj}]`);
}
}
exports.createConfigObject = createConfigObject;
//# sourceMappingURL=config-builder.js.map