UNPKG

vue-styleguidist

Version:
215 lines (213 loc) 12.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = _default; exports.vuedocLoader = vuedocLoader; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var fs = _interopRequireWildcard(require("fs")); var path = _interopRequireWildcard(require("path")); var _util = require("util"); var _escodegen = require("escodegen"); var _toAst = _interopRequireDefault(require("to-ast")); var _glogg = _interopRequireDefault(require("glogg")); var _loaderUtils = _interopRequireDefault(require("loader-utils")); var _sortProps = _interopRequireDefault(require("react-styleguidist/lib/loaders/utils/sortProps")); var _requireIt = _interopRequireDefault(require("react-styleguidist/lib/loaders/utils/requireIt")); var _getExamples = _interopRequireDefault(require("./utils/getExamples")); var _getComponentVueDoc = _interopRequireDefault(require("./utils/getComponentVueDoc")); var _findOrigins = _interopRequireDefault(require("./utils/findOrigins")); var _stripOutOrigins = _interopRequireDefault(require("./utils/stripOutOrigins")); var _getParser = _interopRequireDefault(require("./utils/getParser")); var _consts = _interopRequireDefault(require("../scripts/consts")); var _alreadyLoadedExamplesCache = _interopRequireDefault(require("./utils/already-loaded-examples-cache")); 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; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var exists = (0, _util.promisify)(fs.exists); var logger = (0, _glogg["default"])('rsg'); var examplesLoader = path.resolve(__dirname, './examples-loader.js'); function _default(source) { var callback = this.async(); var cb = callback ? callback : function () { return null; }; vuedocLoader.call(this, source).then(function (res) { return cb(undefined, res); })["catch"](function (e) { throw e; }); } function makeObject(set) { if (!set) { return undefined; } return set.reduce(function (acc, item) { acc[item.name] = item; return acc; }, {}); } function vuedocLoader(_x) { return _vuedocLoader.apply(this, arguments); } function _vuedocLoader() { _vuedocLoader = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(source) { var _this = this; var file, config, _ref, _ref$noExample, noExample, propsParser, getVsgDocs, vsgDocs, componentVueDoc, isComponentDocInVueFile, ignoreExamplesInFile, examples, examplePaths, examplesFile, relativeFile; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: file = this.request.split('!').pop(); config = this._styleguidist; _ref = _loaderUtils["default"].getOptions(this) || {}, _ref$noExample = _ref.noExample, noExample = _ref$noExample === void 0 ? false : _ref$noExample; // Setup Webpack context dependencies to enable hot reload when adding new files or updating any of component dependencies if (config.contextDependencies) { config.contextDependencies.forEach(function (dir) { return _this.addContextDependency(dir); }); } propsParser = (0, _getParser["default"])(config); getVsgDocs = /*#__PURE__*/function () { var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(internalFile) { var docs, componentPath, originFiles, basedir, inSideVsgDocs, filteredProps, sortProps; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: docs = { displayName: '', exportName: '', tags: {} }; _context.prev = 1; _context.next = 4; return propsParser(internalFile); case 4: docs = _context.sent; _context.next = 11; break; case 7: _context.prev = 7; _context.t0 = _context["catch"](1); componentPath = path.relative(process.cwd(), internalFile); logger.warn("Error parsing ".concat(componentPath, ": ").concat(_context.t0)); case 11: // set dependency tree for mixins and extends originFiles = (0, _findOrigins["default"])(docs); basedir = path.dirname(internalFile); originFiles.forEach(function (extensionFile) { _this.addDependency(path.join(basedir, extensionFile)); }); // strip out origins if config is set to false to // keep origins from displaying if (!config.displayOrigins) { (0, _stripOutOrigins["default"])(docs); } inSideVsgDocs = _objectSpread(_objectSpread({}, docs), {}, { events: makeObject(docs.events), slots: makeObject(docs.slots) }); if (docs.props) { filteredProps = docs.props.filter(function (prop) { return !prop.tags || !prop.tags.ignore; }); sortProps = config.sortProps || _sortProps["default"]; inSideVsgDocs.props = filteredProps ? sortProps(filteredProps) : undefined; } return _context.abrupt("return", inSideVsgDocs); case 18: case "end": return _context.stop(); } } }, _callee, null, [[1, 7]]); })); return function getVsgDocs(_x2) { return _ref2.apply(this, arguments); }; }(); _context2.next = 8; return getVsgDocs(file); case 8: vsgDocs = _context2.sent; // examples componentVueDoc = (0, _getComponentVueDoc["default"])(source, file); isComponentDocInVueFile = !!componentVueDoc; ignoreExamplesInFile = noExample; if (componentVueDoc) { vsgDocs.example = (0, _requireIt["default"])("!!".concat(examplesLoader, "?customLangs=vue|js|jsx!").concat(file)); } else if (vsgDocs.tags) { examples = vsgDocs.tags.examples; if (examples) { examplePaths = examples.map(function (a) { return a.content; }); if (examplePaths[0] === '[none]') { ignoreExamplesInFile = true; } else { vsgDocs.example = examplePaths.map(function (p) { return (0, _requireIt["default"])("!!".concat(examplesLoader, "?customLangs=vue|js|jsx!").concat(p)); }); } } } if (ignoreExamplesInFile) { _context2.next = 28; break; } examplesFile = config.getExampleFilename ? config.getExampleFilename(file) : false; _context2.t0 = examplesFile; if (!_context2.t0) { _context2.next = 20; break; } _context2.next = 19; return exists(examplesFile); case 19: _context2.t0 = _context2.sent; case 20: if (!_context2.t0) { _context2.next = 24; break; } if (process.env.NODE_ENV !== 'production' && examplesFile && global) { if (_alreadyLoadedExamplesCache["default"][examplesFile]) { relativeFile = path.relative(process.cwd(), file); if (_alreadyLoadedExamplesCache["default"][examplesFile] !== relativeFile) { logger.warn('\n\n' + "".concat(path.relative(process.cwd(), examplesFile), "\n") + "this file is used by multiple components.\n" + " - ".concat(_alreadyLoadedExamplesCache["default"][examplesFile], "\n") + " - ".concat(relativeFile, "\n") + 'It will be displayed more than once in the styleguide\n' + 'Check out this cookbook receipe to solve the issue\n' + "".concat(_consts["default"].DOCS_COOKBOOK, "#i-have-multiple-components-in-the-same-folder-what-can-i-do\n")); } } else { _alreadyLoadedExamplesCache["default"][examplesFile] = path.relative(process.cwd(), file); } } _context2.next = 25; break; case 24: examplesFile = false; case 25: vsgDocs.examples = (0, _getExamples["default"])(file, examplesFile, vsgDocs.displayName, config.defaultExample, isComponentDocInVueFile); _context2.next = 29; break; case 28: vsgDocs.examples = [{ type: 'noexample' }]; case 29: if (config.updateDocs) { vsgDocs = config.updateDocs(vsgDocs, file); } return _context2.abrupt("return", "\n\t\tif (module.hot) {\n\t\t\tmodule.hot.accept([])\n\t\t}\n\n\t\tmodule.exports = ".concat((0, _escodegen.generate)((0, _toAst["default"])(vsgDocs)), "\n\t")); case 31: case "end": return _context2.stop(); } } }, _callee2, this); })); return _vuedocLoader.apply(this, arguments); }