From 165e3656d5bdd090b2456900f5b63418cd56ffd4 Mon Sep 17 00:00:00 2001 From: HAL <68320771+HALQME@users.noreply.github.com> Date: Wed, 24 Dec 2025 12:06:53 +0900 Subject: [PATCH 1/2] Refactor module imports and exports --- src/components/component.ts | 5 ++-- src/components/core.ts | 4 +-- src/components/index.ts | 13 +++++++--- src/components/lifecycle.ts | 2 +- src/index.ts | 18 +++---------- src/layout-engine/index.ts | 2 -- src/layout/focus.ts | 7 +++-- src/layout/index.ts | 25 ++++-------------- src/layout/renderer.ts | 7 ++--- src/layout/types.ts | 14 ++++++++++ src/reactivity/index.ts | 15 ++--------- src/renderer/index.ts | 31 +++++++++++++++------- src/renderer/types/buffer.ts | 2 +- src/runtime/app.ts | 6 ++--- src/runtime/context.ts | 6 ++--- src/runtime/error-boundary.ts | 7 +++-- src/runtime/index.ts | 12 ++++----- src/runtime/lifecycle.ts | 4 +-- src/runtime/loop.ts | 14 +++++----- src/runtime/platform-adapter.ts | 2 +- src/runtime/profiler.ts | 2 +- src/runtime/render-loop.ts | 19 +++++--------- src/runtime/terminal-adapter.ts | 6 ++--- src/runtime/types.ts | 8 +++--- src/terminal/index.ts | 34 ++++++++++++++++++++++--- src/types/index.ts | 32 +++++++++++++++++++++-- src/view/base.ts | 8 +++--- src/view/types/focus.ts | 4 +-- tests/e2e/helpers.ts | 4 +-- tests/units/layout-engine/index.test.ts | 3 ++- tests/units/layout/focus.test.ts | 3 +-- tests/units/layout/index.test.ts | 2 +- tests/units/layout/renderer.test.ts | 3 ++- tests/units/runtime/app.test.ts | 4 +-- tests/units/runtime/render-loop.test.ts | 3 ++- 35 files changed, 185 insertions(+), 146 deletions(-) create mode 100644 src/layout/types.ts diff --git a/src/components/component.ts b/src/components/component.ts index 86a47af..178bd6c 100644 --- a/src/components/component.ts +++ b/src/components/component.ts @@ -1,7 +1,6 @@ -import type { KeyEvent } from "@/terminal"; +import type { KeyEvent } from "../terminal/types/key-event"; import type { Component, ComponentInitContext, ExitReason, RuntimeContext } from "./core"; -import type { ViewElement } from "@/view/types/elements"; -import { isBlock } from "@/view/types/elements"; +import { isBlock, type ViewElement } from "../view/types/elements"; import { createComponentInstance, invokeHooks, diff --git a/src/components/core.ts b/src/components/core.ts index 3a76196..1c6d051 100644 --- a/src/components/core.ts +++ b/src/components/core.ts @@ -1,5 +1,5 @@ -import type { KeyEvent } from "@/terminal"; -import type { ViewElement } from "@/view/types/elements"; +import type { KeyEvent } from "../terminal/types/key-event"; +import type { ViewElement } from "../view/types/elements"; export type KeyHandler = (key: KeyEvent) => void | boolean; export type TickHandler = () => void; diff --git a/src/components/index.ts b/src/components/index.ts index ed53728..44b6f6f 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -1,3 +1,10 @@ -export * from "./component"; -export * from "./lifecycle"; -export * from "./core"; +export { + defineComponent, + handleComponentKey, + isComponent, + mountComponent, + renderComponent, + unmountComponent, +} from "./component"; +export { createComponent } from "./core"; +export { onBeforeUpdate, onKey, onMounted, onTick, onUnmounted, onUpdated } from "./lifecycle"; diff --git a/src/components/lifecycle.ts b/src/components/lifecycle.ts index c2e7f36..ccc651e 100644 --- a/src/components/lifecycle.ts +++ b/src/components/lifecycle.ts @@ -5,7 +5,7 @@ * These hooks are called during different phases of a component's lifecycle. */ -import type { KeyEvent } from "@/terminal"; +import type { KeyEvent } from "../terminal/types/key-event"; export type LifecycleHook = () => void; export type KeyEventHook = (event: KeyEvent) => void | boolean; diff --git a/src/index.ts b/src/index.ts index d638418..cb78f5c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,8 +2,8 @@ * btuin core entry point */ -export { createApp, App } from "./runtime/app"; -export { defineComponent } from "./components/component"; +export { createApp, App } from "./runtime"; +export { defineComponent } from "./components"; export * from "./view"; export { @@ -13,18 +13,6 @@ export { onTick, onUnmounted, onUpdated, -} from "./components/lifecycle"; +} from "./components"; export * from "./reactivity"; - -export type { - Component, - ComponentDefinition, - ComponentInitContext, - ExitReason, - KeyHandler, - RuntimeContext, - TickHandler, -} from "./components/core"; -export type { App as AppType, CreateAppOptions, MountOptions } from "./runtime/types"; -export type { KeyEvent } from "./terminal"; diff --git a/src/layout-engine/index.ts b/src/layout-engine/index.ts index 3434d1d..f461d76 100644 --- a/src/layout-engine/index.ts +++ b/src/layout-engine/index.ts @@ -3,8 +3,6 @@ import path from "node:path"; import type { LayoutInputNode, ComputedLayout, Dimension, LayoutStyle } from "./types"; import { existsSync } from "node:fs"; -export * from "./types"; - // --- Data Layout Constants (must match Rust) --- // prettier-ignore enum StyleProp { diff --git a/src/layout/focus.ts b/src/layout/focus.ts index 398fcdf..ac024be 100644 --- a/src/layout/focus.ts +++ b/src/layout/focus.ts @@ -1,7 +1,6 @@ -import type { ViewElement } from "@/view/types/elements"; -import type { ComputedLayout } from "@/layout-engine"; -import type { FocusTarget } from "@/view/types/focus"; -import { isBlock } from "@/view/types/elements"; +import type { ComputedLayout } from "../layout-engine/types"; +import { isBlock, type ViewElement } from "../view/types/elements"; +import type { FocusTarget } from "../view/types/focus"; function visitFocusTargets( element: ViewElement, diff --git a/src/layout/index.ts b/src/layout/index.ts index a56bdb6..74ba145 100644 --- a/src/layout/index.ts +++ b/src/layout/index.ts @@ -1,18 +1,11 @@ -import { - computeLayout as computeLayoutWasm, - type LayoutInputNode, - type ComputedLayout, - type Dimension, -} from "@/layout-engine"; -import { isBlock, isText, type ViewElement, type BlockView } from "@/view/types/elements"; -import { measureTextWidth } from "@/renderer/grapheme"; +import { computeLayout as computeLayoutWasm } from "../layout-engine"; +import type { ComputedLayout, Dimension, LayoutInputNode } from "../layout-engine/types"; +import { measureTextWidth } from "../renderer/grapheme"; +import { isBlock, isText, type BlockView, type ViewElement } from "../view/types/elements"; +import type { LayoutContainerSize, LayoutEngine, LayoutOptions } from "./types"; export { renderElement } from "./renderer"; -export interface LayoutEngine { - computeLayout(root: LayoutInputNode): ComputedLayout; -} - function ensureKeys(element: ViewElement, prefix: string) { if (!element.identifier && !element.key) { element.identifier = prefix; @@ -33,14 +26,6 @@ function ensureKeys(element: ViewElement, prefix: string) { } } -export interface LayoutContainerSize { - width: number; - height: number; -} - -export interface LayoutOptions { - inline?: boolean; -} function isPercent(value: unknown): value is string { return typeof value === "string" && /^\s*\d+(\.\d+)?%\s*$/.test(value); diff --git a/src/layout/renderer.ts b/src/layout/renderer.ts index 5fedc3d..abf37da 100644 --- a/src/layout/renderer.ts +++ b/src/layout/renderer.ts @@ -1,6 +1,7 @@ -import { type ViewElement, isBlock, isText } from "@/view/types/elements"; -import type { ComputedLayout } from "@/layout-engine"; -import { type Buffer2D, drawText, fillRect } from "@/renderer"; +import type { ComputedLayout } from "../layout-engine/types"; +import { drawText, fillRect } from "../renderer"; +import type { Buffer2D } from "../renderer/types"; +import { isBlock, isText, type ViewElement } from "../view/types/elements"; /** * Draw the element tree to the buffer. diff --git a/src/layout/types.ts b/src/layout/types.ts new file mode 100644 index 0000000..3a97fae --- /dev/null +++ b/src/layout/types.ts @@ -0,0 +1,14 @@ +import type { ComputedLayout, LayoutInputNode } from "../layout-engine/types"; + +export interface LayoutEngine { + computeLayout(root: LayoutInputNode): ComputedLayout; +} + +export interface LayoutContainerSize { + width: number; + height: number; +} + +export interface LayoutOptions { + inline?: boolean; +} diff --git a/src/reactivity/index.ts b/src/reactivity/index.ts index 2db98ae..23bfc2b 100644 --- a/src/reactivity/index.ts +++ b/src/reactivity/index.ts @@ -24,25 +24,17 @@ * ``` */ -export { reactive, isReactive, toRaw, shallowReactive, type ReactiveFlags } from "./reactive"; +export { reactive, isReactive, toRaw, shallowReactive } from "./reactive"; -export { ref, shallowRef, isRef, unref, toRef, toRefs, customRef, type Ref } from "./ref"; +export { ref, shallowRef, isRef, unref, toRef, toRefs, customRef } from "./ref"; export { computed, - type ComputedRef, - type ComputedGetter, - type ComputedSetter, - type ComputedUnwrap, } from "./computed"; export { watch, watchEffect, - type WatchSource, - type WatchCallback, - type WatchOptions, - type WatchStopHandle, } from "./watch"; export { @@ -55,7 +47,4 @@ export { resetTracking, getCurrentEffect, ReactiveEffect, - type EffectFn, - type EffectScheduler, - type ReactiveEffectOptions, } from "./effect"; diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 28a8c3f..dbbc8b0 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -1,9 +1,22 @@ -export * from "./buffer"; -export * from "./colors"; -export * from "./diff"; -export * from "./inline-diff"; -export * from "./grapheme"; -export * from "./grid"; -export * from "./pool"; -export * from "./sanitize"; -export type * from "./types"; +export { FlatBuffer } from "./buffer"; +export { resolveColor } from "./colors"; +export { renderDiff } from "./diff"; +export { createInlineDiffRenderer } from "./inline-diff"; +export { + measureGraphemeWidth, + measureTextWidth, + segmentGraphemes, + truncateTextWidth, + wrapTextWidth, +} from "./grapheme"; +export { cloneBuffer, createBuffer, drawText, fillRect, setCell } from "./grid"; +export { BufferPool, getGlobalBufferPool, resetGlobalBufferPool, setGlobalBufferPool } from "./pool"; +export { + createSanitizer, + escapeSpecial, + isSafeInput, + sanitizeAnsi, + sanitizeControl, + sanitizeInput, + truncateInput, +} from "./sanitize"; diff --git a/src/renderer/types/buffer.ts b/src/renderer/types/buffer.ts index 5e68d2b..2a5cba1 100644 --- a/src/renderer/types/buffer.ts +++ b/src/renderer/types/buffer.ts @@ -1,4 +1,4 @@ -import { FlatBuffer } from "@/renderer/buffer"; +import { FlatBuffer } from "../buffer"; /** * Public buffer type used throughout the renderer. */ diff --git a/src/runtime/app.ts b/src/runtime/app.ts index 1492c96..1f67f70 100644 --- a/src/runtime/app.ts +++ b/src/runtime/app.ts @@ -1,6 +1,6 @@ -import type { Component, ComponentInitContext } from "@/components/core"; -import type { ViewElement } from "@/view/types/elements"; -import { mountComponent } from "@/components"; +import type { Component, ComponentInitContext } from "../components/core"; +import { mountComponent } from "../components"; +import type { ViewElement } from "../view/types/elements"; import { createErrorContext, createErrorHandler } from "./error-boundary"; import { createDefaultTerminalAdapter } from "./terminal-adapter"; import { createDefaultPlatformAdapter, type PlatformAdapter } from "./platform-adapter"; diff --git a/src/runtime/context.ts b/src/runtime/context.ts index 55c5546..19ddc3f 100644 --- a/src/runtime/context.ts +++ b/src/runtime/context.ts @@ -1,6 +1,6 @@ -import type { ReactiveEffect } from "@/reactivity"; -import type { ExitReason } from "@/components/core"; -import type { MountedComponent } from "@/components"; +import type { ExitReason } from "../components/core"; +import type { MountedComponent } from "../components/component"; +import type { ReactiveEffect } from "../reactivity/effect"; import type { TerminalAdapter } from "./terminal-adapter"; import type { PlatformAdapter } from "./platform-adapter"; import type { Profiler } from "./profiler"; diff --git a/src/runtime/error-boundary.ts b/src/runtime/error-boundary.ts index 01e02f6..b9c42dc 100644 --- a/src/runtime/error-boundary.ts +++ b/src/runtime/error-boundary.ts @@ -4,6 +4,9 @@ * Handles error contexts and provides error handling utilities for the runtime. */ +import { createWriteStream } from "node:fs"; +import { getOriginalStderr } from "../terminal"; + /** * Error context information for error handlers */ @@ -28,10 +31,6 @@ export type ErrorHandler = (context: ErrorContext) => void; * @param errorLogPath - Optional file path to write error logs to * @returns Error handling function */ -import { createWriteStream } from "fs"; -import { getOriginalStderr } from "@/terminal"; - -// ... export function createErrorHandler( userHandler: ErrorHandler | undefined, diff --git a/src/runtime/index.ts b/src/runtime/index.ts index 5ea2914..9269908 100644 --- a/src/runtime/index.ts +++ b/src/runtime/index.ts @@ -1,6 +1,6 @@ -export * from "./app"; -export * from "./error-boundary"; -export * from "./platform-adapter"; -export * from "./terminal-adapter"; -export * from "./profiler"; -export * from "./render-loop"; +export { App, app, createApp } from "./app"; +export { createErrorContext, createErrorHandler } from "./error-boundary"; +export { createDefaultPlatformAdapter } from "./platform-adapter"; +export { createDefaultTerminalAdapter } from "./terminal-adapter"; +export { Profiler } from "./profiler"; +export { createRenderer } from "./render-loop"; diff --git a/src/runtime/lifecycle.ts b/src/runtime/lifecycle.ts index 8d8e286..bef4fe5 100644 --- a/src/runtime/lifecycle.ts +++ b/src/runtime/lifecycle.ts @@ -1,5 +1,5 @@ -import type { ExitReason } from "@/components/core"; -import { unmountComponent } from "@/components"; +import type { ExitReason } from "../components/core"; +import { unmountComponent } from "../components"; import type { AppContext } from "./context"; export class LifecycleManager { diff --git a/src/runtime/loop.ts b/src/runtime/loop.ts index 66044fe..6b1d854 100644 --- a/src/runtime/loop.ts +++ b/src/runtime/loop.ts @@ -1,14 +1,14 @@ -import type { KeyEvent } from "@/terminal"; -import { stop } from "@/reactivity"; -import { Block } from "@/view/primitives"; -import { handleComponentKey, renderComponent } from "@/components"; +import type { KeyEvent } from "../terminal/types/key-event"; +import { stop } from "../reactivity"; +import { handleComponentKey, renderComponent } from "../components"; +import { createInlineDiffRenderer } from "../renderer"; +import { layout } from "../layout"; +import { Block } from "../view/primitives"; +import type { ViewElement } from "../view/types/elements"; import { createRenderer } from "./render-loop"; import { createErrorContext, createErrorHandler } from "./error-boundary"; import type { AppContext } from "./context"; -import type { ViewElement } from "@/view/types/elements"; import type { ILoopManager } from "./types"; -import { createInlineDiffRenderer } from "@/renderer"; -import { layout } from "@/layout"; export class LoopManager implements ILoopManager { private ctx: AppContext; diff --git a/src/runtime/platform-adapter.ts b/src/runtime/platform-adapter.ts index c9179b9..f8f566d 100644 --- a/src/runtime/platform-adapter.ts +++ b/src/runtime/platform-adapter.ts @@ -1,4 +1,4 @@ -import { getUiOutputStream } from "@/terminal/tty-streams"; +import { getUiOutputStream } from "../terminal/tty-streams"; export interface PlatformAdapter { onStdoutResize(handler: () => void): () => void; diff --git a/src/runtime/profiler.ts b/src/runtime/profiler.ts index bcb864e..47e24f6 100644 --- a/src/runtime/profiler.ts +++ b/src/runtime/profiler.ts @@ -1,6 +1,6 @@ -import type { Buffer2D } from "@/renderer"; import path from "node:path"; import { mkdirSync, writeFileSync } from "node:fs"; +import type { Buffer2D } from "../renderer/types"; export interface ProfileOptions { /** diff --git a/src/runtime/render-loop.ts b/src/runtime/render-loop.ts index d4dd1ba..8866699 100644 --- a/src/runtime/render-loop.ts +++ b/src/runtime/render-loop.ts @@ -1,17 +1,12 @@ -import { effect, stop, type ReactiveEffect } from "@/reactivity"; -import { - FlatBuffer, - getGlobalBufferPool, - renderDiff, - type Buffer2D, - type DiffStats, -} from "@/renderer"; -import { layout, renderElement } from "@/layout"; -import type { ViewElement } from "@/view/types/elements"; -import { isBlock } from "@/view/types/elements"; +import { effect, stop, type ReactiveEffect } from "../reactivity"; +import { FlatBuffer, getGlobalBufferPool, renderDiff } from "../renderer"; +import { layout, renderElement } from "../layout"; +import type { DiffStats } from "../renderer/diff"; +import type { Buffer2D } from "../renderer/types"; +import { isBlock, type ViewElement } from "../view/types/elements"; import { createErrorContext } from "./error-boundary"; import type { Profiler } from "./profiler"; -import type { ComputedLayout } from "@/layout-engine"; +import type { ComputedLayout } from "../layout-engine/types"; export interface BufferPoolLike { acquire(): Buffer2D; diff --git a/src/runtime/terminal-adapter.ts b/src/runtime/terminal-adapter.ts index c5b0373..d6b71b2 100644 --- a/src/runtime/terminal-adapter.ts +++ b/src/runtime/terminal-adapter.ts @@ -1,6 +1,6 @@ -import type { KeyEvent } from "@/terminal"; -import * as terminal from "@/terminal"; -import type { InputParser } from "@/terminal/parser/types"; +import type { KeyEvent } from "../terminal/types/key-event"; +import * as terminal from "../terminal"; +import type { InputParser } from "../terminal/parser/types"; export interface TerminalAdapter { setupRawMode(): void; diff --git a/src/runtime/types.ts b/src/runtime/types.ts index 0aaef2d..74a8fe6 100644 --- a/src/runtime/types.ts +++ b/src/runtime/types.ts @@ -1,10 +1,10 @@ -import type { ComponentInitContext, ExitReason } from "@/components/core"; -import type { MountedComponent } from "@/components"; +import type { ComponentInitContext, ExitReason } from "../components/core"; +import type { MountedComponent } from "../components/component"; +import type { InputParser } from "../terminal/parser/types"; +import type { ViewElement } from "../view/types/elements"; import type { TerminalAdapter } from "./terminal-adapter"; import type { PlatformAdapter } from "./platform-adapter"; import type { ProfileOptions } from "./profiler"; -import type { InputParser } from "@/terminal/parser/types"; -import type { ViewElement } from "@/view/types/elements"; export interface ILoopManager { start(rows: number, cols: number): void; diff --git a/src/terminal/index.ts b/src/terminal/index.ts index 7731e2d..0e51477 100644 --- a/src/terminal/index.ts +++ b/src/terminal/index.ts @@ -1,4 +1,30 @@ -export * from "./io"; -export * from "./raw"; -export * from "./capture"; -export * from "./types"; +export { + clearScreen, + disableBracketedPaste, + enableBracketedPaste, + getTerminalSize, + hideCursor, + moveCursor, + showCursor, + write, +} from "./io"; +export { cleanup, cleanupWithoutClear, onKey, resetKeyHandlers, setInputParser, setupRawMode } from "./raw"; +export { + bypassStderrWrite, + bypassStdoutWrite, + clearCapturedOutput, + createConsoleCapture, + disableTestMode, + disposeSingletonCapture, + enableTestMode, + getCapturedOutput, + getConsoleCaptureInstance, + getOriginalStderr, + getOriginalStdout, + isCapturing, + onStderr, + onStdout, + patchConsole, + startCapture, + stopCapture, +} from "./capture"; diff --git a/src/types/index.ts b/src/types/index.ts index 4e25175..b0aedb0 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,2 +1,30 @@ -export * from "@/view/types/elements"; -export * from "@/view/types/focus"; +export type { Component, ComponentDefinition, ComponentInitContext } from "../components/core"; +export type { ExitReason, KeyHandler, RuntimeContext, TickHandler } from "../components/core"; +export type { DefineComponentOptions, MountedComponent, PropsOptions } from "../components/component"; +export type { PropDefinition, RenderFunction } from "../components/component"; +export type { KeyEventHook, LifecycleHook, TickHook } from "../components/lifecycle"; + +export type { LayoutContainerSize, LayoutEngine, LayoutOptions } from "../layout/types"; +export type { ComputedLayout, Dimension, LayoutInputNode, LayoutStyle, Rect } from "../layout-engine/types"; + +export type { + App as AppType, + AppConfig, + CreateAppOptions, + ILoopManager, + MountOptions, + RenderMode, +} from "../runtime/types"; +export type { PlatformAdapter } from "../runtime/platform-adapter"; +export type { TerminalAdapter } from "../runtime/terminal-adapter"; +export type { FrameMetrics, ProfileOptions, ProfileOutput } from "../runtime/profiler"; + +export type { Buffer2D, ColorValue, OutlineOptions } from "../renderer/types"; + +export type { InputParser } from "../terminal/parser/types"; +export type { KeyEvent, KeyHandler as TerminalKeyHandler } from "../terminal/types/key-event"; + +export type { BaseView, ViewProps } from "../view/base"; +export type { FocusContext, FocusHandler, FocusTarget } from "../view/types/focus"; +export type { BlockView, InputView, TextView, ViewElement } from "../view/types/elements"; +export type { BlockElement } from "../view/primitives/block"; diff --git a/src/view/base.ts b/src/view/base.ts index bb59568..2a8f59a 100644 --- a/src/view/base.ts +++ b/src/view/base.ts @@ -1,7 +1,7 @@ -import type { KeyEventHook } from "@/components/lifecycle"; -import type { KeyEvent } from "@/terminal"; -import type { OutlineOptions } from "@/renderer"; -import type { Dimension, LayoutStyle } from "@/layout-engine"; +import type { KeyEventHook } from "../components/lifecycle"; +import type { Dimension, LayoutStyle } from "../layout-engine/types"; +import type { OutlineOptions } from "../renderer/types"; +import type { KeyEvent } from "../terminal/types/key-event"; // 1. 基本的なプロパティ定義(スタイリング以外) export interface ViewProps { diff --git a/src/view/types/focus.ts b/src/view/types/focus.ts index 58c6477..0722ba9 100644 --- a/src/view/types/focus.ts +++ b/src/view/types/focus.ts @@ -1,5 +1,5 @@ -import type { KeyEvent } from "@/terminal"; -import type { Rect } from "@/layout-engine"; +import type { Rect } from "../../layout-engine/types"; +import type { KeyEvent } from "../../terminal/types/key-event"; import type { ViewElement } from "./elements"; export interface FocusContext { diff --git a/tests/e2e/helpers.ts b/tests/e2e/helpers.ts index bcdf416..5073484 100644 --- a/tests/e2e/helpers.ts +++ b/tests/e2e/helpers.ts @@ -1,6 +1,4 @@ -import type { TerminalAdapter } from "@/runtime/terminal-adapter"; -import type { KeyEvent } from "@/terminal"; -import type { PlatformAdapter } from "@/runtime/platform-adapter"; +import type { KeyEvent, PlatformAdapter, TerminalAdapter } from "@/types"; export type MockTerminal = TerminalAdapter & { output: string; diff --git a/tests/units/layout-engine/index.test.ts b/tests/units/layout-engine/index.test.ts index 44acad2..ae0724d 100644 --- a/tests/units/layout-engine/index.test.ts +++ b/tests/units/layout-engine/index.test.ts @@ -1,5 +1,6 @@ import { describe, it, expect } from "bun:test"; -import { computeLayout, type LayoutInputNode } from "@/layout-engine"; +import { computeLayout } from "@/layout-engine"; +import type { LayoutInputNode } from "@/types"; describe("Layout Engine", () => { it("should compute a simple layout", () => { diff --git a/tests/units/layout/focus.test.ts b/tests/units/layout/focus.test.ts index e30bc0e..db27da3 100644 --- a/tests/units/layout/focus.test.ts +++ b/tests/units/layout/focus.test.ts @@ -1,8 +1,7 @@ import { describe, it, expect } from "bun:test"; import { collectFocusTargets } from "@/layout/focus"; import { Block, Text } from "@/view/primitives"; -import type { ViewElement } from "@/view/types/elements"; -import type { ComputedLayout } from "@/layout-engine"; +import type { ComputedLayout, ViewElement } from "@/types"; describe("collectFocusTargets", () => { it("should collect focusable elements from a simple tree", () => { diff --git a/tests/units/layout/index.test.ts b/tests/units/layout/index.test.ts index ede2bab..9d9a7ff 100644 --- a/tests/units/layout/index.test.ts +++ b/tests/units/layout/index.test.ts @@ -2,7 +2,7 @@ import { describe, it, expect } from "bun:test"; import { createLayout } from "@/layout"; import { Block, Text } from "@/view/primitives"; import { LayoutBoundary } from "@/view/layout"; -import type { LayoutInputNode, ComputedLayout } from "@/layout-engine"; +import type { ComputedLayout, LayoutInputNode } from "@/types"; // Mock the layout engine let receivedLayoutNode: LayoutInputNode | null = null; diff --git a/tests/units/layout/renderer.test.ts b/tests/units/layout/renderer.test.ts index 6a3d794..8c22805 100644 --- a/tests/units/layout/renderer.test.ts +++ b/tests/units/layout/renderer.test.ts @@ -2,7 +2,8 @@ import { describe, expect, test, beforeAll } from "bun:test"; import { renderElement } from "@/layout/renderer"; import { layout } from "@/layout"; import { Block, Text } from "@/view/primitives"; -import { createBuffer, resolveColor, type Buffer2D } from "@/renderer"; +import { createBuffer, resolveColor } from "@/renderer"; +import type { Buffer2D } from "@/types"; // Helper to visualize the buffer function bufferToString(buf: Buffer2D): string { diff --git a/tests/units/runtime/app.test.ts b/tests/units/runtime/app.test.ts index 7b67d92..eed115a 100644 --- a/tests/units/runtime/app.test.ts +++ b/tests/units/runtime/app.test.ts @@ -1,9 +1,7 @@ import { describe, it, expect, afterEach, beforeAll } from "bun:test"; -import type { App } from "@/runtime/types"; import { ref } from "@/reactivity"; -import type { KeyEvent } from "@/terminal"; import { Block, Text } from "@/view/primitives"; -import type { TerminalAdapter } from "@/runtime/terminal-adapter"; +import type { AppType as App, KeyEvent, TerminalAdapter } from "@/types"; const keyHandlers: any[] = []; diff --git a/tests/units/runtime/render-loop.test.ts b/tests/units/runtime/render-loop.test.ts index c542032..9e8c931 100644 --- a/tests/units/runtime/render-loop.test.ts +++ b/tests/units/runtime/render-loop.test.ts @@ -1,7 +1,8 @@ import { describe, it, expect } from "bun:test"; import { createRenderer } from "@/runtime/render-loop"; import { Block } from "@/view/primitives"; -import { FlatBuffer, type Buffer2D } from "@/renderer"; +import { FlatBuffer } from "@/renderer"; +import type { Buffer2D } from "@/types"; const mockLayoutResult = { root: { x: 0, y: 0, width: 80, height: 24 } }; From 4b6048ddabb8da07768a5806adaef13c15821f1c Mon Sep 17 00:00:00 2001 From: HAL <68320771+HALQME@users.noreply.github.com> Date: Wed, 24 Dec 2025 12:11:08 +0900 Subject: [PATCH 2/2] format --- src/index.ts | 9 +-------- src/layout/index.ts | 1 - src/reactivity/index.ts | 9 ++------- src/renderer/index.ts | 7 ++++++- src/terminal/index.ts | 9 ++++++++- src/types/index.ts | 14 ++++++++++++-- 6 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/index.ts b/src/index.ts index cb78f5c..5ead392 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,13 +6,6 @@ export { createApp, App } from "./runtime"; export { defineComponent } from "./components"; export * from "./view"; -export { - onBeforeUpdate, - onKey, - onMounted, - onTick, - onUnmounted, - onUpdated, -} from "./components"; +export { onBeforeUpdate, onKey, onMounted, onTick, onUnmounted, onUpdated } from "./components"; export * from "./reactivity"; diff --git a/src/layout/index.ts b/src/layout/index.ts index 74ba145..4f0b8e2 100644 --- a/src/layout/index.ts +++ b/src/layout/index.ts @@ -26,7 +26,6 @@ function ensureKeys(element: ViewElement, prefix: string) { } } - function isPercent(value: unknown): value is string { return typeof value === "string" && /^\s*\d+(\.\d+)?%\s*$/.test(value); } diff --git a/src/reactivity/index.ts b/src/reactivity/index.ts index 23bfc2b..d4c8297 100644 --- a/src/reactivity/index.ts +++ b/src/reactivity/index.ts @@ -28,14 +28,9 @@ export { reactive, isReactive, toRaw, shallowReactive } from "./reactive"; export { ref, shallowRef, isRef, unref, toRef, toRefs, customRef } from "./ref"; -export { - computed, -} from "./computed"; +export { computed } from "./computed"; -export { - watch, - watchEffect, -} from "./watch"; +export { watch, watchEffect } from "./watch"; export { effect, diff --git a/src/renderer/index.ts b/src/renderer/index.ts index dbbc8b0..95175ca 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -10,7 +10,12 @@ export { wrapTextWidth, } from "./grapheme"; export { cloneBuffer, createBuffer, drawText, fillRect, setCell } from "./grid"; -export { BufferPool, getGlobalBufferPool, resetGlobalBufferPool, setGlobalBufferPool } from "./pool"; +export { + BufferPool, + getGlobalBufferPool, + resetGlobalBufferPool, + setGlobalBufferPool, +} from "./pool"; export { createSanitizer, escapeSpecial, diff --git a/src/terminal/index.ts b/src/terminal/index.ts index 0e51477..af0b365 100644 --- a/src/terminal/index.ts +++ b/src/terminal/index.ts @@ -8,7 +8,14 @@ export { showCursor, write, } from "./io"; -export { cleanup, cleanupWithoutClear, onKey, resetKeyHandlers, setInputParser, setupRawMode } from "./raw"; +export { + cleanup, + cleanupWithoutClear, + onKey, + resetKeyHandlers, + setInputParser, + setupRawMode, +} from "./raw"; export { bypassStderrWrite, bypassStdoutWrite, diff --git a/src/types/index.ts b/src/types/index.ts index b0aedb0..1503ceb 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,11 +1,21 @@ export type { Component, ComponentDefinition, ComponentInitContext } from "../components/core"; export type { ExitReason, KeyHandler, RuntimeContext, TickHandler } from "../components/core"; -export type { DefineComponentOptions, MountedComponent, PropsOptions } from "../components/component"; +export type { + DefineComponentOptions, + MountedComponent, + PropsOptions, +} from "../components/component"; export type { PropDefinition, RenderFunction } from "../components/component"; export type { KeyEventHook, LifecycleHook, TickHook } from "../components/lifecycle"; export type { LayoutContainerSize, LayoutEngine, LayoutOptions } from "../layout/types"; -export type { ComputedLayout, Dimension, LayoutInputNode, LayoutStyle, Rect } from "../layout-engine/types"; +export type { + ComputedLayout, + Dimension, + LayoutInputNode, + LayoutStyle, + Rect, +} from "../layout-engine/types"; export type { App as AppType,