evenframe 0.4.0

A unified framework for TypeScript type generation and database schema synchronization
[package]
name = "evenframe"
version = "0.4.0"
edition = "2024"
authors = ["Jakob Lochinski"]
license = "MIT"
description = "A unified framework for TypeScript type generation and database schema synchronization"
repository = "https://github.com/rymskip/evenframe"
documentation = "https://docs.rs/evenframe"
homepage = "https://github.com/rymskip/evenframe"
readme = "../README.md"
keywords = ["typescript", "codegen", "surrealdb", "schema", "types"]
categories = ["development-tools", "database"]

[lib]
path = "src/lib.rs"

[features]
# Default includes the CLI feature set, which is what most users need when
# depending on the evenframe crate directly (full schemasync + all generators
# + SurrealDB). Library consumers should use `default-features = false` and
# pick only what they need.
default = ["cli"]

# Enables file-based debug logging via the `evenframe_log!` macro.
# Writes .log/.surql files to $ABSOLUTE_PATH_TO_EVENFRAME/evenframe/logs/
# (the system temp directory when the variable is unset).
# Not intended for production use.
dev-mode = ["evenframe_core/dev-mode"]

# The CLI feature set: full schemasync pipeline with mock data generation,
# all TypeScript/schema generators, and SurrealDB support. This is what the
# evenframe binary requires. See evenframe_core for the full feature breakdown.
cli = ["evenframe_core/cli", "schemasync", "surrealdb", "typesync-all"]

# --- Type synchronization (forwarded to evenframe_core) ---

# Core typesync generators (ArkType, Effect-TS).
typesync = ["evenframe_core/typesync"]
# All typesync generators including Protocol Buffers, FlatBuffers, and Macroforge.
typesync-all = ["evenframe_core/typesync-all"]
# Protocol Buffers (.proto) generation. Implies: typesync.
protobuf = ["evenframe_core/protobuf"]
# FlatBuffers (.fbs) generation. Implies: typesync.
flatbuffers = ["evenframe_core/flatbuffers"]
# Macroforge template-based TypeScript generation. Implies: typesync.
macroforge = ["evenframe_core/macroforge"]

# --- Schema synchronization (forwarded to evenframe_core) ---

# Schema comparison and synchronization engine. Implies: surrealdb.
schemasync = ["evenframe_core/schemasync"]
# Full schemasync with timezone-aware mock data generation. Implies: schemasync.
schemasync-full = ["evenframe_core/schemasync-full"]
# Timezone-aware mock data via chrono-tz. Implies: schemasync.
mockmake = ["evenframe_core/mockmake"]
# WASM-based mockmake plugins. Implies: schemasync.
wasm-plugins = ["evenframe_core/wasm-plugins"]

# --- Database providers (forwarded to evenframe_core) ---

# SurrealDB client (kv-mem + HTTP protocol). Heaviest single dependency.
surrealdb = ["evenframe_core/surrealdb"]
# SQL abstraction layer via sqlx. Base for postgres/mysql/sqlite.
sql = ["evenframe_core/sql"]
# PostgreSQL via sqlx. Implies: sql.
postgres = ["evenframe_core/postgres"]
# MySQL/MariaDB via sqlx. Implies: sql.
mysql = ["evenframe_core/mysql"]
# SQLite via sqlx. Implies: sql.
sqlite = ["evenframe_core/sqlite"]
# All SQL backends (PostgreSQL, MySQL, SQLite).
sql-all = ["evenframe_core/sql-all"]
# Every database provider (SurrealDB + all SQL backends).
all-providers = ["evenframe_core/all-providers"]

# --- Convenience ---

# Everything: all generators, full schemasync, all database providers.
full = ["evenframe_core/full"]

[dependencies]

# workspace dependencies
evenframe_core = { version = "0.4.0", path = "../evenframe_core", default-features = false, features = ["cli"] }
syn = { workspace = true }
tracing = { workspace = true }
convert_case = { workspace = true }
tokio = { workspace = true }
regex = { workspace = true }
toml = { workspace = true }

serde = { version = "1.0.229", features = ["derive"] }
serde_json = { workspace = true }
yaml_serde = "0.10.7"
url = { workspace = true }
uuid = { workspace = true }
evenframe_derive = { version = "0.4.0", path = "../evenframe_derive" }
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
walkdir = "2.5.0"
linkme = "0.3.37"
clap = { version = "4.6", features = ["derive", "env"] }

[dev-dependencies]
insta = { workspace = true, features = ["filters"] }
tempfile = "3.27"
mockall = "0.15"
proptest = "1.11"
pretty_assertions = "1.4"