@kiwa-test/core
Full kiwa overview (127s) — this package is the spec foundation behind every category shown in the video. Full-quality MP4 (2.9 MB).
Common spec language + test environment abstractions for kiwa adapters (core / api / ui / data / cli).
Overview
@kiwa-test/core provides the foundational primitives that every kiwa adapter shares:
parseSpec(markdown)— turn a kiwa-design 9-column markdown spec into a typedSpecDoc(cases, layer, mode, route, etc.)createPool({ size, acquire, reset, release })— a generic borrow/release pool withanvil_reset-style reuse semanticsTestEnvBase<TMode>— the structural type everysetupTestEnv-style helper returns (mode,stop(), plus adapter-specific extensions)TestLayer/TestMode/Lease/Pool— shared type vocabulary
Adapters (@kiwa-test/dapp for dApp E2E, @kiwa-test/api for HTTP) depend on this package so that specs, environments, and pools share the same shape regardless of which adapter is running them.
Install
pnpm add -D @kiwa-test/coreParse a kiwa-design spec
import { parseSpec } from "@kiwa-test/core";
import { readFileSync } from "node:fs";
const doc = parseSpec(readFileSync("tests/spec/integration/test-spec-items.api.md", "utf8"));
doc.cases.forEach((c) => {
console.log(c.id, c.observation, c.mode, c.route);
});The parser reads the meta block (- module: / - layer:) and the first 9-column markdown table it finds. Unknown columns are ignored; unknown mode / missing required columns become doc.warnings instead of throwing.
Build a borrow/release pool
import { createPool } from "@kiwa-test/core";
const pool = await createPool({
size: 4,
acquire: async () => spawnExpensiveThing(),
reset: async (thing) => thing.reset(),
});
const lease = await pool.borrow();
try {
await use(lease.value);
} finally {
await lease.release(); // pool calls `reset` before handing the slot to the next borrower
}
await pool.stopAll();@kiwa-test/dapp's createAnvilPool is built on top of this primitive so the same lifecycle pattern works for anvil instances, HTTP servers, headless browsers, queue workers, or anything else.
License
MIT