vasku
Version:
TVM-Solidity contract development framework
77 lines (76 loc) • 2.86 kB
JavaScript
"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;