import { version as contractsVersion } from '@openzeppelin/contracts/package.json';
import { version as confidentialContractsVersion } from '@openzeppelin/confidential-contracts/package.json';
import { version as fhevmSolidityVersion } from '@fhevm/solidity/package.json';
function remapFhevmNpmVersionToGitTag(version: string): string {
// The FHEVM Solidity contracts are published on npm with version 0.9.1, but correspond to tag 0.9.14.
if (version === '0.9.1') {
return 'v0.9.14';
}
return `v${version}`;
}
export function injectHyperlinks(code: string) {
// We are modifying HTML, so use HTML escaped chars. The pattern excludes paths that include /../ in the URL.
const importContractsRegex =
/"(@openzeppelin\/)(contracts-upgradeable\/|contracts\/)((?:(?!\.\.)[^/]+\/)*?[^/]*?)"/g;
const importConfidentialContractsRegex =
/"(@openzeppelin\/)(confidential-contracts\/)((?:(?!\.\.)[^/]+\/)*?[^/]*?)"/g;
const importFhevmSolidityRegex = /"(@fhevm\/)(solidity\/)((?:(?!\.\.)[^/]+\/)*?[^/]*?)"/g;
return code
.replace(
importContractsRegex,
`"<a class="import-link" href="https://github.com/OpenZeppelin/openzeppelin-$2blob/v${contractsVersion}/contracts/$3" target="_blank" rel="noopener noreferrer">$1$2$3</a>"`,
)
.replace(
importConfidentialContractsRegex,
`"<a class="import-link" href="https://github.com/OpenZeppelin/openzeppelin-confidential-contracts/blob/v${confidentialContractsVersion}/contracts/$3" target="_blank" rel="noopener noreferrer">$1$2$3</a>"`,
)
.replace(
importFhevmSolidityRegex,
`"<a class="import-link" href="https://github.com/zama-ai/fhevm/blob/${remapFhevmNpmVersionToGitTag(fhevmSolidityVersion)}/library-solidity/$3" target="_blank" rel="noopener noreferrer">$1$2$3</a>"`,
);
}