@neo-one/smart-contract-codegen-esnext-esm
Version:
NEO•ONE TypeScript smart contract codegen.
35 lines (33 loc) • 1.72 kB
JavaScript
import { createForwardedValueFuncArgsName, createForwardedValueFuncReturnName } from '@neo-one/client-core-esnext-esm';
import _ from 'lodash';
import { genConstantFunction } from './genConstantFunction';
import { genForwardArgsFunction } from './genForwardArgsFunction';
import { genForwardReturnFunction } from './genForwardReturnFunction';
import { genFunction } from './genFunction';
import { getEventName } from './getEventName';
export const genSmartContractBase = (name, interfaceName, abi, migration = false) => {
const extendsClause = `<TClient extends Client = Client> extends SmartContract<TClient, ${getEventName(name)}>`;
return `
export interface ${interfaceName}${migration ? '' : extendsClause} {
${_.flatten(_.sortBy(abi.functions, [(func) => func.name]).map((func) => {
const parameters = func.parameters === undefined ? [] : func.parameters;
const forwardedParameters = parameters.filter((parameter) => parameter.forwardedValue);
let decls = [
`readonly ${func.name}: ${func.constant ? genConstantFunction(func, { migration }) : genFunction(name, func, { migration })}`,
];
if (forwardedParameters.length > 0) {
decls = decls.concat([
`readonly ${createForwardedValueFuncArgsName(func)}: ${genForwardArgsFunction(name, func, forwardedParameters, { migration })}`,
]);
}
if (func.returnType.forwardedValue) {
decls = decls.concat([
`readonly ${createForwardedValueFuncReturnName(func)}: ${genForwardReturnFunction(name, func)}`,
]);
}
return decls;
})).join('\n ')}
}
`;
};
//# sourceMappingURL=genSmartContractBase.js.map