vue-styleguidist
Version:
Vue components style guide generator
163 lines (151 loc) • 10.1 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = _default;
exports.pitch = pitch;
exports.pitchAsync = pitchAsync;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _pick = _interopRequireDefault(require("lodash/pick"));
var _commonDir = _interopRequireDefault(require("common-dir"));
var _escodegen = require("escodegen");
var _flatten = _interopRequireDefault(require("lodash/flatten"));
var _astTypes = require("ast-types");
var _toAst = _interopRequireDefault(require("to-ast"));
var _glogg = _interopRequireDefault(require("glogg"));
var fileExistsCaseInsensitive = _interopRequireWildcard(require("react-styleguidist/lib/scripts/utils/findFileCaseInsensitive"));
var _getAllContentPages = _interopRequireDefault(require("react-styleguidist/lib/loaders/utils/getAllContentPages"));
var _getComponentFilesFromSections = _interopRequireDefault(require("react-styleguidist/lib/loaders/utils/getComponentFilesFromSections"));
var _getComponentPatternsFromSections = _interopRequireDefault(require("react-styleguidist/lib/loaders/utils/getComponentPatternsFromSections"));
var _filterComponentsWithExample = _interopRequireDefault(require("react-styleguidist/lib/loaders/utils/filterComponentsWithExample"));
var _slugger = _interopRequireDefault(require("react-styleguidist/lib/loaders/utils/slugger"));
var _requireIt = _interopRequireDefault(require("react-styleguidist/lib/loaders/utils/requireIt"));
var _resolveESModule = _interopRequireDefault(require("react-styleguidist/lib/loaders/utils/resolveESModule"));
var _getSections = _interopRequireDefault(require("./utils/getSections"));
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 logger = (0, _glogg["default"])('rsg');
var STYLE_VARIABLE_NAME = '__vsgStyles';
var THEME_VARIABLE_NAME = '__vsgTheme';
// Config options that should be passed to the client
var CLIENT_CONFIG_OPTIONS = ['title', 'tocMode', 'version', 'showCode', 'showUsage', 'showSidebar', 'previewDelay', 'theme', 'styles', 'compilerConfig', 'editorConfig', 'ribbon', 'pagePerSection', 'mountPointId', 'jsxInExamples', 'jssThemedEditor', 'locallyRegisterComponents'];
// const emptyFunctionAst = {}
// Object.defineProperty(emptyFunctionAst, 'toAST', {
// enumerable: false,
// value() {
// return builders.arrowFunctionExpression([], builders.arrowFunctionExpression([], b.blockStatement([])));
// }
// });
function _default() {}
function pitch() {
var callback = this.async();
var cb = callback ? callback : function () {
return null;
};
pitchAsync.call(this).then(function (res) {
return cb(undefined, res);
})["catch"](function (e) {
throw e;
});
}
function pitchAsync() {
return _pitchAsync.apply(this, arguments);
}
function _pitchAsync() {
_pitchAsync = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var _this = this;
var config, allComponentFiles, sections, allContentPages, welcomeScreen, patterns, renderRootJsx, enhancePreviewApp, configClone, styleContext, setVariableValueToObjectInFile, styleguide;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
// Clear cache so it would detect new or renamed files
fileExistsCaseInsensitive.clearCache();
// Reset slugger for each code reload to be deterministic
_slugger["default"].reset();
config = this._styleguidist;
if (config.sections) {
_context.next = 5;
break;
}
return _context.abrupt("return", '');
case 5:
allComponentFiles = (0, _getComponentFilesFromSections["default"])(config.sections, config.configDir, config.ignore);
_context.next = 8;
return (0, _getSections["default"])(config.sections, {
config: config,
componentFiles: allComponentFiles
});
case 8:
sections = _context.sent;
if (config.skipComponentsWithoutExample) {
sections = (0, _filterComponentsWithExample["default"])(sections);
}
allContentPages = (0, _getAllContentPages["default"])(sections); // Nothing to show in the style guide
welcomeScreen = allContentPages.length === 0 && allComponentFiles.length === 0;
patterns = welcomeScreen ? (0, _getComponentPatternsFromSections["default"])(config.sections) : undefined;
renderRootJsx = config.renderRootJsx ? (0, _requireIt["default"])(config.renderRootJsx) : undefined;
enhancePreviewApp = config.enhancePreviewApp ? (0, _requireIt["default"])(config.enhancePreviewApp) : function () {
return function () {};
};
logger.debug('Loading components:\n' + allComponentFiles.join('\n'));
// Setup Webpack context dependencies to enable hot reload when adding new files
if (config.contextDependencies) {
config.contextDependencies.forEach(function (dir) {
return _this.addContextDependency(dir);
});
} else if (allComponentFiles.length > 0) {
// Use common parent directory of all components as a context
this.addContextDependency((0, _commonDir["default"])(allComponentFiles));
}
configClone = _objectSpread({}, config);
styleContext = [];
setVariableValueToObjectInFile = function setVariableValueToObjectInFile(memberName, varName) {
var configMember = config[memberName];
if (typeof configMember === 'string') {
// first attach the file as a dependency
_this.addDependency(configMember);
// then create a variable to contain the value of the theme/style
styleContext.push((0, _resolveESModule["default"])(configMember, varName));
// Finally assign the calculated value to the member of the clone
// NOTE: if we are mutating the config object without cloning it,
// it changes the value for all hmr iteration
// until the process is stopped.
var variableAst = {};
// Then override the `toAST()` function, because we know
// what the output of it should be, an identifier
Object.defineProperty(variableAst, 'toAST', {
enumerable: false,
value: function value() {
return _astTypes.builders.identifier(varName);
}
});
configClone[memberName] = variableAst;
}
};
setVariableValueToObjectInFile('styles', STYLE_VARIABLE_NAME);
setVariableValueToObjectInFile('theme', THEME_VARIABLE_NAME);
styleguide = {
config: (0, _pick["default"])(configClone, CLIENT_CONFIG_OPTIONS),
welcomeScreen: welcomeScreen,
patterns: patterns,
sections: sections,
renderRootJsx: renderRootJsx,
enhancePreviewApp: enhancePreviewApp
};
return _context.abrupt("return", "".concat((0, _escodegen.generate)(_astTypes.builders.program((0, _flatten["default"])(styleContext))), "\nif (module.hot) {\n\tmodule.hot.accept([])\n}\n\nmodule.exports = ").concat((0, _escodegen.generate)((0, _toAst["default"])(styleguide)), "\n"));
case 24:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return _pitchAsync.apply(this, arguments);
}