@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
JavaScript
;
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;