[package]
name = "framec"
version.workspace = true
authors = ["Mark Truluck <mark@frame-lang.org>"]
edition.workspace = true
license.workspace = true
repository.workspace = true
homepage = "https://github.com/frame-lang/framec"
documentation = "https://github.com/frame-lang/framec#documentation"
readme = "../README.md"
rust-version = "1.75"
description = "Frame language transpiler — state machines that generate production code"
keywords = ["state-machine", "transpiler", "code-generation", "frame", "finite-automata"]
categories = ["compilers", "development-tools"]

[lib]
crate-type = ["rlib"]

[[bin]]
name = "framec"
path = "src/main.rs"

[dependencies]
chrono = "0.4"
clap = { version = "4.5" }
convert_case = "0.6"
exitcode = "1.1.2"
serde = { version = "1.0", features = ["derive", "serde_derive"] }
serde_json = "1.0"
sha2 = "0.10"
indoc = "2.0"
colored = "2.0"
petgraph = "0.6"
regex = "1.10"
toml = "0.9.5"
uuid = { version = "1", features = ["v4"] }
tempfile = "3"

[dev-dependencies]
tempfile = "3"
# RFC-0027: in-tree snapshot tests per backend. `insta` snapshots
# the framec-emitted target code for a small curated fixture
# corpus; changes show up as reviewable diffs in PRs. Re-bless
# via `cargo insta review` after intentional codegen changes.
insta = "1"
# Roadmap #440 (Gates second-pass): property-based tests in framec
# itself. Complements RFC-0027 snapshot tests (regression nets) and
# the external fuzz harness (cross-backend differential). Property
# tests assert spec-level invariants — "for any valid X, the output
# satisfies Y" — which neither snapshots ("did it change?") nor
# differential fuzz ("do all backends agree?") cover.
proptest = "1"
