vue-styleguidist
Version:
Vue components style guide generator
86 lines (83 loc) • 4.12 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = getConfig;
var fs = _interopRequireWildcard(require("fs"));
var path = _interopRequireWildcard(require("path"));
var _findup = _interopRequireDefault(require("findup"));
var _isString = _interopRequireDefault(require("lodash/isString"));
var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
var _error = _interopRequireDefault(require("react-styleguidist/lib/scripts/utils/error"));
var _sanitizeConfig = _interopRequireDefault(require("react-styleguidist/lib/scripts/utils/sanitizeConfig"));
var _config = _interopRequireDefault(require("./schemas/config"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(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 = {}; 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; }
var CONFIG_FILENAME = 'styleguide.config.js';
/**
* Read, parse and validate config file or passed config.
*
* @param {object|string} [config] All config options or config file name or nothing.
* @param {function} [update] Change config object before running validation on it.
* @returns {object}
*/
function getConfig(configParam, update) {
var configFilepath;
var config;
if ((0, _isString["default"])(configParam)) {
// Load config from a given file
configFilepath = path.resolve(process.cwd(), configParam);
if (!fs.existsSync(configFilepath)) {
throw new _error["default"]('Styleguidist config not found: ' + configFilepath + '.');
}
config = {};
} else if (!(0, _isPlainObject["default"])(configParam)) {
// Try to read config options from a file
configFilepath = findConfigFile();
config = {};
} else {
config = configParam;
}
if (typeof configFilepath === 'string') {
config = require(configFilepath);
}
var configDir = typeof configFilepath === 'string' ? path.dirname(configFilepath) : process.cwd();
if (typeof config === 'function') {
return config().then(function (conf) {
return postTreatConfig(configDir, conf, update);
});
}
return postTreatConfig(configDir, config, update);
}
function postTreatConfig(configDir, config, update) {
if (update) {
config = update(config);
}
if (config.serverPort && (0, _isString["default"])(config.serverPort)) {
config.serverPort = parseInt(config.serverPort);
}
try {
return (0, _sanitizeConfig["default"])(config, _config["default"], configDir);
} catch (exception) {
var err = exception;
// eslint-disable-next-line no-console
console.log(exception instanceof _error["default"], err.constructor.name);
throw err.message;
}
}
/**
* Try to find config file up the file tree.
*
* @return {string|boolean} Config absolute file path.
*/
function findConfigFile() {
var configDir;
try {
configDir = _findup["default"].sync(process.cwd(), CONFIG_FILENAME);
} catch (exception) {
return false;
}
return path.join(configDir, CONFIG_FILENAME);
}