UNPKG

@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
"use strict"; 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; } } };