UNPKG

@solvprotocol/upgrade-safe-transpiler

Version:

Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe.

98 lines 5.93 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.transpile = void 0; const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); const lodash_1 = require("lodash"); const matcher_1 = require("./utils/matcher"); const rename_1 = require("./rename"); const transform_1 = require("./transform"); const generate_with_init_1 = require("./generate-with-init"); const find_already_initializable_1 = require("./find-already-initializable"); const fix_import_directives_1 = require("./transformations/fix-import-directives"); const rename_identifiers_1 = require("./transformations/rename-identifiers"); const prepend_initializable_base_1 = require("./transformations/prepend-initializable-base"); const purge_var_inits_1 = require("./transformations/purge-var-inits"); const remove_immutable_1 = require("./transformations/remove-immutable"); const remove_inheritance_list_args_1 = require("./transformations/remove-inheritance-list-args"); const rename_contract_definition_1 = require("./transformations/rename-contract-definition"); const append_initializable_import_1 = require("./transformations/append-initializable-import"); const fix_new_statement_1 = require("./transformations/fix-new-statement"); const add_required_public_initializers_1 = require("./transformations/add-required-public-initializers"); const add_storage_gaps_1 = require("./transformations/add-storage-gaps"); const rename_inheritdoc_1 = require("./transformations/rename-inheritdoc"); const transform_constructor_1 = require("./transformations/transform-constructor"); function getExtraOutputPaths(paths, options) { const outputPaths = (0, lodash_1.mapValues)({ initializable: 'Initializable.sol', withInit: 'mocks/WithInit.sol', }, s => path_1.default.relative(paths.root, path_1.default.join(paths.sources, s))); if (options === null || options === void 0 ? void 0 : options.initializablePath) { outputPaths.initializable = options === null || options === void 0 ? void 0 : options.initializablePath; } return outputPaths; } async function transpile(solcInput, solcOutput, paths, options) { var _a; const outputPaths = getExtraOutputPaths(paths, options); const alreadyInitializable = (0, find_already_initializable_1.findAlreadyInitializable)(solcOutput, options === null || options === void 0 ? void 0 : options.initializablePath); const excludeSet = new Set([...alreadyInitializable, ...Object.values(outputPaths)]); const excludeMatch = (0, matcher_1.matcher)((_a = options === null || options === void 0 ? void 0 : options.exclude) !== null && _a !== void 0 ? _a : []); const transform = new transform_1.Transform(solcInput, solcOutput, { exclude: source => { var _a; return excludeSet.has(source) || ((_a = excludeMatch(source)) !== null && _a !== void 0 ? _a : (0, rename_1.isRenamed)(source)); }, }); transform.apply(rename_identifiers_1.renameIdentifiers); transform.apply(rename_contract_definition_1.renameContractDefinition); transform.apply(rename_inheritdoc_1.renameInheritdoc); transform.apply(prepend_initializable_base_1.prependInitializableBase); transform.apply(fix_import_directives_1.fixImportDirectives); transform.apply((0, append_initializable_import_1.appendInitializableImport)(outputPaths.initializable)); transform.apply(fix_new_statement_1.fixNewStatement); transform.apply(transform_constructor_1.transformConstructor); transform.apply(transform_constructor_1.removeLeftoverConstructorHead); transform.apply((0, add_required_public_initializers_1.addRequiredPublicInitializer)(options === null || options === void 0 ? void 0 : options.publicInitializers)); transform.apply(remove_inheritance_list_args_1.removeInheritanceListArguments); transform.apply(purge_var_inits_1.removeStateVarInits); transform.apply(remove_immutable_1.removeImmutable); transform.apply(add_storage_gaps_1.addStorageGaps); // build a final array of files to return const outputFiles = []; const results = transform.results(); for (const file in results) { const transformedSource = results[file]; outputFiles.push({ source: transformedSource, path: (0, rename_1.renamePath)(file), fileName: path_1.default.basename(file), }); } const initializableSource = (options === null || options === void 0 ? void 0 : options.initializablePath) !== undefined ? transpileInitializable(solcInput, solcOutput, paths, options === null || options === void 0 ? void 0 : options.initializablePath) : fs_1.default.readFileSync(require.resolve('../Initializable.sol'), 'utf8'); outputFiles.push({ source: initializableSource, path: outputPaths.initializable, fileName: path_1.default.basename(outputPaths.initializable), }); outputFiles.push({ source: (0, generate_with_init_1.generateWithInit)(transform, outputPaths.withInit, options === null || options === void 0 ? void 0 : options.solcVersion), path: outputPaths.withInit, fileName: path_1.default.basename(outputPaths.withInit), }); return outputFiles; } exports.transpile = transpile; function transpileInitializable(solcInput, solcOutput, paths, initializablePath) { const transform = new transform_1.Transform(solcInput, solcOutput); transform.apply(function* (ast, tools) { if (ast.absolutePath === initializablePath) { yield* (0, rename_identifiers_1.renameIdentifiers)(ast, tools); yield* (0, fix_import_directives_1.fixImportDirectives)(ast, tools); } }); return transform.results()[initializablePath]; } //# sourceMappingURL=index.js.map