UNPKG

vasku

Version:

TVM-Solidity contract development framework

77 lines (76 loc) 2.86 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRef = exports.getNamespace = exports.generateIndex = void 0; const path_1 = __importDefault(require("path")); const fs_extra_1 = __importDefault(require("fs-extra")); function generateIndex(config, sources) { ///////////////////// // Get directories // ///////////////////// const directories = [...sources.keys()] .reduce((set, contract) => set.add(path_1.default.parse(contract).dir), new Set()); ////////////////////////////////// // Get files for each directory // ////////////////////////////////// const files = [...sources.keys()] .reduce((result, source) => { const directory = path_1.default.parse(source).dir; const name = path_1.default.parse(source).name; if (result[directory] === undefined) result[directory] = []; result[directory].push(name); return result; }, {}); ////////////////////// // Generate imports // ////////////////////// const imports = [...directories.keys()].reduce((result, directory) => { return files[directory].reduce((acc, name) => (directory === '') ? acc + `import { ${name} } from './${name}'\n` : acc + `import { ${name} as ${getRef(directory, name)} } from './${directory}/${name}'\n`, result); }, ''); ////////////////////// // Generate exports // ////////////////////// const exports = [...directories.keys()].reduce((result, directory) => { const exportClasses = files[directory].reduce((acc, name) => (directory === '') ? acc + `export { ${name} }\n` : acc + ` export class ${name} extends ${getRef(directory, name)} {}\n`, ''); return (directory === '') ? result + exportClasses : result + `export namespace ${getNamespace(directory)} {\n${exportClasses}}\n`; }, ''); //////////////// // Write file // //////////////// const text = `${imports}${exports}`; fs_extra_1.default.writeFileSync(path_1.default.resolve(process.cwd(), config.build, 'index.ts'), text); } exports.generateIndex = generateIndex; /** * Convert file directory to namespace * @param directory Relative directory * 'a/b' * @return * 'a.b' */ function getNamespace(directory) { return directory.replace('/', '.'); } exports.getNamespace = getNamespace; /** * Convert file directory to namespace * @param name Class name * 'Counter' * @param directory Relative directory * 'a/b' * @return * 'Counter_a_b_ref' */ function getRef(directory, name) { return `${name}_${directory.replace('/', '_')}_ref`; } exports.getRef = getRef;