feat(rocket-preset-extend-lion-docs): allow globalReplaceFunction

This commit is contained in:
Thijs Louisse 2022-06-09 14:33:43 +02:00 committed by Thijs Louisse
parent 63f8f6fd36
commit f46d908769
3 changed files with 45 additions and 2 deletions

View file

@ -0,0 +1,5 @@
---
'rocket-preset-extend-lion-docs': patch
---
feat: allow globalReplaceFunction in rocket-preset-extend-lion-docs

View file

@ -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.

View file

@ -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,
},