UNPKG

vasku

Version:

TVM-Solidity contract development framework

114 lines (113 loc) 3.73 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getArtifactParentDirectories = exports.removeOldArtifacts = exports.buildsArtifactsExists = exports.TS = exports.CONTENT_TS = exports.ABI_JSON = void 0; const path_1 = __importDefault(require("path")); const fs_extra_1 = __importDefault(require("fs-extra")); const glob_1 = require("glob"); exports.ABI_JSON = '.abi.json'; exports.CONTENT_TS = 'Content.ts'; exports.TS = '.ts'; const extensions = [exports.ABI_JSON, exports.TS, '.tvc', exports.CONTENT_TS]; /** * Return a set of contract assembly artifacts * @param config * @param contract * 'A.tsol' * 'x/C.tsol' * @return * [ * 'AContent.ts' * 'A.tvc' * 'A.ts', * 'A.abi.json', * 'x/CContent.ts' * 'x/C.tvc' * 'x/C.ts', * 'x/C.abi.json', * ] */ function getBuildArtifacts(contract) { //////////////// // Extensions // //////////////// const directory = path_1.default.dirname(contract); const nameWithoutExtension = path_1.default.parse(path_1.default.basename(contract)).name; return extensions .map(extension => path_1.default.relative('.', `${directory}/${nameWithoutExtension}${extension}`)); } /** * Return true if artifact files (e.g. `*.abi.json`) exists in build directory * @param config * @param contract * 'A.tsol' * @return * true */ function buildsArtifactsExists(config, contract) { return getBuildArtifacts(contract).reduce((result, value) => { return result && fs_extra_1.default.existsSync(path_1.default.resolve(process.cwd(), config.build, value)); }, true); } exports.buildsArtifactsExists = buildsArtifactsExists; /** * Return true if artifact files (e.g. `*.abi.json`) exists in build directory * @param config * @param sources * Set {'A.tsol', 'B.tsol'} */ function removeOldArtifacts(config, sources) { const directory = path_1.default.resolve(process.cwd(), config.build); const current = (0, glob_1.globSync)(`${path_1.default.resolve(process.cwd(), config.build)}/**/*`) .map(value => path_1.default.relative(directory, value)); const required = getSourceArtifactsWithDirectories(sources); required.add('index.ts'); current.forEach(value => { if (!required.has(value)) fs_extra_1.default.removeSync(path_1.default.resolve(process.cwd(), config.build, value)); }); } exports.removeOldArtifacts = removeOldArtifacts; /** * Return artifact for source files * @param sources * Set {'A.tsol', 'b/B.tsol'} * @return * [ * 'AContent.ts' * 'A.tvc' * 'A.ts', * 'A.abi.json' * 'b' * 'b/BContent.ts' * 'b/B.tvc' * 'b/B.ts', * 'b/B.abi.json' * ] */ function getSourceArtifactsWithDirectories(sources) { return [...sources].reduce((set, value) => { const artifacts = getBuildArtifacts(value); const firstArtifactDirectory = path_1.default.parse(artifacts[0]).dir; artifacts.forEach(artifact => set.add(artifact)); return getArtifactParentDirectories(firstArtifactDirectory).reduce((set, artifactDirectory) => set.add(artifactDirectory), set); }, new Set()); } /** * Return parent directories in build directory * @param directory * 'a/b' * @return * ['a/b', 'a'] */ function getArtifactParentDirectories(directory) { const result = []; while (directory !== '') { result.push(directory); directory = path_1.default.parse(directory).dir; } return result; } exports.getArtifactParentDirectories = getArtifactParentDirectories;