nix-evaluator-stats/packages/core/README.md
NotAShelf 55f6a43dc2
packages/core: revise readme; elaborate on supported Nix impls
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ibff4509c97cc205854ecab05320618f06a6a6964
2026-04-16 09:40:27 +03:00

1.4 KiB

@ns/core

Core types, parsing logic for Nix evaluator statistics, and various bits from the web component that the CLI may interact with in the future. The @ns/core package contains the truly "generic" logic that can be used around the workspace, or even outside it. This package is framework-agnostic and can be used in any JavaScript/TypeScript environment. Which is to say that you can use it to make your own statistics viewer without doing any heavy lifting.

Usage

import { calculateChange, parseStats, StatsData } from "@ns/core";

// Parse raw stats from Nix
const raw = JSON.parse(statsJson);
const stats: StatsData = parseStats(raw);

console.log(`CPU Time: ${stats.cpuTime}s`);
console.log(`Expressions: ${stats.nrExprs}`);

// Compare two values
const change = calculateChange(stats.nrThunks, previousStats.nrThunks);
console.log(`Thunks changed by ${change.percent.toFixed(2)}%`);

Nix Version/Implementation Compatibility

There are currently 4 competing implementations of Nix, and only two of those are considered first-class. The parser handles different implementations the best it can by checking the field existence in the raw JSON, but it is not able to handle new fields. It is unfortunate that not all implementations expose the same statistics.

Worth noting that besides Lix and Nix, there are and will likely be more implementations. If you want yours to be supported as a first class citizen, please submit a pull request.