@openzeppelin/upgrade-safe-transpiler
Version:
Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe.
59 lines • 2.87 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.preparePeerProject = void 0;
const path_1 = __importDefault(require("path"));
const natspec_1 = require("./utils/natspec");
const is_storage_variable_1 = require("./transformations/utils/is-storage-variable");
function preparePeerProject(transform, peerProject) {
for (const ast of transform.asts()) {
let shouldExclude = true;
for (const node of ast.nodes) {
switch (node.nodeType) {
case 'ContractDefinition': {
if (node.contractKind === 'contract') {
if (!(0, natspec_1.extractContractStateless)(node)) {
shouldExclude = false;
break;
}
if ((0, natspec_1.extractContractStorageSize)(node) !== undefined) {
throw transform.error(node, 'Contract marked as stateless should not have an associated storage size');
}
for (const decl of node.nodes) {
if (decl.nodeType == 'VariableDeclaration' &&
(0, is_storage_variable_1.isStorageVariable)(decl, transform.resolver)) {
throw transform.error(node, 'Contract marked as stateless should not contain storage variable declarations');
}
if (decl.nodeType == 'FunctionDefinition' && decl.kind == 'constructor') {
throw transform.error(node, 'Contract marked as stateless should not have a constructor');
}
}
}
transform.getData(node).importFromPeer = path_1.default.join(peerProject, ast.absolutePath);
break;
}
case 'EnumDefinition':
case 'ErrorDefinition':
case 'FunctionDefinition':
case 'StructDefinition':
case 'UserDefinedValueTypeDefinition':
case 'VariableDeclaration': {
transform.getData(node).importFromPeer = path_1.default.join(peerProject, ast.absolutePath);
break;
}
case 'ImportDirective':
case 'PragmaDirective':
case 'UsingForDirective': {
break;
}
}
}
if (shouldExclude) {
transform.exclude(ast.absolutePath);
}
}
}
exports.preparePeerProject = preparePeerProject;
//# sourceMappingURL=prepare-peer-project.js.map