"use strict"; /** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.createMDXFallbackPlugin = exports.createBootstrapPlugin = void 0; const tslib_1 = require("tslib"); const path_1 = tslib_1.__importDefault(require("path")); /** * Make a synthetic plugin to: * - Inject site client modules * - Inject scripts/stylesheets */ function createBootstrapPlugin({ siteDir, siteConfig, }) { const { stylesheets, scripts, headTags, clientModules: siteConfigClientModules, } = siteConfig; return { name: 'docusaurus-bootstrap-plugin', content: null, options: { id: 'default', }, version: { type: 'synthetic' }, path: siteDir, getClientModules() { return siteConfigClientModules; }, injectHtmlTags: () => { const stylesheetsTags = stylesheets.map((source) => typeof source === 'string' ? `` : { tagName: 'link', attributes: { rel: 'stylesheet', ...source, }, }); const scriptsTags = scripts.map((source) => typeof source === 'string' ? `` : { tagName: 'script', attributes: { ...source, }, }); return { headTags: [...headTags, ...stylesheetsTags, ...scriptsTags], }; }, }; } exports.createBootstrapPlugin = createBootstrapPlugin; /** * Configure Webpack fallback mdx loader for md/mdx files out of content-plugin * folders. Adds a "fallback" mdx loader for mdx files that are not processed by * content plugins. This allows to do things such as importing repo/README.md as * a partial from another doc. Not ideal solution, but good enough for now */ function createMDXFallbackPlugin({ siteDir, siteConfig, }) { return { name: 'docusaurus-mdx-fallback-plugin', content: null, options: { id: 'default', }, version: { type: 'synthetic' }, // Synthetic, the path doesn't matter much path: '.', configureWebpack(config) { // We need the mdx fallback loader to exclude files that were already // processed by content plugins mdx loaders. This works, but a bit // hacky... Not sure there's a way to handle that differently in webpack function getMDXFallbackExcludedPaths() { const rules = config.module?.rules; return rules.flatMap((rule) => { const isMDXRule = rule.test instanceof RegExp && rule.test.test('x.mdx'); return isMDXRule ? rule.include : []; }); } const mdxLoaderOptions = { admonitions: true, staticDirs: siteConfig.staticDirectories.map((dir) => path_1.default.resolve(siteDir, dir)), siteDir, // External MDX files are always meant to be imported as partials isMDXPartial: () => true, // External MDX files might have front matter, just disable the warning isMDXPartialFrontMatterWarningDisabled: true, markdownConfig: siteConfig.markdown, }; return { module: { rules: [ { test: /\.mdx?$/i, exclude: getMDXFallbackExcludedPaths(), use: [ { loader: require.resolve('@docusaurus/mdx-loader'), options: mdxLoaderOptions, }, ], }, ], }, }; }, }; } exports.createMDXFallbackPlugin = createMDXFallbackPlugin;