diff --git a/.changeset/sweet-pillows-explode.md b/.changeset/sweet-pillows-explode.md new file mode 100644 index 000000000..c10213cbc --- /dev/null +++ b/.changeset/sweet-pillows-explode.md @@ -0,0 +1,5 @@ +--- +'rocket-preset-extend-lion-docs': patch +--- + +feat: allow globalReplaceFunction in rocket-preset-extend-lion-docs diff --git a/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md b/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md index 69ce48c26..c51fb40e8 100644 --- a/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +++ b/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md @@ -246,3 +246,40 @@ In order for such imports to work you need to define them "#tabs/define": "./__element-definitions/wolf-tabs.js", } ``` + +## Global replacements + +Sometimes you need a bit more power when extending lion documentation. +For instance, you're extending repository has a different folder structure. Instead of putting your systems +documentation inside 'systems', you want to put it in 'web-systems'. + +The configuration for that is (see `globalReplaceFunction`): + +👉 _rocket.config.js_ + +```js +import { rocketLaunch } from '@rocket/launch'; +import { extendLionDocs } from 'rocket-preset-extend-lion-docs'; + +const extendLionDocsInstance = await extendLionDocs({ + classPrefix: 'Wolf', + classBareImport: 'wolf-web/', + tagPrefix: 'wolf-', + tagBareImport: 'wolf-web/', + globalReplaceFunction: node => { + if (node.type === 'link') { + // All internal links to '/systems/' (like '(../../fundamentals/systems/overlays/configuration.md)'), + // will be changed into '/web-systems/' ('(../../fundamentals/web-systems/overlays/configuration.md)'). + node.url = node.url.replace(/\systems\/g, '/web-systems/'); + } + return node; + } +}); + +export default { + presets: [rocketLaunch(), extendLionDocsInstance], +}; +``` + +Remember: with great power comes great responsibility, so make sure your replacements do not introduce unintended +effects. diff --git a/packages-node/rocket-preset-extend-lion-docs/preset/extendLionDocs.js b/packages-node/rocket-preset-extend-lion-docs/preset/extendLionDocs.js index c48e1b0b2..50b2dc447 100644 --- a/packages-node/rocket-preset-extend-lion-docs/preset/extendLionDocs.js +++ b/packages-node/rocket-preset-extend-lion-docs/preset/extendLionDocs.js @@ -1,6 +1,5 @@ import path from 'path'; import { fileURLToPath } from 'url'; - import { addPlugin } from 'plugins-manager'; // @ts-ignore import remarkExtendPkg from 'remark-extend'; @@ -23,6 +22,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); * @param {string} opts.tagBareImport * @param {string} opts.tagBareImport * @param {string} [opts.exportsMapJsonFileName] + * @param {function} [opts.globalReplaceFunction] a remark-extend replace function that is executed on all markdown ast nodes * @returns */ export async function extendLionDocs({ @@ -34,6 +34,7 @@ export async function extendLionDocs({ tagPrefix, tagBareImport, exportsMapJsonFileName, + globalReplaceFunction, }) { const changes = await generateExtendDocsConfig({ nodeModulesDir, @@ -55,7 +56,7 @@ export async function extendLionDocs({ setupUnifiedPlugins: [ addPlugin( remarkExtendPkg.remarkExtend, - {}, + { globalReplaceFunction }, { location: markdownPkg, },