API Reference
Programmatic API for @calimero-network/abi-codegen — use the parser and generator directly in build tooling
Imports
// Main entry — parser only
import { parseAbiManifest, loadAbiManifestFromFile }
from '@calimero-network/abi-codegen';
// Sub-path imports (generateClient is not on the main entry)
import { parseAbiManifest } from '@calimero-network/abi-codegen/parse';
import { generateClient } from '@calimero-network/abi-codegen/generate/client';
import { deriveClientNameFromPath, sanitizeClassName } from '@calimero-network/abi-codegen/generate/emit';
import { parseAbiManifest, loadAbiManifestFromFile }
from '@calimero-network/abi-codegen';
// Sub-path imports (generateClient is not on the main entry)
import { parseAbiManifest } from '@calimero-network/abi-codegen/parse';
import { generateClient } from '@calimero-network/abi-codegen/generate/client';
import { deriveClientNameFromPath, sanitizeClassName } from '@calimero-network/abi-codegen/generate/emit';
parseAbiManifest(json)
Validates a raw JSON object against the WASM ABI v1 JSON Schema and returns a typed AbiManifest. Throws a descriptive error if validation fails.
function parseAbiManifest(json: unknown): AbiManifest
// Usage:
import { parseAbiManifest } from '@calimero-network/abi-codegen/parse';
const raw = JSON.parse(fs.readFileSync('abi.json', 'utf8'));
const manifest = parseAbiManifest(raw);
// manifest.methods, manifest.events, manifest.types
import { parseAbiManifest } from '@calimero-network/abi-codegen/parse';
const raw = JSON.parse(fs.readFileSync('abi.json', 'utf8'));
const manifest = parseAbiManifest(raw);
// manifest.methods, manifest.events, manifest.types
loadAbiManifestFromFile(path)
Convenience wrapper — reads a JSON file from the filesystem, parses it, and validates it. Equivalent to parseAbiManifest(JSON.parse(fs.readFileSync(path))).
function loadAbiManifestFromFile(path: string): AbiManifest
import { loadAbiManifestFromFile } from '@calimero-network/abi-codegen/parse';
const manifest = loadAbiManifestFromFile('./abi.json');
console.log(`${manifest.methods.length} methods`);
const manifest = loadAbiManifestFromFile('./abi.json');
console.log(`${manifest.methods.length} methods`);
generateClient(manifest, clientName?, importPath?)
Takes a validated AbiManifest and returns a TypeScript source string containing both type definitions and the client class.
function generateClient(
manifest: AbiManifest,
clientName?: string, // default: 'Client'
importPath?: string, // default: '@calimero-network/mero-react'
): string
manifest: AbiManifest,
clientName?: string, // default: 'Client'
importPath?: string, // default: '@calimero-network/mero-react'
): string
import { loadAbiManifestFromFile } from '@calimero-network/abi-codegen/parse';
import { generateClient } from '@calimero-network/abi-codegen/generate/client';
import fs from 'fs';
const manifest = loadAbiManifestFromFile('abi.json');
const source = generateClient(manifest, 'KvStoreClient');
fs.writeFileSync('src/generated/KvStoreClient.ts', source);
import { generateClient } from '@calimero-network/abi-codegen/generate/client';
import fs from 'fs';
const manifest = loadAbiManifestFromFile('abi.json');
const source = generateClient(manifest, 'KvStoreClient');
fs.writeFileSync('src/generated/KvStoreClient.ts', source);
Name Utilities
import { deriveClientNameFromPath, sanitizeClassName }
from '@calimero-network/abi-codegen/generate/emit';
// Derive a PascalCase client name from a file path:
deriveClientNameFromPath('kv_store.wasm') // 'KvStoreClient'
deriveClientNameFromPath('my-todo-app.json') // 'MyTodoAppClient'
// Sanitize an arbitrary string to a valid identifier:
sanitizeClassName('My Todo App') // 'MyTodoApp'
from '@calimero-network/abi-codegen/generate/emit';
// Derive a PascalCase client name from a file path:
deriveClientNameFromPath('kv_store.wasm') // 'KvStoreClient'
deriveClientNameFromPath('my-todo-app.json') // 'MyTodoAppClient'
// Sanitize an arbitrary string to a valid identifier:
sanitizeClassName('My Todo App') // 'MyTodoApp'
Vite / Rollup Plugin Pattern
Use the API to write a build plugin that auto-generates clients from ABI files:
// vite-plugin-calimero-codegen.ts
import { loadAbiManifestFromFile } from '@calimero-network/abi-codegen/parse';
import { generateClient } from '@calimero-network/abi-codegen/generate/client';
import { deriveClientNameFromPath } from '@calimero-network/abi-codegen/generate/emit';
import fs from 'fs';
export function calimeroCodegen(opts: { input: string, outDir: string }) {
return {
name: 'calimero-codegen',
buildStart() {
const manifest = loadAbiManifestFromFile(opts.input);
const name = deriveClientNameFromPath(opts.input);
const src = generateClient(manifest, name);
fs.writeFileSync(`${opts.outDir}/${name}.ts`, src);
}
};
}
import { loadAbiManifestFromFile } from '@calimero-network/abi-codegen/parse';
import { generateClient } from '@calimero-network/abi-codegen/generate/client';
import { deriveClientNameFromPath } from '@calimero-network/abi-codegen/generate/emit';
import fs from 'fs';
export function calimeroCodegen(opts: { input: string, outDir: string }) {
return {
name: 'calimero-codegen',
buildStart() {
const manifest = loadAbiManifestFromFile(opts.input);
const name = deriveClientNameFromPath(opts.input);
const src = generateClient(manifest, name);
fs.writeFileSync(`${opts.outDir}/${name}.ts`, src);
}
};
}