mirror of
https://github.com/tauri-apps/tauri-docs.git
synced 2026-01-31 00:35:16 +01:00
128 lines
3.2 KiB
TypeScript
128 lines
3.2 KiB
TypeScript
import { readFileSync, writeFileSync } from 'node:fs';
|
|
import { execSync } from 'node:child_process';
|
|
import { slug } from 'github-slugger';
|
|
|
|
interface Command {
|
|
name: string;
|
|
description: string;
|
|
}
|
|
|
|
function getSubcommands(commandOutput: string): Command[] {
|
|
const subcommands = [];
|
|
|
|
let readingSubcommands = false;
|
|
for (const line of commandOutput.split('\n').map((l) => l.trim())) {
|
|
if (readingSubcommands) {
|
|
if (line.length === 0) {
|
|
readingSubcommands = false;
|
|
} else {
|
|
const subcommand = line.substring(0, line.indexOf(' '));
|
|
const description = line.substring(subcommand.length).trim();
|
|
if (subcommand !== 'help') {
|
|
subcommands.push({ name: subcommand, description });
|
|
}
|
|
}
|
|
}
|
|
if (line === 'Commands:') {
|
|
readingSubcommands = true;
|
|
}
|
|
}
|
|
|
|
return subcommands;
|
|
}
|
|
|
|
function generateCommandDoc(command: string, level: number, subcommandList: Command[]): string {
|
|
const output = execSync(`pnpm tauri ${command} --help`)
|
|
.toString()
|
|
.replace('pnpm run build', 'tauri');
|
|
const subcommands = getSubcommands(output);
|
|
|
|
subcommandList.push(
|
|
...subcommands.map((subcommand) => ({
|
|
...subcommand,
|
|
name: `${command} ${subcommand.name}`,
|
|
}))
|
|
);
|
|
|
|
const subcommandsDoc =
|
|
subcommands.length === 0
|
|
? ''
|
|
: `\n${subcommands.map(({ name }) => generateCommandDoc(`${command} ${name}`, level + 1, commandList)).join('\n\n')}`;
|
|
|
|
const heading = '#'.repeat(level);
|
|
return `${heading} \`${command}\`
|
|
|
|
<CommandTabs
|
|
npm="npm run tauri ${command}"
|
|
yarn="yarn tauri ${command}"
|
|
pnpm="pnpm tauri ${command}"
|
|
deno="deno task tauri ${command}"
|
|
bun="bun tauri ${command}"
|
|
cargo="cargo tauri ${command}"
|
|
/>
|
|
|
|
\`\`\`
|
|
${output}
|
|
\`\`\`
|
|
${subcommandsDoc}
|
|
`;
|
|
}
|
|
|
|
const output = execSync('pnpm tauri --help').toString();
|
|
const subcommands = getSubcommands(output);
|
|
|
|
const commandList: Command[] = [];
|
|
|
|
let doc = '';
|
|
|
|
for (const command of subcommands) {
|
|
if (command.name === 'migrate' && process.platform !== 'darwin') {
|
|
doc += readFileSync('../../src/content/docs/reference/_cli_ios.mdx').toString();
|
|
doc += '\n\n'; // just in case we format _cli_ios.mdx
|
|
|
|
commandList.push(
|
|
{ name: 'ios', description: 'iOS commands' },
|
|
{
|
|
name: 'ios init',
|
|
description: 'Initialize iOS target in the project',
|
|
},
|
|
{
|
|
name: 'ios dev',
|
|
description: 'Run your app in development mode on iOS',
|
|
},
|
|
{
|
|
name: 'ios build',
|
|
description: 'Build your app in release mode for iOS and generate IPAs',
|
|
},
|
|
{
|
|
name: 'ios run',
|
|
description: 'Run your app in production mode on iOS',
|
|
}
|
|
);
|
|
}
|
|
|
|
commandList.push(command);
|
|
const commandDoc = generateCommandDoc(command.name, 3, commandList);
|
|
doc += commandDoc;
|
|
}
|
|
|
|
let summary = `| Command | Description |
|
|
| ---------- | ------------------- |
|
|
`;
|
|
|
|
for (const { name, description } of commandList) {
|
|
summary += `| [\`${name}\`](#${slug(name)}) | ${description} |\n`;
|
|
}
|
|
|
|
const template = readFileSync('../../src/content/docs/reference/_cli.mdx').toString();
|
|
|
|
writeFileSync(
|
|
'../../src/content/docs/reference/cli.mdx',
|
|
template.replace(
|
|
'$LIST_OF_COMMANDS',
|
|
`${summary}
|
|
|
|
${doc}`
|
|
)
|
|
);
|