@mhy/config
Version:
> This documentation is not complete. It's in progress and it's a BETA version. Use the tool at your own risk.
106 lines (82 loc) • 3.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.loadProcess = exports.load = exports.indexTemplate = exports.moduleHome = void 0;
var _glob = _interopRequireDefault(require("glob"));
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _globalModules = _interopRequireDefault(require("global-modules"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
const environment = module.exports.environment = process.env.NODE_ENV;
const packageJSON = _path.default.resolve(process.cwd(), 'package.json');
const json = _fs.default.existsSync(packageJSON) ? JSON.parse(_fs.default.readFileSync(packageJSON, 'utf8')).mhy || {} : {};
const moduleHome = _path.default.resolve(__dirname);
exports.moduleHome = moduleHome;
const indexTemplatePath = 'src/index.html';
const indexTemplatePathProject = _path.default.resolve(process.cwd(), indexTemplatePath);
let indexTemplatePathMhy;
try {
indexTemplatePathMhy = _path.default.resolve(_globalModules.default, `@mhy/mhy/${indexTemplatePath}`);
} catch (e) {
indexTemplatePathMhy = _path.default.resolve(`${process.env.NPM_CONFIG_PREFIX}/lib/node_modules/@mhy/mhy/${indexTemplatePath}`);
}
const indexTemplate = _fs.default.existsSync(indexTemplatePathProject) ? indexTemplatePathProject : indexTemplatePathMhy;
exports.indexTemplate = indexTemplate;
const load = (module, defaults = {}) => {
applyEntries(module, 'root', defaults);
applyEntries(module, environment, defaults);
applyJSON(module, 'root', defaults);
applyJSON(module, environment, defaults);
return defaults;
};
exports.load = load;
const loadProcess = module => {
const d = {};
applyEntries(module, 'root', d, _path.default.join(__dirname, 'ecosystem', 'root', `${module}.js`));
applyEntries(module, environment, d, _path.default.join(__dirname, 'ecosystem', environment, `${module}.js`));
return d[module];
};
exports.loadProcess = loadProcess;
const applyEntries = (module, env, o, defaultEntries = _path.default.join(__dirname, module, env, '**/*')) => {
let entries = _glob.default.sync(defaultEntries, {
ignore: ['index.js'],
nodir: true
});
for (const entry of entries) {
const segments = entry.split(`/${env}/`)[1].split('/');
let tmp = o;
segments.forEach((v, k) => {
if (Array.isArray(tmp)) {// Value is array, no need to do anything with it
} else if (k < segments.length - 1) {
// It's not last item
tmp[v] = tmp[v] || {};
if (Array.isArray(tmp[v])) {
tmp[v] = tmp = require(entry).default(tmp[v]);
} else {
tmp = tmp[v];
}
} else {
// It's last item, require and execute default
v = v.replace('.js', '');
tmp[v] = require(entry).default(tmp[v]);
}
});
}
};
const applyJSON = (module, env, o, j) => {
try {
j = j || json[module][env] || {};
} catch (e) {
return;
}
for (const [k, v] of Object.entries(j)) {
if (!Array.isArray(v) && v instanceof Object) {
o[k] = o[k] || v || {};
applyJSON(module, env, o[k] || {}, v);
} else {
o[k] = v;
}
}
};