@jakubmazanec/cli 0.2.1-unstable.ee5adfc → 0.3.0-next.2fa8a2c
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/README.md +1 -1
- package/build/constants.js +8 -0
- package/build/constants.js.map +7 -0
- package/build/main.js +4 -0
- package/build/main.js.map +7 -0
- package/{dist → build}/program/Command.d.ts +1 -1
- package/build/program/Command.js +70 -0
- package/build/program/Command.js.map +7 -0
- package/{dist → build}/program/CommandAction.d.ts +1 -1
- package/build/program/CommandAction.js +2 -0
- package/build/program/CommandAction.js.map +7 -0
- package/build/program/CommandArguments.js +2 -0
- package/build/program/CommandArguments.js.map +7 -0
- package/build/program/CommandOptions.js +2 -0
- package/build/program/CommandOptions.js.map +7 -0
- package/{dist → build}/program/Program.d.ts +1 -1
- package/build/program/Program.js +191 -0
- package/build/program/Program.js.map +7 -0
- package/build/program/ProgramCreateOptions.js +2 -0
- package/build/program/ProgramCreateOptions.js.map +7 -0
- package/build/program/ProgramDetail.js +2 -0
- package/build/program/ProgramDetail.js.map +7 -0
- package/{dist → build}/program/ProgramError.d.ts +1 -1
- package/build/program/ProgramError.js +6 -0
- package/build/program/ProgramError.js.map +7 -0
- package/build/program/ProgramOptions.js +2 -0
- package/build/program/ProgramOptions.js.map +7 -0
- package/build/program/ProgramStreams.js +2 -0
- package/build/program/ProgramStreams.js.map +7 -0
- package/build/program/getProgramDetail.js +25 -0
- package/build/program/getProgramDetail.js.map +7 -0
- package/build/program.js +13 -0
- package/build/program.js.map +7 -0
- package/build/ui/ErrorDetail.js +2 -0
- package/build/ui/ErrorDetail.js.map +7 -0
- package/build/ui/Failure.js +20 -0
- package/build/ui/Failure.js.map +7 -0
- package/build/ui/Header.js +19 -0
- package/build/ui/Header.js.map +7 -0
- package/build/ui/Help.js +38 -0
- package/build/ui/Help.js.map +7 -0
- package/build/ui/Spinner.js +24 -0
- package/build/ui/Spinner.js.map +7 -0
- package/build/ui/colors.js +12 -0
- package/build/ui/colors.js.map +7 -0
- package/build/ui/form/Form.js +2 -0
- package/build/ui/form/Form.js.map +7 -0
- package/build/ui/form/FormConfig.js +2 -0
- package/build/ui/form/FormConfig.js.map +7 -0
- package/build/ui/form/FormProps.js +2 -0
- package/build/ui/form/FormProps.js.map +7 -0
- package/build/ui/form/FormResult.js +2 -0
- package/build/ui/form/FormResult.js.map +7 -0
- package/build/ui/form/FormRow.js +71 -0
- package/build/ui/form/FormRow.js.map +7 -0
- package/build/ui/form/FormRowConfig.js +2 -0
- package/build/ui/form/FormRowConfig.js.map +7 -0
- package/build/ui/form/FormRowsConfig.js +2 -0
- package/build/ui/form/FormRowsConfig.js.map +7 -0
- package/build/ui/form/FormValue.js +2 -0
- package/build/ui/form/FormValue.js.map +7 -0
- package/build/ui/form/FormValues.js +2 -0
- package/build/ui/form/FormValues.js.map +7 -0
- package/{dist → build}/ui/form/SelectInput.d.ts +1 -1
- package/build/ui/form/SelectInput.js +86 -0
- package/build/ui/form/SelectInput.js.map +7 -0
- package/build/ui/form/SelectInputItem.js +2 -0
- package/build/ui/form/SelectInputItem.js.map +7 -0
- package/build/ui/form/TextInput.js +129 -0
- package/build/ui/form/TextInput.js.map +7 -0
- package/build/ui/form/createForm.js +73 -0
- package/build/ui/form/createForm.js.map +7 -0
- package/build/ui/form.js +15 -0
- package/build/ui/form.js.map +7 -0
- package/build/ui/getErrorDetail.js +65 -0
- package/build/ui/getErrorDetail.js.map +7 -0
- package/build/ui/icons.js +13 -0
- package/build/ui/icons.js.map +7 -0
- package/build/ui/internals/Wrapper.js +48 -0
- package/build/ui/internals/Wrapper.js.map +7 -0
- package/build/ui/internals/programContext.js +4 -0
- package/build/ui/internals/programContext.js.map +7 -0
- package/build/ui/internals/rotate.js +6 -0
- package/build/ui/internals/rotate.js.map +7 -0
- package/build/ui/internals.js +5 -0
- package/build/ui/internals.js.map +7 -0
- package/build/ui/useProgram.js +20 -0
- package/build/ui/useProgram.js.map +7 -0
- package/build/ui.js +12 -0
- package/build/ui.js.map +7 -0
- package/package.json +41 -36
- package/{src → source}/program/CommandAction.ts +1 -1
- package/{src → source}/program/Program.ts +4 -4
- package/{src → source}/ui/Failure.tsx +9 -9
- package/{src → source}/ui/Header.tsx +8 -4
- package/{src → source}/ui/Help.tsx +4 -4
- package/{src → source}/ui/Spinner.tsx +1 -1
- package/{src → source}/ui/form/FormProps.ts +12 -18
- package/{src → source}/ui/form/FormRow.tsx +9 -9
- package/{src → source}/ui/form/FormValue.ts +3 -4
- package/{src → source}/ui/form/SelectInput.tsx +11 -15
- package/{src → source}/ui/form/TextInput.tsx +13 -10
- package/{src → source}/ui/getErrorDetail.ts +1 -1
- package/{src → source}/ui/internals/Wrapper.tsx +4 -4
- package/dist/constants.js +0 -8
- package/dist/constants.js.map +0 -1
- package/dist/main.js +0 -4
- package/dist/main.js.map +0 -1
- package/dist/program/Command.js +0 -63
- package/dist/program/Command.js.map +0 -1
- package/dist/program/CommandAction.js +0 -3
- package/dist/program/CommandAction.js.map +0 -1
- package/dist/program/CommandArguments.js +0 -3
- package/dist/program/CommandArguments.js.map +0 -1
- package/dist/program/CommandOptions.js +0 -3
- package/dist/program/CommandOptions.js.map +0 -1
- package/dist/program/Program.js +0 -168
- package/dist/program/Program.js.map +0 -1
- package/dist/program/ProgramCreateOptions.js +0 -3
- package/dist/program/ProgramCreateOptions.js.map +0 -1
- package/dist/program/ProgramDetail.js +0 -5
- package/dist/program/ProgramDetail.js.map +0 -1
- package/dist/program/ProgramError.js +0 -8
- package/dist/program/ProgramError.js.map +0 -1
- package/dist/program/ProgramOptions.js +0 -3
- package/dist/program/ProgramOptions.js.map +0 -1
- package/dist/program/ProgramStreams.js +0 -5
- package/dist/program/ProgramStreams.js.map +0 -1
- package/dist/program/getProgramDetail.js +0 -27
- package/dist/program/getProgramDetail.js.map +0 -1
- package/dist/program.js +0 -13
- package/dist/program.js.map +0 -1
- package/dist/ui/ErrorDetail.js +0 -5
- package/dist/ui/ErrorDetail.js.map +0 -1
- package/dist/ui/Failure.js +0 -65
- package/dist/ui/Failure.js.map +0 -1
- package/dist/ui/Header.js +0 -26
- package/dist/ui/Header.js.map +0 -1
- package/dist/ui/Help.js +0 -64
- package/dist/ui/Help.js.map +0 -1
- package/dist/ui/Spinner.js +0 -39
- package/dist/ui/Spinner.js.map +0 -1
- package/dist/ui/colors.js +0 -12
- package/dist/ui/colors.js.map +0 -1
- package/dist/ui/form/Form.js +0 -3
- package/dist/ui/form/Form.js.map +0 -1
- package/dist/ui/form/FormConfig.js +0 -3
- package/dist/ui/form/FormConfig.js.map +0 -1
- package/dist/ui/form/FormProps.js +0 -3
- package/dist/ui/form/FormProps.js.map +0 -1
- package/dist/ui/form/FormResult.js +0 -3
- package/dist/ui/form/FormResult.js.map +0 -1
- package/dist/ui/form/FormRow.js +0 -59
- package/dist/ui/form/FormRow.js.map +0 -1
- package/dist/ui/form/FormRowConfig.js +0 -5
- package/dist/ui/form/FormRowConfig.js.map +0 -1
- package/dist/ui/form/FormRowsConfig.js +0 -3
- package/dist/ui/form/FormRowsConfig.js.map +0 -1
- package/dist/ui/form/FormValue.js +0 -3
- package/dist/ui/form/FormValue.js.map +0 -1
- package/dist/ui/form/FormValues.js +0 -3
- package/dist/ui/form/FormValues.js.map +0 -1
- package/dist/ui/form/SelectInput.js +0 -113
- package/dist/ui/form/SelectInput.js.map +0 -1
- package/dist/ui/form/SelectInputItem.js +0 -5
- package/dist/ui/form/SelectInputItem.js.map +0 -1
- package/dist/ui/form/TextInput.js +0 -152
- package/dist/ui/form/TextInput.js.map +0 -1
- package/dist/ui/form/createForm.js +0 -72
- package/dist/ui/form/createForm.js.map +0 -1
- package/dist/ui/form.js +0 -15
- package/dist/ui/form.js.map +0 -1
- package/dist/ui/getErrorDetail.js +0 -72
- package/dist/ui/getErrorDetail.js.map +0 -1
- package/dist/ui/icons.js +0 -13
- package/dist/ui/icons.js.map +0 -1
- package/dist/ui/internals/Wrapper.js +0 -66
- package/dist/ui/internals/Wrapper.js.map +0 -1
- package/dist/ui/internals/programContext.js +0 -6
- package/dist/ui/internals/programContext.js.map +0 -1
- package/dist/ui/internals/rotate.js +0 -17
- package/dist/ui/internals/rotate.js.map +0 -1
- package/dist/ui/internals.js +0 -5
- package/dist/ui/internals.js.map +0 -1
- package/dist/ui/useProgram.js +0 -25
- package/dist/ui/useProgram.js.map +0 -1
- package/dist/ui.js +0 -12
- package/dist/ui.js.map +0 -1
- package/{dist → build}/constants.d.ts +0 -0
- package/{dist → build}/main.d.ts +0 -0
- package/{dist → build}/program/CommandArguments.d.ts +0 -0
- package/{dist → build}/program/CommandOptions.d.ts +0 -0
- package/{dist → build}/program/ProgramCreateOptions.d.ts +0 -0
- package/{dist → build}/program/ProgramDetail.d.ts +0 -0
- package/{dist → build}/program/ProgramOptions.d.ts +0 -0
- package/{dist → build}/program/ProgramStreams.d.ts +0 -0
- package/{dist → build}/program/getProgramDetail.d.ts +0 -0
- package/{dist → build}/program.d.ts +0 -0
- package/{dist → build}/ui/ErrorDetail.d.ts +0 -0
- package/{dist → build}/ui/Failure.d.ts +0 -0
- package/{dist → build}/ui/Header.d.ts +0 -0
- package/{dist → build}/ui/Help.d.ts +0 -0
- package/{dist → build}/ui/Spinner.d.ts +0 -0
- package/{dist → build}/ui/colors.d.ts +0 -0
- package/{dist → build}/ui/form/Form.d.ts +0 -0
- package/{dist → build}/ui/form/FormConfig.d.ts +0 -0
- package/{dist → build}/ui/form/FormProps.d.ts +0 -0
- package/{dist → build}/ui/form/FormResult.d.ts +0 -0
- package/{dist → build}/ui/form/FormRow.d.ts +0 -0
- package/{dist → build}/ui/form/FormRowConfig.d.ts +0 -0
- package/{dist → build}/ui/form/FormRowsConfig.d.ts +0 -0
- package/{dist → build}/ui/form/FormValue.d.ts +0 -0
- package/{dist → build}/ui/form/FormValues.d.ts +0 -0
- package/{dist → build}/ui/form/SelectInputItem.d.ts +0 -0
- package/{dist → build}/ui/form/TextInput.d.ts +0 -0
- package/{dist → build}/ui/form/createForm.d.ts +0 -0
- package/{dist → build}/ui/form.d.ts +3 -3
- package/{dist → build}/ui/getErrorDetail.d.ts +0 -0
- package/{dist → build}/ui/icons.d.ts +0 -0
- package/{dist → build}/ui/internals/Wrapper.d.ts +0 -0
- package/{dist → build}/ui/internals/programContext.d.ts +0 -0
- package/{dist → build}/ui/internals/rotate.d.ts +0 -0
- package/{dist → build}/ui/internals.d.ts +0 -0
- package/{dist → build}/ui/useProgram.d.ts +0 -0
- package/{dist → build}/ui.d.ts +3 -3
- package/{src → source}/constants.ts +0 -0
- package/{src → source}/main.ts +0 -0
- package/{src → source}/program/Command.ts +2 -2
- package/{src → source}/program/CommandArguments.ts +0 -0
- package/{src → source}/program/CommandOptions.ts +0 -0
- package/{src → source}/program/ProgramCreateOptions.ts +0 -0
- package/{src → source}/program/ProgramDetail.ts +0 -0
- package/{src → source}/program/ProgramError.ts +0 -0
- package/{src → source}/program/ProgramOptions.ts +0 -0
- package/{src → source}/program/ProgramStreams.ts +0 -0
- package/{src → source}/program/getProgramDetail.ts +0 -0
- package/{src → source}/program.ts +0 -0
- package/{src → source}/ui/ErrorDetail.ts +0 -0
- package/{src → source}/ui/colors.ts +0 -0
- package/{src → source}/ui/form/Form.ts +0 -0
- package/{src → source}/ui/form/FormConfig.ts +0 -0
- package/{src → source}/ui/form/FormResult.ts +0 -0
- package/{src → source}/ui/form/FormRowConfig.ts +0 -0
- package/{src → source}/ui/form/FormRowsConfig.ts +0 -0
- package/{src → source}/ui/form/FormValues.ts +0 -0
- package/{src → source}/ui/form/SelectInputItem.ts +0 -0
- package/{src → source}/ui/form/createForm.tsx +0 -0
- package/{src → source}/ui/form.ts +3 -3
- package/{src → source}/ui/icons.ts +0 -0
- package/{src → source}/ui/internals/programContext.ts +0 -0
- package/{src → source}/ui/internals/rotate.ts +0 -0
- package/{src → source}/ui/internals.ts +0 -0
- package/{src → source}/ui/useProgram.ts +0 -0
- package/{src → source}/ui.ts +3 -3
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Box } from "ink";
|
|
4
|
+
import { useCallback } from "react";
|
|
5
|
+
import { FormRow } from "./FormRow.js";
|
|
6
|
+
export function createForm(formConfig) {
|
|
7
|
+
let Form = ({
|
|
8
|
+
rows,
|
|
9
|
+
values: results,
|
|
10
|
+
onChange,
|
|
11
|
+
onComplete: onFinish,
|
|
12
|
+
...boxProps
|
|
13
|
+
}) => {
|
|
14
|
+
let handleChange = useCallback(
|
|
15
|
+
(value, rowName) => {
|
|
16
|
+
if (onChange) {
|
|
17
|
+
onChange({
|
|
18
|
+
...results,
|
|
19
|
+
[rowName]: {
|
|
20
|
+
...results[rowName],
|
|
21
|
+
value
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
[onChange, results]
|
|
27
|
+
);
|
|
28
|
+
let handleFinish = useCallback(
|
|
29
|
+
(value, rowName) => {
|
|
30
|
+
onFinish({
|
|
31
|
+
...results,
|
|
32
|
+
[rowName]: {
|
|
33
|
+
value,
|
|
34
|
+
isComplete: true
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
[onFinish, results]
|
|
39
|
+
);
|
|
40
|
+
let inputElements = [];
|
|
41
|
+
let activeInputName = null;
|
|
42
|
+
for (let [rowName] of Object.entries(formConfig.rows)) {
|
|
43
|
+
if (!results[rowName].isComplete) {
|
|
44
|
+
activeInputName = String(rowName);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
for (let [rowName, input] of Object.entries(formConfig.rows)) {
|
|
49
|
+
if (results[rowName].isComplete || rowName === activeInputName) {
|
|
50
|
+
inputElements.push(
|
|
51
|
+
/* @__PURE__ */ jsx(
|
|
52
|
+
FormRow,
|
|
53
|
+
{
|
|
54
|
+
marginTop: inputElements.length === 0 ? 0 : 1,
|
|
55
|
+
focus: rowName === activeInputName,
|
|
56
|
+
isComplete: results[rowName].isComplete,
|
|
57
|
+
config: input,
|
|
58
|
+
rows,
|
|
59
|
+
rowName,
|
|
60
|
+
value: results[rowName].value,
|
|
61
|
+
onChange: handleChange,
|
|
62
|
+
onComplete: handleFinish
|
|
63
|
+
},
|
|
64
|
+
rowName
|
|
65
|
+
)
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return /* @__PURE__ */ jsx(Box, { ...boxProps, flexDirection: "column", children: inputElements });
|
|
70
|
+
};
|
|
71
|
+
return Object.assign(Form, { config: formConfig });
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=createForm.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../source/ui/form/createForm.tsx"],
|
|
4
|
+
"sourcesContent": ["import {Box, type BoxProps} from 'ink';\nimport {useCallback} from 'react';\n\nimport {type Form} from './Form.js';\nimport {type FormConfig} from './FormConfig.js';\nimport {type FormProps} from './FormProps.js';\nimport {FormRow} from './FormRow.js';\n\n/**\n * Creates form component that contains individual rows with inputs based on the provided config.\n *\n * @param formConfig Form configuration.\n * @returns Form component.\n */\nexport function createForm<C extends FormConfig>(formConfig: C): Form<C> {\n let Form = ({\n rows,\n values: results,\n onChange,\n onComplete: onFinish,\n ...boxProps\n }: FormProps<C>) => {\n let handleChange = useCallback(\n (value: unknown, rowName: keyof C['rows']) => {\n if (onChange) {\n onChange({\n ...results,\n [rowName]: {\n ...results[rowName],\n value,\n },\n });\n }\n },\n [onChange, results],\n );\n\n let handleFinish = useCallback(\n (value: unknown, rowName: keyof C['rows']) => {\n onFinish({\n ...results,\n [rowName]: {\n value,\n isComplete: true,\n },\n });\n },\n [onFinish, results],\n );\n\n let inputElements = [];\n let activeInputName: string | null = null;\n\n for (let [rowName] of Object.entries(formConfig.rows)) {\n if (!results[rowName as keyof C['rows']].isComplete) {\n activeInputName = String(rowName);\n\n break;\n }\n }\n\n for (let [rowName, input] of Object.entries(formConfig.rows)) {\n if (results[rowName as keyof C['rows']].isComplete || rowName === activeInputName) {\n inputElements.push(\n <FormRow\n key={rowName}\n marginTop={inputElements.length === 0 ? 0 : 1}\n focus={rowName === activeInputName}\n isComplete={results[rowName as keyof C['rows']].isComplete}\n config={input}\n rows={rows}\n rowName={rowName}\n value={results[rowName as keyof C['rows']].value}\n onChange={handleChange}\n onComplete={handleFinish}\n />,\n );\n }\n }\n\n return (\n <Box {...(boxProps as BoxProps)} flexDirection=\"column\">\n {inputElements}\n </Box>\n );\n };\n\n return Object.assign(Form, {config: formConfig});\n}\n"],
|
|
5
|
+
"mappings": ";AAgEU;AAhEV,SAAQ,WAAyB;AACjC,SAAQ,mBAAkB;AAK1B,SAAQ,eAAc;AAQf,gBAAS,WAAiC,YAAwB;AACvE,MAAI,OAAO,CAAC;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,YAAY;AAAA,IACZ,GAAG;AAAA,EACL,MAAoB;AAClB,QAAI,eAAe;AAAA,MACjB,CAAC,OAAgB,YAA6B;AAC5C,YAAI,UAAU;AACZ,mBAAS;AAAA,YACP,GAAG;AAAA,YACH,CAAC,OAAO,GAAG;AAAA,cACT,GAAG,QAAQ,OAAO;AAAA,cAClB;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,CAAC,UAAU,OAAO;AAAA,IACpB;AAEA,QAAI,eAAe;AAAA,MACjB,CAAC,OAAgB,YAA6B;AAC5C,iBAAS;AAAA,UACP,GAAG;AAAA,UACH,CAAC,OAAO,GAAG;AAAA,YACT;AAAA,YACA,YAAY;AAAA,UACd;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,CAAC,UAAU,OAAO;AAAA,IACpB;AAEA,QAAI,gBAAgB,CAAC;AACrB,QAAI,kBAAiC;AAErC,aAAS,CAAC,OAAO,KAAK,OAAO,QAAQ,WAAW,IAAI,GAAG;AACrD,UAAI,CAAC,QAAQ,OAA0B,EAAE,YAAY;AACnD,0BAAkB,OAAO,OAAO;AAEhC;AAAA,MACF;AAAA,IACF;AAEA,aAAS,CAAC,SAAS,KAAK,KAAK,OAAO,QAAQ,WAAW,IAAI,GAAG;AAC5D,UAAI,QAAQ,OAA0B,EAAE,cAAc,YAAY,iBAAiB;AACjF,sBAAc;AAAA,UACZ;AAAA,YAAC;AAAA;AAAA,cAEC,WAAW,cAAc,WAAW,IAAI,IAAI;AAAA,cAC5C,OAAO,YAAY;AAAA,cACnB,YAAY,QAAQ,OAA0B,EAAE;AAAA,cAChD,QAAQ;AAAA,cACR;AAAA,cACA;AAAA,cACA,OAAO,QAAQ,OAA0B,EAAE;AAAA,cAC3C,UAAU;AAAA,cACV,YAAY;AAAA;AAAA,YATP;AAAA,UAUP;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WACE,oBAAC,OAAK,GAAI,UAAuB,eAAc,UAC5C,yBACH;AAAA,EAEJ;AAEA,SAAO,OAAO,OAAO,MAAM,EAAC,QAAQ,WAAU,CAAC;AACjD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/build/ui/form.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
export * from "./form/createForm.js";
|
|
3
|
+
export * from "./form/Form.js";
|
|
4
|
+
export * from "./form/FormConfig.js";
|
|
5
|
+
export * from "./form/FormProps.js";
|
|
6
|
+
export * from "./form/FormResult.js";
|
|
7
|
+
export * from "./form/FormRow.js";
|
|
8
|
+
export * from "./form/FormRowConfig.js";
|
|
9
|
+
export * from "./form/FormRowsConfig.js";
|
|
10
|
+
export * from "./form/FormValue.js";
|
|
11
|
+
export * from "./form/FormValues.js";
|
|
12
|
+
export * from "./form/SelectInput.js";
|
|
13
|
+
export * from "./form/SelectInputItem.js";
|
|
14
|
+
export * from "./form/TextInput.js";
|
|
15
|
+
//# sourceMappingURL=form.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../source/ui/form.ts"],
|
|
4
|
+
"sourcesContent": ["export * from './form/createForm.js';\nexport * from './form/Form.js';\nexport * from './form/FormConfig.js';\nexport * from './form/FormProps.js';\nexport * from './form/FormResult.js';\nexport * from './form/FormRow.js';\nexport * from './form/FormRowConfig.js';\nexport * from './form/FormRowsConfig.js';\nexport * from './form/FormValue.js';\nexport * from './form/FormValues.js';\nexport * from './form/SelectInput.js';\nexport * from './form/SelectInputItem.js';\nexport * from './form/TextInput.js';\n"],
|
|
5
|
+
"mappings": ";AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { ParsingError, ValidationError } from "@jakubmazanec/args";
|
|
3
|
+
import { zodIssuesToStrings } from "@jakubmazanec/zod-utils";
|
|
4
|
+
import { ZodError } from "zod";
|
|
5
|
+
export function getErrorDetail(error) {
|
|
6
|
+
if (error instanceof ParsingError) {
|
|
7
|
+
switch (error.code) {
|
|
8
|
+
default: {
|
|
9
|
+
return {
|
|
10
|
+
label: "Parsing error",
|
|
11
|
+
description: error.message
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
if (error instanceof ValidationError) {
|
|
17
|
+
switch (error.code) {
|
|
18
|
+
default: {
|
|
19
|
+
return {
|
|
20
|
+
label: "Validation error",
|
|
21
|
+
description: error.message
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (error instanceof ReferenceError) {
|
|
27
|
+
let errorDetail = {
|
|
28
|
+
label: "Error",
|
|
29
|
+
description: error.message
|
|
30
|
+
};
|
|
31
|
+
if (error.stack) {
|
|
32
|
+
errorDetail.stack = error.stack;
|
|
33
|
+
}
|
|
34
|
+
return errorDetail;
|
|
35
|
+
}
|
|
36
|
+
if (error instanceof ZodError) {
|
|
37
|
+
let errorDetail = {
|
|
38
|
+
label: "Error",
|
|
39
|
+
description: zodIssuesToStrings(error.issues).join("\n")
|
|
40
|
+
};
|
|
41
|
+
return errorDetail;
|
|
42
|
+
}
|
|
43
|
+
if (error instanceof Error) {
|
|
44
|
+
let errorDetail = {
|
|
45
|
+
label: "Error",
|
|
46
|
+
description: error.message
|
|
47
|
+
};
|
|
48
|
+
if (error.stack) {
|
|
49
|
+
errorDetail.stack = error.stack;
|
|
50
|
+
}
|
|
51
|
+
if (error.cause instanceof Error) {
|
|
52
|
+
errorDetail.cause = {
|
|
53
|
+
description: error.cause.message
|
|
54
|
+
};
|
|
55
|
+
if (error.cause.stack) {
|
|
56
|
+
errorDetail.cause.stack = error.cause.stack;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return errorDetail;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
label: "Error"
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=getErrorDetail.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../source/ui/getErrorDetail.ts"],
|
|
4
|
+
"sourcesContent": ["import {ParsingError, ValidationError} from '@jakubmazanec/args';\nimport {zodIssuesToStrings} from '@jakubmazanec/zod-utils';\nimport {ZodError} from 'zod';\n\nimport {type ErrorDetail} from './ErrorDetail.js';\n\n/**\n * Creates detailed information about an error.\n */\nexport function getErrorDetail(error: unknown): ErrorDetail {\n // TODO: add all codes\n if (error instanceof ParsingError) {\n switch (error.code) {\n default: {\n return {\n label: 'Parsing error',\n description: error.message,\n };\n }\n }\n }\n\n // TODO: add all codes\n if (error instanceof ValidationError) {\n switch (error.code) {\n default: {\n return {\n label: 'Validation error',\n description: error.message,\n };\n }\n }\n }\n\n // TODO: add all built-in errors\n if (error instanceof ReferenceError) {\n let errorDetail: ErrorDetail = {\n label: 'Error',\n description: error.message,\n };\n\n if (error.stack) {\n errorDetail.stack = error.stack;\n }\n\n return errorDetail;\n }\n\n if (error instanceof ZodError) {\n let errorDetail: ErrorDetail = {\n label: 'Error',\n description: zodIssuesToStrings(error.issues).join('\\n'),\n };\n\n return errorDetail;\n }\n\n if (error instanceof Error) {\n let errorDetail: ErrorDetail = {\n label: 'Error',\n description: error.message,\n };\n\n if (error.stack) {\n errorDetail.stack = error.stack;\n }\n\n if (error.cause instanceof Error) {\n errorDetail.cause = {\n description: error.cause.message,\n };\n\n if (error.cause.stack) {\n errorDetail.cause.stack = error.cause.stack;\n }\n }\n\n return errorDetail;\n }\n\n return {\n label: 'Error',\n };\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAQ,cAAc,uBAAsB;AAC5C,SAAQ,0BAAyB;AACjC,SAAQ,gBAAe;AAOhB,gBAAS,eAAe,OAA6B;AAE1D,MAAI,iBAAiB,cAAc;AACjC,YAAQ,MAAM,MAAM;AAAA,MAClB,SAAS;AACP,eAAO;AAAA,UACL,OAAO;AAAA,UACP,aAAa,MAAM;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,iBAAiB,iBAAiB;AACpC,YAAQ,MAAM,MAAM;AAAA,MAClB,SAAS;AACP,eAAO;AAAA,UACL,OAAO;AAAA,UACP,aAAa,MAAM;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,iBAAiB,gBAAgB;AACnC,QAAI,cAA2B;AAAA,MAC7B,OAAO;AAAA,MACP,aAAa,MAAM;AAAA,IACrB;AAEA,QAAI,MAAM,OAAO;AACf,kBAAY,QAAQ,MAAM;AAAA,IAC5B;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,UAAU;AAC7B,QAAI,cAA2B;AAAA,MAC7B,OAAO;AAAA,MACP,aAAa,mBAAmB,MAAM,MAAM,EAAE,KAAK,IAAI;AAAA,IACzD;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,OAAO;AAC1B,QAAI,cAA2B;AAAA,MAC7B,OAAO;AAAA,MACP,aAAa,MAAM;AAAA,IACrB;AAEA,QAAI,MAAM,OAAO;AACf,kBAAY,QAAQ,MAAM;AAAA,IAC5B;AAEA,QAAI,MAAM,iBAAiB,OAAO;AAChC,kBAAY,QAAQ;AAAA,QAClB,aAAa,MAAM,MAAM;AAAA,MAC3B;AAEA,UAAI,MAAM,MAAM,OAAO;AACrB,oBAAY,MAAM,QAAQ,MAAM,MAAM;AAAA,MACxC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,OAAO;AAAA,EACT;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import * as colors from "./colors.js";
|
|
4
|
+
export const question = chalk[colors.notice]("?");
|
|
5
|
+
export const info = chalk[colors.info]("i");
|
|
6
|
+
export const success = chalk[colors.success]("\u2713");
|
|
7
|
+
export const warning = chalk[colors.warning]("\u25B2");
|
|
8
|
+
export const error = chalk[colors.failure]("\xD7");
|
|
9
|
+
export const unselectedSquare = chalk[colors.unselected]("\u25FB");
|
|
10
|
+
export const selectedSquare = chalk[colors.selected]("\u25FC");
|
|
11
|
+
export const unselectedCircle = chalk[colors.unselected]("\u25CB");
|
|
12
|
+
export const selectedCircle = chalk[colors.selected]("\u25CF");
|
|
13
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../source/ui/icons.ts"],
|
|
4
|
+
"sourcesContent": ["import chalk from 'chalk';\n\nimport * as colors from './colors.js';\n\nexport const question = chalk[colors.notice]('?');\nexport const info = chalk[colors.info]('i');\nexport const success = chalk[colors.success]('\u2713');\nexport const warning = chalk[colors.warning]('\u25B2');\nexport const error = chalk[colors.failure]('\u00D7');\nexport const unselectedSquare = chalk[colors.unselected]('\u25FB');\nexport const selectedSquare = chalk[colors.selected]('\u25FC');\nexport const unselectedCircle = chalk[colors.unselected]('\u25CB');\nexport const selectedCircle = chalk[colors.selected]('\u25CF');\n"],
|
|
5
|
+
"mappings": ";AAAA,OAAO,WAAW;AAElB,YAAY,YAAY;AAEjB,aAAM,WAAW,MAAM,OAAO,MAAM,EAAE,GAAG;AACzC,aAAM,OAAO,MAAM,OAAO,IAAI,EAAE,GAAG;AACnC,aAAM,UAAU,MAAM,OAAO,OAAO,EAAE,QAAG;AACzC,aAAM,UAAU,MAAM,OAAO,OAAO,EAAE,QAAG;AACzC,aAAM,QAAQ,MAAM,OAAO,OAAO,EAAE,MAAG;AACvC,aAAM,mBAAmB,MAAM,OAAO,UAAU,EAAE,QAAG;AACrD,aAAM,iBAAiB,MAAM,OAAO,QAAQ,EAAE,QAAG;AACjD,aAAM,mBAAmB,MAAM,OAAO,UAAU,EAAE,QAAG;AACrD,aAAM,iBAAiB,MAAM,OAAO,QAAQ,EAAE,QAAG;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Box, Spacer, Text } from "ink";
|
|
4
|
+
import { useMemo } from "react";
|
|
5
|
+
import { ErrorBoundary } from "react-error-boundary";
|
|
6
|
+
import { highlighted, notice } from "../colors.js";
|
|
7
|
+
import { Failure } from "../Failure.js";
|
|
8
|
+
import { programContext } from "./programContext.js";
|
|
9
|
+
export const Wrapper = ({ program, children }) => {
|
|
10
|
+
let programContextValue = useMemo(
|
|
11
|
+
() => ({
|
|
12
|
+
program
|
|
13
|
+
}),
|
|
14
|
+
[program]
|
|
15
|
+
);
|
|
16
|
+
return /* @__PURE__ */ jsx(ErrorBoundary, { FallbackComponent: Failure, children: /* @__PURE__ */ jsxs(programContext.Provider, { value: programContextValue, children: [
|
|
17
|
+
program.latestVersion && program.latestVersion !== program.version ? /* @__PURE__ */ jsxs(Box, { children: [
|
|
18
|
+
/* @__PURE__ */ jsxs(
|
|
19
|
+
Box,
|
|
20
|
+
{
|
|
21
|
+
flexDirection: "column",
|
|
22
|
+
borderColor: notice,
|
|
23
|
+
borderStyle: "round",
|
|
24
|
+
margin: 1,
|
|
25
|
+
paddingTop: 1,
|
|
26
|
+
paddingRight: 4,
|
|
27
|
+
paddingBottom: 1,
|
|
28
|
+
paddingLeft: 4,
|
|
29
|
+
children: [
|
|
30
|
+
/* @__PURE__ */ jsxs(Text, { children: [
|
|
31
|
+
"New version ",
|
|
32
|
+
/* @__PURE__ */ jsx(Text, { color: highlighted, children: program.latestVersion }),
|
|
33
|
+
" is available!"
|
|
34
|
+
] }),
|
|
35
|
+
/* @__PURE__ */ jsxs(Text, { children: [
|
|
36
|
+
"Run ",
|
|
37
|
+
/* @__PURE__ */ jsx(Text, { color: highlighted, children: `npm install ${program.name} -D` }),
|
|
38
|
+
" to update."
|
|
39
|
+
] })
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
),
|
|
43
|
+
/* @__PURE__ */ jsx(Spacer, {})
|
|
44
|
+
] }) : null,
|
|
45
|
+
/* @__PURE__ */ jsx(Box, { children })
|
|
46
|
+
] }) });
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=Wrapper.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../source/ui/internals/Wrapper.tsx"],
|
|
4
|
+
"sourcesContent": ["import {Box, Spacer, Text} from 'ink';\nimport {type FC, type PropsWithChildren, useMemo} from 'react';\nimport {ErrorBoundary} from 'react-error-boundary';\n\nimport {type Program} from '../../program.js';\nimport {highlighted, notice} from '../colors.js';\nimport {Failure} from '../Failure.js';\nimport {programContext} from './programContext.js';\n\n/**\n * {@link Wrapper} component props.\n */\nexport type WrapperProps = {\n program: Program;\n};\n\n/**\n * A component that wraps anything {@link Program} tries to render with an error boundary and all neccessary providers.\n */\nexport const Wrapper: FC<PropsWithChildren<WrapperProps>> = ({program, children}) => {\n let programContextValue = useMemo(\n () => ({\n program,\n }),\n [program],\n );\n\n return (\n <ErrorBoundary FallbackComponent={Failure}>\n <programContext.Provider value={programContextValue}>\n {program.latestVersion && program.latestVersion !== program.version ?\n <Box>\n <Box\n flexDirection=\"column\"\n borderColor={notice}\n borderStyle=\"round\"\n margin={1}\n paddingTop={1}\n paddingRight={4}\n paddingBottom={1}\n paddingLeft={4}\n >\n <Text>\n New version <Text color={highlighted}>{program.latestVersion}</Text> is available!\n </Text>\n <Text>\n Run <Text color={highlighted}>{`npm install ${program.name} -D`}</Text> to update.\n </Text>\n </Box>\n <Spacer />\n </Box>\n : null}\n <Box>{children}</Box>\n </programContext.Provider>\n </ErrorBoundary>\n );\n};\n"],
|
|
5
|
+
"mappings": ";AA0Cc,SACc,KADd;AA1Cd,SAAQ,KAAK,QAAQ,YAAW;AAChC,SAAyC,eAAc;AACvD,SAAQ,qBAAoB;AAG5B,SAAQ,aAAa,cAAa;AAClC,SAAQ,eAAc;AACtB,SAAQ,sBAAqB;AAYtB,aAAM,UAA+C,CAAC,EAAC,SAAS,SAAQ,MAAM;AACnF,MAAI,sBAAsB;AAAA,IACxB,OAAO;AAAA,MACL;AAAA,IACF;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,SACE,oBAAC,iBAAc,mBAAmB,SAChC,+BAAC,eAAe,UAAf,EAAwB,OAAO,qBAC7B;AAAA,YAAQ,iBAAiB,QAAQ,kBAAkB,QAAQ,UAC1D,qBAAC,OACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,eAAc;AAAA,UACd,aAAa;AAAA,UACb,aAAY;AAAA,UACZ,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,eAAe;AAAA,UACf,aAAa;AAAA,UAEb;AAAA,iCAAC,QAAK;AAAA;AAAA,cACQ,oBAAC,QAAK,OAAO,aAAc,kBAAQ,eAAc;AAAA,cAAO;AAAA,eACtE;AAAA,YACA,qBAAC,QAAK;AAAA;AAAA,cACA,oBAAC,QAAK,OAAO,aAAc,yBAAe,QAAQ,IAAI,OAAM;AAAA,cAAO;AAAA,eACzE;AAAA;AAAA;AAAA,MACF;AAAA,MACA,oBAAC,UAAO;AAAA,OACV,IACA;AAAA,IACF,oBAAC,OAAK,UAAS;AAAA,KACjB,GACF;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../source/ui/internals/programContext.ts"],
|
|
4
|
+
"sourcesContent": ["import React from 'react';\n\nimport {type Program} from '../../program/Program.js';\n\nexport type ProgramContext = {\n program: Program;\n};\n\n/**\n * A React context that stores {@link Program} instance.\n */\nexport const programContext = React.createContext<ProgramContext>({} as ProgramContext);\n"],
|
|
5
|
+
"mappings": ";AAAA,OAAO,WAAW;AAWX,aAAM,iBAAiB,MAAM,cAA8B,CAAC,CAAmB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../source/ui/internals/rotate.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Rotate an array by `n` places.\n *\n * @param value An array to rotate.\n * @param n By how many places the items should move.\n * @returns The new item with items rotated.\n */\nexport function rotate<T>(value: T[], n: number) {\n let x = [...value];\n\n return [...x.splice(-n % x.length), ...x];\n}\n"],
|
|
5
|
+
"mappings": ";AAOO,gBAAS,OAAU,OAAY,GAAW;AAC/C,MAAI,IAAI,CAAC,GAAG,KAAK;AAEjB,SAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;AAC1C;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../source/ui/internals.ts"],
|
|
4
|
+
"sourcesContent": ["export * from './internals/programContext.js';\nexport * from './internals/rotate.js';\nexport * from './internals/Wrapper.js';\n"],
|
|
5
|
+
"mappings": ";AAAA,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { useApp } from "ink";
|
|
3
|
+
import { useCallback, useContext } from "react";
|
|
4
|
+
import { useErrorBoundary } from "react-error-boundary";
|
|
5
|
+
import { programContext } from "./internals.js";
|
|
6
|
+
export function useProgram() {
|
|
7
|
+
let { showBoundary } = useErrorBoundary();
|
|
8
|
+
let { exit: appExit } = useApp();
|
|
9
|
+
let { program } = useContext(programContext);
|
|
10
|
+
let exit = useCallback(
|
|
11
|
+
(error) => {
|
|
12
|
+
process.exitCode = 1;
|
|
13
|
+
showBoundary(error);
|
|
14
|
+
appExit(error);
|
|
15
|
+
},
|
|
16
|
+
[appExit, showBoundary]
|
|
17
|
+
);
|
|
18
|
+
return { program, exit };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=useProgram.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../source/ui/useProgram.ts"],
|
|
4
|
+
"sourcesContent": ["import {useApp} from 'ink';\nimport {useCallback, useContext} from 'react';\nimport {useErrorBoundary} from 'react-error-boundary';\n\nimport {programContext} from './internals.js';\n\n/**\n * A React hook for accessing {@link Program} instance and `exit` function that is used for showing an error (via an error boundary) and exiting.\n */\nexport function useProgram() {\n let {showBoundary} = useErrorBoundary();\n let {exit: appExit} = useApp();\n let {program} = useContext(programContext);\n\n let exit = useCallback(\n (error: unknown) => {\n process.exitCode = 1;\n\n showBoundary(error);\n appExit(error as Error);\n },\n [appExit, showBoundary],\n );\n\n return {program, exit};\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAQ,cAAa;AACrB,SAAQ,aAAa,kBAAiB;AACtC,SAAQ,wBAAuB;AAE/B,SAAQ,sBAAqB;AAKtB,gBAAS,aAAa;AAC3B,MAAI,EAAC,aAAY,IAAI,iBAAiB;AACtC,MAAI,EAAC,MAAM,QAAO,IAAI,OAAO;AAC7B,MAAI,EAAC,QAAO,IAAI,WAAW,cAAc;AAEzC,MAAI,OAAO;AAAA,IACT,CAAC,UAAmB;AAClB,cAAQ,WAAW;AAEnB,mBAAa,KAAK;AAClB,cAAQ,KAAc;AAAA,IACxB;AAAA,IACA,CAAC,SAAS,YAAY;AAAA,EACxB;AAEA,SAAO,EAAC,SAAS,KAAI;AACvB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/build/ui.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
export * as colors from "./ui/colors.js";
|
|
3
|
+
export * from "./ui/ErrorDetail.js";
|
|
4
|
+
export * from "./ui/Failure.js";
|
|
5
|
+
export * from "./ui/form.js";
|
|
6
|
+
export * from "./ui/getErrorDetail.js";
|
|
7
|
+
export * from "./ui/Header.js";
|
|
8
|
+
export * from "./ui/Help.js";
|
|
9
|
+
export * as icons from "./ui/icons.js";
|
|
10
|
+
export * from "./ui/Spinner.js";
|
|
11
|
+
export * from "./ui/useProgram.js";
|
|
12
|
+
//# sourceMappingURL=ui.js.map
|
package/build/ui.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../source/ui.ts"],
|
|
4
|
+
"sourcesContent": ["export * as colors from './ui/colors.js';\nexport * from './ui/ErrorDetail.js';\nexport * from './ui/Failure.js';\nexport * from './ui/form.js';\nexport * from './ui/getErrorDetail.js';\nexport * from './ui/Header.js';\nexport * from './ui/Help.js';\nexport * as icons from './ui/icons.js';\nexport * from './ui/Spinner.js';\nexport * from './ui/useProgram.js';\n"],
|
|
5
|
+
"mappings": ";AAAA,YAAY,YAAY;AACxB,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,YAAY,WAAW;AACvB,cAAc;AACd,cAAc;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jakubmazanec/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0-next.2fa8a2c",
|
|
4
4
|
"description": "TypeScript-first library for building CLIs.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -11,55 +11,60 @@
|
|
|
11
11
|
"author": "Jakub Mazanec <jakub@mazanec.dev>",
|
|
12
12
|
"sideEffects": false,
|
|
13
13
|
"type": "module",
|
|
14
|
-
"exports": "./
|
|
14
|
+
"exports": "./build/main.js",
|
|
15
15
|
"files": [
|
|
16
|
-
"
|
|
17
|
-
"
|
|
16
|
+
"build",
|
|
17
|
+
"source"
|
|
18
18
|
],
|
|
19
19
|
"scripts": {
|
|
20
|
-
"build": "
|
|
21
|
-
"clean": "del-cli coverage
|
|
22
|
-
"develop": "concurrently \"
|
|
23
|
-
"document": "typedoc --options typedoc.config.cjs",
|
|
24
|
-
"format": "prettier . --write --ignore-unknown
|
|
20
|
+
"build": "del-cli build tsconfig.tsbuildinfo && esbuild \"source/**/*\" --platform=node --target=node20.8 --outdir=build --sourcemap && tsc",
|
|
21
|
+
"clean": "del-cli coverage build *.tsbuildinfo",
|
|
22
|
+
"develop": "concurrently \"esbuild \"source/**/*\" --platform=node --target=node20.8 --outdir=build --sourcemap --watch\" \"tsc --watch\"",
|
|
23
|
+
"document": "del-cli docs && typedoc --options typedoc.config.cjs",
|
|
24
|
+
"format": "prettier . --write --ignore-unknown",
|
|
25
25
|
"lint": "eslint .",
|
|
26
|
-
"test": "cross-env FORCE_COLOR=1
|
|
26
|
+
"test": "del-cli coverage && cross-env FORCE_COLOR=1 vitest run --coverage",
|
|
27
27
|
"typecheck": "tsc --project tsconfig.typecheck.json"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@jakubmazanec/args": "
|
|
31
|
-
"@jakubmazanec/error": "
|
|
32
|
-
"@jakubmazanec/ts-utils": "
|
|
33
|
-
"@jakubmazanec/zod-utils": "
|
|
34
|
-
"chalk": "^5.
|
|
35
|
-
"fs-extra": "^
|
|
36
|
-
"latest-version": "^
|
|
30
|
+
"@jakubmazanec/args": "2.0.0-next.2fa8a2c",
|
|
31
|
+
"@jakubmazanec/error": "3.0.0-next.2fa8a2c",
|
|
32
|
+
"@jakubmazanec/ts-utils": "3.0.0-next.2fa8a2c",
|
|
33
|
+
"@jakubmazanec/zod-utils": "2.0.0-next.2fa8a2c",
|
|
34
|
+
"chalk": "^5.3.0",
|
|
35
|
+
"fs-extra": "^11.2.0",
|
|
36
|
+
"latest-version": "^8.0.0",
|
|
37
37
|
"lodash": "^4.17.21",
|
|
38
|
-
"react-error-boundary": "^4.0.
|
|
39
|
-
"zod": "^3.
|
|
38
|
+
"react-error-boundary": "^4.0.12",
|
|
39
|
+
"zod": "^3.22.4"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@
|
|
43
|
-
"@types/
|
|
44
|
-
"@types/
|
|
45
|
-
"@types/
|
|
46
|
-
"@
|
|
47
|
-
"
|
|
42
|
+
"@types/fs-extra": "^11.0.4",
|
|
43
|
+
"@types/lodash": "^4.14.202",
|
|
44
|
+
"@types/node": "^20.8.5",
|
|
45
|
+
"@types/react": "^18.2.53",
|
|
46
|
+
"@vitest/coverage-v8": "^1.2.2",
|
|
47
|
+
"concurrently": "^8.2.2",
|
|
48
|
+
"cross-env": "^7.0.3",
|
|
49
|
+
"del-cli": "^5.1.0",
|
|
50
|
+
"esbuild": "^0.20.0",
|
|
51
|
+
"eslint": "^8.56.0",
|
|
52
|
+
"ink": "^4.4.1",
|
|
48
53
|
"ink-testing-library": "^3.0.0",
|
|
49
|
-
"
|
|
54
|
+
"prettier": "^3.2.5",
|
|
55
|
+
"prettier-plugin-packagejson": "^2.4.10",
|
|
56
|
+
"react": "^18.2.0",
|
|
57
|
+
"typedoc": "^0.25.7",
|
|
58
|
+
"typedoc-plugin-markdown": "^3.17.1",
|
|
59
|
+
"typescript": "^5.3.3",
|
|
60
|
+
"vitest": "^1.2.2"
|
|
50
61
|
},
|
|
51
62
|
"peerDependencies": {
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"react": "17.x || 18.x"
|
|
63
|
+
"ink": "4.x",
|
|
64
|
+
"react": "18.x"
|
|
55
65
|
},
|
|
56
|
-
"
|
|
57
|
-
"@types/react": {
|
|
58
|
-
"optional": true
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
"packageManager": "npm@8.19.4",
|
|
66
|
+
"packageManager": "npm@10.1.0",
|
|
62
67
|
"engines": {
|
|
63
|
-
"node": "
|
|
68
|
+
"node": "^20.8.0"
|
|
64
69
|
}
|
|
65
70
|
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any -- needed */
|
|
2
|
-
import {type
|
|
2
|
+
import {type Argv, type OptionsConfig, type ParametersConfig} from '@jakubmazanec/args';
|
|
3
3
|
import fs from 'fs-extra';
|
|
4
4
|
import fetchLatestVersion from 'latest-version';
|
|
5
5
|
import path from 'path';
|
|
6
6
|
import {type ComponentType} from 'react';
|
|
7
7
|
import {type FallbackProps} from 'react-error-boundary';
|
|
8
8
|
|
|
9
|
+
import {CACHE_PATH} from '../constants.js';
|
|
10
|
+
import {Failure, Help} from '../ui.js';
|
|
11
|
+
import {Wrapper} from '../ui/internals.js';
|
|
9
12
|
import {type Command} from './Command.js';
|
|
10
13
|
import {type ProgramCreateOptions} from './ProgramCreateOptions.js';
|
|
11
14
|
import {ProgramError} from './ProgramError.js';
|
|
12
15
|
import {type ProgramOptions} from './ProgramOptions.js';
|
|
13
16
|
import {type ProgramStreams} from './ProgramStreams.js';
|
|
14
|
-
import {CACHE_PATH} from '../constants.js';
|
|
15
|
-
import {Wrapper} from '../ui/internals.js';
|
|
16
|
-
import {Failure, Help} from '../ui.js';
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Program manages and executes {@link Command} instances attached to it based on parsing command line arguments.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {Box,
|
|
1
|
+
import {Box, type BoxProps, Text} from 'ink';
|
|
2
2
|
|
|
3
3
|
import * as colors from './colors.js';
|
|
4
4
|
import {type ErrorDetail} from './ErrorDetail.js';
|
|
@@ -29,31 +29,31 @@ export function Failure({error, errorDetail, ...boxProps}: FailureProps) {
|
|
|
29
29
|
<Text color={colors.highlighted}>{label}</Text>
|
|
30
30
|
</Header>
|
|
31
31
|
|
|
32
|
-
{description ?
|
|
32
|
+
{description ?
|
|
33
33
|
<Box flexDirection="column" marginLeft={2}>
|
|
34
34
|
<Text color={colors.failure}>{description}</Text>
|
|
35
35
|
</Box>
|
|
36
|
-
|
|
36
|
+
: null}
|
|
37
37
|
|
|
38
|
-
{stack ?
|
|
38
|
+
{stack ?
|
|
39
39
|
<Box flexDirection="column" marginTop={1} marginLeft={2}>
|
|
40
40
|
<Text color={colors.muted}>{stack}</Text>
|
|
41
41
|
</Box>
|
|
42
|
-
|
|
42
|
+
: null}
|
|
43
43
|
|
|
44
|
-
{cause ?
|
|
44
|
+
{cause ?
|
|
45
45
|
<>
|
|
46
46
|
<Box flexDirection="column" marginTop={1} marginLeft={2}>
|
|
47
47
|
<Text color={colors.muted}>{cause.description}</Text>
|
|
48
48
|
</Box>
|
|
49
49
|
|
|
50
|
-
{cause.stack ?
|
|
50
|
+
{cause.stack ?
|
|
51
51
|
<Box flexDirection="column" marginTop={1} marginLeft={2}>
|
|
52
52
|
<Text color={colors.muted}>{cause.stack}</Text>
|
|
53
53
|
</Box>
|
|
54
|
-
|
|
54
|
+
: null}
|
|
55
55
|
</>
|
|
56
|
-
|
|
56
|
+
: null}
|
|
57
57
|
</Box>
|
|
58
58
|
);
|
|
59
59
|
}
|
|
@@ -25,12 +25,16 @@ export function Header({
|
|
|
25
25
|
}: PropsWithChildren<HeaderProps>) {
|
|
26
26
|
return (
|
|
27
27
|
<Box {...boxProps}>
|
|
28
|
-
{icon || showSpinner ?
|
|
28
|
+
{icon || showSpinner ?
|
|
29
29
|
<Box marginRight={1}>
|
|
30
|
-
{showSpinner ?
|
|
31
|
-
|
|
30
|
+
{showSpinner ?
|
|
31
|
+
<Spinner />
|
|
32
|
+
: null}
|
|
33
|
+
{!showSpinner && icon ?
|
|
34
|
+
<Text>{icon}</Text>
|
|
35
|
+
: null}
|
|
32
36
|
</Box>
|
|
33
|
-
|
|
37
|
+
: null}
|
|
34
38
|
<Box>{children}</Box>
|
|
35
39
|
</Box>
|
|
36
40
|
);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import {Box,
|
|
2
|
+
import {Box, type BoxProps, Text} from 'ink';
|
|
3
3
|
|
|
4
|
+
import {type Program} from '../program.js';
|
|
4
5
|
import * as colors from './colors.js';
|
|
5
6
|
import {Header} from './Header.js';
|
|
6
7
|
import * as icons from './icons.js';
|
|
7
|
-
import {type Program} from '../program.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* {@link Help} component props.
|
|
@@ -25,7 +25,7 @@ export function Help({program, ...boxProps}: HelpProps) {
|
|
|
25
25
|
](program.version ?? '?')}`}</Text>
|
|
26
26
|
<Text color={colors.body}>{program.description}</Text>
|
|
27
27
|
|
|
28
|
-
{program.commands.length ?
|
|
28
|
+
{program.commands.length ?
|
|
29
29
|
<>
|
|
30
30
|
<Header icon={icons.info} marginTop={1}>
|
|
31
31
|
<Text color={colors.highlighted}>Usage</Text>
|
|
@@ -62,7 +62,7 @@ export function Help({program, ...boxProps}: HelpProps) {
|
|
|
62
62
|
);
|
|
63
63
|
})}
|
|
64
64
|
</>
|
|
65
|
-
|
|
65
|
+
: null}
|
|
66
66
|
</Box>
|
|
67
67
|
);
|
|
68
68
|
}
|