UNPKG

@glyphtek/scriptit

Version:

A cross-runtime CLI and library for running scripts with environment management, TUI, and support for lambda functions. Optimized for Bun with compatibility for Node.js and Deno.

308 lines (226 loc) 6.97 kB
# Getting Started Welcome to ScriptIt! This guide will help you get up and running with ScriptIt in just a few minutes. ## What is ScriptIt? ScriptIt is a powerful cross-runtime script runner that allows you to execute JavaScript and TypeScript scripts across Bun, Node.js, and Deno with enhanced features like: - 🎨 **Colored console output** for better debugging - 🖥️ **Terminal UI (TUI)** for interactive script management - 🔧 **Environment management** with .env support - ⚡ **Cross-runtime compatibility** with automatic detection - 🚀 **Enhanced script context** with rich environment and utilities ## Installation ### Global Installation (Recommended) Install ScriptIt globally to use the CLI from anywhere: ::: code-group ```bash [Bun] bun add -g @glyphtek/scriptit ``` ```bash [npm] npm install -g @glyphtek/scriptit ``` ```bash [pnpm] pnpm add -g @glyphtek/scriptit ``` ```bash [yarn] yarn global add @glyphtek/scriptit ``` ::: ### Local Installation For use as a library in your project: ::: code-group ```bash [Bun] bun add @glyphtek/scriptit ``` ```bash [npm] npm install @glyphtek/scriptit ``` ```bash [pnpm] pnpm add @glyphtek/scriptit ``` ```bash [yarn] yarn add @glyphtek/scriptit ``` ::: ## Your First Script Let's create a simple script to see ScriptIt in action. ### 1. Create a Script File Create a file called `hello.js`: ```javascript // hello.js - Traditional execute function pattern export const description = "Hello world script with colored console"; export async function execute(context) { // Use the enhanced console with fallback for colored output const console = context.console || global.console; console.log('👋 Hello from ScriptIt!'); console.error('This is an error message'); console.warn('This is a warning'); console.info('This is info'); console.debug('This is debug information'); // Access the enhanced context console.log('Current working directory:', process.cwd()); console.log('Script arguments:', process.argv.slice(2)); return { message: 'Hello script completed successfully!' }; } ``` Or using the default export pattern: ```javascript // hello-default.js - Default export pattern export const description = "Hello world default export script"; export default async function(context) { // Use the enhanced console with fallback for colored output const console = context.console || global.console; console.log('👋 Hello from ScriptIt Default!'); console.info('This script uses the default export pattern'); console.warn('Perfect for existing functions'); return { message: 'Default export script completed!' }; } ``` ### 2. Run with Colored Console ```bash scriptit exec hello.js ``` You'll see beautiful colored output (enabled by default): - 🤍 White for `console.log` - 🔴 Red for `console.error` - 🟡 Yellow for `console.warn` - 🔵 Blue for `console.info` - ⚫ Gray for `console.debug` ### 3. Try the Interactive TUI ```bash scriptit run ``` This opens an interactive terminal interface where you can: - Browse and select scripts - View real-time output - Manage multiple script executions ## Key Features ### Colored Console Output ScriptIt provides colored console output when you use the enhanced context: ```javascript // In your script, use the fallback pattern for colors export async function execute(context) { const console = context.console || global.console; console.log('Regular log message'); // White console.error('Error message'); // Red console.warn('Warning message'); // Yellow console.info('Info message'); // Blue console.debug('Debug message'); // Gray } ``` ### Environment Variables Create a `.env` file in your project: ```env API_KEY=your-secret-key DATABASE_URL=postgresql://localhost:5432/mydb NODE_ENV=development ``` Access them in your script: ```javascript export async function execute(context) { console.log('API Key:', context.env.API_KEY); console.log('Environment:', context.env.NODE_ENV); } ``` ### Runtime Selection ScriptIt automatically detects the best runtime, but you can specify one: ```bash # Force Bun runtime scriptit exec script.ts --runtime bun # Force Node.js runtime scriptit exec script.js --runtime node # Force Deno runtime scriptit exec script.ts --runtime deno ``` ## Library Usage Use ScriptIt programmatically in your applications: ```typescript import { createScriptRunner } from '@glyphtek/scriptit' const runner = await createScriptRunner({ scriptsDir: './scripts', tmpDir: './tmp', consoleInterception: { enabled: true, useColors: true } }); // Execute a script file await runner.executeScript('hello.js') // Execute with parameters await runner.executeScript('process-data.js', { params: { inputFile: 'data.csv', outputDir: './output' }, env: { NODE_ENV: 'production' } }) // Listen to events runner.on('script:beforeExecute', (scriptPath, params) => { console.log(`Starting script: ${scriptPath}`) }) runner.on('script:afterExecute', (scriptPath, result) => { console.log(`Script ${scriptPath} completed successfully`) }) runner.on('script:error', (scriptPath, error) => { console.error(`Script ${scriptPath} failed:`, error.message) }) ``` ## Script Structure Requirements **Important**: ScriptIt requires your scripts to export either: 1. **An `execute` function** (traditional pattern): ```javascript export async function execute(context) { // Your script logic here return result; // optional } ``` 2. **A `default` function** (default export pattern): ```javascript export default async function(context) { // Your script logic here return result; // optional } ``` Scripts without these functions will fail with an error. ## Configuration ### CLI Configuration Create a `scriptit.config.js` file in your project root: ```javascript export default { scriptsDir: './scripts', tmpDir: './tmp', envFiles: ['.env'], consoleInterception: { enabled: true, useColors: true }, timeout: 30000, workingDirectory: process.cwd() } ``` ### Environment-Specific Settings ```javascript export default { development: { runtime: 'bun', consoleColors: true, verbose: true }, production: { runtime: 'node', consoleColors: false, timeout: 60000 } } ``` ## Next Steps Now that you have ScriptIt set up, explore these topics: - [CLI Commands](/cli/commands) - Learn all available CLI options - [Library API](/library/api) - Integrate ScriptIt into your applications - [Colored Console](/features/console-colors) - Deep dive into console features - [Examples](/examples/) - See real-world usage examples ## Need Help? - 📖 Check the [documentation](/introduction) - 🐛 Report issues on [GitHub](https://github.com/glyphtek/scriptit/issues) - 💬 Join discussions on [GitHub Discussions](https://github.com/glyphtek/scriptit/discussions) Happy scripting! 🚀