mirror of
https://github.com/hanzo-docs/docs.git
synced 2026-10-26 23:49:51 +00:00
Core: Support bun in remark-install plugin
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"fumadocs-core": patch
|
||||
---
|
||||
|
||||
Support `bun` in `remark-install` plugin
|
||||
@@ -15,7 +15,6 @@
|
||||
"@next/env": "^14.1.4",
|
||||
"algoliasearch": "^4.23.2",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "^2.1.0",
|
||||
"fumadocs-core": "workspace:*",
|
||||
"fumadocs-mdx": "workspace:*",
|
||||
"fumadocs-twoslash": "workspace:^",
|
||||
|
||||
@@ -122,6 +122,7 @@
|
||||
"github-slugger": "^2.0.0",
|
||||
"hast-util-to-estree": "^3.1.0",
|
||||
"negotiator": "^0.6.3",
|
||||
"npm-to-yarn": "^2.2.1",
|
||||
"react-remove-scroll": "^2.5.9",
|
||||
"remark": "^15.0.0",
|
||||
"remark-gfm": "^4.0.0",
|
||||
|
||||
@@ -1,11 +1,16 @@
|
||||
import type { Code, Root } from 'mdast';
|
||||
import type { Transformer } from 'unified';
|
||||
import { visit } from 'unist-util-visit';
|
||||
import convert from 'npm-to-yarn';
|
||||
|
||||
type PackageManager = (name: string) => {
|
||||
packageManager: string;
|
||||
command: string;
|
||||
};
|
||||
interface PackageManager {
|
||||
name: string;
|
||||
|
||||
/**
|
||||
* Convert from npm to another package manager
|
||||
*/
|
||||
command: (command: string) => string;
|
||||
}
|
||||
|
||||
export type RemarkInstallOptions = Partial<{
|
||||
Tabs: string;
|
||||
@@ -13,12 +18,13 @@ export type RemarkInstallOptions = Partial<{
|
||||
packageManagers: PackageManager[];
|
||||
}>;
|
||||
|
||||
// todo: Extract to separate package
|
||||
/**
|
||||
* It generates the following structure from a code block with `package-install` as language
|
||||
*
|
||||
* @example
|
||||
* ```tsx
|
||||
* <Tabs items={["pnpm", "npm", "yarn"]}>
|
||||
* <Tabs items={["npm", "pnpm", "yarn", "bun"]}>
|
||||
* <Tab value="pnpm">...</Tab>
|
||||
* ...
|
||||
* </Tabs>
|
||||
@@ -28,16 +34,19 @@ export function remarkInstall({
|
||||
Tab = 'Tab',
|
||||
Tabs = 'Tabs',
|
||||
packageManagers = [
|
||||
(name) => ({ command: `npm install ${name}`, packageManager: 'npm' }),
|
||||
(name) => ({ command: `pnpm add ${name}`, packageManager: 'pnpm' }),
|
||||
(name) => ({ command: `yarn add ${name}`, packageManager: 'yarn' }),
|
||||
{ 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' },
|
||||
],
|
||||
}: RemarkInstallOptions = {}): Transformer<Root, Root> {
|
||||
return (tree) => {
|
||||
visit(tree, 'code', (node) => {
|
||||
if (node.lang !== 'package-install') return 'skip';
|
||||
|
||||
const managers = packageManagers.map((manager) => manager(node.value));
|
||||
const value = node.value.startsWith('npm')
|
||||
? node.value
|
||||
: `npm install ${node.value}`;
|
||||
|
||||
const insert = {
|
||||
type: 'mdxJsxFlowElement',
|
||||
@@ -55,9 +64,9 @@ export function remarkInstall({
|
||||
type: 'ExpressionStatement',
|
||||
expression: {
|
||||
type: 'ArrayExpression',
|
||||
elements: managers.map(({ packageManager }) => ({
|
||||
elements: packageManagers.map(({ name }) => ({
|
||||
type: 'Literal',
|
||||
value: packageManager,
|
||||
value: name,
|
||||
})),
|
||||
},
|
||||
},
|
||||
@@ -67,17 +76,15 @@ export function remarkInstall({
|
||||
},
|
||||
},
|
||||
],
|
||||
children: managers.map(({ command, packageManager }) => ({
|
||||
children: packageManagers.map(({ command, name }) => ({
|
||||
type: 'mdxJsxFlowElement',
|
||||
name: Tab,
|
||||
attributes: [
|
||||
{ type: 'mdxJsxAttribute', name: 'value', value: packageManager },
|
||||
],
|
||||
attributes: [{ type: 'mdxJsxAttribute', name: 'value', value: name }],
|
||||
children: [
|
||||
{
|
||||
type: 'code',
|
||||
lang: 'bash',
|
||||
value: command,
|
||||
value: command(value),
|
||||
} satisfies Code,
|
||||
],
|
||||
})),
|
||||
|
||||
+9
-1
@@ -8,7 +8,7 @@ function _createMdxContent(props) {
|
||||
if (!Tab) _missingMdxReference("Tab", true);
|
||||
if (!Tabs) _missingMdxReference("Tabs", true);
|
||||
return _jsxs(Tabs, {
|
||||
items: ["npm", "pnpm", "yarn"],
|
||||
items: ["npm", "pnpm", "yarn", "bun"],
|
||||
children: [_jsx(Tab, {
|
||||
value: "npm",
|
||||
children: _jsx(_components.pre, {
|
||||
@@ -33,6 +33,14 @@ function _createMdxContent(props) {
|
||||
children: "yarn add next\n"
|
||||
})
|
||||
})
|
||||
}), _jsx(Tab, {
|
||||
value: "bun",
|
||||
children: _jsx(_components.pre, {
|
||||
children: _jsx(_components.code, {
|
||||
className: "language-bash",
|
||||
children: "bun add next\n"
|
||||
})
|
||||
})
|
||||
})]
|
||||
});
|
||||
}
|
||||
|
||||
@@ -102,7 +102,6 @@
|
||||
"@radix-ui/react-tabs": "^1.0.4",
|
||||
"@tailwindcss/typography": "^0.5.12",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "^2.1.0",
|
||||
"cmdk": "^1.0.0",
|
||||
"fumadocs-core": "workspace:*",
|
||||
"lucide-react": "^0.363.0",
|
||||
|
||||
Generated
+36
-35
@@ -1,9 +1,5 @@
|
||||
lockfileVersion: '6.0'
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
overrides:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
remark-rehype: ^11.0.0
|
||||
@@ -61,9 +57,6 @@ importers:
|
||||
class-variance-authority:
|
||||
specifier: ^0.7.0
|
||||
version: 0.7.0
|
||||
clsx:
|
||||
specifier: ^2.1.0
|
||||
version: 2.1.0
|
||||
fumadocs-core:
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/core
|
||||
@@ -296,6 +289,9 @@ importers:
|
||||
negotiator:
|
||||
specifier: ^0.6.3
|
||||
version: 0.6.3
|
||||
npm-to-yarn:
|
||||
specifier: ^2.2.1
|
||||
version: 2.2.1
|
||||
react:
|
||||
specifier: '>= 18'
|
||||
version: 18.2.0
|
||||
@@ -658,9 +654,6 @@ importers:
|
||||
class-variance-authority:
|
||||
specifier: ^0.7.0
|
||||
version: 0.7.0
|
||||
clsx:
|
||||
specifier: ^2.1.0
|
||||
version: 2.1.0
|
||||
cmdk:
|
||||
specifier: ^1.0.0
|
||||
version: 1.0.0(@types/[email protected])(@types/[email protected])([email protected])([email protected])
|
||||
@@ -1364,6 +1357,10 @@ packages:
|
||||
peerDependencies:
|
||||
'@effect-ts/otel-node': '*'
|
||||
peerDependenciesMeta:
|
||||
'@effect-ts/core':
|
||||
optional: true
|
||||
'@effect-ts/otel':
|
||||
optional: true
|
||||
'@effect-ts/otel-node':
|
||||
optional: true
|
||||
dependencies:
|
||||
@@ -1401,7 +1398,7 @@ packages:
|
||||
resolution: {integrity: sha512-47gAg0O2pW5Jlo86jfzjdkwL5a7Bzb+Kj5WTmdu4CxYRfWn9ytKjuuYIfsNDW8neuhdKzn+P5wCddgEh0glYyQ==}
|
||||
peerDependencies:
|
||||
'@effect-ts/core': ^0.60.2
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': ^1.4.0
|
||||
'@opentelemetry/core': ^1.13.0
|
||||
'@opentelemetry/exporter-trace-otlp-grpc': ^0.39.0
|
||||
'@opentelemetry/sdk-trace-base': ^1.13.0
|
||||
@@ -1417,7 +1414,7 @@ packages:
|
||||
resolution: {integrity: sha512-a2sF0ylmn8xOJs8fNeT/spJ1gUcsksAJCALxo9WOfuTCMtTwMVtVhCKEPEeQoL7wFqU+JgPkVdP91+FJ/Rkeow==}
|
||||
peerDependencies:
|
||||
'@effect-ts/core': ^0.60.2
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': ^1.4.0
|
||||
'@opentelemetry/core': ^1.13.0
|
||||
'@opentelemetry/sdk-trace-base': ^1.13.0
|
||||
'@opentelemetry/sdk-trace-node': ^1.13.0
|
||||
@@ -1433,7 +1430,7 @@ packages:
|
||||
resolution: {integrity: sha512-AmZJHl7t0+Peh7Yb2+hqn6r9+rd9/UfeA4AMV9h0YGTdOyouyFfD3wzWlxnAUzAQ4Lrod4kC7Noruret4EpqpA==}
|
||||
peerDependencies:
|
||||
'@effect-ts/core': ^0.60.2
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': ^1.4.0
|
||||
'@opentelemetry/core': ^1.13.0
|
||||
'@opentelemetry/sdk-trace-base': ^1.13.0
|
||||
dependencies:
|
||||
@@ -2251,7 +2248,7 @@ packages:
|
||||
resolution: {integrity: sha512-bDIRCgpKniSyhORU0fTL9ISW6ucU9nruKyXKwYrEBep/2f3uLz8LFyF51ZUK9QxIwBHw6WJudK/2UqttWzER4w==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.0.0 <1.7.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
|
||||
@@ -2259,7 +2256,7 @@ packages:
|
||||
resolution: {integrity: sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.0.0 <1.5.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
'@opentelemetry/semantic-conventions': 1.13.0
|
||||
@@ -2268,7 +2265,7 @@ packages:
|
||||
resolution: {integrity: sha512-tfnl3h+UefCgx1aeN2xtrmr6BmdWGKXypk0pflQR0urFS40aE88trnkOMc2HTJZbMrqEEl4HsaBeFhwLVXsrJg==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.0.0 <1.7.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
'@opentelemetry/semantic-conventions': 1.17.0
|
||||
@@ -2277,7 +2274,7 @@ packages:
|
||||
resolution: {integrity: sha512-l5RhLKx6U+yuLhMrtgavTDthX50E1mZM3/SSySC7OPZiArFHV/b/9x9jxAzrOgIQUDxyj4N0V9aLKSA2t7Qzxg==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': ^1.0.0
|
||||
dependencies:
|
||||
'@grpc/grpc-js': 1.9.3
|
||||
'@opentelemetry/api': 1.6.0
|
||||
@@ -2291,7 +2288,7 @@ packages:
|
||||
resolution: {integrity: sha512-Pv5X8fbi6jD/RJBePyn7MnCSuE6MbPB6dl+7YYBWJ5RcMGYMwvLXjd4h2jWsPV2TSUg38H/RoSP0aXvQ06Y7iw==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': ^1.0.0
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
'@opentelemetry/core': 1.13.0(@opentelemetry/[email protected])
|
||||
@@ -2300,7 +2297,7 @@ packages:
|
||||
resolution: {integrity: sha512-u3ErFRQqQFKjjIMuwLWxz/tLPYInfmiAmSy//fGSCzCh2ZdJgqQjMOAxBgqFtCF2xFL+OmMhyuC2ThMzceGRWA==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': ^1.0.0
|
||||
dependencies:
|
||||
'@grpc/grpc-js': 1.9.3
|
||||
'@opentelemetry/api': 1.6.0
|
||||
@@ -2312,7 +2309,7 @@ packages:
|
||||
resolution: {integrity: sha512-0hgVnXXz5efI382B/24NxD4b6Zxlh7nxCdJkxkdmQMbn0yRiwoq/ZT+QG8eUL6JNzsBAV1WJlF5aJNsL8skHvw==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.3.0 <1.5.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
'@opentelemetry/api-logs': 0.39.1
|
||||
@@ -2326,7 +2323,7 @@ packages:
|
||||
resolution: {integrity: sha512-oklstXImtaly4vDaL+rGtX41YXZR50jp5a7CSEPMcStp1B7ozdZ5G2I5wftrDvOlOcLt/TIkGWDCr/OkVN7kWg==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.0.0 <1.7.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
'@opentelemetry/core': 1.17.0(@opentelemetry/[email protected])
|
||||
@@ -2335,7 +2332,7 @@ packages:
|
||||
resolution: {integrity: sha512-iZzu8K0QkZZ16JH9yox6hZk7/Rxc4SPeGU37pvlB9DtzfNxAEX1FMK9zvowv3ve7r2uzZNpa7JGVUwpy5ewdHQ==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.0.0 <1.7.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
'@opentelemetry/core': 1.17.0(@opentelemetry/[email protected])
|
||||
@@ -2344,7 +2341,7 @@ packages:
|
||||
resolution: {integrity: sha512-euqjOkiN6xhjE//0vQYGvbStxoD/WWQRhDiO0OTLlnLBO9Yw2Gd/VoSx2H+svsebjzYk5OxLuREBmcdw6rbUNg==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.0.0 <1.5.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
'@opentelemetry/core': 1.13.0(@opentelemetry/[email protected])
|
||||
@@ -2354,7 +2351,7 @@ packages:
|
||||
resolution: {integrity: sha512-+u0ciVnj8lhuL/qGRBPeVYvk7fL+H/vOddfvmOeJaA1KC+5/3UED1c9KoZQlRsNT5Kw1FaK8LkY2NVLYfOVZQw==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.0.0 <1.7.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
'@opentelemetry/core': 1.17.0(@opentelemetry/[email protected])
|
||||
@@ -2364,7 +2361,7 @@ packages:
|
||||
resolution: {integrity: sha512-/gmgKfZ1ZVFporKuwsewqIyvaUIGpv76JZ7lBpHQQPb37IMpaXO6pdqFI4ebHAWfNIm3akMyhmdtzivcgF3lgw==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.4.0 <1.5.0'
|
||||
'@opentelemetry/api-logs': '>=0.38.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
@@ -2376,7 +2373,7 @@ packages:
|
||||
resolution: {integrity: sha512-MOjZX6AnSOqLliCcZUrb+DQKjAWXBiGeICGbHAGe5w0BB18PJIeIo995lO5JSaFfHpmUMgJButTPfJJD27W3Vg==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.3.0 <1.5.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
'@opentelemetry/core': 1.13.0(@opentelemetry/[email protected])
|
||||
@@ -2387,7 +2384,7 @@ packages:
|
||||
resolution: {integrity: sha512-moTiQtc0uPR1hQLt6gLDJH9IIkeBhgRb71OKjNHZPE1VF45fHtD6nBDi5J/DkTHTwYP5X3kBJLa3xN7ub6J4eg==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.0.0 <1.5.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
'@opentelemetry/core': 1.13.0(@opentelemetry/[email protected])
|
||||
@@ -2398,7 +2395,7 @@ packages:
|
||||
resolution: {integrity: sha512-2T5HA1/1iE36Q9eg6D4zYlC4Y4GcycI1J6NsHPKZY9oWfAxWsoYnRlkPfUqyY5XVtocCo/xHpnJvGNHwzT70oQ==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.0.0 <1.7.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
'@opentelemetry/core': 1.17.0(@opentelemetry/[email protected])
|
||||
@@ -2409,7 +2406,7 @@ packages:
|
||||
resolution: {integrity: sha512-Twlaje+t16b5j62CfcaKU869rP9oyBG/sVQWBI5+kDaWuP/YIFnF4LbovaEahK9GwAnW8vPIn6iYLAl/jZBidA==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': '>=1.0.0 <1.7.0'
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.6.0
|
||||
'@opentelemetry/context-async-hooks': 1.17.0(@opentelemetry/[email protected])
|
||||
@@ -4687,11 +4684,6 @@ packages:
|
||||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==}
|
||||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
/[email protected](@types/[email protected])(@types/[email protected])([email protected])([email protected]):
|
||||
resolution: {integrity: sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==}
|
||||
peerDependencies:
|
||||
@@ -8327,7 +8319,7 @@ packages:
|
||||
engines: {node: '>=18.17.0'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.1
|
||||
'@opentelemetry/api': ^1.1.0
|
||||
react: ^18.2.0
|
||||
react-dom: ^18.2.0
|
||||
sass: ^1.3.0
|
||||
@@ -8401,6 +8393,11 @@ packages:
|
||||
path-key: 4.0.0
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-O/j/ROyX0KGLG7O6Ieut/seQ0oiTpHF2tXAcFbpdTLQFiaNtkyTXXocM1fwpaa60dg1qpWj0nHlbNhx6qwuENQ==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
dev: false
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -11175,3 +11172,7 @@ packages:
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
Reference in New Issue
Block a user