const { Project, SyntaxKind } = require('ts-morph'); const project = new Project({ tsConfigFilePath: './tsconfig.json' }); const sourceFile = project.getSourceFileOrThrow('src/pages/Runboard.tsx'); const fn = sourceFile.getFunctionOrThrow('Runboard'); const varsToRemove = [ 'compareRemediationRouteActionReadiness', 'compareRemediationRouteQuickActionDisabledState', 'compareRemediationEditorContextHref' ]; let extractedCode = "import { useMemo } from 'react';\n\nexport function useCompareRemediationRouteStrategy() {\n"; let removed = 0; varsToRemove.forEach(name => { const v = fn.getVariableStatements().find(x => x.getDeclarations().length > 0 && x.getDeclarations()[0].getName() === name); if (v) { extractedCode += v.getText() + '\n\n'; v.remove(); removed++; } }); extractedCode += " return {\n compareRemediationRouteActionReadiness,\n compareRemediationRouteQuickActionDisabledState,\n compareRemediationEditorContextHref\n };\n}\n"; if (removed > 0) { require('fs').writeFileSync('src/hooks/useCompareRemediationRouteStrategy.ts', extractedCode); fn.insertStatements(0, 'const { compareRemediationRouteActionReadiness, compareRemediationRouteQuickActionDisabledState, compareRemediationEditorContextHref } = useCompareRemediationRouteStrategy();'); sourceFile.addImportDeclaration({ namedImports: ['useCompareRemediationRouteStrategy'], moduleSpecifier: '../hooks/useCompareRemediationRouteStrategy' }); project.saveSync(); console.log('Successfully completed first massive hook split.'); } else { console.log('Variables not found, likely already extracted.'); }