[package]
name = "nyash-rust"
version = "0.1.0"
edition = "2021"
authors = ["Claude Code <claude@anthropic.com>"]
description = "Everything is Box in Rust - Ultimate Memory Safe Nyash Implementation"
license = "MIT"
repository = "https://github.com/user/nyash"
keywords = ["language", "interpreter", "box", "memory-safe", "rust"]
categories = ["development-tools::parsing", "interpreters"]

# Default features - minimal CLI only
[features]
default = ["cli", "plugins"]
cli = []
gui = ["dep:egui", "dep:eframe", "dep:egui_extras", "dep:image"]
gui-examples = ["gui"]
all-examples = ["gui-examples"]
dynamic-file = []
wasm-backend = ["dep:wasmtime", "dep:wabt"]
# プラグイン機構の有効化（ネイティブ環境のみ推奨）
plugins = ["dep:libloading"]
# MIR instruction diet PoC flags (scaffolding only; off by default)
mir_typeop_poc = []
mir_refbarrier_unify_poc = []
# Note: LLVM feature requires inkwell dependency and LLVM development libraries
# LLVM 18 + inkwell 0.5.0 を使用
llvm = ["dep:inkwell"]
# (removed) Optional modular MIR builder feature
cranelift-jit = [
  "dep:cranelift-codegen",
  "dep:cranelift-frontend",
  "dep:cranelift-module",
  "dep:cranelift-jit",
  "dep:cranelift-object",
  "dep:cranelift-native"
]

[lib]
name = "nyash_rust"
path = "src/lib.rs"
crate-type = ["cdylib", "rlib"]

# Main CLI binary - always available
[[bin]]
name = "nyash"
path = "src/main.rs"

# Test binary for multi-box plugin loader
[[bin]]
name = "test-plugin-loader-v2"
path = "src/bin/test_plugin_loader_v2.rs"
required-features = ["dynamic-file"]

# Examples for development - only available as examples, not bins
[[example]]
name = "gui_simple_notepad"
path = "examples/simple_notepad.rs"
required-features = ["gui-examples"]

[[example]]
name = "gui_simple_notepad_v2"
path = "examples/simple_notepad_v2.rs"
required-features = ["gui-examples"]

[[example]]
name = "gui_simple_notepad_ascii"
path = "examples/simple_notepad_ascii.rs"
required-features = ["gui-examples"]

[[example]]
name = "gui_debug_notepad"
path = "examples/debug_notepad.rs"
required-features = ["gui-examples"]

[[example]]
name = "gui_nyash_notepad_jp"
path = "examples/nyash_notepad_jp.rs"
required-features = ["gui-examples"]

[[example]]
name = "gui_nyash_explorer"
path = "examples/nyash_explorer.rs"
required-features = ["gui-examples"]

[[example]]
name = "gui_nyash_explorer_with_icons"
path = "examples/nyash_explorer_with_icons.rs"
required-features = ["gui-examples"]

[[example]]
name = "gui_test_icon_extraction"
path = "examples/test_icon_extraction.rs"
required-features = ["gui-examples"]

[[example]]
name = "gui_visual_node_prototype"
path = "development/egui_research/experiments/visual_node_prototype.rs"
required-features = ["gui-examples"]



[dependencies]
# エラーハンドリング
thiserror = "2.0"
anyhow = "1.0"

# シリアライゼーション（将来のAST永続化用）
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

# コマンドライン（将来の CLI用）
clap = { version = "4.0", features = ["derive"] }

# 並行処理（GlobalBox用）
lazy_static = "1.5"
once_cell = "1.20"

# デバッグ・ログ
log = "0.4"
env_logger = "0.11"
libloading = { version = "0.8", optional = true }
toml = "0.8"

# 日時処理
chrono = "0.4"

# HTTP通信（HttpClientBox用）
# reqwest = { version = "0.11", features = ["blocking"] }  # Temporarily disabled

# 正規表現（RegexBox用）
regex = "1.0"

# WebAssembly対応
wasm-bindgen = "0.2"
console_error_panic_hook = "0.1"
js-sys = "0.3"

# Cranelift JIT (optional; enabled via feature "cranelift-jit")
cranelift-codegen = { version = "0.103", optional = true }
cranelift-frontend = { version = "0.103", optional = true }
cranelift-module = { version = "0.103", optional = true }
cranelift-jit = { version = "0.103", optional = true }
cranelift-object = { version = "0.103", optional = true }
cranelift-native = { version = "0.103", optional = true }

# WASM backend dependencies (Phase 8) - optional for faster builds
wabt = { version = "0.10", optional = true }
wasmtime = { version = "35.0.0", optional = true }

# GUI フレームワーク - only when gui feature is enabled
egui = { version = "0.29", optional = true }
eframe = { version = "0.29", default-features = false, features = ["default_fonts", "glow"], optional = true }
egui_extras = { version = "0.29", features = ["image"], optional = true }
image = { version = "0.25", features = ["png", "ico"], optional = true }

# LLVM backend deps (optional)
# Move to LLVM 18.1.x toolchains
inkwell = { version = "0.6.0", features = ["llvm18-1"], optional = true }

# Windows API
[target.'cfg(windows)'.dependencies]
windows = { version = "0.60", features = [
    "Win32_Foundation",
    "Win32_Storage_FileSystem", 
    "Win32_UI_Shell",
    "Win32_UI_WindowsAndMessaging",
    "Win32_System_Com",
    "Win32_Graphics_Gdi",
] }

[dependencies.web-sys]
version = "0.3"
features = [
  "console",
  "Document", 
  "Element",
  "HtmlElement",
  "Window",
  "DomTokenList",
  "CssStyleDeclaration",
  "HtmlCanvasElement",
  "CanvasRenderingContext2d",
  "ImageData",
  "TextMetrics",
  "CanvasGradient",
  "CanvasPattern",
  "Path2d",
  "Performance",
  "MouseEvent",
  "TouchEvent",
  "KeyboardEvent",
  "AudioContext",
  "AudioContextState",
  "AudioBuffer",
  "AudioBufferSourceNode",
  "GainNode",
  "AnalyserNode",
  "AudioDestinationNode",
  "PeriodicWave",
  "OscillatorNode",
]

[dev-dependencies]
# テスト・ベンチマークツール
criterion = "0.5"

[build-dependencies]
once_cell = "1.20"

# Benchmark configuration (will be added later)
# [[bench]]
# name = "box_performance"
# harness = false

[profile.release]
# 最適化設定
opt-level = 3
lto = true
codegen-units = 1
panic = "abort"

[profile.dev]
# 開発用設定
opt-level = 0
debug = true
