UNPKG

fumadocs-core

Version:

The React.js library for building a documentation website

68 lines (66 loc) 1.65 kB
import { generateCodeBlockTabs } from "./codeblock-utils.js"; import { visit } from "unist-util-visit"; import convert from "npm-to-yarn"; //#region src/mdx-plugins/remark-npm.ts const aliases = ["npm", "package-install"]; /** * It generates multiple tabs of codeblocks for different package managers from a npm command codeblock. */ function remarkNpm({ persist = false, packageManagers = [ { command: (cmd) => convert(cmd, "npm"), name: "npm" }, { command: (cmd) => convert(cmd, "pnpm"), name: "pnpm" }, { command: (cmd) => convert(cmd, "yarn"), name: "yarn" }, { command: (cmd) => convert(cmd, "bun"), name: "bun" } ] } = {}) { return (tree) => { visit(tree, "code", (node) => { if (!node.lang || !aliases.includes(node.lang)) return; let code = node.value; if (node.lang === "package-install" && !code.startsWith("npm") && !code.startsWith("npx")) code = `npm install ${code}`; const options = { persist, tabs: [], triggers: [] }; for (const manager of packageManagers) { const value = manager.value ?? manager.name; const command = manager.command(code); if (!command || command.length === 0) continue; options.defaultValue ??= value; options.triggers.push({ value, children: [{ type: "text", value: manager.name }] }); options.tabs.push({ value, children: [{ type: "code", lang: "bash", meta: node.meta, value: command }] }); } Object.assign(node, generateCodeBlockTabs(options)); return "skip"; }); }; } //#endregion export { remarkNpm }; //# sourceMappingURL=remark-npm.js.map