UNPKG

@neo-one/smart-contract-codegen-esnext-esm

Version:

NEO•ONE TypeScript smart contract codegen.

74 lines (72 loc) 3.44 kB
import _ from 'lodash'; import { toTypeScriptType } from '../utils'; const getOptions = (abi, { withConfirmedOptions = false } = {}) => { if (abi.constant) { return withConfirmedOptions ? ['options?: GetOptions'] : []; } const type = withConfirmedOptions ? ' & GetOptions' : ''; if (abi.sendUnsafe && abi.receive) { return [`options?: InvokeSendUnsafeReceiveTransactionOptions${type}`]; } if (abi.sendUnsafe) { return [`options?: InvokeSendUnsafeTransactionOptions${type}`]; } if (abi.receive) { return [`options?: InvokeReceiveTransactionOptions${type}`]; } if (abi.refundAssets) { return [`hash: Hash256String, options?: TransactionOptions${type}`]; } if (abi.send) { return [`transfer: Transfer, options?: TransactionOptions${type}`]; } if (abi.completeSend) { return [`hash: Hash256String, options?: TransactionOptions${type}`]; } return [`options?: TransactionOptions${type}`]; }; const getRestParameter = (param, migration = false) => `...${param.name}: ${toTypeScriptType(param, { isParameter: true, includeOptional: false, migration })}[]`; export const genFunctionParameters = (abi, parameters = abi.parameters === undefined ? [] : abi.parameters, options = {}) => { const [otherParameters, restParameter] = parameters.length > 0 && parameters[parameters.length - 1].rest ? [parameters.slice(0, -1), parameters[parameters.length - 1]] : [parameters.slice(), undefined]; const paramStrings = _.reverse(_.reverse([...otherParameters]).reduce((acc, param) => ({ hasRequired: acc.hasRequired || !param.optional, acc: acc.acc.concat(`${param.name}${!acc.hasRequired && param.optional ? '?' : ''}: ${toTypeScriptType(param, { isParameter: true, includeOptional: false, migration: options.migration, })}`), }), { hasRequired: false, acc: [] }).acc); const paramOptions = getOptions(abi, options); let forwardOptions = []; if (restParameter !== undefined && restParameter.type === 'ForwardValue') { forwardOptions = [`forwardOptions?: ${abi.constant ? 'ForwardOptions' : 'TForwardOptions'}`]; } const withParamOptions = paramStrings .concat(paramOptions) .concat(restParameter === undefined ? [] : [getRestParameter(restParameter, options.migration)]) .join(', '); const withForwardOptions = paramStrings .concat(forwardOptions) .concat(restParameter === undefined ? [] : [getRestParameter(restParameter, options.migration)]) .join(', '); const withParamForwardOptions = paramStrings .concat(paramOptions) .concat(forwardOptions) .concat(restParameter === undefined ? [] : [getRestParameter(restParameter, options.migration)]) .join(', '); const withoutOptions = paramStrings .concat(restParameter === undefined ? [] : [getRestParameter(restParameter, options.migration)]) .join(', '); if (restParameter === undefined) { return [withParamOptions]; } if (paramOptions.length === 0) { return forwardOptions.length === 0 ? [withoutOptions] : [withForwardOptions]; } return forwardOptions.length === 0 ? [withParamOptions, withoutOptions] : [withForwardOptions, withParamForwardOptions]; }; //# sourceMappingURL=genFunctionParameters.js.map