@godspeedsystems/core
Version:
> 4th Generation Declarative Microservice Framework
122 lines (121 loc) • 5.27 kB
JavaScript
/*
* You are allowed to study this software for learning and local * development purposes only. Any other use without explicit permission by Mindgrep, is prohibited.
* © 2022 Mindgrep Technologies Pvt Ltd
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _fs = /*#__PURE__*/ _interop_require_wildcard(require("fs"));
const _process = /*#__PURE__*/ _interop_require_wildcard(require("process"));
const _jsyaml = /*#__PURE__*/ _interop_require_wildcard(require("js-yaml"));
const _logger = require("../logger");
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _getRequireWildcardCache(nodeInterop) {
if (typeof WeakMap !== "function") return null;
var cacheBabelInterop = new WeakMap();
var cacheNodeInterop = new WeakMap();
return (_getRequireWildcardCache = function(nodeInterop) {
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
})(nodeInterop);
}
function _interop_require_wildcard(obj, nodeInterop) {
if (!nodeInterop && obj && obj.__esModule) {
return obj;
}
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
return {
default: obj
};
}
var cache = _getRequireWildcardCache(nodeInterop);
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {
__proto__: null
};
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
for(var key in obj){
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
function iterate_yaml_directories(current_yaml_root) {
var recursive_object_state = {};
// list down all directories and iterate back on child directories
var files = _fs.readdirSync(current_yaml_root);
files = files.sort(function(a, b) {
return b.split('.').length - a.split('.').length;
});
//To determine the yaml property for which the current iteration is for
const current_property = _path.default.basename(current_yaml_root);
if (!recursive_object_state.hasOwnProperty(current_property)) recursive_object_state[current_property] = {};
for (const file of files){
let temp_obj;
if (file.endsWith('.yaml') || file.endsWith('.yml') || file.endsWith('.json')) {
try {
temp_obj = _jsyaml.load(_fs.readFileSync(current_yaml_root + '/' + file, {
encoding: 'utf-8'
}));
} catch (err) {
_logger.logger.error(`Error while loading ${file}: ${err}`);
_process.exit(1);
}
if (temp_obj) {
const temp_obj_keys = Object.keys(temp_obj);
for(var key in temp_obj_keys){
key = temp_obj_keys[key];
if (file == 'index.yaml' || file == 'index.yml' || file == 'index.json') {
recursive_object_state[current_property][key] = temp_obj[key];
} else {
const file_name = file.slice(0, -5);
if (!recursive_object_state[current_property].hasOwnProperty(file_name)) {
recursive_object_state[current_property][file_name] = {};
}
recursive_object_state[current_property][file_name][key] = temp_obj[key];
}
}
}
} else if (!file.endsWith('.yaml')) {
if (file.includes('.') || current_yaml_root.includes('node_modules')) continue;
const next_yaml_root = current_yaml_root + '/' + file;
const intermediate_object_state = iterate_yaml_directories(next_yaml_root);
const intermediate_object_state_keys = Object.keys(intermediate_object_state);
for(var key in intermediate_object_state_keys){
key = intermediate_object_state_keys[key];
if (!recursive_object_state[current_property].hasOwnProperty(key)) recursive_object_state[current_property][key] = {};
recursive_object_state[current_property][key] = intermediate_object_state[key];
}
}
}
return recursive_object_state;
}
const _default = iterate_yaml_directories;
if (require.main === module) {
var relative_config_root = _process.argv.slice(2)[0];
var nested_yaml_result = iterate_yaml_directories(relative_config_root);
_logger.logger.info('yaml object %o', nested_yaml_result);
_logger.logger.info('object as string %s', JSON.stringify(nested_yaml_result, null, 2));
}