Skip to main content

stacks-repl

Use when working with the Stacks REPL - interactive TypeScript sessions, tinker sessions, debugging, or exploring the framework interactively. Covers @stacksjs/repl and @stacksjs/tinker.

معلومات المصدر

المستودع
stacksjs/stacks
آخر نشاط في المصدر
١٠ أكتوبر ٢٠٢٦ في ١٧:٠١
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٦٣٣
التفرعات
٢٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
stacks-repl
description
Use when working with the Stacks REPL - interactive TypeScript sessions, tinker sessions, debugging, or exploring the framework interactively. Covers @stacksjs/repl and @stacksjs/tinker.
license
MIT
compatibility
Bun >= 1.3.0, TypeScript
allowed-tools
Read Edit Write Bash Grep Glob
# Stacks REPL / Tinker ## Key Paths - REPL package: `storage/framework/core/repl/src/` - Tinker package: `storage/framework/core/tinker/src/` - Packages: `@stacksjs/repl`, `@stacksjs/tinker` ## API ```typescript import { startRepl } from '@stacksjs/repl' interface ReplConfig extends TinkerConfig { loadFile?: string // Path to file to preload before starting } async function startRepl(config?: ReplConfig): Promise<{ exitCode: number }> ``` ### How It Works 1. If `config.loadFile` is specified, reads the file content 2. Merges file content into `config.eval` for evaluation 3. Starts the Bun session; a nonempty eval/print selects non-interactive mode 4. Returns the process exit code when the session ends ## Re-exports from @stacksjs/tinker ```typescript import { startTinker, // Start a tinker session tinkerEval, // Evaluate an expression tinkerPrint, // Print a result getHistoryPath, // Get REPL history file path readHistory, // Read command history appendHistory, // Append to command history clearHistory, // Clear command history } from '@stacksjs/repl' import type { TinkerConfig } from '@stacksjs/repl' ``` ## CLI Commands ```bash buddy tinker # Start interactive REPL session buddy tinker --load file.ts # Preload a file before starting ``` ## Usage Inside the REPL, all framework modules are available: ```typescript // Query the database const users = await db.selectFrom('users').get() // Use models const post = await Post.find(1) // Access config console.log(config.app.name) // Use faker for quick testing const email = faker.internet.email() ``` ## Gotchas - **Tinker is the user-facing command, REPL is the engine** - `buddy tinker` calls `startRepl()` under the hood - **All framework imports available** - models, database, config, faker, etc. are preloaded - **History is persisted** - REPL history is saved to disk via `getHistoryPath()` - **File loading** - loadFile is composed into eval in the current wrapper and may select non-interactive mode; inspect that contract before expecting a prompt - **Bun runtime** - the REPL runs in Bun's JavaScript runtime, not Node.js ## Native options and bootstrap limits ReplConfig also exposes bootstrap and showRoutes; startBunRepl delegates directly to startTinker. TinkerConfig supports eval/print, cwd, custom preload, history options and a banner setting. tinkerEval/tinkerPrint return the subprocess exit code, not the JavaScript expression's value. The configured database is real; REPL mutations are not automatically isolated test data. The current startRepl implementation combines loadFile/bootstrap/showRoutes into tinkerConfig.eval. startTinker treats nonempty eval as non-interactive, so do not promise those options perform setup and then leave a prompt open. Use a normal startRepl session and explicit imports when that behavior matters, or inspect the selected CLI wrapper before supplying an eval script. Preload globals are assembled by the REPL and may be absent when their import fails; this is a special interactive context, not the normal application's automatic-global list. History is persisted under getHistoryPath and defaults to .stacks_tinker_history in the home directory, with owner-only permissions when created. Avoid evaluating or retaining secrets in history. Source: `storage/framework/core/repl/src/index.ts` and core/tinker/src/index.ts. Tests: core/repl/tests/repl.test.ts and the tinker package's existing tests.
عرض على GitHub