UNPKG

askeroo

Version:

A modern CLI prompt library with flow control, history navigation, and conditional prompts

113 lines 4.5 kB
import { ask, note, stream } from "../src/index.js"; async function simulateNpmInstall() { const output = await stream({ maxLines: 15, showLineNumbers: false, }); // Simulate npm install output const packages = [ "lodash@4.17.21", "axios@1.5.0", "chalk@5.3.0", "commander@11.0.0", "inquirer@9.2.11", ]; await output.writeLine("npm WARN deprecated inflight@1.0.6"); await new Promise((r) => setTimeout(r, 200)); for (const pkg of packages) { await output.writeLine(`added ${pkg}`); await new Promise((r) => setTimeout(r, 300)); } await output.writeLine(""); await output.writeLine(`added ${packages.length} packages in 2.5s`); await output.writeLine(""); await output.writeLine("15 packages are looking for funding"); await output.writeLine(" run `npm fund` for details"); } async function simulateBuildProcess() { const output = await stream("Building project...", { maxLines: 20, prefixSymbol: "│", }); await output.writeLine("Cleaning output directory..."); await new Promise((r) => setTimeout(r, 300)); await output.writeLine("Compiling TypeScript..."); await new Promise((r) => setTimeout(r, 200)); await output.writeLine(" ✓ src/index.ts"); await new Promise((r) => setTimeout(r, 100)); await output.writeLine(" ✓ src/utils.ts"); await new Promise((r) => setTimeout(r, 100)); await output.writeLine(" ✓ src/types.ts"); await new Promise((r) => setTimeout(r, 100)); await output.writeLine(" ✓ src/components/App.tsx"); await new Promise((r) => setTimeout(r, 200)); await output.writeLine("Bundling assets..."); await new Promise((r) => setTimeout(r, 300)); await output.writeLine(" ✓ styles.css (12.5 KB)"); await new Promise((r) => setTimeout(r, 200)); await output.writeLine(" ✓ images optimized (3 files)"); await new Promise((r) => setTimeout(r, 300)); await output.writeLine("Running tests..."); await new Promise((r) => setTimeout(r, 500)); await output.writeLine(" ✓ 15 tests passed"); await output.complete("✓ Build completed successfully!"); } async function streamWithLineNumbers() { const output = await stream("Server logs", { maxLines: 10, showLineNumbers: true, prefixSymbol: "▸", hideOnCompletion: true, }); // Simulate many log entries - only last 10 will be visible for (let i = 1; i <= 25; i++) { await output.writeLine(`[${new Date().toISOString()}] Request ${i} processed`); await new Promise((r) => setTimeout(r, 150)); } await output.complete("Server stopped"); } async function streamWithProgressUpdates() { const output = await stream("Processing files..."); const files = ["config.json", "data.csv", "image.png", "document.pdf"]; for (let i = 0; i < files.length; i++) { await output.setLabel(`Processing files... (${i + 1}/${files.length})`); await output.writeLine(`Starting ${files[i]}...`); await new Promise((r) => setTimeout(r, 500)); await output.writeLine(`✓ ${files[i]} complete`); await new Promise((r) => setTimeout(r, 200)); } await output.complete("All files processed!"); } async function streamWithError() { const output = await stream("Running tests..."); await output.writeLine("Starting test suite..."); await new Promise((r) => setTimeout(r, 300)); await output.writeLine("✓ test/auth.test.ts (5 passed)"); await new Promise((r) => setTimeout(r, 300)); await output.writeLine("✓ test/api.test.ts (8 passed)"); await new Promise((r) => setTimeout(r, 300)); await output.writeLine("✗ test/database.test.ts (2 passed, 1 failed)"); await new Promise((r) => setTimeout(r, 200)); await output.writeLine(""); await output.writeLine(" FAIL test/database.test.ts"); await output.writeLine(" ● Database › should connect"); await output.writeLine(" Connection timeout after 5000ms"); await output.error("Test suite failed!"); } // Run examples const flow = async () => { await note("[Stream]{dim}"); await streamWithLineNumbers(); await note("hello"); await simulateNpmInstall(); }; (async () => { try { await ask(flow); } catch (error) { console.error("Error:", error); process.exit(1); } })(); //# sourceMappingURL=stream.js.map