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';

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

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`);

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

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'

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);
    }
  };
}