Repository navigation
v0.0.2
mdbasequery v0.0.2
Comprehensive release addressing all 25 tracked improvement issues across P0 correctness, P1 performance, and P2 usability.
P0 — Correctness
- and/or operand values:
and/or/&&/||operators return evaluated operand values per JavaScript and Obsidian Bases semantics (#1). - Strict identifier validation: Strict mode (default) validates all identifiers against the vault's frontmatter key union and engine symbols, catching typos while supporting heterogeneous vaults (#2).
- CRLF & EOF frontmatter: Frontmatter parser handles CRLF line endings, BOM prefixes, and EOF-terminated closing fences (#3).
- Frontmatter date coercion: Date and DateTime frontmatter values are coerced to
Dateobjects, enabling.format(), Moment tokens, and chronological comparisons (#4). - Clean grouped output: Group rows now output projected records without leaking file internals (#5).
- Moment format tokens: Full Moment-compatible token walker for
date.format()supporting ordinals, 12h clock, epochs, and bracketed escapes (#6). - List stat methods: Added
.mean(),.sum(),.min(),.max()to list methods (#7). thisfile object:thisis now a proper file-like record representing the base file (#8).- Plain string equality:
.mdpath normalisation in==applies only when at least one operand is a Link or File (#9). - String literal escapes: Expression parser decodes standard escape sequences (#10).
- Code block tag isolation: Tag extractor ignores hashtags inside code blocks and inline code (#11).
- Link target sanitization: Excluded embeds and external URLs from
file.links(#12). - Type-ranked sort comparator: Consistent sorting with empty/nullish values sorted last in both directions (#13).
- Unambiguous basename backlinks: Backlink and file resolution strictly avoids collisions across folders (#14).
P1 — Performance
- AST caching & eval context reuse: Pre-compiled property expressions and single evaluation context allocation per row (#15).
- Bounded-concurrency indexing: Parallel markdown file reads (32 in-flight workers) (#16).
- Memory footprint: Dropped
FileRecord.rawretention after metadata extraction (#17). - Lazy formula evaluation: Evaluates filter-required formulas first, evaluating remaining display formulas only on matching notes (#18).
- Benchmark harness: Added
bench:gensynthetic vault generator andbenchtiming runner (#19).
P2 — Usability & Tooling
properties.displayName: Preserved property configs and rendered display names in CSV/MD headers andcolumnLabels(#20).- CLI polish: Added
--version/-v, updated help text, prevented conflicting query flags with--base, created missing parent directories on--out, and emitted--debugstats to stderr (#21). - Serialization safety: Neutralized formula injection in CSVs, converted newlines to
<br>in Markdown tables, and added grouped table rendering (#22). - Diagnostics & error formatting: Expression errors include source text, role, and caret position indicator; schema validator warns on unknown keys and view types (#23).
- Obsidian compatibility: Coerced frontmatter wikilinks to Link objects, strict
link.asFile()returnsnullfor missing files, added numeric fields to duration (.days,.hours, etc.), and documentedrandom()divergence (#24). - Conformance & linting: Added Biome linter and a 10-test cross-runtime conformance suite for Node.js and Deno (#25).