@@ -59747,7 +59747,25 @@ var PromisePolyfill = class extends Promise {
5974759747};
5974859748
5974959749//
59750+ function getCallSites() {
59751+ const _prepareStackTrace = Error.prepareStackTrace;
59752+ try {
59753+ let result = [];
59754+ Error.prepareStackTrace = (_, callSites) => {
59755+ const callSitesWithoutCurrent = callSites.slice(1);
59756+ result = callSitesWithoutCurrent;
59757+ return callSitesWithoutCurrent;
59758+ };
59759+ new Error().stack;
59760+ return result;
59761+ } finally {
59762+ Error.prepareStackTrace = _prepareStackTrace;
59763+ }
59764+ }
5975059765function createPrompt(view) {
59766+ var _a, _b;
59767+ const callSites = getCallSites();
59768+ const callerFilename = (_b = (_a = callSites[1]) == null ? void 0 : _a.getFileName) == null ? void 0 : _b.call(_a);
5975159769 const prompt = (config, context2 = {}) => {
5975259770 const { input = process.stdin, signal } = context2;
5975359771 const cleanups = /* @__PURE__ */ new Set();
@@ -59785,6 +59803,10 @@ function createPrompt(view) {
5978559803 const nextView = view(config, (value) => {
5978659804 setImmediate(() => resolve(value));
5978759805 });
59806+ if (nextView === void 0) {
59807+ throw new Error(`Prompt functions must return a string.
59808+ at ${callerFilename}`);
59809+ }
5978859810 const [content, bottomContent] = typeof nextView === "string" ? [nextView] : nextView;
5978959811 screen.render(content, bottomContent);
5979059812 effectScheduler.run();
@@ -59997,11 +60019,14 @@ ${page}${helpTipBottom}${choiceDescription}${error2}${import_ansi_escapes2.defau
5999760019//
5999860020var import_external_editor = __toESM(require_main2(), 1);
5999960021import { AsyncResource as AsyncResource4 } from "node:async_hooks";
60022+ var editorTheme = {
60023+ validationFailureMode: "keep"
60024+ };
6000060025var esm_default3 = createPrompt((config, done) => {
6000160026 const { waitForUseInput = true, file: { postfix = config.postfix ?? ".txt", ...fileProps } = {}, validate = () => true } = config;
60002- const theme = makeTheme(config.theme);
60027+ const theme = makeTheme(editorTheme, config.theme);
6000360028 const [status, setStatus] = useState("idle");
60004- const [value, setValue] = useState(config.default || "" );
60029+ const [value = "" , setValue] = useState(config.default);
6000560030 const [errorMsg, setError] = useState();
6000660031 const prefix = usePrefix({ status, theme });
6000760032 function startEditor(rl) {
@@ -60018,7 +60043,11 @@ var esm_default3 = createPrompt((config, done) => {
6001860043 setStatus("done");
6001960044 done(answer);
6002060045 } else {
60021- setValue(answer);
60046+ if (theme.validationFailureMode === "clear") {
60047+ setValue(config.default);
60048+ } else {
60049+ setValue(answer);
60050+ }
6002260051 setError(isValid || "You must provide a valid value");
6002360052 setStatus("idle");
6002460053 }
@@ -60058,22 +60087,34 @@ var esm_default3 = createPrompt((config, done) => {
6005860087});
6005960088
6006060089//
60090+ function getBooleanValue(value, defaultValue) {
60091+ let answer = defaultValue !== false;
60092+ if (/^(y|yes)/i.test(value))
60093+ answer = true;
60094+ else if (/^(n|no)/i.test(value))
60095+ answer = false;
60096+ return answer;
60097+ }
60098+ function boolToString(value) {
60099+ return value ? "Yes" : "No";
60100+ }
6006160101var esm_default4 = createPrompt((config, done) => {
60062- const { transformer = (answer) => answer ? "yes" : "no" } = config;
60102+ const { transformer = boolToString } = config;
6006360103 const [status, setStatus] = useState("idle");
6006460104 const [value, setValue] = useState("");
6006560105 const theme = makeTheme(config.theme);
6006660106 const prefix = usePrefix({ status, theme });
6006760107 useKeypress((key, rl) => {
6006860108 if (isEnterKey(key)) {
60069- let answer = config.default !== false;
60070- if (/^(y|yes)/i.test(value))
60071- answer = true;
60072- else if (/^(n|no)/i.test(value))
60073- answer = false;
60109+ const answer = getBooleanValue(value, config.default);
6007460110 setValue(transformer(answer));
6007560111 setStatus("done");
6007660112 done(answer);
60113+ } else if (key.name === "tab") {
60114+ const answer = boolToString(!getBooleanValue(value, config.default));
60115+ rl.clearLine(0);
60116+ rl.write(answer);
60117+ setValue(answer);
6007760118 } else {
6007860119 setValue(rl.line);
6007960120 }
@@ -60090,9 +60131,12 @@ var esm_default4 = createPrompt((config, done) => {
6009060131});
6009160132
6009260133//
60134+ var inputTheme = {
60135+ validationFailureMode: "keep"
60136+ };
6009360137var esm_default5 = createPrompt((config, done) => {
6009460138 const { required, validate = () => true } = config;
60095- const theme = makeTheme(config.theme);
60139+ const theme = makeTheme(inputTheme, config.theme);
6009660140 const [status, setStatus] = useState("idle");
6009760141 const [defaultValue = "", setDefaultValue] = useState(config.default);
6009860142 const [errorMsg, setError] = useState();
@@ -60111,7 +60155,11 @@ var esm_default5 = createPrompt((config, done) => {
6011160155 setStatus("done");
6011260156 done(answer);
6011360157 } else {
60114- rl.write(value);
60158+ if (theme.validationFailureMode === "clear") {
60159+ setValue("");
60160+ } else {
60161+ rl.write(value);
60162+ }
6011560163 setError(isValid || "You must provide a valid value");
6011660164 setStatus("idle");
6011760165 }
0 commit comments