import { version as contractsVersion } from '@openzeppelin/contracts/package.json';
import { version as uniswapHooksVersion } from '@openzeppelin/uniswap-hooks/package.json';
export function injectHyperlinks(code: string) {
// We are modifying HTML, so use HTML escaped chars. The pattern excludes paths that include /../ in the URL.
const contractsRegex =
/"(@openzeppelin\/)(contracts-upgradeable\/|contracts\/)((?:(?!\.\.)[^/]+\/)*?[^/]*?)"/g;
const uniswapHooksRegex = /"(@openzeppelin\/)(uniswap-hooks\/)((?:(?!\.\.)[^/]+\/)*?[^/]*?)"/g;
const uniswapV4CoreRegex = /"(@uniswap\/)(v4-core\/src\/)((?:(?!\.\.)[^/]+\/)*?[^/]*?)"/g;
return code
.replace(
contractsRegex,
`"<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(
uniswapV4CoreRegex,
`"<a class="import-link" href="https://github.com/Uniswap/v4-core/blob/main/src/$3" target="_blank" rel="noopener noreferrer">$1$2$3</a>"`,
)
.replace(
uniswapHooksRegex,
`"<a class="import-link" href="https://github.com/OpenZeppelin/uniswap-hooks/blob/v${uniswapHooksVersion}/src/$3" target="_blank" rel="noopener noreferrer">$1$2$3</a>"`,
);
}