芝麻web文件管理V1.00
编辑当前文件:/home/pulsehostuk9/public_html/invoicer.pulsehost.co.uk/vendor/laravel/prompts/src/Prompt.php
capturePreviousNewLines(); if (static::shouldFallback()) { return $this->fallback(); } static::$interactive ??= stream_isatty(STDIN); if (! static::$interactive) { return $this->default(); } $this->checkEnvironment(); try { static::terminal()->setTty('-icanon -isig -echo'); } catch (Throwable $e) { static::output()->writeln("
{$e->getMessage()}
"); static::fallbackWhen(true); return $this->fallback(); } $this->hideCursor(); $this->render(); while (($key = static::terminal()->read()) !== null) { $continue = $this->handleKeyPress($key); $this->render(); if ($continue === false || $key === Key::CTRL_C) { if ($key === Key::CTRL_C) { if (isset(static::$cancelUsing)) { return (static::$cancelUsing)(); } else { static::terminal()->exit(); } } if ($key === Key::CTRL_U && self::$revertUsing) { throw new FormRevertedException(); } return $this->value(); } } } finally { $this->clearListeners(); } } /** * Register a callback to be invoked when a user cancels a prompt. */ public static function cancelUsing(?Closure $callback): void { static::$cancelUsing = $callback; } /** * How many new lines were written by the last output. */ public function newLinesWritten(): int { return $this->newLinesWritten; } /** * Capture the number of new lines written by the last output. */ protected function capturePreviousNewLines(): void { $this->newLinesWritten = method_exists(static::output(), 'newLinesWritten') ? static::output()->newLinesWritten() : 1; } /** * Set the output instance. */ public static function setOutput(OutputInterface $output): void { self::$output = $output; } /** * Get the current output instance. */ protected static function output(): OutputInterface { return self::$output ??= new ConsoleOutput(); } /** * Write output directly, bypassing newline capture. */ protected static function writeDirectly(string $message): void { match (true) { method_exists(static::output(), 'writeDirectly') => static::output()->writeDirectly($message), method_exists(static::output(), 'getOutput') => static::output()->getOutput()->write($message), default => static::output()->write($message), }; } /** * Get the terminal instance. */ public static function terminal(): Terminal { return static::$terminal ??= new Terminal(); } /** * Set the custom validation callback. */ public static function validateUsing(Closure $callback): void { static::$validateUsing = $callback; } /** * Revert the prompt using the given callback. * * @internal */ public static function revertUsing(Closure $callback): void { static::$revertUsing = $callback; } /** * Clear any previous revert callback. * * @internal */ public static function preventReverting(): void { static::$revertUsing = null; } /** * Render the prompt. */ protected function render(): void { $this->terminal()->initDimensions(); $frame = $this->renderTheme(); if ($frame === $this->prevFrame) { return; } if ($this->state === 'initial') { static::output()->write($frame); $this->state = 'active'; $this->prevFrame = $frame; return; } $terminalHeight = $this->terminal()->lines(); $previousFrameHeight = count(explode(PHP_EOL, $this->prevFrame)); $renderableLines = array_slice(explode(PHP_EOL, $frame), abs(min(0, $terminalHeight - $previousFrameHeight))); $this->moveCursorToColumn(1); $this->moveCursorUp(min($terminalHeight, $previousFrameHeight) - 1); $this->eraseDown(); $this->output()->write(implode(PHP_EOL, $renderableLines)); $this->prevFrame = $frame; } /** * Submit the prompt. */ protected function submit(): void { $this->validate($this->value()); if ($this->state !== 'error') { $this->state = 'submit'; } } /** * Handle a key press and determine whether to continue. */ private function handleKeyPress(string $key): bool { if ($this->state === 'error') { $this->state = 'active'; } $this->emit('key', $key); if ($this->state === 'submit') { return false; } if ($key === Key::CTRL_U) { if (! self::$revertUsing) { $this->state = 'error'; $this->error = 'This cannot be reverted.'; return true; } $this->state = 'cancel'; $this->cancelMessage = 'Reverted.'; call_user_func(self::$revertUsing); return false; } if ($key === Key::CTRL_C) { $this->state = 'cancel'; return false; } if ($this->validated) { $this->validate($this->value()); } return true; } /** * Validate the input. */ private function validate(mixed $value): void { $this->validated = true; if ($this->required !== false && $this->isInvalidWhenRequired($value)) { $this->state = 'error'; $this->error = is_string($this->required) && strlen($this->required) > 0 ? $this->required : 'Required.'; return; } if (! isset($this->validate) && ! isset(static::$validateUsing)) { return; } $error = match (true) { is_callable($this->validate) => ($this->validate)($value), isset(static::$validateUsing) => (static::$validateUsing)($this), default => throw new RuntimeException('The validation logic is missing.'), }; if (! is_string($error) && ! is_null($error)) { throw new RuntimeException('The validator must return a string or null.'); } if (is_string($error) && strlen($error) > 0) { $this->state = 'error'; $this->error = $error; } } /** * Determine whether the given value is invalid when the prompt is required. */ protected function isInvalidWhenRequired(mixed $value): bool { return $value === '' || $value === [] || $value === false || $value === null; } /** * Check whether the environment can support the prompt. */ private function checkEnvironment(): void { if (PHP_OS_FAMILY === 'Windows') { throw new RuntimeException('Prompts is not currently supported on Windows. Please use WSL or configure a fallback.'); } } /** * Restore the cursor and terminal state. */ public function __destruct() { $this->restoreCursor(); static::terminal()->restoreTty(); } }