UNPKG

@cosmwasm/ts-codegen

Version:

@cosmwasm/ts-codegen converts your CosmWasm smart contracts into dev-friendly TypeScript classes so you can focus on shipping code.

65 lines (64 loc) 2.66 kB
import * as w from '@cosmwasm/ts-codegen-ast'; import { RenderContext, } from '@cosmwasm/ts-codegen-ast'; import { pascal } from 'case'; import { BuilderPluginBase } from './plugin-base'; import { GetLocalBaseNameByContractName } from './provider'; export class ContractsProviderBundlePlugin extends BuilderPluginBase { constructor(opt) { super(opt); this.lifecycle = 'after'; this.defaultContractName = 'contractContextProviders'; this.utils = { ICosmWasmClient: '__baseClient__', ISigningCosmWasmClient: '__baseClient__', getCosmWasmClient: '__baseClient__', getSigningCosmWasmClient: '__baseClient__', IQueryClientProvider: '__contractContextBase__', ISigningClientProvider: '__contractContextBase__', IMessageComposerProvider: '__contractContextBase__', }; } initContext(contract, options) { return new RenderContext(contract, options, this.builder?.builderContext); } async doRender(name, context) { if (!this.options?.useContractsHook?.enabled) { return; } const providerInfos = context.getProviderInfos(); if (!Object.keys(providerInfos || {})?.length) { return; } const localname = 'contractContextProviders.ts'; const body = []; context.addUtil('ICosmWasmClient'); context.addUtil('ISigningCosmWasmClient'); context.addUtil('getCosmWasmClient'); context.addUtil('getSigningCosmWasmClient'); context.addUtil('IQueryClientProvider'); context.addUtil('ISigningClientProvider'); context.addUtil('IMessageComposerProvider'); for (const name in providerInfos) { if (Object.prototype.hasOwnProperty.call(providerInfos, name)) { const providerInfo = providerInfos[name]; for (const key in providerInfo) { if (Object.prototype.hasOwnProperty.call(providerInfo, key)) { const info = providerInfo[key]; body.push(w.importStmt([info.classname], `./${info.basename}`)); } } body.push(w.importStmt([pascal(name)], `./${GetLocalBaseNameByContractName(name)}`)); } } body.push(w.createIContractsContext(providerInfos)); body.push(w.createGettingProviders(providerInfos)); return [ { type: 'plugin', pluginType: 'contractContextProviders', localname, body, }, ]; } }