-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Expand file tree
/
Copy pathcli.mjs
More file actions
120 lines (97 loc) · 2.77 KB
/
Copy pathcli.mjs
File metadata and controls
120 lines (97 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import { writeFileSync } from 'fs';
import { writeMarkdownHeadingId } from '@docusaurus/utils';
import * as utils from './utils.mjs';
import cliJSON from './data/cli.json' with { type: 'json' };
import cliOverrides from './data/meta-override.json' with { type: 'json' };
const commandToKebab = (str) =>
str
.replace('ionic ', '')
.replace(/([a-z])([A-Z])/g, '$1-$2')
.replace(/[\s_]+/g, '-')
.toLowerCase();
(async function () {
const { commands } = cliJSON;
commands.map(writePage);
console.log(`📟 CLI Commands Generated`);
})();
function writePage(page) {
const data = [
renderFrontmatter(page),
renderIntro(page),
renderInputs(page),
renderOptions(page),
renderAdvancedOptions(page),
renderExamples(page),
].join('');
const path = `cli/commands/${commandToKebab(page.name)}.mdx`;
const content = writeMarkdownHeadingId(data, { syntax: 'mdx-comment' });
writeFileSync(`docs/${path}`, content);
writeFileSync(`versioned_docs/version-v8/${path}`, content);
}
function renderFrontmatter({ name, groups }) {
const shortName = name.replace('ionic ', '');
const slug = commandToKebab(shortName);
const frontmatter = {
title: name,
sidebar_label: shortName,
};
const deprecated = groups.includes('deprecated')
? ':::warning\nThis command has been deprecated and will be removed in an upcoming major release of the Ionic CLI.\n:::'
: '';
return `---
${Object.entries(frontmatter)
.map(([key, value]) => `${key}: ${typeof value === 'string' ? `"${value.replace('"', '\\"')}"` : value}`)
.join('\n')}
---
${utils.getHeadTag(cliOverrides[slug])}
${deprecated}
`;
}
function renderIntro({ description, summary, name, options, inputs }) {
let args = '';
if (inputs && inputs.length > 0) {
for (let input of inputs) {
args += ` [${input.name}]`;
}
}
if (options && options.length > 0) {
args += ' [options]';
}
return `
${summary}
\`\`\`shell
$ ${name}${args}
\`\`\`
${description}`;
}
function renderExamples({ exampleCommands }) {
if (!exampleCommands || exampleCommands.length === 0) {
return '';
}
return `
## Examples
\`\`\`shell
${exampleCommands.map((command) => `$ ${command}`).join('\n')}
\`\`\`
`;
}
function renderInputs({ inputs }) {
if (inputs.length === 0) {
return '';
}
return utils.renderList('Inputs', inputs);
}
function renderOptions({ options }) {
options = options.filter((option) => !option.groups.includes('advanced'));
if (options.length === 0) {
return '';
}
return utils.renderOptions('Options', options);
}
function renderAdvancedOptions({ options }) {
options = options.filter((option) => option.groups.includes('advanced'));
if (options.length === 0) {
return '';
}
return utils.renderOptions('Advanced Options', options);
}