import { UnistNode, UnistTree } from "types/unist" import { visit } from "unist-util-visit" export function rehypeNpmCommand() { return (tree: UnistTree) => { visit(tree, (node: UnistNode) => { if (node.type !== "element" || node?.tagName !== "pre") { return } // npm install. if (node.properties?.["__rawString__"]?.startsWith("npm install")) { const npmCommand = node.properties?.["__rawString__"] node.properties["__npmCommand__"] = npmCommand node.properties["__yarnCommand__"] = npmCommand.replace( "npm install", "yarn add" ) node.properties["__pnpmCommand__"] = npmCommand.replace( "npm install", "pnpm add" ) node.properties["__bunCommand__"] = npmCommand.replace( "npm install", "bun add" ) } // npx create. if (node.properties?.["__rawString__"]?.startsWith("npx create-")) { const npmCommand = node.properties?.["__rawString__"] node.properties["__npmCommand__"] = npmCommand node.properties["__yarnCommand__"] = npmCommand.replace( "npx create-", "yarn create " ) node.properties["__pnpmCommand__"] = npmCommand.replace( "npx create-", "pnpm create " ) node.properties["__bunCommand__"] = npmCommand.replace( "npx", "bunx --bun" ) } // npx. if ( node.properties?.["__rawString__"]?.startsWith("npx") && !node.properties?.["__rawString__"]?.startsWith("npx create-") ) { const npmCommand = node.properties?.["__rawString__"] node.properties["__npmCommand__"] = npmCommand node.properties["__yarnCommand__"] = npmCommand node.properties["__pnpmCommand__"] = npmCommand.replace( "npx", "pnpm dlx" ) node.properties["__bunCommand__"] = npmCommand.replace( "npx", "bunx --bun" ) } }) } }