cli-forge 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +3 -1
- package/bin/cli.js.map +1 -1
- package/bin/commands/generate-documentation.d.ts +2 -2
- package/bin/commands/generate-documentation.js +42 -13
- package/bin/commands/generate-documentation.js.map +1 -1
- package/bin/commands/init.d.ts +2 -2
- package/bin/commands/init.js +103 -13
- package/bin/commands/init.js.map +1 -1
- package/package.json +2 -2
- package/src/index.d.ts +4 -1
- package/src/index.js +9 -4
- package/src/index.js.map +1 -1
- package/src/lib/cli-option-groups.d.ts +7 -0
- package/src/lib/cli-option-groups.js +62 -0
- package/src/lib/cli-option-groups.js.map +1 -0
- package/src/lib/composable-builder.d.ts +3 -0
- package/src/lib/composable-builder.js +7 -0
- package/src/lib/composable-builder.js.map +1 -0
- package/src/lib/documentation.d.ts +15 -21
- package/src/lib/documentation.js +34 -2
- package/src/lib/documentation.js.map +1 -1
- package/src/lib/format-help.d.ts +2 -0
- package/src/lib/format-help.js +114 -0
- package/src/lib/format-help.js.map +1 -0
- package/src/lib/interactive-shell.d.ts +2 -2
- package/src/lib/interactive-shell.js +4 -1
- package/src/lib/interactive-shell.js.map +1 -1
- package/src/lib/internal-cli.d.ts +122 -0
- package/src/lib/{cli-forge.js → internal-cli.js} +63 -111
- package/src/lib/internal-cli.js.map +1 -0
- package/src/lib/{cli-forge.d.ts → public-api.d.ts} +60 -114
- package/src/lib/public-api.js +15 -0
- package/src/lib/public-api.js.map +1 -0
- package/src/lib/test-harness.d.ts +1 -1
- package/src/lib/test-harness.js +5 -3
- package/src/lib/test-harness.js.map +1 -1
- package/src/lib/cli-forge.js.map +0 -1
package/bin/cli.js
CHANGED
|
@@ -4,7 +4,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
const src_1 = require("../src");
|
|
5
5
|
const generate_documentation_1 = require("./commands/generate-documentation");
|
|
6
6
|
const init_1 = require("./commands/init");
|
|
7
|
-
const mycli = (0, src_1.cli)('cli-forge'
|
|
7
|
+
const mycli = (0, src_1.cli)('cli-forge', {
|
|
8
|
+
description: "CLI tool for working with cli-forge based CLI's.",
|
|
9
|
+
}).commands(generate_documentation_1.generateDocumentationCommand, init_1.initCommand);
|
|
8
10
|
exports.default = mycli;
|
|
9
11
|
if (require.main === module) {
|
|
10
12
|
(async () => {
|
package/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../packages/cli-forge/bin/cli.ts"],"names":[],"mappings":";;;AAEA,gCAA6B;AAC7B,8EAAiF;AACjF,0CAA8C;AAE9C,MAAM,KAAK,GAAG,IAAA,SAAG,EAAC,WAAW,CAAC,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../packages/cli-forge/bin/cli.ts"],"names":[],"mappings":";;;AAEA,gCAA6B;AAC7B,8EAAiF;AACjF,0CAA8C;AAE9C,MAAM,KAAK,GAAG,IAAA,SAAG,EAAC,WAAW,EAAE;IAC7B,WAAW,EAAE,kDAAkD;CAChE,CAAC,CAAC,QAAQ,CAAC,qDAA4B,EAAE,kBAAW,CAAC,CAAC;AAEvD,kBAAe,KAAK,CAAC;AAErB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,CAAC,KAAK,IAAI,EAAE;QACV,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC,EAAE,CAAC;AACP,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { ParsedArgs } from '@cli-forge/parser';
|
|
2
|
-
import { CLI } from '../../src
|
|
2
|
+
import { CLI } from '../../src';
|
|
3
3
|
export declare function withGenerateDocumentationArgs<T extends ParsedArgs>(cmd: CLI<T>): CLI<T & {
|
|
4
4
|
cli: string;
|
|
5
5
|
} & {
|
|
6
6
|
output: string;
|
|
7
7
|
} & {
|
|
8
|
-
format:
|
|
8
|
+
format: "md" | "json";
|
|
9
9
|
} & {
|
|
10
10
|
export: string;
|
|
11
11
|
} & {
|
|
@@ -5,11 +5,11 @@ exports.withGenerateDocumentationArgs = withGenerateDocumentationArgs;
|
|
|
5
5
|
const node_fs_1 = require("node:fs");
|
|
6
6
|
const node_path_1 = require("node:path");
|
|
7
7
|
const posix_1 = require("node:path/posix");
|
|
8
|
+
const node_url_1 = require("node:url");
|
|
8
9
|
const src_1 = require("../../src");
|
|
9
10
|
const documentation_1 = require("../../src/lib/documentation");
|
|
10
|
-
const cli_forge_1 = require("../../src/lib/cli-forge");
|
|
11
11
|
const fs_1 = require("../utils/fs");
|
|
12
|
-
const
|
|
12
|
+
const internal_cli_1 = require("../../src/lib/internal-cli");
|
|
13
13
|
function withGenerateDocumentationArgs(cmd) {
|
|
14
14
|
return cmd
|
|
15
15
|
.positional('cli', {
|
|
@@ -40,10 +40,15 @@ function withGenerateDocumentationArgs(cmd) {
|
|
|
40
40
|
}
|
|
41
41
|
exports.generateDocumentationCommand = (0, src_1.default)('generate-documentation', {
|
|
42
42
|
description: 'Generate documentation for the given CLI',
|
|
43
|
+
examples: [
|
|
44
|
+
'cli-forge generate-documentation ./bin/my-cli',
|
|
45
|
+
'cli-forge generate-documentation ./bin/my-cli --format json',
|
|
46
|
+
'cli-forge generate-documentation ./bin/my-cli --export mycli',
|
|
47
|
+
],
|
|
43
48
|
builder: (b) => withGenerateDocumentationArgs(b),
|
|
44
49
|
handler: async (args) => {
|
|
45
50
|
const cliModule = await loadCLIModule(args);
|
|
46
|
-
|
|
51
|
+
const cli = readCLIFromModule(cliModule, args);
|
|
47
52
|
const documentation = (0, documentation_1.generateDocumentation)(cli);
|
|
48
53
|
if (args.format === 'md') {
|
|
49
54
|
await generateMarkdownDocumentation(documentation, args);
|
|
@@ -71,9 +76,11 @@ async function generateMarkdownForSingleCommand(docs, out, docsRoot, md) {
|
|
|
71
76
|
[md.bold('Usage:'), md.code(docs.usage)].join(' '),
|
|
72
77
|
docs.description,
|
|
73
78
|
getPositionalArgsFragment(docs.positionals, md),
|
|
74
|
-
getFlagArgsFragment(docs.options, md),
|
|
79
|
+
getFlagArgsFragment(docs.options, 'Flags', md),
|
|
80
|
+
...docs.groupedOptions.map((group) => getFlagArgsFragment(Object.fromEntries(group.keys.map((key) => [key.key, key])), group.label, md)),
|
|
75
81
|
getSubcommandsFragment(docs.subcommands, outdir, docsRoot, md),
|
|
76
82
|
getExamplesFragment(docs.examples, md),
|
|
83
|
+
getEpilogueFragment(docs.epilogue, md),
|
|
77
84
|
].filter(isTruthy)));
|
|
78
85
|
for (const subcommand of docs.subcommands) {
|
|
79
86
|
await generateMarkdownForSingleCommand(subcommand, (0, node_path_1.join)(outdir, subcommand.name), docsRoot, md);
|
|
@@ -84,20 +91,22 @@ function formatOption(option, md) {
|
|
|
84
91
|
option.deprecated ? md.bold(md.italics('Deprecated')) : undefined,
|
|
85
92
|
md.bold('Type:') +
|
|
86
93
|
' ' +
|
|
87
|
-
(option.type === 'array'
|
|
94
|
+
('items' in option && option.type === 'array'
|
|
88
95
|
? `${option.items}[]`
|
|
89
96
|
: option.type),
|
|
90
97
|
option.description,
|
|
91
|
-
option.default
|
|
98
|
+
option.default !== undefined
|
|
99
|
+
? renderDefaultValueSection(option.default, md)
|
|
100
|
+
: undefined,
|
|
92
101
|
// No need to show required if it's required and has a default, as its not actually required to pass.
|
|
93
102
|
option.required && !option.default ? md.bold('Required') : undefined,
|
|
94
|
-
option.choices
|
|
103
|
+
'choices' in option && option.choices
|
|
95
104
|
? md.bold('Valid values:') +
|
|
96
105
|
' ' +
|
|
97
106
|
(() => {
|
|
98
107
|
const choicesAsString = (typeof option.choices === 'function'
|
|
99
108
|
? option.choices()
|
|
100
|
-
: option.choices).map((t) => t.toString());
|
|
109
|
+
: option.choices).map((t) => md.code(t.toString()));
|
|
101
110
|
return choicesAsString.join(', ');
|
|
102
111
|
})()
|
|
103
112
|
: undefined,
|
|
@@ -112,11 +121,11 @@ function getPositionalArgsFragment(positionals, md) {
|
|
|
112
121
|
}
|
|
113
122
|
return md.h2('Positional Arguments', ...positionals.map((positional) => formatOption(positional, md)));
|
|
114
123
|
}
|
|
115
|
-
function getFlagArgsFragment(options, md) {
|
|
124
|
+
function getFlagArgsFragment(options, label, md) {
|
|
116
125
|
if (Object.keys(options).length === 0) {
|
|
117
126
|
return undefined;
|
|
118
127
|
}
|
|
119
|
-
return md.h2(
|
|
128
|
+
return md.h2(label, ...Object.values(options).map((option) => formatOption(option, md)));
|
|
120
129
|
}
|
|
121
130
|
function getSubcommandsFragment(subcommands, outdir, docsRoot, md) {
|
|
122
131
|
if (subcommands.length === 0) {
|
|
@@ -137,7 +146,7 @@ async function importMarkdownFactory() {
|
|
|
137
146
|
}
|
|
138
147
|
}
|
|
139
148
|
function isCLI(obj) {
|
|
140
|
-
if (obj instanceof
|
|
149
|
+
if (obj instanceof internal_cli_1.InternalCLI) {
|
|
141
150
|
return true;
|
|
142
151
|
}
|
|
143
152
|
if (typeof obj !== 'object' || !obj) {
|
|
@@ -149,7 +158,7 @@ function isCLI(obj) {
|
|
|
149
158
|
if (!('name' in obj.constructor)) {
|
|
150
159
|
return false;
|
|
151
160
|
}
|
|
152
|
-
return obj.constructor.name ===
|
|
161
|
+
return obj.constructor.name === internal_cli_1.InternalCLI.name;
|
|
153
162
|
}
|
|
154
163
|
function getExamplesFragment(examples, md) {
|
|
155
164
|
if (examples.length === 0) {
|
|
@@ -205,7 +214,12 @@ async function loadCLIModule(args) {
|
|
|
205
214
|
}
|
|
206
215
|
try {
|
|
207
216
|
const tsx = (await Promise.resolve().then(() => require(
|
|
208
|
-
|
|
217
|
+
// For some reason the typescript language server doesn't like the import statement below.
|
|
218
|
+
// Its accurate, and in fact the full path with `/dist/` would error as its not part of
|
|
219
|
+
// the package.json's `exports` field.
|
|
220
|
+
//
|
|
221
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
222
|
+
//@ts-expect-error
|
|
209
223
|
'tsx/esm/api')));
|
|
210
224
|
return tsx.tsImport(cliPath, {
|
|
211
225
|
tsconfig: args.tsconfig,
|
|
@@ -224,4 +238,19 @@ async function loadCLIModule(args) {
|
|
|
224
238
|
}
|
|
225
239
|
}
|
|
226
240
|
}
|
|
241
|
+
function getEpilogueFragment(epilogue, md) {
|
|
242
|
+
if (!epilogue) {
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
return md.blockQuote(epilogue);
|
|
246
|
+
}
|
|
247
|
+
function renderDefaultValueSection(defaultValue, md) {
|
|
248
|
+
const json = JSON.stringify(defaultValue, null, 2);
|
|
249
|
+
if (json.split('\n').length > 1) {
|
|
250
|
+
return md.lines(md.bold('Default:'), md.codeBlock(json, 'json'));
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
return md.bold('Default:') + ' ' + md.code(json);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
227
256
|
//# sourceMappingURL=generate-documentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-documentation.js","sourceRoot":"","sources":["../../../../../packages/cli-forge/bin/commands/generate-documentation.ts"],"names":[],"mappings":";;;AAwBA,sEA+BC;AArDD,qCAAoD;AACpD,yCAAgE;AAChE,2CAAuE;
|
|
1
|
+
{"version":3,"file":"generate-documentation.js","sourceRoot":"","sources":["../../../../../packages/cli-forge/bin/commands/generate-documentation.ts"],"names":[],"mappings":"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"}
|
package/bin/commands/init.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare function withInitArgs<T extends ParsedArgs>(cmd: CLI<T>): CLI<T &
|
|
|
5
5
|
} & {
|
|
6
6
|
output: string;
|
|
7
7
|
} & {
|
|
8
|
-
format:
|
|
8
|
+
format: "ts" | "js";
|
|
9
9
|
} & {
|
|
10
10
|
initialVersion: string;
|
|
11
11
|
}>;
|
|
@@ -17,7 +17,7 @@ export declare const initCommand: CLI<{
|
|
|
17
17
|
} & {
|
|
18
18
|
output: string;
|
|
19
19
|
} & {
|
|
20
|
-
format:
|
|
20
|
+
format: "ts" | "js";
|
|
21
21
|
} & {
|
|
22
22
|
initialVersion: string;
|
|
23
23
|
}>;
|
package/bin/commands/init.js
CHANGED
|
@@ -10,6 +10,11 @@ const src_1 = require("../../src");
|
|
|
10
10
|
// import { CLI } from '../../src/lib/cli-forge';
|
|
11
11
|
const fs_1 = require("../utils/fs");
|
|
12
12
|
const CLI_FORGE_VERSION = CLI_FORGE_PACKAGE_JSON.version;
|
|
13
|
+
/**
|
|
14
|
+
* These are peer dependencies that **we** will call require/import on,
|
|
15
|
+
* but are not actually required at runtime. These are mostly optional,
|
|
16
|
+
* and used when running `cli-forge` commands rather than the user's CLI.
|
|
17
|
+
*/
|
|
13
18
|
const DEV_PEER_DEPS = Object.entries(CLI_FORGE_PACKAGE_JSON.peerDependencies).reduce((acc, [dep, version]) => {
|
|
14
19
|
if (
|
|
15
20
|
// The dev prop doesn't actually do anything for npm/pnpm/yarn,
|
|
@@ -49,31 +54,64 @@ exports.initCommand = (0, src_1.default)('init', {
|
|
|
49
54
|
description: 'Generate a new CLI',
|
|
50
55
|
builder: (b) => withInitArgs(b),
|
|
51
56
|
handler: async (args) => {
|
|
52
|
-
args.output ??= process.cwd();
|
|
57
|
+
args.output ??= (0, node_path_1.join)(process.cwd(), args.cliName);
|
|
53
58
|
(0, fs_1.ensureDirSync)(args.output);
|
|
54
59
|
const packageJsonPath = (0, node_path_1.join)(args.output, 'package.json');
|
|
55
60
|
const cliPath = (0, node_path_1.join)(args.output, 'bin', `${args.cliName}.${args.format}`);
|
|
56
|
-
|
|
61
|
+
let packageJsonContent = readJsonOr(packageJsonPath, {
|
|
57
62
|
name: args.cliName,
|
|
58
63
|
version: args.initialVersion,
|
|
59
64
|
});
|
|
60
|
-
packageJsonContent
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
65
|
+
packageJsonContent = mergePackageJsonContents(packageJsonContent, {
|
|
66
|
+
name: args.cliName,
|
|
67
|
+
version: args.initialVersion,
|
|
68
|
+
bin: {
|
|
69
|
+
[args.cliName]: (0, node_path_1.relative)(args.output, cliPath),
|
|
70
|
+
},
|
|
71
|
+
dependencies: {
|
|
72
|
+
'cli-forge': CLI_FORGE_VERSION,
|
|
73
|
+
},
|
|
74
|
+
});
|
|
64
75
|
if (args.format === 'ts') {
|
|
65
|
-
const latestTypescriptVersion = (0, node_child_process_1.execSync)('npm show typescript version')
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
76
|
+
const latestTypescriptVersion = (0, node_child_process_1.execSync)('npm show typescript version')
|
|
77
|
+
.toString()
|
|
78
|
+
.trim();
|
|
79
|
+
const latestTsConfigNodeVersion = (0, node_child_process_1.execSync)('npm show @tsconfig/node-lts version')
|
|
80
|
+
.toString()
|
|
81
|
+
.trim();
|
|
82
|
+
packageJsonContent = mergePackageJsonContents(packageJsonContent, {
|
|
83
|
+
scripts: {
|
|
84
|
+
build: 'tsx scripts/build.ts',
|
|
85
|
+
},
|
|
86
|
+
devDependencies: Object.fromEntries(Object.entries({
|
|
87
|
+
typescript: latestTypescriptVersion,
|
|
88
|
+
'@tsconfig/node-lts': latestTsConfigNodeVersion,
|
|
89
|
+
...DEV_PEER_DEPS,
|
|
90
|
+
}).sort(([a], [b]) => a.localeCompare(b))),
|
|
91
|
+
});
|
|
92
|
+
(0, fs_1.ensureDirSync)((0, node_path_1.join)(args.output, 'scripts'));
|
|
93
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(args.output, 'scripts/build.ts'), `import { execSync } from 'node:child_process';
|
|
94
|
+
import { cpSync } from 'node:fs';
|
|
95
|
+
|
|
96
|
+
execSync('tsc --build tsconfig.json', { stdio: 'inherit' });
|
|
97
|
+
cpSync('package.json', 'dist/package.json');
|
|
98
|
+
`);
|
|
99
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(args.output, 'tsconfig.json'), JSON.stringify({
|
|
100
|
+
extends: '@tsconfig/node-lts',
|
|
101
|
+
compilerOptions: {
|
|
102
|
+
rootDir: '.',
|
|
103
|
+
outDir: 'dist',
|
|
104
|
+
},
|
|
105
|
+
include: ['src/**/*.ts', 'bin/**/*.ts'],
|
|
106
|
+
exclude: ['**/*.{spec,test}.ts'],
|
|
107
|
+
}, null, 2));
|
|
71
108
|
}
|
|
72
109
|
(0, node_fs_1.writeFileSync)(packageJsonPath, JSON.stringify(packageJsonContent, null, 2));
|
|
73
110
|
(0, fs_1.ensureDirSync)((0, node_path_1.dirname)(cliPath));
|
|
74
111
|
(0, node_fs_1.writeFileSync)(cliPath, args.format === 'ts'
|
|
75
112
|
? TS_CLI_CONTENTS(args.cliName)
|
|
76
113
|
: JS_CLI_CONTENTS(args.cliName));
|
|
114
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(args.output, 'README.md'), README_CONTENTS(args.cliName, args.format));
|
|
77
115
|
const installCommand = (0, node_fs_1.existsSync)((0, node_path_1.join)(args.output, 'yarn.lock'))
|
|
78
116
|
? 'yarn'
|
|
79
117
|
: (0, node_fs_1.existsSync)((0, node_path_1.join)(args.output, 'pnpm-lock.yaml'))
|
|
@@ -81,7 +119,9 @@ exports.initCommand = (0, src_1.default)('init', {
|
|
|
81
119
|
: (0, node_fs_1.existsSync)((0, node_path_1.join)(args.output, 'bun.lockb'))
|
|
82
120
|
? 'bun'
|
|
83
121
|
: 'npm';
|
|
84
|
-
(0, node_child_process_1.execSync)(`${installCommand} install
|
|
122
|
+
(0, node_child_process_1.execSync)(`${installCommand} install`, {
|
|
123
|
+
cwd: args.output,
|
|
124
|
+
});
|
|
85
125
|
},
|
|
86
126
|
});
|
|
87
127
|
const COMMON_CONTENTS = (name) => `const myCLI = cli('${name}')
|
|
@@ -91,6 +131,28 @@ const COMMON_CONTENTS = (name) => `const myCLI = cli('${name}')
|
|
|
91
131
|
console.log('hello', args.name);
|
|
92
132
|
}
|
|
93
133
|
})`;
|
|
134
|
+
const README_CONTENTS = (name, format) => `# ${name}
|
|
135
|
+
|
|
136
|
+
${format === 'ts' ? 'TypeScript' : 'JavaScript'} CLI generated by [cli-forge](https://craigory.dev/cli-forge)
|
|
137
|
+
|
|
138
|
+
## Usage
|
|
139
|
+
|
|
140
|
+
// Fill this in with usage instructions
|
|
141
|
+
|
|
142
|
+
## Development
|
|
143
|
+
|
|
144
|
+
${format === 'ts' ? 'To build the CLI, run `npm run build`' : ''}
|
|
145
|
+
|
|
146
|
+
To run the CLI, use the following command:
|
|
147
|
+
|
|
148
|
+
\`\`\`shell
|
|
149
|
+
${format === 'ts' ? 'npm run build && node ./dist/bin' : 'node ./bin'}/${name} hello world
|
|
150
|
+
\`\`\`
|
|
151
|
+
|
|
152
|
+
${format === 'ts'
|
|
153
|
+
? `> Hint: you can also use \`npx tsx ./bin/${name} hello world\` to run the CLI without building it first`
|
|
154
|
+
: ''}
|
|
155
|
+
`;
|
|
94
156
|
const JS_CLI_CONTENTS = (name) => `const { cli } = require('cli-forge');
|
|
95
157
|
|
|
96
158
|
${COMMON_CONTENTS(name)}
|
|
@@ -120,4 +182,32 @@ function readJsonOr(filePath, alt) {
|
|
|
120
182
|
return alt;
|
|
121
183
|
}
|
|
122
184
|
}
|
|
185
|
+
function mergePackageJsonContents(original, updates, overwriteExistingValues = false) {
|
|
186
|
+
const first = overwriteExistingValues ? original : updates;
|
|
187
|
+
const second = overwriteExistingValues ? updates : original;
|
|
188
|
+
const merged = {
|
|
189
|
+
name: original.name ?? updates.name,
|
|
190
|
+
...first,
|
|
191
|
+
...second,
|
|
192
|
+
};
|
|
193
|
+
if (first.bin && second.bin) {
|
|
194
|
+
merged.bin = {
|
|
195
|
+
...first.bin,
|
|
196
|
+
...second.bin,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
if (first.dependencies && second.dependencies) {
|
|
200
|
+
merged.dependencies = {
|
|
201
|
+
...first.dependencies,
|
|
202
|
+
...second.dependencies,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
if (first.devDependencies && second.devDependencies) {
|
|
206
|
+
merged.devDependencies = {
|
|
207
|
+
...first.devDependencies,
|
|
208
|
+
...second.devDependencies,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
return merged;
|
|
212
|
+
}
|
|
123
213
|
//# sourceMappingURL=init.js.map
|
package/bin/commands/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../packages/cli-forge/bin/commands/init.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../packages/cli-forge/bin/commands/init.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
export { default, cli, CLI, Command } from './lib/cli-forge';
|
|
2
1
|
export { TestHarness } from './lib/test-harness';
|
|
2
|
+
export * from './lib/public-api';
|
|
3
|
+
export { default } from './lib/public-api';
|
|
4
|
+
export { chain } from '@cli-forge/parser';
|
|
5
|
+
export { makeComposableBuilder } from './lib/composable-builder';
|
package/src/index.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return cli_forge_1.default; } });
|
|
6
|
-
Object.defineProperty(exports, "cli", { enumerable: true, get: function () { return cli_forge_1.cli; } });
|
|
3
|
+
exports.makeComposableBuilder = exports.chain = exports.default = exports.TestHarness = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
7
5
|
var test_harness_1 = require("./lib/test-harness");
|
|
8
6
|
Object.defineProperty(exports, "TestHarness", { enumerable: true, get: function () { return test_harness_1.TestHarness; } });
|
|
7
|
+
tslib_1.__exportStar(require("./lib/public-api"), exports);
|
|
8
|
+
var public_api_1 = require("./lib/public-api");
|
|
9
|
+
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return public_api_1.default; } });
|
|
10
|
+
var parser_1 = require("@cli-forge/parser");
|
|
11
|
+
Object.defineProperty(exports, "chain", { enumerable: true, get: function () { return parser_1.chain; } });
|
|
12
|
+
var composable_builder_1 = require("./lib/composable-builder");
|
|
13
|
+
Object.defineProperty(exports, "makeComposableBuilder", { enumerable: true, get: function () { return composable_builder_1.makeComposableBuilder; } });
|
|
9
14
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/cli-forge/src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/cli-forge/src/index.ts"],"names":[],"mappings":";;;;AAAA,mDAAiD;AAAxC,2GAAA,WAAW,OAAA;AACpB,2DAAiC;AACjC,+CAA2C;AAAlC,qGAAA,OAAO,OAAA;AAChB,4CAA0C;AAAjC,+FAAA,KAAK,OAAA;AACd,+DAAiE;AAAxD,2HAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { InternalOptionConfig } from '@cli-forge/parser';
|
|
2
|
+
import { InternalCLI } from './internal-cli';
|
|
3
|
+
export declare function readOptionGroupsForCLI(parentCLI: InternalCLI<any>): {
|
|
4
|
+
label: string;
|
|
5
|
+
sortOrder: number;
|
|
6
|
+
keys: Array<InternalOptionConfig>;
|
|
7
|
+
}[];
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readOptionGroupsForCLI = readOptionGroupsForCLI;
|
|
4
|
+
function readOptionGroupsForCLI(parentCLI) {
|
|
5
|
+
function registerGroupsFromCLI(cli) {
|
|
6
|
+
for (const { label, keys, sortOrder } of cli.registeredOptionGroups) {
|
|
7
|
+
groups[label] ??= {
|
|
8
|
+
keys: new Set(),
|
|
9
|
+
sortOrder: Number.MAX_SAFE_INTEGER,
|
|
10
|
+
};
|
|
11
|
+
if (sortOrder) {
|
|
12
|
+
groups[label].sortOrder = sortOrder;
|
|
13
|
+
}
|
|
14
|
+
for (const key of keys) {
|
|
15
|
+
groups[label].keys.add(key);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const groups = {};
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
21
|
+
let command = parentCLI;
|
|
22
|
+
registerGroupsFromCLI(command);
|
|
23
|
+
for (const subcommand of parentCLI.commandChain) {
|
|
24
|
+
command = command?.registeredCommands[subcommand];
|
|
25
|
+
registerGroupsFromCLI(command);
|
|
26
|
+
}
|
|
27
|
+
const parserOptions = parentCLI.parser.configuredOptions;
|
|
28
|
+
for (const key in parserOptions) {
|
|
29
|
+
const option = parserOptions[key];
|
|
30
|
+
if (option.group) {
|
|
31
|
+
groups[option.group] ??= {
|
|
32
|
+
keys: new Set(),
|
|
33
|
+
sortOrder: Number.MAX_SAFE_INTEGER,
|
|
34
|
+
};
|
|
35
|
+
groups[option.group].keys.add(key);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const groupedOptions = [];
|
|
39
|
+
for (const label in groups) {
|
|
40
|
+
const entry = {
|
|
41
|
+
sortOrder: groups[label].sortOrder,
|
|
42
|
+
keys: [],
|
|
43
|
+
label,
|
|
44
|
+
};
|
|
45
|
+
for (const key of groups[label].keys) {
|
|
46
|
+
const option = parserOptions[key];
|
|
47
|
+
entry.keys.push(option);
|
|
48
|
+
delete parserOptions[key];
|
|
49
|
+
}
|
|
50
|
+
groupedOptions.push(entry);
|
|
51
|
+
}
|
|
52
|
+
groupedOptions.sort((a, b) => {
|
|
53
|
+
if (a.sortOrder === b.sortOrder) {
|
|
54
|
+
return a.label.localeCompare(b.label);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
return a.sortOrder - b.sortOrder;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return groupedOptions;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=cli-option-groups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-option-groups.js","sourceRoot":"","sources":["../../../../../packages/cli-forge/src/lib/cli-option-groups.ts"],"names":[],"mappings":";;AAGA,wDAiEC;AAjED,SAAgB,sBAAsB,CAAC,SAA2B;IAChE,SAAS,qBAAqB,CAAC,GAAgB;QAC7C,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,sBAAsB,EAAE,CAAC;YACpE,MAAM,CAAC,KAAK,CAAC,KAAK;gBAChB,IAAI,EAAE,IAAI,GAAG,EAAE;gBACf,SAAS,EAAE,MAAM,CAAC,gBAAgB;aACnC,CAAC;YACF,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC;YACtC,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAA6D,EAAE,CAAC;IAC5E,4DAA4D;IAC5D,IAAI,OAAO,GAAqB,SAAS,CAAC;IAC1C,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;QAChD,OAAO,GAAG,OAAO,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAClD,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,aAAa,GACjB,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAErC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;gBACvB,IAAI,EAAE,IAAI,GAAG,EAAE;gBACf,SAAS,EAAE,MAAM,CAAC,gBAAgB;aACnC,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAIf,EAAE,CAAC;IAER,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG;YACZ,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS;YAClC,IAAI,EAAE,EAA4B;YAClC,KAAK;SACN,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composable-builder.js","sourceRoot":"","sources":["../../../../../packages/cli-forge/src/lib/composable-builder.ts"],"names":[],"mappings":";;AAGA,sDAKC;AALD,SAAgB,qBAAqB,CACnC,EAAsC;IAEtC,OAAO,CAA2B,IAAgB,EAAE,EAAE,CACpD,EAAE,CAAC,IAAI,CAAoB,CAAC;AAChC,CAAC"}
|
|
@@ -1,29 +1,23 @@
|
|
|
1
|
-
import { OptionConfig } from '@cli-forge/parser';
|
|
2
|
-
import { InternalCLI } from './cli
|
|
1
|
+
import { OptionConfig, OptionConfigToType } from '@cli-forge/parser';
|
|
2
|
+
import { InternalCLI } from './internal-cli';
|
|
3
3
|
export type Documentation = {
|
|
4
4
|
name: string;
|
|
5
5
|
description?: string;
|
|
6
|
+
epilogue?: string;
|
|
6
7
|
usage: string;
|
|
7
8
|
examples: string[];
|
|
8
|
-
options: Readonly<Record<string,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}>[];
|
|
14
|
-
subcommands: Documentation[];
|
|
15
|
-
};
|
|
16
|
-
export declare function generateDocumentation(cli: InternalCLI, commandChain?: string[]): {
|
|
17
|
-
name: string;
|
|
18
|
-
description: string | undefined;
|
|
19
|
-
usage: string;
|
|
20
|
-
examples: string[];
|
|
21
|
-
options: Record<string, OptionConfig & {
|
|
22
|
-
key: string;
|
|
9
|
+
options: Readonly<Record<string, NormalizedOptionConfig>>;
|
|
10
|
+
positionals: readonly Readonly<NormalizedOptionConfig>[];
|
|
11
|
+
groupedOptions: Array<{
|
|
12
|
+
label: string;
|
|
13
|
+
keys: Array<NormalizedOptionConfig>;
|
|
23
14
|
}>;
|
|
24
|
-
positionals: readonly Readonly<OptionConfig<any> & {
|
|
25
|
-
key: string;
|
|
26
|
-
position?: number;
|
|
27
|
-
}>[];
|
|
28
15
|
subcommands: Documentation[];
|
|
29
16
|
};
|
|
17
|
+
declare function normalizeOptionConfigForDocumentation<T extends OptionConfig>(option: T, key: string): Omit<T, "default"> & {
|
|
18
|
+
key: string;
|
|
19
|
+
default?: OptionConfigToType<T> | string | undefined;
|
|
20
|
+
};
|
|
21
|
+
type NormalizedOptionConfig<T extends OptionConfig = OptionConfig> = ReturnType<typeof normalizeOptionConfigForDocumentation<T>>;
|
|
22
|
+
export declare function generateDocumentation(cli: InternalCLI, commandChain?: string[]): Documentation;
|
|
23
|
+
export {};
|