#!/usr/bin/env zx import "zx/globals"; import * as k from "kinobi"; import { rootNodeFromAnchor } from "@kinobi-so/nodes-from-anchor"; {% if jsClient %} import { renderVisitor as renderJavaScriptVisitor } from "@kinobi-so/renderers-js"; {% endif %} {% if rustClient %} import { renderVisitor as renderRustVisitor } from "@kinobi-so/renderers-rust"; {% endif %} import { getAllProgramIdls } from "./utils.mjs"; // Instanciate Kinobi. const [idl, ...additionalIdls] = getAllProgramIdls().map(idl => rootNodeFromAnchor(require(idl))) const kinobi = k.createFromRoot(idl, additionalIdls); // Update programs. kinobi.update( k.updateProgramsVisitor({ "{{ programCrateName | camelCase }}": { name: "{{ programName | camelCase }}" }, }) ); {% if programFramework === 'shank' %} // Update accounts. kinobi.update( k.updateAccountsVisitor({ counter: { seeds: [ k.constantPdaSeedNodeFromString("utf8", "counter"), k.variablePdaSeedNode( "authority", k.publicKeyTypeNode(), "The authority of the counter account" ), ], }, }) ); // Update instructions. kinobi.update( k.updateInstructionsVisitor({ create: { byteDeltas: [k.instructionByteDeltaNode(k.accountLinkNode("counter"))], accounts: { counter: { defaultValue: k.pdaValueNode("counter") }, payer: { defaultValue: k.accountValueNode("authority") }, }, }, increment: { accounts: { counter: { defaultValue: k.pdaValueNode("counter") }, }, arguments: { amount: { defaultValue: k.noneValueNode() }, }, }, }) ); // Set account discriminators. const key = (name) => ({ field: "key", value: k.enumValueNode("Key", name) }); kinobi.update( k.setAccountDiscriminatorFromFieldVisitor({ counter: key("counter"), }) ); {% endif %} {% if jsClient %} // Render JavaScript. const jsClient = path.join(__dirname, "..", "clients", "js"); kinobi.accept( renderJavaScriptVisitor(path.join(jsClient, "src", "generated"), { prettier: require(path.join(jsClient, ".prettierrc.json")) }) ); {% endif %} {% if rustClient %} // Render Rust. const rustClient = path.join(__dirname, "..", "clients", "rust"); kinobi.accept( renderRustVisitor(path.join(rustClient, "src", "generated"), { formatCode: true, crateFolder: rustClient, }) ); {% endif %}