UNPKG

@mui/internal-docs-infra

Version:

MUI Infra - internal documentation creation tools.

175 lines (162 loc) 8.1 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; // Define minimal NextConfig type to avoid importing from 'next' // Define webpack options interface based on Next.js webpack function signature /** * Get default MDX options for docs-infra */ export function getDocsInfraMdxOptions() { var _customOptions$remark, _customOptions$additi, _customOptions$rehype, _customOptions$additi2; var customOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var defaultRemarkPlugins = [['remark-gfm'], ['@mui/internal-docs-infra/pipeline/transformMarkdownCode']]; var defaultRehypePlugins = [['@mui/internal-docs-infra/pipeline/transformHtmlCodePrecomputed']]; // Build final plugin arrays var remarkPlugins = (_customOptions$remark = customOptions.remarkPlugins) != null ? _customOptions$remark : [].concat(defaultRemarkPlugins, _toConsumableArray((_customOptions$additi = customOptions.additionalRemarkPlugins) != null ? _customOptions$additi : [])); var rehypePlugins = (_customOptions$rehype = customOptions.rehypePlugins) != null ? _customOptions$rehype : [].concat(defaultRehypePlugins, _toConsumableArray((_customOptions$additi2 = customOptions.additionalRehypePlugins) != null ? _customOptions$additi2 : [])); return { remarkPlugins: remarkPlugins, rehypePlugins: rehypePlugins }; } /** * Next.js plugin for MUI docs infrastructure. * Configures webpack loaders, turbopack rules for docs sites. * Use getDocsInfraMdxOptions() with createMDX for MDX integration. */ export function withDocsInfra() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _options$additionalPa = options.additionalPageExtensions, additionalPageExtensions = _options$additionalPa === void 0 ? [] : _options$additionalPa, _options$enableExport = options.enableExportOutput, enableExportOutput = _options$enableExport === void 0 ? true : _options$enableExport, _options$demoPathPatt = options.demoPathPattern, demoPathPattern = _options$demoPathPatt === void 0 ? './app/**/demos/*/index.ts' : _options$demoPathPatt, _options$clientDemoPa = options.clientDemoPathPattern, clientDemoPathPattern = _options$clientDemoPa === void 0 ? './app/**/demos/*/client.ts' : _options$clientDemoPa, _options$additionalDe = options.additionalDemoPatterns, additionalDemoPatterns = _options$additionalDe === void 0 ? {} : _options$additionalDe, _options$additionalTu = options.additionalTurbopackRules, additionalTurbopackRules = _options$additionalTu === void 0 ? {} : _options$additionalTu, _options$deferCodePar = options.deferCodeParsing, deferCodeParsing = _options$deferCodePar === void 0 ? 'gzip' : _options$deferCodePar; var output = 'hastGzip'; if (deferCodeParsing === 'json') { output = 'hastJson'; } else if (deferCodeParsing === 'none') { output = 'hast'; } return function () { var _nextConfig$turbopack; var nextConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var basePageExtensions = ['js', 'jsx', 'md', 'mdx', 'ts', 'tsx']; var pageExtensions = [].concat(basePageExtensions, _toConsumableArray(additionalPageExtensions)); // Build Turbopack rules var turbopackRules = _defineProperty(_defineProperty({}, demoPathPattern, { loaders: [{ loader: '@mui/internal-docs-infra/pipeline/loadPrecomputedCodeHighlighter', options: { output: output } }] }), clientDemoPathPattern, { loaders: ['@mui/internal-docs-infra/pipeline/loadPrecomputedCodeHighlighterClient'] }); // Add additional demo patterns to Turbopack rules if (additionalDemoPatterns.index) { additionalDemoPatterns.index.forEach(function (pattern) { turbopackRules[pattern] = { loaders: [{ loader: '@mui/internal-docs-infra/pipeline/loadPrecomputedCodeHighlighter', options: { output: output } }] }; }); } if (additionalDemoPatterns.client) { additionalDemoPatterns.client.forEach(function (pattern) { turbopackRules[pattern] = { loaders: ['@mui/internal-docs-infra/pipeline/loadPrecomputedCodeHighlighterClient'] }; }); } // Merge with additional turbopack rules Object.assign(turbopackRules, additionalTurbopackRules); var config = _extends(_extends(_extends({}, nextConfig), {}, { pageExtensions: pageExtensions }, enableExportOutput && { output: 'export' }), {}, { turbopack: _extends(_extends({}, nextConfig.turbopack), {}, { rules: _extends(_extends({}, (_nextConfig$turbopack = nextConfig.turbopack) == null ? void 0 : _nextConfig$turbopack.rules), turbopackRules) }), webpack: function webpack(webpackConfig, webpackOptions) { // Call existing webpack function if it exists if (nextConfig.webpack) { webpackConfig = nextConfig.webpack(webpackConfig, webpackOptions); } // Ensure module and rules exist if (!webpackConfig.module) { webpackConfig.module = {}; } if (!webpackConfig.module.rules) { webpackConfig.module.rules = []; } var defaultLoaders = webpackOptions.defaultLoaders; // Add loader for demo index files webpackConfig.module.rules.push({ test: new RegExp('/demos/[^/]+/index\\.ts$'), use: [defaultLoaders.babel, { loader: '@mui/internal-docs-infra/pipeline/loadPrecomputedCodeHighlighter', options: { output: output } }] }); // Client files for live demos - processes externals webpackConfig.module.rules.push({ test: new RegExp('/demos/[^/]+/client\\.ts$'), use: [defaultLoaders.babel, '@mui/internal-docs-infra/pipeline/loadPrecomputedCodeHighlighterClient'] }); // Add webpack rules for additional demo patterns if (additionalDemoPatterns.index) { additionalDemoPatterns.index.forEach(function (pattern) { // Convert Turbopack pattern to webpack regex var regexPattern = pattern.replace(/^\.\//, '/') // Remove leading ./ .replace(/\*\*\//g, 'DOUBLE_STAR_PLACEHOLDER') // Replace **/ with placeholder .replace(/\*/g, '[^/]+') // Replace single * with single dir pattern .replace(/\./g, '\\.') // Escape dots .replace(/DOUBLE_STAR_PLACEHOLDER/g, '(?:[^/]+/)*'); // Replace placeholder with zero or more directories webpackConfig.module.rules.push({ test: new RegExp("".concat(regexPattern, "$")), use: [defaultLoaders.babel, { loader: '@mui/internal-docs-infra/pipeline/loadPrecomputedCodeHighlighter', options: { output: output } }] }); }); } if (additionalDemoPatterns.client) { additionalDemoPatterns.client.forEach(function (pattern) { // Convert Turbopack pattern to webpack regex var regexPattern = pattern.replace(/^\.\//, '/') // Remove leading ./ .replace(/\*\*\//g, 'DOUBLE_STAR_PLACEHOLDER') // Replace **/ with placeholder .replace(/\*/g, '[^/]+') // Replace single * with single dir pattern .replace(/\./g, '\\.') // Escape dots .replace(/DOUBLE_STAR_PLACEHOLDER/g, '(?:[^/]+/)*'); // Replace placeholder with zero or more directories webpackConfig.module.rules.push({ test: new RegExp("".concat(regexPattern, "$")), use: [defaultLoaders.babel, '@mui/internal-docs-infra/pipeline/loadPrecomputedCodeHighlighterClient'] }); }); } return webpackConfig; } }); return config; }; }