vue-styleguidist
Version:
Vue components style guide generator
66 lines (63 loc) • 4 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = processComponent;
var fs = _interopRequireWildcard(require("fs"));
var path = _interopRequireWildcard(require("path"));
var _getNameFromFilePath = _interopRequireDefault(require("react-styleguidist/lib/loaders/utils/getNameFromFilePath"));
var _requireIt = _interopRequireDefault(require("react-styleguidist/lib/loaders/utils/requireIt"));
var _slugger = _interopRequireDefault(require("react-styleguidist/lib/loaders/utils/slugger"));
var _parseVue2 = _interopRequireDefault(require("./parseVue"));
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 vueDocLoader = path.resolve(__dirname, '../vuedoc-loader.js');
/**
* References the filepath of the metadata file.
*
* @param {string} filepath
* @returns {object}
*/
function getComponentMetadataPath(filepath) {
var ext = path.extname(filepath);
return filepath.substring(0, filepath.length - ext.length) + '.json';
}
/**
* Return an object with all required for style guide information for a given component.
*
* @param {string} filepath
* @param {object} config
* @returns {object}
*/
function processComponent(filepath, config, subComponentPaths, ignoreExample) {
var componentPath = path.relative(config.configDir || '', filepath);
var componentName = (0, _getNameFromFilePath["default"])(filepath);
var props = (0, _requireIt["default"])("!!".concat(vueDocLoader).concat(ignoreExample ? '?noExample=1' : '', "!").concat(filepath));
var examplesFile = config.getExampleFilename(filepath);
var componentMetadataPath = getComponentMetadataPath(filepath);
var hasExamplesFile = examplesFile && fs.existsSync(examplesFile);
var hasInternalExamples = false;
if (!hasExamplesFile && fs.existsSync(filepath)) {
var _parseVue = (0, _parseVue2["default"])(fs.readFileSync(filepath, 'utf8')),
customBlocks = _parseVue.customBlocks;
hasInternalExamples = (customBlocks === null || customBlocks === void 0 ? void 0 : customBlocks.findIndex(function (p) {
return p.type === 'docs';
})) >= 0;
}
var hasExamples = hasExamplesFile || hasInternalExamples;
var subComponents = subComponentPaths && subComponentPaths.length ? subComponentPaths.map(function (subFilePath) {
return processComponent(subFilePath, config, undefined, true);
}) : undefined;
return {
filepath: componentPath,
slug: _slugger["default"].slug(componentName),
pathLine: config.getComponentPathLine(componentPath),
module: (0, _requireIt["default"])(filepath),
props: props,
hasExamples: hasExamples,
metadata: fs.existsSync(componentMetadataPath) ? (0, _requireIt["default"])(componentMetadataPath) : {},
subComponents: subComponents
};
}