@gnus.ai/upgrade-safe-transpiler-diamond
Version:
Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe using Diamond Pattern (EIP-2535).
40 lines (31 loc) • 1.19 kB
text/typescript
import { ContractDefinition } from 'solidity-ast';
import { TransformerTools } from '../../transform';
import { getNodeBounds } from '../../solc/ast-utils';
import { matchBufferFrom } from '../../utils/match';
export function newFunctionPosition(
contract: ContractDefinition,
{ readOriginal }: TransformerTools,
atEnd = false,
): number {
if (atEnd) {
const contractText = readOriginal(contract, 'buffer').toString('utf8');
const offset = contractText.lastIndexOf('}');
if (offset < 1) {
throw new Error(`Can't find ending of contract ${contract.name}`);
}
return getNodeBounds(contract).start + offset - 1;
} else {
const offset = getNodeBounds(contract).start;
let searchStart = 0;
if (contract.baseContracts.length > 0) {
const [lastParent] = contract.baseContracts.slice(-1);
const pb = getNodeBounds(lastParent);
searchStart = pb.start + pb.length - offset;
}
const brace = matchBufferFrom(readOriginal(contract, 'buffer'), /\{\n?/, searchStart);
if (!brace) {
throw new Error(`Can't find start of contract ${contract.name}`);
}
return offset + brace.start + brace.length;
}
}