-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrefactor.js
More file actions
54 lines (42 loc) · 3.28 KB
/
Copy pathrefactor.js
File metadata and controls
54 lines (42 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
const fs = require('fs');
let code = fs.readFileSync('src/App.tsx', 'utf-8');
code = code.replace(/import \{ StatusMatrix \} from '@\\/components\\/StatusMatrix'\\n?/, '');
code = code.replace(/import type \{ DatabaseResult, FileTreeNode, RuntimeHealth, RuntimeKind, RuntimeStatus, WorkspaceFile \} from '@\\/types'/, `import type { DatabaseResult, FileTreeNode, WorkspaceFile } from '@/types'\nimport { executionRouter, type RuntimeState } from '@/core/executionRouter'`);
code = code.replace(/const STATUS_ORDER[\\s\\S]*?(?=const getExtension)/, '');
code = code.replace(/const jsWorkerRef[\\s\\S]*?(?= const \\[tree)/, '');
code = code.replace(/const \\[statuses, setStatuses\\] = useState<Record<string, RuntimeStatus>>\\(createInitialStatuses\\)/, `const [runtimeState, setRuntimeState] = useState<{state: RuntimeState, detail: string}>({state: 'idle', detail: 'Ready'})`);
code = code.replace(/const setRuntimeStatus =[\\s\\S]*?\\}\\)\\)\\n \\}/, '');
code = code.replace(/const ensureJsWorker = \\(\\) => \\{[\\s\\S]*?(?= const runActiveFile = async \\(\\) => \\{)/, ` useEffect(() => {\n executionRouter.onStateChange((state, detail) => setRuntimeState({state, detail}))\n }, [])\n\n`);
code = code.replace(/const runActiveFile = async \\(\\) => \\{[\\s\\S]*?(?= useEffect\\(\\(\\) => \\{)/, ` const runActiveFile = async () => {
if (!activePath || !files[activePath]) return
await saveFile(activePath)
if (terminalRef.current) executionRouter.setTerminal(terminalRef.current)
setBottomPanel('terminal')
setPlotDataUrl(null)
try {
await executionRouter.runCode(activePath, files[activePath].content)
} catch (error) {
console.error(error)
}
}\n\n`);
code = code.replace(/<StatusMatrix statuses=\\{STATUS_ORDER\\.map\\(\\(key\\) => statuses\\[key\\]\\)\\} \\/>/, ` <div className="status-grid">
<article className={\`status-card status-\${runtimeState.state}\`}>
<div className="status-card-top">
<span className="status-label">System</span>
<span className="status-pill">{runtimeState.state}</span>
</div>
<p>{runtimeState.detail}</p>
</article>
</div>`);
code = code.replace(/const \\[busy, setBusy\\] = useState\\(false\\)\\n/, '');
code = code.replace(/busy \\? 'is-running' : ''/, "runtimeState.state === 'running' || runtimeState.state === 'loading' ? 'is-running' : ''");
code = code.replace(/disabled=\\{!currentFile \\|\\| busy\\}/, "disabled={!currentFile || runtimeState.state === 'running' || runtimeState.state === 'loading'}");
code = code.replace(/busy \\? 'Running\\.\\.\\.' : \\`Run \\$\\{currentFile\\?\\.name \\?\\? ''\\}\\`\\.trim\\(\\)/, "runtimeState.state === 'running' || runtimeState.state === 'loading' ? 'Running...' : `Run ${currentFile?.name ?? ''}`.trim()");
code = code.replace(/jsWorkerRef.*?terminate\\(\\)\\n/g, '');
code = code.replace(/pythonWorkerRef.*?terminate\\(\\)\\n/g, '');
code = code.replace(/sqliteWorkerRef.*?terminate\\(\\)\\n/g, '');
code = code.replace(/postgresWorkerRef.*?terminate\\(\\)\\n/g, '');
code = code.replace(/emceptionRef.*?terminate\\(\\)\\n/g, '');
code = code.replace(/setRuntimeStatus\\([\s\S]*?\\)/g, ''); // Sweep any missed setRuntimeStatus calls
fs.writeFileSync('src/App.tsx', code);
console.log('App.tsx successfully refactored!');