@neo-one/smart-contract-codegen-esnext-esm
Version:
NEO•ONE TypeScript smart contract codegen.
46 lines (38 loc) • 1.75 kB
JavaScript
import _ from 'lodash';
import { getCreateSmartContractName } from '../contract';
import { getMigrationSmartContractName, getSmartContractName } from '../types';
import { getRelativeImport, lowerCaseFirst } from '../utils';
export const genContracts = ({ contractsPaths, contractsPath, }) => {
const sortedPaths = _.sortBy(contractsPaths, [({ name }) => name]);
const createImports = sortedPaths
.map(({ name, createContractPath }) => `import { ${getCreateSmartContractName(name)} } from '${getRelativeImport(contractsPath, createContractPath)}'`)
.join('\n');
const createContracts = `({
${sortedPaths
.map(({ name }) => `${lowerCaseFirst(name)}: ${getCreateSmartContractName(name)}(client),`)
.join('\n ')}
});`;
return {
js: `${createImports}
export const createContracts = (client) => ${createContracts}
`,
ts: `import { Client } from '@neo-one/client';
${sortedPaths
.map(({ name, typesPath }) => `import { ${getSmartContractName(name)}, ${getMigrationSmartContractName(name)} } from '${getRelativeImport(contractsPath, typesPath)}'`)
.join('\n')}
${createImports}
export interface Contracts<TClient extends Client = Client> {
${sortedPaths
.map(({ name }) => `readonly ${lowerCaseFirst(name)}: ${getSmartContractName(name)}<TClient>;`)
.join('\n ')}
}
export interface MigrationContracts {
${sortedPaths
.map(({ name }) => `readonly ${lowerCaseFirst(name)}: ${getMigrationSmartContractName(name)};`)
.join('\n ')}
}
export const createContracts = <TClient extends Client>(client: TClient): Contracts<TClient> => ${createContracts};
`,
};
};
//# sourceMappingURL=genContracts.js.map