@jakubmazanec/cli 0.3.0-next.b19329b → 0.3.0-next.b3909a5
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/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/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 +27 -16
- 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 -5
- package/dist/program/CommandAction.js.map +0 -1
- package/dist/program/CommandArguments.js +0 -5
- package/dist/program/CommandArguments.js.map +0 -1
- package/dist/program/CommandOptions.js +0 -5
- 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 -5
- 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 -5
- 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 -5
- package/dist/ui/form/Form.js.map +0 -1
- package/dist/ui/form/FormConfig.js +0 -5
- package/dist/ui/form/FormConfig.js.map +0 -1
- package/dist/ui/form/FormProps.js +0 -5
- package/dist/ui/form/FormProps.js.map +0 -1
- package/dist/ui/form/FormResult.js +0 -5
- 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 -5
- package/dist/ui/form/FormRowsConfig.js.map +0 -1
- package/dist/ui/form/FormValue.js +0 -5
- package/dist/ui/form/FormValue.js.map +0 -1
- package/dist/ui/form/FormValues.js +0 -5
- 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/SelectInput.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.0-next.
|
|
3
|
+
"version": "0.3.0-next.b3909a5",
|
|
4
4
|
"description": "TypeScript-first library for building CLIs.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -11,26 +11,26 @@
|
|
|
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": "2.0.0-next.
|
|
31
|
-
"@jakubmazanec/error": "3.0.0-next.
|
|
32
|
-
"@jakubmazanec/ts-utils": "3.0.0-next.
|
|
33
|
-
"@jakubmazanec/zod-utils": "2.0.0-next.
|
|
30
|
+
"@jakubmazanec/args": "2.0.0-next.b3909a5",
|
|
31
|
+
"@jakubmazanec/error": "3.0.0-next.b3909a5",
|
|
32
|
+
"@jakubmazanec/ts-utils": "3.0.0-next.b3909a5",
|
|
33
|
+
"@jakubmazanec/zod-utils": "2.0.0-next.b3909a5",
|
|
34
34
|
"chalk": "^5.2.0",
|
|
35
35
|
"fs-extra": "^10.0.1",
|
|
36
36
|
"latest-version": "^7.0.0",
|
|
@@ -39,14 +39,25 @@
|
|
|
39
39
|
"zod": "^3.14.4"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@jest/globals": "^29.5.0",
|
|
43
42
|
"@types/fs-extra": "^9.0.13",
|
|
44
43
|
"@types/lodash": "^4.14.195",
|
|
45
44
|
"@types/node": "^20.8.5",
|
|
46
45
|
"@types/react": "^18.0.26",
|
|
46
|
+
"@vitest/coverage-v8": "^1.2.0",
|
|
47
|
+
"concurrently": "^8.0.0",
|
|
48
|
+
"cross-env": "^7.0.3",
|
|
49
|
+
"del-cli": "^5.0.0",
|
|
50
|
+
"esbuild": "^0.19.11",
|
|
51
|
+
"eslint": "^8.56.0",
|
|
47
52
|
"ink": "^4.4.1",
|
|
48
53
|
"ink-testing-library": "^3.0.0",
|
|
49
|
-
"
|
|
54
|
+
"prettier": "^3.0.0",
|
|
55
|
+
"prettier-plugin-packagejson": "^2.4.3",
|
|
56
|
+
"react": "^18.2.0",
|
|
57
|
+
"typedoc": "^0.25.2",
|
|
58
|
+
"typedoc-plugin-markdown": "^3.15.1",
|
|
59
|
+
"typescript": "^5.1.3",
|
|
60
|
+
"vitest": "^1.2.0"
|
|
50
61
|
},
|
|
51
62
|
"peerDependencies": {
|
|
52
63
|
"ink": "4.x",
|
|
@@ -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
|
}
|
|
@@ -6,21 +6,17 @@ import {type FormValues} from './FormValues.js';
|
|
|
6
6
|
|
|
7
7
|
/** A type that creates string literal union type with names of rows that need some props. */
|
|
8
8
|
type FormRowWithPropsNames<C extends FormConfig> = {
|
|
9
|
-
[P in keyof C['rows']]: C['rows'][P]['type'] extends 'text'
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
: C['rows'][P]['type'] extends 'select'
|
|
14
|
-
? P
|
|
15
|
-
: never;
|
|
9
|
+
[P in keyof C['rows']]: C['rows'][P]['type'] extends 'text' ? never
|
|
10
|
+
: C['rows'][P]['type'] extends 'confirm' ? never
|
|
11
|
+
: C['rows'][P]['type'] extends 'select' ? P
|
|
12
|
+
: never;
|
|
16
13
|
}[keyof C['rows']];
|
|
17
14
|
|
|
18
|
-
type FormPropsRow<C extends FormRowConfig> =
|
|
19
|
-
? never
|
|
20
|
-
: C['type'] extends 'confirm'
|
|
21
|
-
?
|
|
22
|
-
|
|
23
|
-
? {
|
|
15
|
+
type FormPropsRow<C extends FormRowConfig> =
|
|
16
|
+
C['type'] extends 'text' ? never
|
|
17
|
+
: C['type'] extends 'confirm' ? never
|
|
18
|
+
: C['type'] extends 'select' ?
|
|
19
|
+
{
|
|
24
20
|
choices: Array<{value: string; label: string}>;
|
|
25
21
|
}
|
|
26
22
|
: never;
|
|
@@ -35,11 +31,9 @@ type FormPropsRows<C extends FormConfig> = Pick<
|
|
|
35
31
|
/**
|
|
36
32
|
* Form component props.
|
|
37
33
|
*/
|
|
38
|
-
export type FormProps<C extends FormConfig> =
|
|
39
|
-
number | string | symbol,
|
|
40
|
-
|
|
41
|
-
>
|
|
42
|
-
? BoxProps & {
|
|
34
|
+
export type FormProps<C extends FormConfig> =
|
|
35
|
+
FormPropsRows<C> extends Record<number | string | symbol, never> ?
|
|
36
|
+
BoxProps & {
|
|
43
37
|
/** Props for each row. */
|
|
44
38
|
rows?: null | undefined;
|
|
45
39
|
|