From 3d41ecad7060a71f206276cbd2a7bfcb238f5270 Mon Sep 17 00:00:00 2001 From: Richard Ward Date: Tue, 30 Dec 2025 20:49:21 +0000 Subject: [PATCH] code: storybook,src,lua (1 files) --- storybook/src/mocks/lua-engine.ts | 109 ++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 storybook/src/mocks/lua-engine.ts diff --git a/storybook/src/mocks/lua-engine.ts b/storybook/src/mocks/lua-engine.ts new file mode 100644 index 000000000..a8782fba0 --- /dev/null +++ b/storybook/src/mocks/lua-engine.ts @@ -0,0 +1,109 @@ +/** + * Mock Lua Engine for Storybook + * + * Provides mock outputs for Lua packages without running actual Lua code. + * This allows Storybook to render Lua packages in a browser environment. + */ + +import type { LuaUIComponent, LuaRenderContext, LuaPackageMetadata } from '../types/lua-types' + +export interface MockLuaResult { + success: boolean + result?: LuaUIComponent + error?: string + logs: string[] +} + +export interface MockPackageDefinition { + metadata: LuaPackageMetadata + /** + * Pre-rendered component trees for different render functions + * Key is the script/render function name (e.g., 'layout.render', 'stats.card') + */ + renders: Record LuaUIComponent> +} + +/** + * Registry of mock packages + */ +const mockPackageRegistry = new Map() + +/** + * Register a mock package + */ +export function registerMockPackage(pkg: MockPackageDefinition): void { + mockPackageRegistry.set(pkg.metadata.packageId, pkg) +} + +/** + * Get a mock package by ID + */ +export function getMockPackage(packageId: string): MockPackageDefinition | undefined { + return mockPackageRegistry.get(packageId) +} + +/** + * List all registered mock packages + */ +export function listMockPackages(): MockPackageDefinition[] { + return Array.from(mockPackageRegistry.values()) +} + +/** + * Execute a mock render function + */ +export function executeMockRender( + packageId: string, + renderName: string, + context: LuaRenderContext +): MockLuaResult { + const pkg = mockPackageRegistry.get(packageId) + if (!pkg) { + return { + success: false, + error: `Package not found: ${packageId}`, + logs: [], + } + } + + const renderFn = pkg.renders[renderName] + if (!renderFn) { + return { + success: false, + error: `Render function not found: ${packageId}/${renderName}`, + logs: [`Available renders: ${Object.keys(pkg.renders).join(', ')}`], + } + } + + try { + const result = renderFn(context) + return { + success: true, + result, + logs: [], + } + } catch (err) { + return { + success: false, + error: err instanceof Error ? err.message : String(err), + logs: [], + } + } +} + +/** + * Create a default context for testing + */ +export function createDefaultContext(overrides?: Partial): LuaRenderContext { + return { + user: { + id: 'mock-1', + username: 'storybook_user', + level: 4, + email: 'user@example.com', + }, + nerdMode: false, + theme: 'light', + ...overrides, + } +}