idx-cli/crates/idx-core/Cargo.toml
hermes 79b15d51b9 fix(core): parse IPOT pages with html5ever
Six rounds of the 0.4.0 review found crafted markup that the hand-written
reader read differently from HTML (cells in comments or attributes, stray
or spaced tags, a decoy date attribute or total, foreign content). Parse
the page with scraper (html5ever) instead: dates are the inputs' values,
rows are the single tbody's tr children with nine td each, totals are the
tfoot spans, all as a browser builds them. Rows that don't line up still
reject the page. scraper's CSS crates (selectors, cssparser) are MPL-2.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V3syn2fN2LNo5pvTSqc6eh
2026-10-18 12:54:34 +00:00

37 lines
1.2 KiB
TOML

[package]
name = "idx-core"
description = "Data layer for Indonesian stock market (IDX) market, financial, and ownership data"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
readme = "../../README.md"
keywords = ["idx", "stocks", "indonesia", "finance"]
categories = ["finance"]
include = ["/Cargo.toml", "/LICENSE", "/src/**", "/tests/fixtures/**"]
[features]
default = ["ownership"]
ownership = ["dep:rusqlite", "dep:quick-xml", "dep:sha2", "dep:zip"]
# Derives clap::ValueEnum on enums frontends expose as CLI arguments.
clap = ["dep:clap"]
# Fixture-backed mock provider (IDX_USE_MOCK_PROVIDER) for tests only.
testing = []
[dependencies]
clap = { workspace = true, optional = true }
ureq.workspace = true
serde.workspace = true
serde_json.workspace = true
toml.workspace = true
directories = "5"
chrono.workspace = true
thiserror = "2"
fastrand = "2"
rusqlite = { workspace = true, optional = true }
quick-xml = { version = "0.37", optional = true }
sha2 = { workspace = true, optional = true }
zip = { workspace = true, optional = true }
scraper = { version = "0.27", default-features = false }