Skip to content

Releases: intellectronica/mdbasequery

v0.0.3

Choose a tag to compare

@intellectronica intellectronica released this 11 Oct 12:14
ea25303

mdbasequery 0.0.3 fixes file.ext compatibility with Obsidian Bases.

  • File extensions now omit the leading dot: file.ext == "md" correctly selects Markdown notes.
  • The fix applies to indexed notes, this.file, and file records resolved from links.

If your queries compare file.ext with ".md" or ".base", update them to use "md" or "base".

Thanks to @andriyor for the fix in #27.

Full changelog

v0.0.2

Choose a tag to compare

@intellectronica intellectronica released this 15 Aug 08:27

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).

v0.0.1

Choose a tag to compare

@intellectronica intellectronica released this 18 Feb 15:44

initial release