UNPKG

markdown-code-example-inserter

Version:
40 lines (39 loc) 2.03 kB
import { systemRootPath, toPosixPath } from '@augment-vir/node'; import { dirname, join, posix, relative } from 'node:path'; import { guessPackageIndex } from '../package-parsing/package-index.js'; const languageImportFixMap = { TypeScript: fixTypescriptImports, }; export async function fixPackageImports(codeExample, codePath, packageDir, forceIndexPath, language = 'TypeScript', /** For testing purposes. */ overrideTsConfig, /** For testing purposes. */ overridePackageJson) { let newCode = codeExample; const packageIndex = await guessPackageIndex(packageDir, overrideTsConfig, overridePackageJson); // fix imports if (packageIndex.replaceName) { const forceIndexFullPath = forceIndexPath ? forceIndexPath.startsWith(systemRootPath) ? forceIndexPath : join(packageDir, forceIndexPath) : ''; const relativePath = relative(dirname(codePath), forceIndexFullPath || packageIndex.indexPath); const regExpSafePosixPath = toPosixPath(relativePath.startsWith('.') ? relativePath : `./${relativePath}`).replace(/\./g, String.raw `\.`); const importFixer = languageImportFixMap[language]; if (importFixer) { newCode = importFixer(newCode, regExpSafePosixPath, packageIndex.replaceName); } } return newCode; } function fixTypescriptImports(code, regExpSafePosixPath, replaceName) { const indexFileImportRegExpPath = regExpSafePosixPath.replace(/\\\.\w+$/, String.raw `(?:\.[cm]?[jt]s[x]?)?`); const indexFileImportRegExp = new RegExp(`( from ['"\`])${indexFileImportRegExpPath}(['"\`])`, 'g'); const bareIndexDirImportRegExp = new RegExp(`( from ['"\`])${posix.dirname(regExpSafePosixPath)}/?(['"\`])`, 'g'); let newCode = code.replace(indexFileImportRegExp, `$1${replaceName}$2`); if (posix.basename(regExpSafePosixPath).startsWith(String.raw `index\.`)) { newCode = newCode.replace(bareIndexDirImportRegExp, `$1${replaceName}$2`); } return newCode; }