@cosmwasm/ts-codegen
Version:
@cosmwasm/ts-codegen converts your CosmWasm smart contracts into dev-friendly TypeScript classes so you can focus on shipping code.
175 lines (174 loc) • 4.88 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = __importDefault(require("../index"));
const prompt_1 = require("../utils/prompt");
exports.default = async (argv) => {
const questions = [
{
_: true,
type: 'path',
name: 'schema',
message: 'which directory contains the the Rust contracts?',
default: './schema'
},
{
_: true,
type: 'path',
name: 'out',
message: 'where is the output directory?',
default: './ts'
},
{
_: true,
type: 'string',
name: 'name',
message: 'contract name?'
},
{
type: 'checkbox',
name: 'plugin',
message: 'which plugins?',
choices: [
'client',
'recoil',
'react-query',
'message-composer'
]
},
{
type: 'confirm',
name: 'bundle',
message: 'enable bundle?',
default: true
}
];
if (argv.typesOnly) {
argv.plugin = 'types';
}
let { schema, out, name, plugin, bundle } = await (0, prompt_1.prompt)(questions, argv);
if (!Array.isArray(plugin))
plugin = [plugin];
///////// REACT QUERY
const questions2 = [];
if (plugin.includes('react-query')) {
// @ts-ignore
[].push.apply(questions2, [
{
type: 'confirm',
name: 'optionalClient',
message: 'optionalClient?',
default: false
},
{
type: 'list',
name: 'version',
message: 'which react-query version?',
default: 'v4',
choices: ['v3', 'v4']
},
{
type: 'confirm',
name: 'queryKeys',
message: 'queryKeys?',
default: false
},
]);
}
;
const { optionalClient, version, queryKeys } = await (0, prompt_1.prompt)(questions2, argv);
const questions3 = [];
if (version === 'v4') {
[].push.apply(questions3, [
// currently we only support v4 for useMutation
{
type: 'confirm',
name: 'mutations',
message: 'Generate useMutation hooks?',
default: false
}
]);
}
;
const { mutations } = await (0, prompt_1.prompt)(questions3, argv);
const queryFactoryQuestions = [];
if (queryKeys) {
[].push.apply(queryFactoryQuestions, [
// Only can use queryFactory if queryKeys is enabled
{
type: 'confirm',
name: 'queryFactory',
message: 'queryFactory? ',
default: false
}
]);
}
;
const { queryFactory } = await (0, prompt_1.prompt)(queryFactoryQuestions, argv);
///////// END REACT QUERY
///////// BUNDLE
const questions4 = [];
if (bundle) {
[].push.apply(questions4, [
{
type: 'string',
name: 'bundleFile',
message: 'bundleFile?',
default: 'index.ts'
},
{
type: 'string',
name: 'bundleScope',
message: 'bundleScope?',
default: 'contracts'
}
]);
}
;
const { bundleFile, bundleScope } = await (0, prompt_1.prompt)(questions4, argv);
///////// END BUNDLE
const options = {
types: {
enabled: true
},
client: {
enabled: plugin.includes('client') ||
plugin.includes('recoil') ||
plugin.includes('react-query')
},
reactQuery: {
enabled: plugin.includes('react-query'),
optionalClient,
queryKeys,
version,
mutations,
queryFactory
},
recoil: {
enabled: plugin.includes('recoil'),
},
messageComposer: {
enabled: plugin.includes('message-composer')
},
messageBuilder: {
enabled: plugin.includes('message-builder')
},
bundle: {
enabled: bundle,
scope: bundleScope,
bundleFile
}
};
await (0, index_1.default)({
contracts: [
{
name,
dir: schema
}
],
outPath: out,
options
});
};