Skip to content

v0.0.2

Choose a tag to compare

@intellectronica intellectronica released this 15 Aug 08:27
· 3 commits to main since this release

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 Date objects, 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).
  • this file object: this is now a proper file-like record representing the base file (#8).
  • Plain string equality: .md path 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.raw retention 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:gen synthetic vault generator and bench timing runner (#19).

P2 — Usability & Tooling

  • properties.displayName: Preserved property configs and rendered display names in CSV/MD headers and columnLabels (#20).
  • CLI polish: Added --version / -v, updated help text, prevented conflicting query flags with --base, created missing parent directories on --out, and emitted --debug stats 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() returns null for missing files, added numeric fields to duration (.days, .hours, etc.), and documented random() divergence (#24).
  • Conformance & linting: Added Biome linter and a 10-test cross-runtime conformance suite for Node.js and Deno (#25).