openpetswithchatandmcp/website/refactor2.cjs
OpenPets Dev 65ac83849e Add 'website/' from commit '966aea480ffe1c340553aa878def30131d2af827'
git-subtree-dir: website
git-subtree-mainline: 8d3849caea
git-subtree-split: 966aea480f
2026-06-17 20:48:39 +00:00

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.');