@jakubmazanec/cli 0.1.0-11dd4a3
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/LICENSE.md +840 -0
- package/README.md +38 -0
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +3 -0
- package/dist/constants.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +4 -0
- package/dist/main.js.map +1 -0
- package/dist/program/Command.d.ts +42 -0
- package/dist/program/Command.js +64 -0
- package/dist/program/Command.js.map +1 -0
- package/dist/program/CommandAction.d.ts +12 -0
- package/dist/program/CommandAction.js +3 -0
- package/dist/program/CommandAction.js.map +1 -0
- package/dist/program/CommandArguments.d.ts +5 -0
- package/dist/program/CommandArguments.js +3 -0
- package/dist/program/CommandArguments.js.map +1 -0
- package/dist/program/CommandOptions.d.ts +11 -0
- package/dist/program/CommandOptions.js +3 -0
- package/dist/program/CommandOptions.js.map +1 -0
- package/dist/program/Program.d.ts +40 -0
- package/dist/program/Program.js +105 -0
- package/dist/program/Program.js.map +1 -0
- package/dist/program/ProgramDetail.d.ts +9 -0
- package/dist/program/ProgramDetail.js +5 -0
- package/dist/program/ProgramDetail.js.map +1 -0
- package/dist/program/ProgramError.d.ts +4 -0
- package/dist/program/ProgramError.js +8 -0
- package/dist/program/ProgramError.js.map +1 -0
- package/dist/program/ProgramOptions.d.ts +13 -0
- package/dist/program/ProgramOptions.js +5 -0
- package/dist/program/ProgramOptions.js.map +1 -0
- package/dist/program/ProgramStreams.d.ts +9 -0
- package/dist/program/ProgramStreams.js +5 -0
- package/dist/program/ProgramStreams.js.map +1 -0
- package/dist/program/getProgramDetail.d.ts +6 -0
- package/dist/program/getProgramDetail.js +27 -0
- package/dist/program/getProgramDetail.js.map +1 -0
- package/dist/program.d.ts +10 -0
- package/dist/program.js +12 -0
- package/dist/program.js.map +1 -0
- package/dist/ui/ErrorDetail.d.ts +12 -0
- package/dist/ui/ErrorDetail.js +5 -0
- package/dist/ui/ErrorDetail.js.map +1 -0
- package/dist/ui/Failure.d.ts +15 -0
- package/dist/ui/Failure.js +65 -0
- package/dist/ui/Failure.js.map +1 -0
- package/dist/ui/Header.d.ts +15 -0
- package/dist/ui/Header.js +26 -0
- package/dist/ui/Header.js.map +1 -0
- package/dist/ui/Help.d.ts +13 -0
- package/dist/ui/Help.js +64 -0
- package/dist/ui/Help.js.map +1 -0
- package/dist/ui/Spinner.d.ts +4 -0
- package/dist/ui/Spinner.js +39 -0
- package/dist/ui/Spinner.js.map +1 -0
- package/dist/ui/colors.d.ts +10 -0
- package/dist/ui/colors.js +12 -0
- package/dist/ui/colors.js.map +1 -0
- package/dist/ui/form/Form.d.ts +9 -0
- package/dist/ui/form/Form.js +3 -0
- package/dist/ui/form/Form.js.map +1 -0
- package/dist/ui/form/FormConfig.d.ts +8 -0
- package/dist/ui/form/FormConfig.js +3 -0
- package/dist/ui/form/FormConfig.js.map +1 -0
- package/dist/ui/form/FormProps.d.ts +40 -0
- package/dist/ui/form/FormProps.js +3 -0
- package/dist/ui/form/FormProps.js.map +1 -0
- package/dist/ui/form/FormResult.d.ts +6 -0
- package/dist/ui/form/FormResult.js +3 -0
- package/dist/ui/form/FormResult.js.map +1 -0
- package/dist/ui/form/FormRow.d.ts +30 -0
- package/dist/ui/form/FormRow.js +59 -0
- package/dist/ui/form/FormRow.js.map +1 -0
- package/dist/ui/form/FormRowConfig.d.ts +14 -0
- package/dist/ui/form/FormRowConfig.js +5 -0
- package/dist/ui/form/FormRowConfig.js.map +1 -0
- package/dist/ui/form/FormRowsConfig.d.ts +5 -0
- package/dist/ui/form/FormRowsConfig.js +3 -0
- package/dist/ui/form/FormRowsConfig.js.map +1 -0
- package/dist/ui/form/FormValue.d.ts +9 -0
- package/dist/ui/form/FormValue.js +3 -0
- package/dist/ui/form/FormValue.js.map +1 -0
- package/dist/ui/form/FormValues.d.ts +8 -0
- package/dist/ui/form/FormValues.js +3 -0
- package/dist/ui/form/FormValues.js.map +1 -0
- package/dist/ui/form/SelectInput.d.ts +29 -0
- package/dist/ui/form/SelectInput.js +123 -0
- package/dist/ui/form/SelectInput.js.map +1 -0
- package/dist/ui/form/SelectInputItem.d.ts +9 -0
- package/dist/ui/form/SelectInputItem.js +5 -0
- package/dist/ui/form/SelectInputItem.js.map +1 -0
- package/dist/ui/form/TextInput.d.ts +30 -0
- package/dist/ui/form/TextInput.js +155 -0
- package/dist/ui/form/TextInput.js.map +1 -0
- package/dist/ui/form/createForm.d.ts +9 -0
- package/dist/ui/form/createForm.js +72 -0
- package/dist/ui/form/createForm.js.map +1 -0
- package/dist/ui/form.d.ts +13 -0
- package/dist/ui/form.js +15 -0
- package/dist/ui/form.js.map +1 -0
- package/dist/ui/getErrorDetail.d.ts +5 -0
- package/dist/ui/getErrorDetail.js +63 -0
- package/dist/ui/getErrorDetail.js.map +1 -0
- package/dist/ui/icons.d.ts +9 -0
- package/dist/ui/icons.js +13 -0
- package/dist/ui/icons.js.map +1 -0
- package/dist/ui/internals/Wrapper.d.ts +12 -0
- package/dist/ui/internals/Wrapper.js +26 -0
- package/dist/ui/internals/Wrapper.js.map +1 -0
- package/dist/ui/internals/programContext.d.ts +9 -0
- package/dist/ui/internals/programContext.js +6 -0
- package/dist/ui/internals/programContext.js.map +1 -0
- package/dist/ui/internals/rotate.d.ts +8 -0
- package/dist/ui/internals/rotate.js +17 -0
- package/dist/ui/internals/rotate.js.map +1 -0
- package/dist/ui/internals.d.ts +3 -0
- package/dist/ui/internals.js +5 -0
- package/dist/ui/internals.js.map +1 -0
- package/dist/ui/useProgram.d.ts +7 -0
- package/dist/ui/useProgram.js +24 -0
- package/dist/ui/useProgram.js.map +1 -0
- package/dist/ui.d.ts +10 -0
- package/dist/ui.js +12 -0
- package/dist/ui.js.map +1 -0
- package/package.json +61 -0
- package/src/constants.ts +1 -0
- package/src/main.ts +2 -0
- package/src/program/Command.ts +121 -0
- package/src/program/CommandAction.ts +23 -0
- package/src/program/CommandArguments.ts +9 -0
- package/src/program/CommandOptions.ts +17 -0
- package/src/program/Program.ts +136 -0
- package/src/program/ProgramDetail.ts +9 -0
- package/src/program/ProgramError.ts +9 -0
- package/src/program/ProgramOptions.ts +16 -0
- package/src/program/ProgramStreams.ts +8 -0
- package/src/program/getProgramDetail.ts +38 -0
- package/src/program.ts +10 -0
- package/src/ui/ErrorDetail.ts +12 -0
- package/src/ui/Failure.tsx +59 -0
- package/src/ui/Header.tsx +37 -0
- package/src/ui/Help.tsx +68 -0
- package/src/ui/Spinner.tsx +30 -0
- package/src/ui/colors.ts +13 -0
- package/src/ui/form/Form.ts +9 -0
- package/src/ui/form/FormConfig.ts +9 -0
- package/src/ui/form/FormProps.ts +67 -0
- package/src/ui/form/FormResult.ts +8 -0
- package/src/ui/form/FormRow.tsx +119 -0
- package/src/ui/form/FormRowConfig.ts +17 -0
- package/src/ui/form/FormRowsConfig.ts +6 -0
- package/src/ui/form/FormValue.ts +12 -0
- package/src/ui/form/FormValues.ts +9 -0
- package/src/ui/form/SelectInput.tsx +165 -0
- package/src/ui/form/SelectInputItem.ts +10 -0
- package/src/ui/form/TextInput.tsx +228 -0
- package/src/ui/form/createForm.tsx +89 -0
- package/src/ui/form.ts +13 -0
- package/src/ui/getErrorDetail.ts +73 -0
- package/src/ui/icons.ts +13 -0
- package/src/ui/internals/Wrapper.tsx +34 -0
- package/src/ui/internals/programContext.ts +12 -0
- package/src/ui/internals/rotate.ts +12 -0
- package/src/ui/internals.ts +3 -0
- package/src/ui/useProgram.ts +24 -0
- package/src/ui.ts +10 -0
package/README.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# @jakubmazanec/cli
|
|
4
|
+
|
|
5
|
+
<!-- description -->TypeScript-first library for building CLIs.<!-- description -->
|
|
6
|
+
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
npm install @jakubmazanec/cli
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
⚠️ This is an [ESM](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) package!
|
|
16
|
+
It cannot be required from a CommonJS module.
|
|
17
|
+
|
|
18
|
+
#### Prerequisites
|
|
19
|
+
|
|
20
|
+
- Node.js 16 or later
|
|
21
|
+
- TypeScript 5 or later
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
🚧 The package is still under development. Please check back later for updates.
|
|
26
|
+
|
|
27
|
+
## Documentation
|
|
28
|
+
|
|
29
|
+
See [API reference](./docs) for auto-generated documentation.
|
|
30
|
+
|
|
31
|
+
## Contributing
|
|
32
|
+
|
|
33
|
+
If you want to contribute, see [CONTRIBUTING](./CONTRIBUTING.md) for details.
|
|
34
|
+
|
|
35
|
+
## License
|
|
36
|
+
|
|
37
|
+
This package is licensed under the GNU Lesser General Public License v3. See [LICENSE](./LICENSE.md)
|
|
38
|
+
for details.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const DELIMITER = "$ ";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts"],"sourcesContent":["export const DELIMITER = '$ ';\n"],"names":["DELIMITER"],"mappings":"AAAA,OAAO,MAAMA,YAAY,KAAK"}
|
package/dist/main.d.ts
ADDED
package/dist/main.js
ADDED
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/main.ts"],"sourcesContent":["export * from './program.js';\nexport * from './ui.js';\n"],"names":[],"mappings":"AAAA,cAAc,eAAe;AAC7B,cAAc,UAAU"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type Argv, type OptionsConfig, type ParametersConfig, type Arguments } from '@jakubmazanec/args';
|
|
2
|
+
import { type CommandAction } from './CommandAction.js';
|
|
3
|
+
import { type CommandOptions } from './CommandOptions.js';
|
|
4
|
+
import { type Program } from './Program.js';
|
|
5
|
+
/**
|
|
6
|
+
* Command encapsulates piece of a CLI's logic and is executed when {@linkcode Program} instance parses that command from the command line arguments.
|
|
7
|
+
*/
|
|
8
|
+
export declare class Command<A extends string, const B extends ParametersConfig | undefined = undefined, const C extends OptionsConfig | undefined = undefined, D extends boolean = false, E extends boolean = false> {
|
|
9
|
+
readonly name: A;
|
|
10
|
+
readonly description?: string;
|
|
11
|
+
readonly parameters: B extends ParametersConfig ? B : null;
|
|
12
|
+
readonly options: C extends OptionsConfig ? C : null;
|
|
13
|
+
readonly allowUnknownOptions: D;
|
|
14
|
+
readonly allowUnknownParameters: E;
|
|
15
|
+
private readonly action;
|
|
16
|
+
/**
|
|
17
|
+
* @param name Command name, ie. space-separated words consisting only of letters, numbers (but not at the start of the word) or dashes.
|
|
18
|
+
* @param action Function that runs when command is executed.
|
|
19
|
+
* @param options Additionl command options.
|
|
20
|
+
*/
|
|
21
|
+
constructor(name: A, action: CommandAction<A, B, C, D, E>, { description, parameters, options, allowUnknownOptions, allowUnknownParameters, }: CommandOptions<NonNullable<B>, NonNullable<C>, D, E>);
|
|
22
|
+
/**
|
|
23
|
+
* Parses a list of command line arguments into an arguments object. Parser is pre-configured based on this command.
|
|
24
|
+
*/
|
|
25
|
+
parseArguments(argv: Argv): Arguments<{
|
|
26
|
+
commands: readonly [A];
|
|
27
|
+
parameters: B;
|
|
28
|
+
options: C;
|
|
29
|
+
allowUnknownOptions: D;
|
|
30
|
+
allowUnknownParameters: E;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Executes command action with provided parsed arguments and {@linkcode Program} instance.
|
|
34
|
+
*/
|
|
35
|
+
run(parsedArgs: Arguments<{
|
|
36
|
+
commands: readonly [A];
|
|
37
|
+
parameters: B;
|
|
38
|
+
options: C;
|
|
39
|
+
allowUnknownOptions: D;
|
|
40
|
+
allowUnknownParameters: E;
|
|
41
|
+
}>, program: Program): Promise<void>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { parseArguments } from '@jakubmazanec/args';
|
|
2
|
+
// import {type ProgramCommand} from './ProgramCommand.js';
|
|
3
|
+
/**
|
|
4
|
+
* Command encapsulates piece of a CLI's logic and is executed when {@linkcode Program} instance parses that command from the command line arguments.
|
|
5
|
+
*/ export class Command {
|
|
6
|
+
/* implements ProgramCommand*/ name;
|
|
7
|
+
description;
|
|
8
|
+
parameters;
|
|
9
|
+
options;
|
|
10
|
+
allowUnknownOptions;
|
|
11
|
+
allowUnknownParameters;
|
|
12
|
+
action;
|
|
13
|
+
/**
|
|
14
|
+
* @param name Command name, ie. space-separated words consisting only of letters, numbers (but not at the start of the word) or dashes.
|
|
15
|
+
* @param action Function that runs when command is executed.
|
|
16
|
+
* @param options Additionl command options.
|
|
17
|
+
*/ constructor(name, action, { description , parameters , options , allowUnknownOptions , allowUnknownParameters }){
|
|
18
|
+
this.name = name;
|
|
19
|
+
this.action = action;
|
|
20
|
+
if (description) {
|
|
21
|
+
this.description = description;
|
|
22
|
+
}
|
|
23
|
+
if (parameters) {
|
|
24
|
+
this.parameters = parameters;
|
|
25
|
+
} else {
|
|
26
|
+
this.parameters = null;
|
|
27
|
+
}
|
|
28
|
+
if (options) {
|
|
29
|
+
this.options = options;
|
|
30
|
+
} else {
|
|
31
|
+
this.options = null;
|
|
32
|
+
}
|
|
33
|
+
if (allowUnknownOptions) {
|
|
34
|
+
this.allowUnknownOptions = allowUnknownOptions;
|
|
35
|
+
} else {
|
|
36
|
+
this.allowUnknownOptions = false;
|
|
37
|
+
}
|
|
38
|
+
if (allowUnknownParameters) {
|
|
39
|
+
this.allowUnknownParameters = allowUnknownParameters;
|
|
40
|
+
} else {
|
|
41
|
+
this.allowUnknownParameters = false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parses a list of command line arguments into an arguments object. Parser is pre-configured based on this command.
|
|
46
|
+
*/ parseArguments(argv) {
|
|
47
|
+
return parseArguments(argv, {
|
|
48
|
+
commands: [
|
|
49
|
+
this.name
|
|
50
|
+
],
|
|
51
|
+
parameters: this.parameters ?? undefined,
|
|
52
|
+
options: this.options ?? undefined,
|
|
53
|
+
allowUnknownOptions: this.allowUnknownOptions,
|
|
54
|
+
allowUnknownParameters: this.allowUnknownParameters
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Executes command action with provided parsed arguments and {@linkcode Program} instance.
|
|
59
|
+
*/ async run(parsedArgs, program) {
|
|
60
|
+
await this.action(parsedArgs, program);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=Command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/program/Command.ts"],"sourcesContent":["import {\n type Argv,\n parseArguments,\n type OptionsConfig,\n type ParametersConfig,\n type Arguments,\n} from '@jakubmazanec/args';\n\nimport {type CommandAction} from './CommandAction.js';\nimport {type CommandOptions} from './CommandOptions.js';\nimport {type Program} from './Program.js';\n// import {type ProgramCommand} from './ProgramCommand.js';\n\n/**\n * Command encapsulates piece of a CLI's logic and is executed when {@linkcode Program} instance parses that command from the command line arguments.\n */\nexport class Command<\n A extends string,\n const B extends ParametersConfig | undefined = undefined,\n const C extends OptionsConfig | undefined = undefined,\n D extends boolean = false,\n E extends boolean = false,\n> {\n /* implements ProgramCommand*/\n readonly name: A;\n readonly description?: string;\n readonly parameters: B extends ParametersConfig ? B : null;\n readonly options: C extends OptionsConfig ? C : null;\n readonly allowUnknownOptions: D;\n readonly allowUnknownParameters: E;\n private readonly action: CommandAction<A, B, C, D, E>;\n\n /**\n * @param name Command name, ie. space-separated words consisting only of letters, numbers (but not at the start of the word) or dashes.\n * @param action Function that runs when command is executed.\n * @param options Additionl command options.\n */\n constructor(\n name: A,\n action: CommandAction<A, B, C, D, E>,\n {\n description,\n parameters,\n options,\n allowUnknownOptions,\n allowUnknownParameters,\n }: CommandOptions<NonNullable<B>, NonNullable<C>, D, E>,\n ) {\n this.name = name;\n this.action = action;\n\n if (description) {\n this.description = description;\n }\n\n if (parameters) {\n this.parameters = parameters as B extends ParametersConfig ? B : null;\n } else {\n this.parameters = null as B extends ParametersConfig ? B : null;\n }\n\n if (options) {\n this.options = options as C extends OptionsConfig ? C : null;\n } else {\n this.options = null as C extends OptionsConfig ? C : null;\n }\n\n if (allowUnknownOptions) {\n this.allowUnknownOptions = allowUnknownOptions;\n } else {\n this.allowUnknownOptions = false as D;\n }\n\n if (allowUnknownParameters) {\n this.allowUnknownParameters = allowUnknownParameters;\n } else {\n this.allowUnknownParameters = false as E;\n }\n }\n\n /**\n * Parses a list of command line arguments into an arguments object. Parser is pre-configured based on this command.\n */\n parseArguments(argv: Argv): Arguments<{\n commands: readonly [A];\n parameters: B;\n options: C;\n allowUnknownOptions: D;\n allowUnknownParameters: E;\n }> {\n return parseArguments(argv, {\n commands: [this.name],\n parameters: this.parameters ?? undefined,\n options: this.options ?? undefined,\n allowUnknownOptions: this.allowUnknownOptions,\n allowUnknownParameters: this.allowUnknownParameters,\n } as {\n commands: readonly [A];\n parameters: B;\n options: C;\n allowUnknownOptions: D;\n allowUnknownParameters: E;\n });\n }\n\n /**\n * Executes command action with provided parsed arguments and {@linkcode Program} instance.\n */\n async run(\n parsedArgs: Arguments<{\n commands: readonly [A];\n parameters: B;\n options: C;\n allowUnknownOptions: D;\n allowUnknownParameters: E;\n }>,\n program: Program,\n ): Promise<void> {\n await this.action(parsedArgs, program);\n }\n}\n"],"names":["parseArguments","Command","name","description","parameters","options","allowUnknownOptions","allowUnknownParameters","action","constructor","argv","commands","undefined","run","parsedArgs","program"],"mappings":"AAAA,SAEEA,cAAc,QAIT,qBAAqB;AAK5B,2DAA2D;AAE3D;;CAEC,GACD,OAAO,MAAMC;IAOX,4BAA4B,GAC5B,AAASC,KAAQ;IACRC,YAAqB;IACrBC,WAAkD;IAClDC,QAA4C;IAC5CC,oBAAuB;IACvBC,uBAA0B;IAClBC,OAAqC;IAEtD;;;;GAIC,GACDC,YACEP,IAAO,EACPM,MAAoC,EACpC,EACEL,YAAW,EACXC,WAAU,EACVC,QAAO,EACPC,oBAAmB,EACnBC,uBAAsB,EAC+B,CACvD;QACA,IAAI,CAACL,OAAOA;QACZ,IAAI,CAACM,SAASA;QAEd,IAAIL,aAAa;YACf,IAAI,CAACA,cAAcA;QACrB;QAEA,IAAIC,YAAY;YACd,IAAI,CAACA,aAAaA;QACpB,OAAO;YACL,IAAI,CAACA,aAAa;QACpB;QAEA,IAAIC,SAAS;YACX,IAAI,CAACA,UAAUA;QACjB,OAAO;YACL,IAAI,CAACA,UAAU;QACjB;QAEA,IAAIC,qBAAqB;YACvB,IAAI,CAACA,sBAAsBA;QAC7B,OAAO;YACL,IAAI,CAACA,sBAAsB;QAC7B;QAEA,IAAIC,wBAAwB;YAC1B,IAAI,CAACA,yBAAyBA;QAChC,OAAO;YACL,IAAI,CAACA,yBAAyB;QAChC;IACF;IAEA;;GAEC,GACDP,eAAeU,IAAU,EAMtB;QACD,OAAOV,eAAeU,MAAM;YAC1BC,UAAU;gBAAC,IAAI,CAACT;aAAK;YACrBE,YAAY,IAAI,CAACA,cAAcQ;YAC/BP,SAAS,IAAI,CAACA,WAAWO;YACzBN,qBAAqB,IAAI,CAACA;YAC1BC,wBAAwB,IAAI,CAACA;QAC/B;IAOF;IAEA;;GAEC,GACD,MAAMM,IACJC,UAME,EACFC,OAAgB,EACD;QACf,MAAM,IAAI,CAACP,OAAOM,YAAYC;IAChC;AACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type OptionsConfig, type ParametersConfig, type Arguments } from '@jakubmazanec/args';
|
|
2
|
+
import { type Program } from './Program.js';
|
|
3
|
+
/**
|
|
4
|
+
* Command action.
|
|
5
|
+
*/
|
|
6
|
+
export type CommandAction<A extends string, B extends ParametersConfig | undefined = undefined, C extends OptionsConfig | undefined = undefined, D extends boolean = false, E extends boolean = false> = (parsedArgs: Arguments<{
|
|
7
|
+
commands: readonly [A];
|
|
8
|
+
parameters: B;
|
|
9
|
+
options: C;
|
|
10
|
+
allowUnknownOptions: D;
|
|
11
|
+
allowUnknownParameters: E;
|
|
12
|
+
}>, program: Program) => Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/program/CommandAction.ts"],"sourcesContent":["import {type OptionsConfig, type ParametersConfig, type Arguments} from '@jakubmazanec/args';\n\nimport {type Program} from './Program.js';\n\n/**\n * Command action.\n */\nexport type CommandAction<\n A extends string,\n B extends ParametersConfig | undefined = undefined,\n C extends OptionsConfig | undefined = undefined,\n D extends boolean = false,\n E extends boolean = false,\n> = (\n parsedArgs: Arguments<{\n commands: readonly [A];\n parameters: B;\n options: C;\n allowUnknownOptions: D;\n allowUnknownParameters: E;\n }>,\n program: Program,\n) => Promise<void>;\n"],"names":[],"mappings":"AAAA,WAsBmB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/program/CommandArguments.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any -- needed */\nimport {type Command} from './Command.js';\n\n/**\n * Parsed command arguments type.\n */\nexport type CommandArguments<C extends Command<any, any, any, any, any>> = ReturnType<\n C['parseArguments']\n>;\n"],"names":[],"mappings":"AAAA,+DAA+D,GAC/D,WAOE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type OptionsConfig, type ParametersConfig } from '@jakubmazanec/args';
|
|
2
|
+
/**
|
|
3
|
+
* New command options.
|
|
4
|
+
*/
|
|
5
|
+
export type CommandOptions<B extends ParametersConfig, C extends OptionsConfig, D extends boolean, E extends boolean> = {
|
|
6
|
+
description?: string;
|
|
7
|
+
parameters?: B | undefined;
|
|
8
|
+
options?: C | undefined;
|
|
9
|
+
allowUnknownOptions?: D | undefined;
|
|
10
|
+
allowUnknownParameters?: E | undefined;
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/program/CommandOptions.ts"],"sourcesContent":["import {type OptionsConfig, type ParametersConfig} from '@jakubmazanec/args';\n\n/**\n * New command options.\n */\nexport type CommandOptions<\n B extends ParametersConfig,\n C extends OptionsConfig,\n D extends boolean,\n E extends boolean,\n> = {\n description?: string;\n parameters?: B | undefined;\n options?: C | undefined;\n allowUnknownOptions?: D | undefined;\n allowUnknownParameters?: E | undefined;\n};\n"],"names":[],"mappings":"AAAA,WAgBE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/// <reference types="react" resolution-mode="require"/>
|
|
2
|
+
import { type ParametersConfig, type Argv, type OptionsConfig } from '@jakubmazanec/args';
|
|
3
|
+
import { type Command } from './Command.js';
|
|
4
|
+
import { type ProgramOptions } from './ProgramOptions.js';
|
|
5
|
+
import { type ProgramStreams } from './ProgramStreams.js';
|
|
6
|
+
/**
|
|
7
|
+
* Program manages and executes {@linkcode Program} instances attached to it based on parsing command line arguments.
|
|
8
|
+
*/
|
|
9
|
+
export declare class Program {
|
|
10
|
+
/** Program name. */
|
|
11
|
+
readonly name?: string;
|
|
12
|
+
/** Program version. */
|
|
13
|
+
readonly version?: string;
|
|
14
|
+
/** Program description. */
|
|
15
|
+
readonly description?: string;
|
|
16
|
+
/** Program executable name. */
|
|
17
|
+
readonly bin?: string;
|
|
18
|
+
/** Program commands */
|
|
19
|
+
readonly commands: Array<Command<string, ParametersConfig | undefined, OptionsConfig | undefined, boolean, boolean>>;
|
|
20
|
+
protected isRendering: boolean;
|
|
21
|
+
readonly streams: ProgramStreams;
|
|
22
|
+
constructor({ name, version, description, bin }: ProgramOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Adds command to the program.
|
|
25
|
+
*
|
|
26
|
+
* @param command Command to add.
|
|
27
|
+
* @returns Program instance.
|
|
28
|
+
*/
|
|
29
|
+
addCommand(command: Command<any, any, any, any, any>): this;
|
|
30
|
+
/**
|
|
31
|
+
* Renders a React element using Ink and outputs to the configured streams.
|
|
32
|
+
*/
|
|
33
|
+
renderElement(element: React.ReactElement): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Runs the program.
|
|
36
|
+
*
|
|
37
|
+
* @param argv Unparsed command line arguments.
|
|
38
|
+
*/
|
|
39
|
+
run(argv: Argv): Promise<void>;
|
|
40
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any -- needed */ import { ProgramError } from './ProgramError.js';
|
|
2
|
+
import { Wrapper } from '../ui/internals.js';
|
|
3
|
+
import { Failure, Help } from '../ui.js';
|
|
4
|
+
/**
|
|
5
|
+
* Program manages and executes {@linkcode Program} instances attached to it based on parsing command line arguments.
|
|
6
|
+
*/ export class Program {
|
|
7
|
+
/** Program name. */ name;
|
|
8
|
+
/** Program version. */ version;
|
|
9
|
+
/** Program description. */ description;
|
|
10
|
+
/** Program executable name. */ bin;
|
|
11
|
+
/** Program commands */ commands = [];
|
|
12
|
+
isRendering = false;
|
|
13
|
+
streams = {
|
|
14
|
+
stderr: process.stderr,
|
|
15
|
+
stdin: process.stdin,
|
|
16
|
+
stdout: process.stdout
|
|
17
|
+
};
|
|
18
|
+
constructor({ name , version , description , bin }){
|
|
19
|
+
if (name) {
|
|
20
|
+
this.name = name;
|
|
21
|
+
}
|
|
22
|
+
if (version) {
|
|
23
|
+
this.version = version;
|
|
24
|
+
}
|
|
25
|
+
if (description) {
|
|
26
|
+
this.description = description;
|
|
27
|
+
}
|
|
28
|
+
if (bin) {
|
|
29
|
+
this.bin = bin;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Adds command to the program.
|
|
34
|
+
*
|
|
35
|
+
* @param command Command to add.
|
|
36
|
+
* @returns Program instance.
|
|
37
|
+
*/ addCommand(command) {
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- it doesn't matter here; `any` is used to make TypeScript happy in this method, but isn't propagated further.
|
|
39
|
+
this.commands.push(command);
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Renders a React element using Ink and outputs to the configured streams.
|
|
44
|
+
*/ async renderElement(element) {
|
|
45
|
+
if (this.isRendering) {
|
|
46
|
+
throw new ProgramError('NO_NESTED_RENDER');
|
|
47
|
+
} else {
|
|
48
|
+
this.isRendering = true;
|
|
49
|
+
}
|
|
50
|
+
let { render } = await import('ink');
|
|
51
|
+
let { createElement } = await import('react');
|
|
52
|
+
let { stdin , stdout , stderr } = this.streams;
|
|
53
|
+
try {
|
|
54
|
+
render(createElement(Wrapper, {
|
|
55
|
+
program: this
|
|
56
|
+
}, element), {
|
|
57
|
+
exitOnCtrlC: true,
|
|
58
|
+
patchConsole: true,
|
|
59
|
+
stderr,
|
|
60
|
+
stdin,
|
|
61
|
+
stdout
|
|
62
|
+
});
|
|
63
|
+
} catch (error) {
|
|
64
|
+
if (error instanceof Error) {
|
|
65
|
+
await this.renderElement(createElement(Failure, {
|
|
66
|
+
error
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
} finally{
|
|
70
|
+
this.isRendering = false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Runs the program.
|
|
75
|
+
*
|
|
76
|
+
* @param argv Unparsed command line arguments.
|
|
77
|
+
*/ async run(argv) {
|
|
78
|
+
let hasCommandRun = false;
|
|
79
|
+
for (let command of this.commands){
|
|
80
|
+
let parsedArgs = command.parseArguments(argv);
|
|
81
|
+
if (parsedArgs.command) {
|
|
82
|
+
hasCommandRun = true;
|
|
83
|
+
if (parsedArgs.errors.length) {
|
|
84
|
+
let { createElement } = await import('react');
|
|
85
|
+
for (let error of parsedArgs.errors){
|
|
86
|
+
await this.renderElement(createElement(Failure, {
|
|
87
|
+
error
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
await command.run(parsedArgs, this);
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (!hasCommandRun) {
|
|
97
|
+
let { createElement } = await import('react');
|
|
98
|
+
await this.renderElement(createElement(Help, {
|
|
99
|
+
program: this
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
//# sourceMappingURL=Program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/program/Program.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any -- needed */\nimport {type ParametersConfig, type Argv, type OptionsConfig} from '@jakubmazanec/args';\n\nimport {type Command} from './Command.js';\nimport {ProgramError} from './ProgramError.js';\nimport {type ProgramOptions} from './ProgramOptions.js';\nimport {type ProgramStreams} from './ProgramStreams.js';\nimport {Wrapper} from '../ui/internals.js';\nimport {Failure, Help} from '../ui.js';\n\n/**\n * Program manages and executes {@linkcode Program} instances attached to it based on parsing command line arguments.\n */\nexport class Program {\n /** Program name. */\n readonly name?: string;\n\n /** Program version. */\n readonly version?: string;\n\n /** Program description. */\n readonly description?: string;\n\n /** Program executable name. */\n readonly bin?: string;\n\n /** Program commands */\n readonly commands: Array<\n Command<string, ParametersConfig | undefined, OptionsConfig | undefined, boolean, boolean>\n > = [];\n\n protected isRendering = false;\n\n readonly streams: ProgramStreams = {\n stderr: process.stderr,\n stdin: process.stdin,\n stdout: process.stdout,\n };\n\n constructor({name, version, description, bin}: ProgramOptions) {\n if (name) {\n this.name = name;\n }\n\n if (version) {\n this.version = version;\n }\n\n if (description) {\n this.description = description;\n }\n\n if (bin) {\n this.bin = bin;\n }\n }\n\n /**\n * Adds command to the program.\n *\n * @param command Command to add.\n * @returns Program instance.\n */\n addCommand(command: Command<any, any, any, any, any>): this {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- it doesn't matter here; `any` is used to make TypeScript happy in this method, but isn't propagated further.\n this.commands.push(command);\n\n return this;\n }\n\n /**\n * Renders a React element using Ink and outputs to the configured streams.\n */\n async renderElement(element: React.ReactElement): Promise<void> {\n if (this.isRendering) {\n throw new ProgramError('NO_NESTED_RENDER');\n } else {\n this.isRendering = true;\n }\n\n let {render} = await import('ink');\n let {createElement} = await import('react');\n let {stdin, stdout, stderr} = this.streams;\n\n try {\n render(createElement(Wrapper, {program: this}, element), {\n exitOnCtrlC: true,\n patchConsole: true,\n stderr,\n stdin,\n stdout,\n });\n } catch (error: unknown) {\n if (error instanceof Error) {\n await this.renderElement(createElement(Failure, {error}));\n }\n } finally {\n this.isRendering = false;\n }\n }\n\n /**\n * Runs the program.\n *\n * @param argv Unparsed command line arguments.\n */\n async run(argv: Argv): Promise<void> {\n let hasCommandRun = false;\n\n for (let command of this.commands) {\n let parsedArgs = command.parseArguments(argv);\n\n if (parsedArgs.command) {\n hasCommandRun = true;\n\n if (parsedArgs.errors.length) {\n let {createElement} = await import('react');\n\n for (let error of parsedArgs.errors) {\n await this.renderElement(createElement(Failure, {error}));\n }\n } else {\n await command.run(parsedArgs, this);\n\n break;\n }\n }\n }\n\n if (!hasCommandRun) {\n let {createElement} = await import('react');\n\n await this.renderElement(createElement(Help, {program: this}));\n }\n }\n}\n"],"names":["ProgramError","Wrapper","Failure","Help","Program","name","version","description","bin","commands","isRendering","streams","stderr","process","stdin","stdout","constructor","addCommand","command","push","renderElement","element","render","createElement","program","exitOnCtrlC","patchConsole","error","Error","run","argv","hasCommandRun","parsedArgs","parseArguments","errors","length"],"mappings":"AAAA,+DAA+D,GAI/D,SAAQA,YAAY,QAAO,oBAAoB;AAG/C,SAAQC,OAAO,QAAO,qBAAqB;AAC3C,SAAQC,OAAO,EAAEC,IAAI,QAAO,WAAW;AAEvC;;CAEC,GACD,OAAO,MAAMC;IACX,kBAAkB,GAClB,AAASC,KAAc;IAEvB,qBAAqB,GACrB,AAASC,QAAiB;IAE1B,yBAAyB,GACzB,AAASC,YAAqB;IAE9B,6BAA6B,GAC7B,AAASC,IAAa;IAEtB,qBAAqB,GACrB,AAASC,WAEL,EAAE,CAAC;IAEGC,cAAc,MAAM;IAErBC,UAA0B;QACjCC,QAAQC,QAAQD;QAChBE,OAAOD,QAAQC;QACfC,QAAQF,QAAQE;IAClB,EAAE;IAEFC,YAAY,EAACX,KAAI,EAAEC,QAAO,EAAEC,YAAW,EAAEC,IAAG,EAAiB,CAAE;QAC7D,IAAIH,MAAM;YACR,IAAI,CAACA,OAAOA;QACd;QAEA,IAAIC,SAAS;YACX,IAAI,CAACA,UAAUA;QACjB;QAEA,IAAIC,aAAa;YACf,IAAI,CAACA,cAAcA;QACrB;QAEA,IAAIC,KAAK;YACP,IAAI,CAACA,MAAMA;QACb;IACF;IAEA;;;;;GAKC,GACDS,WAAWC,OAAyC,EAAQ;QAC1D,iLAAiL;QACjL,IAAI,CAACT,SAASU,KAAKD;QAEnB,OAAO,IAAI;IACb;IAEA;;GAEC,GACD,MAAME,cAAcC,OAA2B,EAAiB;QAC9D,IAAI,IAAI,CAACX,aAAa;YACpB,MAAM,IAAIV,aAAa;QACzB,OAAO;YACL,IAAI,CAACU,cAAc;QACrB;QAEA,IAAI,EAACY,OAAM,EAAC,GAAG,MAAM,MAAM,CAAC;QAC5B,IAAI,EAACC,cAAa,EAAC,GAAG,MAAM,MAAM,CAAC;QACnC,IAAI,EAACT,MAAK,EAAEC,OAAM,EAAEH,OAAM,EAAC,GAAG,IAAI,CAACD;QAEnC,IAAI;YACFW,OAAOC,cAActB,SAAS;gBAACuB,SAAS,IAAI;YAAA,GAAGH,UAAU;gBACvDI,aAAa;gBACbC,cAAc;gBACdd;gBACAE;gBACAC;YACF;QACF,EAAE,OAAOY,OAAgB;YACvB,IAAIA,iBAAiBC,OAAO;gBAC1B,MAAM,IAAI,CAACR,cAAcG,cAAcrB,SAAS;oBAACyB;gBAAK;YACxD;QACF,SAAU;YACR,IAAI,CAACjB,cAAc;QACrB;IACF;IAEA;;;;GAIC,GACD,MAAMmB,IAAIC,IAAU,EAAiB;QACnC,IAAIC,gBAAgB;QAEpB,KAAK,IAAIb,WAAW,IAAI,CAACT,SAAU;YACjC,IAAIuB,aAAad,QAAQe,eAAeH;YAExC,IAAIE,WAAWd,SAAS;gBACtBa,gBAAgB;gBAEhB,IAAIC,WAAWE,OAAOC,QAAQ;oBAC5B,IAAI,EAACZ,cAAa,EAAC,GAAG,MAAM,MAAM,CAAC;oBAEnC,KAAK,IAAII,SAASK,WAAWE,OAAQ;wBACnC,MAAM,IAAI,CAACd,cAAcG,cAAcrB,SAAS;4BAACyB;wBAAK;oBACxD;gBACF,OAAO;oBACL,MAAMT,QAAQW,IAAIG,YAAY,IAAI;oBAElC;gBACF;YACF;QACF;QAEA,IAAI,CAACD,eAAe;YAClB,IAAI,EAACR,cAAa,EAAC,GAAG,MAAM,MAAM,CAAC;YAEnC,MAAM,IAAI,CAACH,cAAcG,cAAcpB,MAAM;gBAACqB,SAAS,IAAI;YAAA;QAC7D;IACF;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/program/ProgramDetail.ts"],"sourcesContent":["/**\n * Detailed program information.\n */\nexport type ProgramDetail = {\n name?: string;\n version?: string;\n description?: string;\n bin?: string;\n};\n"],"names":[],"mappings":"AAAA;;CAEC,GACD,WAKE"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A subclass of `Error` that indicates a program failure.
|
|
3
|
+
*/
|
|
4
|
+
export declare const ProgramError: new (code: "NO_NESTED_RENDER", options?: import("@jakubmazanec/error").CustomErrorOptions | undefined) => import("@jakubmazanec/error").CustomError<"NO_NESTED_RENDER" | "UNKNOWN_ERROR">;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createCustomError } from '@jakubmazanec/error';
|
|
2
|
+
/**
|
|
3
|
+
* A subclass of `Error` that indicates a program failure.
|
|
4
|
+
*/ export const ProgramError = createCustomError('ProgramError', {
|
|
5
|
+
NO_NESTED_RENDER: 'A React render process already exists. This usually occurs by triggering nested render calls.'
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=ProgramError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/program/ProgramError.ts"],"sourcesContent":["import {createCustomError} from '@jakubmazanec/error';\n\n/**\n * A subclass of `Error` that indicates a program failure.\n */\nexport const ProgramError = createCustomError('ProgramError', {\n NO_NESTED_RENDER:\n 'A React render process already exists. This usually occurs by triggering nested render calls.',\n});\n"],"names":["createCustomError","ProgramError","NO_NESTED_RENDER"],"mappings":"AAAA,SAAQA,iBAAiB,QAAO,sBAAsB;AAEtD;;CAEC,GACD,OAAO,MAAMC,eAAeD,kBAAkB,gBAAgB;IAC5DE,kBACE;AACJ,GAAG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for creating new {@linkcode Program} instance.
|
|
3
|
+
*/
|
|
4
|
+
export type ProgramOptions = {
|
|
5
|
+
/** Program name. */
|
|
6
|
+
name?: string | undefined;
|
|
7
|
+
/** Program version. */
|
|
8
|
+
version?: string | undefined;
|
|
9
|
+
/** Program description. */
|
|
10
|
+
description?: string | undefined;
|
|
11
|
+
/** Program executable name. */
|
|
12
|
+
bin?: string | undefined;
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/program/ProgramOptions.ts"],"sourcesContent":["/**\n * Options for creating new {@linkcode Program} instance.\n */\nexport type ProgramOptions = {\n /** Program name. */\n name?: string | undefined;\n\n /** Program version. */\n version?: string | undefined;\n\n /** Program description. */\n description?: string | undefined;\n\n /** Program executable name. */\n bin?: string | undefined;\n};\n"],"names":[],"mappings":"AAAA;;CAEC,GACD,WAYE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/program/ProgramStreams.ts"],"sourcesContent":["/**\n * {@linkcode Program} streams;\n */\nexport type ProgramStreams = {\n stderr: NodeJS.WriteStream;\n stdin: NodeJS.ReadStream;\n stdout: NodeJS.WriteStream;\n};\n"],"names":[],"mappings":"AAAA;;CAEC,GACD,WAIE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type PackageJson } from '@jakubmazanec/zod-utils';
|
|
2
|
+
import { type ProgramDetail } from './ProgramDetail.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates detailed information about a {@lincode Program}.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getProgramDetail(packageJson: PackageJson): ProgramDetail;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates detailed information about a {@lincode Program}.
|
|
3
|
+
*/ export function getProgramDetail(packageJson) {
|
|
4
|
+
let programDetail = {};
|
|
5
|
+
if (packageJson.name) {
|
|
6
|
+
programDetail.name = packageJson.name;
|
|
7
|
+
}
|
|
8
|
+
if (packageJson.version) {
|
|
9
|
+
programDetail.version = packageJson.version;
|
|
10
|
+
}
|
|
11
|
+
if (packageJson.description) {
|
|
12
|
+
programDetail.description = packageJson.description;
|
|
13
|
+
}
|
|
14
|
+
if (packageJson.bin && typeof packageJson.bin !== 'string') {
|
|
15
|
+
let bins = Object.entries(packageJson.bin);
|
|
16
|
+
if (bins.length === 1) {
|
|
17
|
+
let firstBin = bins[0];
|
|
18
|
+
[programDetail.bin] = firstBin;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (typeof packageJson.bin === 'string' && packageJson.name) {
|
|
22
|
+
programDetail.bin = packageJson.name;
|
|
23
|
+
}
|
|
24
|
+
return programDetail;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=getProgramDetail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/program/getProgramDetail.ts"],"sourcesContent":["import {type PackageJson} from '@jakubmazanec/zod-utils';\n\nimport {type ProgramDetail} from './ProgramDetail.js';\n\n/**\n * Creates detailed information about a {@lincode Program}.\n */\nexport function getProgramDetail(packageJson: PackageJson) {\n let programDetail: ProgramDetail = {};\n\n if (packageJson.name) {\n programDetail.name = packageJson.name;\n }\n\n if (packageJson.version) {\n programDetail.version = packageJson.version;\n }\n\n if (packageJson.description) {\n programDetail.description = packageJson.description;\n }\n\n if (packageJson.bin && typeof packageJson.bin !== 'string') {\n let bins = Object.entries(packageJson.bin);\n\n if (bins.length === 1) {\n let firstBin = bins[0] as [string, string];\n\n [programDetail.bin] = firstBin;\n }\n }\n\n if (typeof packageJson.bin === 'string' && packageJson.name) {\n programDetail.bin = packageJson.name;\n }\n\n return programDetail;\n}\n"],"names":["getProgramDetail","packageJson","programDetail","name","version","description","bin","bins","Object","entries","length","firstBin"],"mappings":"AAIA;;CAEC,GACD,OAAO,SAASA,iBAAiBC,WAAwB;IACvD,IAAIC,gBAA+B,CAAC;IAEpC,IAAID,YAAYE,MAAM;QACpBD,cAAcC,OAAOF,YAAYE;IACnC;IAEA,IAAIF,YAAYG,SAAS;QACvBF,cAAcE,UAAUH,YAAYG;IACtC;IAEA,IAAIH,YAAYI,aAAa;QAC3BH,cAAcG,cAAcJ,YAAYI;IAC1C;IAEA,IAAIJ,YAAYK,OAAO,OAAOL,YAAYK,QAAQ,UAAU;QAC1D,IAAIC,OAAOC,OAAOC,QAAQR,YAAYK;QAEtC,IAAIC,KAAKG,WAAW,GAAG;YACrB,IAAIC,WAAWJ,IAAI,CAAC,EAAE;YAEtB,CAACL,cAAcI,IAAI,GAAGK;QACxB;IACF;IAEA,IAAI,OAAOV,YAAYK,QAAQ,YAAYL,YAAYE,MAAM;QAC3DD,cAAcI,MAAML,YAAYE;IAClC;IAEA,OAAOD;AACT"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './program/Command.js';
|
|
2
|
+
export * from './program/CommandAction.js';
|
|
3
|
+
export * from './program/CommandArguments.js';
|
|
4
|
+
export * from './program/CommandOptions.js';
|
|
5
|
+
export * from './program/getProgramDetail.js';
|
|
6
|
+
export * from './program/Program.js';
|
|
7
|
+
export * from './program/ProgramDetail.js';
|
|
8
|
+
export * from './program/ProgramError.js';
|
|
9
|
+
export * from './program/ProgramOptions.js';
|
|
10
|
+
export * from './program/ProgramStreams.js';
|
package/dist/program.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './program/Command.js';
|
|
2
|
+
export * from './program/CommandAction.js';
|
|
3
|
+
export * from './program/CommandArguments.js';
|
|
4
|
+
export * from './program/CommandOptions.js';
|
|
5
|
+
export * from './program/getProgramDetail.js';
|
|
6
|
+
export * from './program/Program.js';
|
|
7
|
+
export * from './program/ProgramDetail.js';
|
|
8
|
+
export * from './program/ProgramError.js';
|
|
9
|
+
export * from './program/ProgramOptions.js';
|
|
10
|
+
export * from './program/ProgramStreams.js';
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/program.ts"],"sourcesContent":["export * from './program/Command.js';\nexport * from './program/CommandAction.js';\nexport * from './program/CommandArguments.js';\nexport * from './program/CommandOptions.js';\nexport * from './program/getProgramDetail.js';\nexport * from './program/Program.js';\nexport * from './program/ProgramDetail.js';\nexport * from './program/ProgramError.js';\nexport * from './program/ProgramOptions.js';\nexport * from './program/ProgramStreams.js';\n"],"names":[],"mappings":"AAAA,cAAc,uBAAuB;AACrC,cAAc,6BAA6B;AAC3C,cAAc,gCAAgC;AAC9C,cAAc,8BAA8B;AAC5C,cAAc,gCAAgC;AAC9C,cAAc,uBAAuB;AACrC,cAAc,6BAA6B;AAC3C,cAAc,4BAA4B;AAC1C,cAAc,8BAA8B;AAC5C,cAAc,8BAA8B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/ui/ErrorDetail.ts"],"sourcesContent":["/**\n * Detailed error information.\n */\nexport type ErrorDetail = {\n label: string;\n description?: string;\n stack?: string;\n cause?: {\n description?: string;\n stack?: string;\n };\n};\n"],"names":[],"mappings":"AAAA;;CAEC,GACD,WAQE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type BoxProps } from 'ink';
|
|
2
|
+
import { type ErrorDetail } from './ErrorDetail.js';
|
|
3
|
+
/**
|
|
4
|
+
* {@linkcode Failure} component props.
|
|
5
|
+
*/
|
|
6
|
+
export type FailureProps = BoxProps & {
|
|
7
|
+
/** Error that describes a failure state. Function {@linkcode getErrorDetail} is used for getting all the information from the error; you can use it to implement own retrieval logic and pass the result as `errorDetail` prop. */
|
|
8
|
+
error: Error;
|
|
9
|
+
/** Information about the failure state. Overrides information retireved from `error` prop. */
|
|
10
|
+
errorDetail?: ErrorDetail;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* A component that renders a failure state.
|
|
14
|
+
*/
|
|
15
|
+
export declare function Failure({ error, errorDetail, ...boxProps }: FailureProps): import("react/jsx-runtime").JSX.Element;
|