93 lines
3.3 KiB
JavaScript
Executable file
93 lines
3.3 KiB
JavaScript
Executable file
const fs = require('fs');
|
|
const runboardPath = 'C:/ScriptoriumAI/scriptoriumai-ui/src/pages/Runboard.tsx';
|
|
const lines = fs.readFileSync(runboardPath, 'utf8').split('\n');
|
|
|
|
const splitLineIdx = lines.findIndex(line => line.startsWith('export function Runboard() {'));
|
|
if (splitLineIdx === -1) throw new Error('Not found: export function Runboard');
|
|
|
|
const helperLines = [...lines.slice(0, splitLineIdx)];
|
|
const exportsList = [];
|
|
|
|
for (let i = 0; i < helperLines.length; i++) {
|
|
let line = helperLines[i];
|
|
|
|
// adjust relative imports up one level
|
|
if (line.includes('from \'./')) {
|
|
line = line.replace(/from \'\.\//g, 'from \'../pages/');
|
|
}
|
|
|
|
if (/^(function|const|let|var|type|interface) /.test(line)) {
|
|
line = 'export ' + line;
|
|
}
|
|
|
|
// Also catch existing exports
|
|
const match = line.match(/^export (?:function|type|const|let|var|interface) ([a-zA-Z0-9_]+)/);
|
|
if (match) exportsList.push(match[1]);
|
|
|
|
helperLines[i] = line;
|
|
}
|
|
|
|
fs.writeFileSync('C:/ScriptoriumAI/scriptoriumai-ui/src/utils/runboard-route-logic.tsx', helperLines.join('\n'));
|
|
|
|
const runboardLines = lines.slice(splitLineIdx);
|
|
|
|
const topImports = [];
|
|
let inImport = false;
|
|
for (let i = 0; i < lines.slice(0, splitLineIdx).length; i++) {
|
|
const line = lines[i];
|
|
if (line.startsWith('import ')) {
|
|
inImport = true;
|
|
}
|
|
if (inImport || line.startsWith('import ')) {
|
|
topImports.push(line);
|
|
if (line.includes('from ')) inImport = false;
|
|
}
|
|
}
|
|
|
|
// Add the named import block
|
|
const uniqueExports = Array.from(new Set(exportsList));
|
|
|
|
const newRunboardContent = [
|
|
...topImports,
|
|
'import { ' + uniqueExports.join(',\n ') + ' } from \'../utils/runboard-route-logic\';',
|
|
'',
|
|
...runboardLines
|
|
].join('\n');
|
|
|
|
fs.writeFileSync('C:/ScriptoriumAI/scriptoriumai-ui/src/pages/Runboard.tsx', newRunboardContent);
|
|
|
|
// Fix test imports
|
|
const glob = require('fs');
|
|
const path = require('path');
|
|
|
|
function walkDir(dir, callback) {
|
|
fs.readdirSync(dir).forEach(f => {
|
|
let dirPath = path.join(dir, f);
|
|
let isDirectory = fs.statSync(dirPath).isDirectory();
|
|
isDirectory ?
|
|
walkDir(dirPath, callback) : callback(path.join(dir, f));
|
|
});
|
|
}
|
|
|
|
walkDir('C:/ScriptoriumAI/scriptoriumai-ui/src/__tests__', function(filePath) {
|
|
if (filePath.endsWith('.ts') || filePath.endsWith('.tsx')) {
|
|
let content = fs.readFileSync(filePath, 'utf8');
|
|
let changed = false;
|
|
if (content.includes('../pages/Runboard')) {
|
|
content = content.replace(/from '\.\.\/pages\/Runboard'/g, "from '../utils/runboard-route-logic'");
|
|
content = content.replace(/from "\.\.\/pages\/Runboard"/g, "from '../utils/runboard-route-logic'");
|
|
changed = true;
|
|
}
|
|
if (content.includes('../../pages/Runboard')) {
|
|
content = content.replace(/from '\.\.\/\.\.\/pages\/Runboard'/g, "from '../../utils/runboard-route-logic'");
|
|
content = content.replace(/from "\.\.\/\.\.\/pages\/Runboard"/g, "from '../../utils/runboard-route-logic'");
|
|
changed = true;
|
|
}
|
|
if (changed) {
|
|
fs.writeFileSync(filePath, content);
|
|
console.log('Fixed imports in ' + filePath);
|
|
}
|
|
}
|
|
});
|
|
|
|
console.log('Factored out runboard-route-logic.tsx successfully! Extracted ' + uniqueExports.length + ' exports.');
|