UNPKG

@yeutech-lab/rollup-umd-documentation

Version:

Quickly build awesome documentation for your rollup-umd project.

230 lines (193 loc) 16.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.config = exports.yeutechFavicon = exports.webpackMerge = exports.jsonExtension = exports.wrapperBase = exports.layoutRendererBase = exports.srcBase = exports.styleguideBase = exports.licenseBase = exports.pkg = exports.pkgBase = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports.default = createConfig; var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _webpack = require('webpack'); var _webpack2 = _interopRequireDefault(_webpack); var _miniHtmlWebpackPlugin = require('mini-html-webpack-plugin'); var _webpackMerge = require('webpack-merge'); var _webpackMerge2 = _interopRequireDefault(_webpackMerge); var _parseAuthor = require('parse-author'); var _parseAuthor2 = _interopRequireDefault(_parseAuthor); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } /* eslint-disable global-require */ var cwd = process.cwd(); var pkgBase = exports.pkgBase = _fs2.default.existsSync(_path2.default.join(cwd, 'package.json')) ? _path2.default.join(cwd) : _path2.default.join(__dirname, '..'); var pkgDoc = {}; var pkgDocSupposedPath = _path2.default.join(__dirname, '../package.json'); if (_fs2.default.existsSync(pkgDocSupposedPath)) { pkgDoc = require(pkgDocSupposedPath); } var pkg = exports.pkg = require(_path2.default.join(pkgBase, 'package.json')); var licenseBase = exports.licenseBase = _fs2.default.existsSync(_path2.default.join(cwd, 'LICENSE.md')) ? _path2.default.join(cwd, 'LICENSE.md') : _path2.default.join(__dirname, '../LICENSE.md'); var license = pkgBase.license; // eslint-disable-line prefer-destructuring if (_fs2.default.existsSync(licenseBase)) { license = _fs2.default.readFileSync(licenseBase, { encoding: 'utf8' }).split('\n')[0]; // eslint-disable-line prefer-destructuring } else { console.error('LICENSE.md is missing'); } var styleguideBase = exports.styleguideBase = _fs2.default.existsSync(_path2.default.join(cwd, 'styleguide')) ? _path2.default.join(cwd, 'styleguide') : _path2.default.join(__dirname); var srcBase = exports.srcBase = _fs2.default.existsSync(_path2.default.join(cwd, 'src')) ? _path2.default.join(cwd, 'src') : _path2.default.join(__dirname, '../lib'); var layoutRendererBase = exports.layoutRendererBase = _fs2.default.existsSync(_path2.default.join(cwd, 'styleguide/components/LayoutRenderer.js')) ? _path2.default.join(cwd, 'styleguide/components/LayoutRenderer.js') : _path2.default.join(__dirname, '../lib/components/LayoutRenderer.js'); var wrapperBase = exports.wrapperBase = _fs2.default.existsSync(_path2.default.join(cwd, 'styleguide/components/Wrapper.js')) ? _path2.default.join(cwd, 'styleguide/components/Wrapper.js') : _path2.default.join(__dirname, '../lib/components/Wrapper.js'); /* eslint-disable no-nested-ternary */ var jsonExtension = exports.jsonExtension = _fs2.default.existsSync(_path2.default.join(cwd, 'styleguide/styleguide.ext.json')) ? require(_path2.default.join(cwd, 'styleguide/styleguide.ext.json')) : _fs2.default.existsSync(_path2.default.join(__dirname, '../styleguide/styleguide.ext.json')) ? require(_path2.default.join(__dirname, '../styleguide/styleguide.ext.json')) : {}; var preloaders = { yeutech: require('./preloaders/yeutech') }; /** * export webpack merge util * @type {merge} */ var webpackMerge = exports.webpackMerge = _webpackMerge2.default; var yeutechFavicon = exports.yeutechFavicon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC\n' + 'HUlEQVQ4jXWRP0jVcRTFP/f+vu+9fNrDpEjBqCVoEGsocWmJ/iKZEDWEU38QEocwWsSWmmpyrIjG\n' + 'sL9QgxThUA0O1aKDJIWYmv/ylT7z/ft9b4OK+nrvwF3uOZx7LkcogcFjJxSRFhP5VP+mb6yUTksR\n' + 'mO0BekSkY7DpdEldUWLwyFGHWSdmtcBF4EApA3m+tzm6u/J3RSziPSKgCs7Vo/oa1QTOgeoznGvH\n' + 'uSzOgXP8nI34mV9BymXzGp9Y2Pp017bF7ZHAdDV+FZBYPyMtQB2QDz1+ZlL96Ljciye474amdy6E\n' + 'xsuR5N+euuo5X51YdsH/SZ0h+5YW1H8fjfgfU24s6+XFzZEHPviQ+2yNkYbhZCZ2fHi+qnY+U5ZP\n' + 'lOV8PBqqqGCi5LKBnxyLhd++RiW5EIg3uWbIQH/ui8naiY5Y+8mMad+yBYiD/TVJf6gm6UkJs1Mx\n' + 'XUw7TVtA2oL3eZOm66lHKQAH0Fl2VbOe6JrZUs7xbrRaJ6bLORyb1ZzfVJYrUqPFVay78PF0XpX1\n' + 'kCtKaAyRltvllxVAu+JtGmAXBA4WGhhSuAJQb9LtV1tSsLhil4CZDZMCWPKb0s6v8QaV3jjfFW9T\n' + 'B5IGzmxUhiYNQK+HLQCCvRW4AmQ3pEuvcEXQHNyIZkwf7ggyrWcrxlN59NS5ZO/Hov8UW74K72RD\n' + '5K5icwpPBAaK6aCgkgIMRcXfWvSuv/XP43wp0T84kNcr9/KNuQAAAABJRU5ErkJggg=='; var defaultOptions = { lang: 'en', preloader: 'yeutech', favicon: yeutechFavicon }; var config = exports.config = createConfig(); function createConfig() { var _alias; var userConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var userWebpackConfig = userConfig.webpackConfig, restUserConfig = _objectWithoutProperties(userConfig, ['webpackConfig']); var opts = _extends({}, defaultOptions, options); return _extends({ serverPort: process.env.NODE_PORT ? parseInt(process.env.NODE_PORT, 10) : 6060, // eslint-disable-line radix styleguideDir: 'public', components: 'src/components/**/[A-Z]*.js', previewDelay: 500, skipComponentsWithoutExample: false, exampleMode: 'collapse', usageMode: 'expand', showSidebar: true, styles: {}, template: function template(_ref) { var css = _ref.css, js = _ref.js, title = _ref.title, publicPath = _ref.publicPath; return '<!DOCTYPE html>\n <html' + (opts.lang && ' lang="' + opts.lang + '"') + '>\n <head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0" />\n <meta name="description" content="' + pkg.description + '">\n ' + (pkg.keywords && pkg.keywords.length > 0 ? '<meta name="keywords" content="' + pkg.keywords.join(',') + '">' : '') + '\n <meta name="author" content="' + (0, _parseAuthor2.default)(pkg.author).name + '">\n ' + (license ? '<meta name="copyright" content="' + license + '" />' : '') + '\n ' + (pkg.contributor && pkg.contributor.length > 0 ? '<meta name="contributor" content="' + pkg.contributor.map(function (c) { return (0, _parseAuthor2.default)(c).name; }).join(',') + '">' : '') + '\n ' + (pkg.private === undefined ? '<meta name="robots" content="index,follow"/>' : '' /* undefined means the package is public */) + '\n ' + (pkg.private === false ? '<meta name="robots" content="nofollow"/>' : '<meta name="robots" content="noindex, nofollow"/>' /* false means release in private, true means never released */) + '\n ' + (pkg.name !== pkgDoc.name ? '<meta name="rollup-documentation-version" content="' + pkgDoc.version + '">\n<meta name="version" content="' + pkg.version + '">' : '<meta name="version" content="' + pkg.version + '">') + '\n ' + (opts.favicon ? '<link rel="icon" type="image/x-icon" href="' + opts.favicon + '">' : '') + '\n <link href="https://fonts.googleapis.com/css?family=Quicksand" rel="stylesheet">\n <title>' + title + '</title>\n ' + (0, _miniHtmlWebpackPlugin.generateCSSReferences)(css, publicPath) + '\n </head>\n <body>\n <div id="rsg-root">' + preloaders[opts.preloader] + '</div>\n ' + (0, _miniHtmlWebpackPlugin.generateJSReferences)(js, publicPath) + '\n </body>\n </html>'; }, theme: {}, title: pkg.name, verbose: false, version: pkg.version, webpackConfig: webpackMerge({ plugins: [new _webpack2.default.SourceMapDevToolPlugin({ filename: '[file].map', exclude: ['node_modules/**/*.js'] })], resolve: { alias: (_alias = { $PACKAGE_NAME: _path2.default.resolve(pkgBase) }, _defineProperty(_alias, pkg.name, _path2.default.resolve(pkgBase)), _defineProperty(_alias, 'styleguide', _path2.default.resolve(styleguideBase)), _alias) }, module: { rules: [ // Babel loader, will use your project’s .babelrc { test: /\.jsx?$/, exclude: /node_modules/, include: [_path2.default.resolve(srcBase), _path2.default.resolve(styleguideBase)], loader: 'babel-loader' }, { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: 'url-loader?limit=10000&mimetype=application/font-woff' }, { test: /\.(ttf|otf|eot|svg)(\?v=[a-z0-9]\.[a-z0-9]\.[a-z0-9])?$/, include: /node_modules/, use: [{ loader: 'file-loader', options: { outputPath: 'fonts', publicPath: 'fonts' } }] }] } }, userWebpackConfig), styleguideComponents: { // components StyleGuideRenderer: layoutRendererBase, Wrapper: wrapperBase, // rsg-bs-components ArgumentRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Argument/ArgumentRenderer.js'), ArgumentsRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Arguments/ArgumentsRenderer.js'), CodeRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Code/CodeRenderer.js'), ComponentsRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Components/ComponentsRenderer.js'), ComponentsList: _path2.default.join(__dirname, '../lib/rsg-bs-components/ComponentsList/ComponentsList.js'), ComponentsListRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/ComponentsList/ComponentsListRenderer.js'), Editor: _path2.default.join(__dirname, '../lib/rsg-bs-components/Editor/Editor.js'), EditorLoaderRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Editor/EditorLoaderRenderer.js'), ErrorRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Error/ErrorRenderer.js'), ExamplePlaceholderRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/ExamplePlaceholder/ExamplePlaceholderRenderer.js'), ExamplesRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Examples/ExamplesRenderer.js'), HeadingRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Heading/HeadingRenderer.js'), LinkRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Link/LinkRenderer.js'), LogoRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Logo/LogoRenderer.js'), Markdown: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown'), Blockquote: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/Blockquote'), BlockquoteRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/Blockquote/BlockquoteRenderer.js'), Checkbox: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/Checkbox'), CheckboxRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/Checkbox/CheckboxRenderer.js'), Hr: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/Hr'), HrRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/Hr/HrRenderer.js'), JsDoc: _path2.default.join(__dirname, '../lib/rsg-bs-components/JsDoc'), List: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/List'), ListRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/List/ListRenderer.js'), MarkdownHeading: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/MarkdownHeading'), MarkdownHeadingRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/MarkdownHeading/MarkdownHeadingRenderer.js'), Pre: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/Pre'), PreRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/Pre/PreRenderer.js'), TableHeadRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/Table/TableHeadRenderer.js'), TableBodyRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/Table/TableBodyRenderer.js'), TableRowRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/Table/TableRowRenderer.js'), TableCellRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Markdown/Table/TableCellRenderer.js'), MessageRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Message/MessageRenderer.js'), MethodsRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Methods/MethodsRenderer.js'), NameRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Name/NameRenderer.js'), ParaRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Para/ParaRenderer.js'), PathlineRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Pathline/PathlineRenderer.js'), PlaygroundRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Playground/PlaygroundRenderer.js'), PlaygroundErrorRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/PlaygroundError/PlaygroundErrorRenderer.js'), ReactComponentRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/ReactComponent/ReactComponentRenderer.js'), RibbonRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Ribbon/RibbonRenderer.js'), SectionRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Section/SectionRenderer.js'), SectionHeadingRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/SectionHeading/SectionHeadingRenderer.js'), SectionsRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Sections/SectionsRenderer.js'), slots: _path2.default.join(__dirname, '../lib/rsg-bs-components/slots'), TabButtonRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/TabButton/TabButtonRenderer.js'), TableRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Table/TableRenderer.js'), TableOfContents: _path2.default.join(__dirname, '../lib/rsg-bs-components/TableOfContents/TableOfContents'), TableOfContentsRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/TableOfContents/TableOfContentsRenderer.js'), TextRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Text/TextRenderer.js'), ToolbarButtonRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/ToolbarButton/ToolbarButtonRenderer.js'), TypeRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Type/TypeRenderer.js'), Usage: _path2.default.join(__dirname, '../lib/rsg-bs-components/Usage/Usage.js'), VersionRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Version/VersionRenderer.js'), WelcomeRenderer: _path2.default.join(__dirname, '../lib/rsg-bs-components/Welcome/WelcomeRenderer.js') }, getComponentPathLine: function getComponentPathLine(componentPath) { var name = _path2.default.basename(componentPath, '.js'); var dir = name === 'index' ? _path2.default.dirname(componentPath) : _path2.default.dirname(componentPath) + '/' + name; name = name === 'index' ? _path2.default.basename(dir) : name; return 'import ' + name + ' from \'' + pkg.name + '/' + dir.replace(/^src\//, 'lib/') + '\';'; } }, jsonExtension, restUserConfig); }