UNPKG

@kubiklabs/wasmkit

Version:

Wasmkit is a development environment to compile, deploy, test, run cosmwasm contracts on different networks.

130 lines (129 loc) 5.51 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.clean = exports.generateTsSchema = void 0; const generator_1 = __importDefault(require("@babel/generator")); const t = __importStar(require("@babel/types")); const w = __importStar(require("@kubiklabs/wasmkit-ast-types")); const wasmkit_ast_types_1 = require("@kubiklabs/wasmkit-ast-types"); const case_1 = require("case"); const fs_1 = require("fs"); const mkdirp_1 = require("mkdirp"); const path_1 = require("path"); const utils_1 = require("./utils"); async function generateTsSchema(name, schemas, // eslint-disable-line @typescript-eslint/no-explicit-any outPath, skipSchemaErrors) { const Contract = (0, case_1.pascal)(name) + 'Contract.ts'; const QueryMsg = (0, utils_1.findQueryMsg)(schemas); const ExecuteMsg = (0, utils_1.findExecuteMsg)(schemas); const typeHash = await (0, utils_1.findAndParseTypes)(schemas); let Client = null; let Instance = null; let QueryClient = null; let ReadOnlyInstance = null; const body = []; if (Object.prototype.hasOwnProperty.call(typeHash, 'Coin')) { body.push(w.importStmt(['Contract', 'wasmKitTypes'], '@kubiklabs/wasmkit')); } else { body.push(w.importStmt(['Contract', 'wasmKitTypes', 'Coin'], '@kubiklabs/wasmkit')); } // TYPES Object.values(typeHash).forEach(type => { body.push((0, exports.clean)(type)); }); // query messages if (QueryMsg) { QueryClient = (0, case_1.pascal)(`${name}QueryContract`); ReadOnlyInstance = (0, case_1.pascal)(`${name}ReadOnlyInterface`); const queryInterface = await w.createQueryInterface(ReadOnlyInstance, QueryMsg, // eslint-disable-line @typescript-eslint/no-explicit-any skipSchemaErrors); body.push(queryInterface); const queryClass = await w.createQueryClass(QueryClient, ReadOnlyInstance, "Contract", QueryMsg, // eslint-disable-line @typescript-eslint/no-explicit-any skipSchemaErrors); body.push(queryClass); } // execute messages if (ExecuteMsg) { const children = (0, wasmkit_ast_types_1.getMessageProperties)(ExecuteMsg); // eslint-disable-line @typescript-eslint/no-explicit-any if (children.length > 0) { Client = (0, case_1.pascal)(`${name}Contract`); Instance = (0, case_1.pascal)(`${name}Interface`); const executeInterface = await w.createExecuteInterface(Instance, ReadOnlyInstance, ExecuteMsg, // eslint-disable-line @typescript-eslint/no-explicit-any skipSchemaErrors); body.push(executeInterface); const executeClass = await w.createExecuteClass(Client, Instance, QueryClient, ExecuteMsg, // eslint-disable-line @typescript-eslint/no-explicit-any name, skipSchemaErrors); body.push(executeClass); } } const code = (0, generator_1.default)(t.program(body)).code; (0, mkdirp_1.sync)(outPath); (0, fs_1.writeFileSync)((0, path_1.join)(outPath, Contract), code); } exports.generateTsSchema = generateTsSchema; const clean = (obj // eslint-disable-line @typescript-eslint/no-explicit-any ) => { let copy; // Handle the 3 simple types, and null or undefined if (obj == null || typeof obj !== 'object') return obj; // Handle Date if (obj instanceof Date) { copy = new Date(); copy.setTime(obj.getTime()); return copy; } // Handle Array if (obj instanceof Array) { copy = []; for (let i = 0, len = obj.length; i < len; i++) { copy[i] = (0, exports.clean)(obj[i]); } return copy; } // Handle Object if (obj instanceof Object || typeof obj === 'object') { copy = {}; // eslint-disable-line @typescript-eslint/no-explicit-any for (const attr in obj) { switch (attr) { case 'leadingComments': case 'trailingComments': case 'loc': case 'start': case 'end': break; default: copy[attr] = (0, exports.clean)(obj[attr]); } } return copy; } throw new Error("Unable to copy obj! Its type isn't supported."); }; exports.clean = clean;