@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
JavaScript
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,
},
];
}
}